我正在尝试从我的 VB.Net 应用程序中打开一个 PDF 文件。我收到一个错误(弹出窗口)说“文件不以 '%PDF-'开头。我想阅读文件的标题以确定文件是否已损坏。现在我正在使用 Windows。 Forms.WebBrowser 控件显示我从数据库加载的 PDF 文件。大多数文件加载正常,但有些已损坏,因此弹出。
这是我用来加载文件的行:webBrw.Navigate(Me.currentDocPath)
如何在 VB.Net 2010 中执行此操作?
我正在尝试从我的 VB.Net 应用程序中打开一个 PDF 文件。我收到一个错误(弹出窗口)说“文件不以 '%PDF-'开头。我想阅读文件的标题以确定文件是否已损坏。现在我正在使用 Windows。 Forms.WebBrowser 控件显示我从数据库加载的 PDF 文件。大多数文件加载正常,但有些已损坏,因此弹出。
这是我用来加载文件的行:webBrw.Navigate(Me.currentDocPath)
如何在 VB.Net 2010 中执行此操作?
来自 PDF 规范。
PDF 文件的第一行应是由 5 个字符 %PDF– 后跟 1.N 形式的版本号组成的标题,其中 N 是 0 到 7 之间的数字。
听起来您的文件实际上不是有效的 pdf 文件。这将是我仔细检查的第一件事。我曾经从供应商那里获取实际上不是有效 XML 文件的 XML 文件,所以 XML 解析器抛出了一个异常——供应商拒绝解决这个问题让我感到惊讶,因为如果文件中止是 XML 解析器应该做的事情无效。我最终的解决方案是编写一个更正无效 XML 的预解析器,然后调用标准解析器。
我建议尝试使用 PDF 验证工具,http://www.pdf-tools.com/pdf/validate-pdfa-online.aspx是一个示例尝试如何测试 PDF 文档是否符合 PDF/A?此外,Adobe preflight(与专业版捆绑在一起)会验证很多东西,而不仅仅是技术上的 PDF 文件。
如果您直接访问它们,您是否能够打开“错误”文件?我之前遇到过这样的错误,这是客户端 Adobe 阅读器的问题。某些版本的阅读器不喜欢某些版本的作者创建的文件。我们能够通过将客户的阅读器升级到解决我们问题的最新版本来解决这个问题。
我还有一个项目需要更新 PDF 文件中的文本。我发现 .Net 无法直接执行此操作,因此我不得不依赖单独的库。为了测试文件,您可以使用库顶部在 try/catch 块中打开文件。如果加载失败,您就知道该文件可能已损坏。
希望这可以帮助。
我发现如果您使用流阅读器阅读文件,并且阅读第一行,您可以检查它是否包含 %PDF 标头标记,如下所示:
Dim stream As New StreamReader("C:\Users\dbermudez\Desktop\docBOLR_0.pdf")
Dim containsPDFHeader As Boolean = True
If Not stream.ReadLine().Contains("%PDF") Then
containsPDFHeader = False
End If