2013-09-22 2 views
0

Мне нужно загрузить pdf-файл, созданный с сайта aspx.Получение динамически созданного PDF-кода из URL-адреса

Backstory:

Я хочу, чтобы получить schedueles с веб-сайта, я преуспели в получении URL в scheduele, содержащий параметры. Если вы будете следовать URL-адресу, вам будет показан поток в формате PDF, созданный сайтом с использованием заданных параметров.

http://www.novasoftware.se/ImgGen/schedulegenerator.aspx?format=pdf&schoolid=57240/sv-se&type=1&id=%7bD8920398-FA90-4960-BD47-69A8EFF7204D%7d&period=&week=38&mode=0&printer=1&colors=2&head=1&clock=1&foot=1&day=0&width=2480&height=3507&count=1&decrypt=0

Этот URL является то, что сайт использует, чтобы получить соответствующую scheduele и отобразить его в виде PDF. Поскольку это не теоретически PDF-файл, я не могу загрузить его в один с помощью:

Dim Downloader As New WebClient 
    Downloader.DownloadFile(URL, fileName) 

Ни я могу загрузить содержимое в виде строки, используя ...

Dim Downloader As New WebClient 
    Dim Result As String = Downloader.DownloadString(URL) 

... так это приведет к ошибке 500 Server из-за отсутствия параметров.

Единственный способ отображения файла/потока/документа или того, что это настоящее имя, - это посетить данный URL через браузер. Учитывая это, я попытался захватить PDF через элемент управления WebBrowser. Но поскольку он «не может отображать страницу XML» (ошибка отображается при навигации по URL-адресу), я тоже не могу использовать этот подход.

Так что мой вопрос: Как загрузить эти данные в формате PDF или Как получить эти данные в виде потока, который я могу читать с помощью StreamReader?

Sidenotes:

страница не использует никаких дополнительных клиентской стороне соединений, поэтому я не могу BACKTRACK его. (я использовал Fiddler2 для отслеживания всех соединений)

Используя Fiddler, я могу сказать, что URL SomethingSomething.com/Something.aspx создает PDF-файл и отображает его. Первые несколько строк сгенерированного документа (через Скрипач)

% PDF-1.4

%

%

% wPDF от WPCubed GmbH V3.54x [0]

%

%

1 0 OBJ

<>

Есть больше информации я могу получить от Скрипач об этом сайте, так что если вам это нужно либо попробовать его самостоятельно или попросить меня, чтобы добавить информацию здесь.

ответ

1

Используйте код, приведенный ниже, чтобы загрузить файл в поток памяти:

Dim webRes As HttpWebResponse = Nothing 
Dim memStream As New MemoryStream 

Try 
    Dim webReq As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest) 
    webReq.Credentials = CredentialCache.DefaultCredentials 
    webRes = webReq.GetResponse 

    Dim resStream As Stream = webRes.GetResponseStream 

    Dim bytesRead As Integer 

    Do 
     Dim buffer(1023) As Byte 
     bytesRead = resStream.Read(buffer, 0, buffer.Length) 
     memStream.Write(buffer, 0, bytesRead) 
    Loop Until bytesRead = 0 

Catch ex As Exception 

Finally 
    If webRes IsNot Nothing Then 
     webRes.Close() 
     webRes = Nothing 
    End If 

    memStream.Seek(0, SeekOrigin.Begin) 

End Try 

' optionally save the stream into a file 
memStream.WriteTo(New FileStream("d:\filename.pdf", FileMode.Create)) 
+0

Это похоже на то, что мне нужно, но это не работает. После запуска кода как есть он выводит файл на 0 байтов. После проверки ex.Message для ошибки он говорит «Ошибка сервера 500». Он работает, если я вставляю url в браузере (проверьте выше, если хотите), но не тогда, когда я использую код для его захвата. – Alex

+0

Я использовал вашу ссылку выше, чтобы проверить код, и это сработало просто отлично. – ajakblackgoat

+0

На самом деле, я попробовал код 'Downloader.DownloadFile (URL, fileName) выше и смог загрузить и сохранить файл. – ajakblackgoat