以编程方式下载PDF文件

21

我该如何使用vb.NET或C#下载PDF并存储到磁盘中?

在最终PDF被访问之前,URL(PDF的)进行了一些重定向。

我尝试了下面的方法,但是当我企图本地打开PDF时似乎已经损坏了。

Dim PdfFile As FileStream = File.OpenWrite(saveTo)
Dim PdfStream As MemoryStream = GetFileStream(pdfURL)
PdfStream.WriteTo(PdfFile)
PdfStream.Flush()
PdfStream.Close()
PdfFile.Flush()
PdfFile.Close()

你能同时展示一下GetFileStream()函数吗? - Joel Coehoorn
PDF本身是否损坏?我发布的代码适用于IRS提供的PDF。我能想到的其他设置是使用WebClients DownloadData方法并将byte[]写入磁盘。 - Pat
好的,问题似乎在于重定向。如果我硬编码最终的URL(即重定向完成后PDF的URL),那么它可以工作(使用downloaddata方法)。问题是如何确保文档在重定向完成后下载? - Perplexed
如果它是基于脚本的重定向,你可能需要进行一些HTML解析或其他操作来提取其重定向到的位置。 - Pat
使用CookieContainer与WebClient类:https://dev59.com/6nI-5IYBdhLWcg3wlpeW,而且WebClient类似乎遵循重定向:http://www.eggheadcafe.com/tutorials/csharp/70511872-c3aa-4e92-a7d7-dd4b09881af5/make-the-webclient-class-follow-redirects-and-get-target-url.aspx,尽管我在MSDN文档中找不到相关内容。 - Andrew Morton
显示剩余4条评论
3个回答

24
您可以尝试使用WebClient(System.Net命名空间)类来完成此操作,这将避免您在本地进行任何流处理。
以下C#代码获取IRS表格并将其保存到C:\ Temp.pdf。
using(WebClient client = new WebClient())
{
    client.DownloadFile("http://www.irs.gov/pub/irs-pdf/fw4.pdf", @"C:\Temp.pdf");
}

3
尝试了一下,打开PDF文件时出现了以下提示:"Adobe Reader无法打开该文件,因为它不是受支持的文件类型,或者该文件已经损坏 blah blah"。 - Perplexed
获取文件流函数: Protected Function GetFileStream(ByVal URL As String) As MemoryStream Dim _url As String = URL Dim _wb As WebClient = New WebClient Dim myBuffer() As Byte Dim _str As MemoryStream = Nothing Try myBuffer = _wb.DownloadData(_url) _str = New MemoryStream(myBuffer) Catch ex As Exception _str = Nothing End Try Return _str End Function - Perplexed
1
这可以运行。如果您将代码放在网页上,请确保设置安全权限为IISUSER。 - Su Beng Keong

7
您可以尝试以下代码示例来下载PDF文件。
 Response.ContentType = "Application/pdf"; 
 Response.AppendHeader("Content-Disposition", "attachment; filename=Test_PDF.pdf"); 
 Response.TransmitFile(Server.MapPath("~/Files/Test_PDF.pdf")); 
 Response.End(); 

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接