gpt4 book ai didi

c# - 如何识别PDF格式?

转载 作者:太空狗 更新时间:2023-10-29 18:11:24 25 4
gpt4 key购买 nike

给定字节流,我如何判断该流是否包含 PDF 文档或其他内容?

我正在使用 .NET 和 C#,但这并不重要。

最佳答案

这完全取决于您希望检测工作的好坏/可靠程度。

这里是我从 756 页长的官方定义中选择的最重要的点点滴滴,直接来自马口(PDF 32000:1-2008):

基本的合格 PDF 文件应由以下四个元素构成(见图 2):

  • 单行标题,标识文件符合的 PDF 规范版本
  • 包含构成文件中包含的文档的对象的正文
  • 包含文件中间接对象信息的交叉引用表
  • 一个预告片,给出了文件正文中交叉引用表和某些特殊对象的位置
    [....]

PDF 文件的第一行应该是一个标题,由 5 个字符 %PDF– 后跟 1.N 形式的版本号组成,其中 N 是 0 到 7 之间的数字。合格的阅读器应接受具有以下任何 header 的文件:
%PDF–1.0
%PDF–1.1
%PDF–1.2
%PDF–1.3
%PDF–1.4
%PDF–1.5
%PDF–1.6
%PDF–1.7
[...]

如果 PDF 文件像大多数一样包含二进制数据(参见 7.2,“词汇约定”),则标题行后应紧跟包含至少四个二进制字符的注释行,即代码为 128 的字符或更大。这确保了文件传输应用程序的正确行为,这些应用程序检查文件开头附近的数据以确定是将文件内容视为文本还是二进制文件。

预告片
[....] 文件的最后一行应仅包含文件结束标记 %%EOF。前两行应包含(每行一个)关键字 startxref 和解码流中从文件开头到最后一个交叉引用部分中的 xref 关键字开头的字节偏移量。

总结

要记住两件最重要的事情:

(a) 第一个“标题行”

   %PDF-1.X

[where X in 0..7] 必须单独占一行,后面跟一个换行符。此行必须出现在前 4096 字节内,不一定在第一行。前面的行可能包含非 PDF 内容,但打印机作业语言命令 (PJL) 或注释。

(b) 如果 PDF 包含二进制数据,下一行必须是四个二进制字节。

只是解析“%PDF-1”。已经咬了很多人....

关于c# - 如何识别PDF格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3728585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com