首页 文章

从URL获取动态创建的PDF

提问于
浏览
0

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

Backstory

我想从一个网站获得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头= 1&时钟= 1&脚= 1&天= 0&宽度= 2480&高度= 3507&计数= 1&解密= 0

此URL是网站用于获取相应的scheduele并将其显示为pdf的URL . 由于理论上它不是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时显示错误)我也无法使用该方法 .

所以我的问题是, How do I download this data as a PDF or How do I get this data as a Stream that i can read with StreamReader?

Sidenotes:

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

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

%PDF-1.4% %%WPDF由WPCubed GmbH提供V3.54x [0] %% 1 0 obj <>

关于这个网站,我可以从Fiddler获得更多信息,所以如果你需要它可以自己尝试或者让我在这里添加信息 .

1 回答

  • 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))
    

相关问题