使用C#或VB.Net阅读PDF标题

时间:2013-08-22 13:55:47

标签: c# vb.net c#-4.0 pdf pdf-generation

我正在尝试从VB.Net应用程序中打开PDF文件。我收到错误(弹出窗口),说“文件不以'%PDF - '开头。我想读取文件的标题以确定文件是否已损坏。现在我使用Windows.Forms.WebBrowser控件来显示我从数据库加载的PDF文件。大多数文件都正常加载,但有些文件已损坏,因此弹出窗口。

这是我用来加载文件的行:webBrw.Navigate(Me.currentDocPath)

如何在VB.Net 2010中执行此操作?

3 个答案:

答案 0 :(得分:1)

来自PDF规范。

PDF文件的第一行应为包含5个字符%PDF的标题,后跟1.N形式的版本号,其中N是0到7之间的数字。

听起来您的文件实际上不是有效的pdf文件。这将是我仔细检查的第一件事。我曾经从供应商处获取实际上不是有效XML文件的XML文件,因此XML解析器引发了异常 - 令我感到惊讶的是供应商拒绝修复此问题,因为abort是XML解析器应该执行的操作无效。我最终的解决方案是编写一个更正无效XML的预分析器,然后调用标准分析器。

我建议您尝试使用PDF验证工具,http://www.pdf-tools.com/pdf/validate-pdfa-online.aspx是一个示例How can I test a PDF document if it is PDF/A compliant?更多,Adobe预检(与专业版捆绑在一起)验证了很多内容,而不仅仅是技术上的PDF文件。

答案 1 :(得分:0)

如果您直接访问它们,是否可以打开'错误'文件?之前我遇到过这样的错误,这是客户端Adobe读者的一个问题。某些版本的阅读器不喜欢某些版本的作者创建的文件。我们能够通过将客户端的读者升级到解决我们问题的最新版本来解决这个问题。

我还有一个项目需要更新PDF文件中的文本。我发现.Net无法直接执行此操作,所以我不得不依赖一个单独的库。为了测试文件,您可以使用库在try / catch块中打开文件。如果加载失败,您就知道该文件可能已损坏。

希望这有帮助。

答案 2 :(得分:0)

我发现如果您使用流阅读器阅读该文件,并且您阅读了第一行,则可以检查它是否包含%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
相关问题