【问题标题】:PDF Generator identificationPDF 生成器识别
【发布时间】:2020-10-01 15:19:55
【问题描述】:

识别生成器/检测自动生成的 PDF 架构的最佳方法是什么? 一旦文件被识别,我一直在使用 Tabula & Textual 分析来提取数据,但我正在努力将文件分派到正确的解析器。 显然,PDF 没有关于作者的元数据,而且文件名可以更改,因此不是准确的识别来源。

谢谢, 亚瑟

【问题讨论】:

  • 基本上,您只能从各自来源的 PDF 中寻找个别的、特定的指纹。它们可能是事实的组合,例如使用了哪个行尾,特殊对象(特别是目录或信息字典)在文件中的位置,哪些类型的对象是间接的,哪些不是,...
  • 根据您的说法,假设每种类型 10 个案例和大量 PDF 类型,是否可以真实地自动推断?现在,忘记自动部分,我将使用 PDFtoText 和正则表达式路线,这对所有测试用例都有效。有更好/更快的想法吗?谢谢!
  • 我认为可以做到,但要找到这些指纹需要大量的初始工作。
  • 好的,我想我会坚持使用正则表达式,谢谢!

标签: parsing pdf signature


【解决方案1】:

你可以看预告片:

trailer
<<
/Size 9
/Root 1 0 R
/Info 8 0 R
>>
startxref
626
%%EOF

...并扫描/Info。将有一个包含元数据的8 0(在这种情况下)部分,例如

8 0 obj
<<
/Creator (PDFDUMP WIN32 )
/CreationDate (D:20201231000000)
>>
endobj

但是当元数据部分不是直截了当(例如包含十六进制代码,或间接指向另一个部分)时,它会变得更加复杂。

当元数据是这样的时候就变得棘手了:

42 0 obj
(git-cheat-sheet-education)
endobj
43 0 obj
(Mac OS X 10.9.1 Quartz PDFContext)
endobj
44 0 obj
(Adobe Illustrator CC \(Macintosh\))
endobj
45 0 obj
(D:20140224195805Z00'00')
endobj
1 0 obj
<< /Title 42 0 R /Producer 43 0 R /Creator 44 0 R /CreationDate 45 0 R /ModDate
45 0 R >>
endobj

有相当多的开源代码可以为您显示 PDF 元数据。

我不确定我是否在回答你的问题。

【讨论】:

  • 嗨!感谢您花时间回答。遗憾的是,正如问题中所述,由于人们不经常签署他们的 PDF,并且解决方案需要“通用”方案,因此无法使用它。举一个需求的例子,假设你有 30 个人发送生成的账单:每个人都有它的模式。如果你知道并从中学习,你只需要处理 30 个案例,100% 准确的解析是通过简单的拖放完成的,没有任何规范。目前我最好的解决方案是 PDFtoText,然后是每个生成器的正则表达式。
猜你喜欢
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 2015-03-18
  • 2012-12-29
  • 2011-11-16
  • 1970-01-01
  • 2016-01-10
相关资源
最近更新 更多