繁体   English   中英

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

[英]Read PDF Header using C# or VB.Net

我正在尝试从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 / A的PDF文档? 更重要的是,Adobe preflight(与专业版捆绑在一起)可以验证很多内容,而不仅仅是技术上是PDF文件。

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

我还有一个项目,需要更新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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM