从URL获取动态创建的PDF

时间:2013-09-22 12:49:20

标签: asp.net .net vb.net pdf

我需要获取从aspx站点生成的pdf文件。

背景故事

我想从网站上获取schedueles,我已成功获取包含参数的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

此网址是网站用于获取相应的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服务器错误。

显示文件/流/文档或其真实名称的唯一方法是通过浏览器访问给定的URL。鉴于此,我试图通过WebBrowser控件获取PDF。但由于它“无法显示XML页面”(导航到scheduele URL时显示错误)我也不能使用这种方法。

所以我的问题是,如何以PDF格式下载此数据或如何将此数据作为Stream获取,我可以使用StreamReader阅读?

图片的标题说明:

该页面不使用其他客户端连接,因此我无法回溯它。 (我使用Fiddler2跟踪所有连接)

使用Fiddler,我可以告诉你的网址SomethingSomething.com/Something.aspx生成一个PDF并显示它。生成文档的前几行(通过Fiddler)

  

%PDF-1.4

     

     

     WPCubed GmbH V3.54x [0]%wPDF

     

     

     

1 0 obj

     

<>

我可以从Fiddler获得有关此网站的更多信息,因此如果您需要,请自行尝试或要求我在此处添加信息。

1 个答案:

答案 0 :(得分: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))