如何在没有pdf文件名的情况下保存/下载嵌入在网页中的pdf

时间:2012-03-29 22:06:52

标签: c# pdf coldfusion

我正在用C#编写一个网络抓取程序。到目前为止,我已经能够登录网站,保存cookie,并返回另一页的源代码。从这个源代码中,我得到一个链接,将我带到pdf,但该页面不以.pdf扩展名结尾。在浏览器中,此页面显示pdf图像,浏览器中有控件,包括保存按钮。

我相信pdf页面是使用ColdFusion创建的,因为它在URL中有.cfm,CFID和CFTOKEN。

如何以编程方式保存此pdf文件?

有两个答案建议我将二进制流保存为pdf。如何获取二进制数据?我尝试过以下方法:

        byte[] result;
        byte[] buffer = new byte[4096];

        WebRequest wr = WebRequest.Create(billURL);

        using (WebResponse response = wr.GetResponse())
        {
            using (Stream responseStream = response.GetResponseStream())
            {
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    int count = 0;
                    do
                    {
                        count = responseStream.Read(buffer, 0, buffer.Length);
                        memoryStream.Write(buffer, 0, count);

                    } while (count != 0);

                    result = memoryStream.ToArray();
                }
            }
        }

我是否想将结果保存为pdf,或者我在那里做错了什么?

3 个答案:

答案 0 :(得分:1)

假设确实不需要CFID和CFTOKEN,(您可以测试没有CFID和CFTOKEN的URL,看看您是否仍然可以成功获取PDF)

  1. 使用WebRequest向该网址发出GET请求(请参阅:http://support.microsoft.com/kb/307023

  2. 将二进制流保存为PDF文件。

答案 1 :(得分:1)

CF中用于​​将PDF流式传输到浏览器的常用方法是使用以下方法:

<cfheader name="Content-Disposition" value="attachment;filename=#PDFFileName#">
<cfcontent type="application/pdf" reset="true" variable="#toBinary(PDFinMemory)#">

使用C#WebRequest获取PDf的URL。然后检查“Content-Type of”application / pdf'的响应头。如果是这样,请将二进制流保存到磁盘上的PDF文件中。

答案 2 :(得分:1)

  

我收到一个链接,将我带到pdf,但该页面并未结束   .pdf扩展..   如何获取二进制数据?

除了其他建议外,还有一个小的澄清。文件扩展名并不重要。重要的是内容。 .cfm脚本可以返回任何content-type,而不只是text/html。所以它可以模仿pdf,图像等。只要您的链接返回类型application/pdf,您就应该返回一个可以保存到文件的二进制流(即pdf)。原始文件名可以从WebResponse headers获得。