当您说“解析 PDF 文件”时,我的第一个想法是相关 PDF 没有在各种 PDF 查看器和库中打开,因此在某种程度上已损坏。
但事实并非如此。它在 Acrobat Reader X 中打开得很好。然后我看到页面上的文字。
当我从第一页复制/粘贴该文本时,我得到:
Ûûp{¨¶ðQ{p{¨|={pÛû{¨>üb¶úN}l{¨d{p{¨> >Ûpû¶bp{¨}|=/} pT¶=}Nm{Z{Úpd{m}a¾Ú}mp{Ú¶¨>ztNð{øÔ_c}m{ТÁ}=N{Nzt¶ztbm}¥Ázv¬b¢Á
Á ÛûÁøÛûzÏrze¨=ztTzv}lÛzt{¨d¨c}p{Ðu{¨½ÐuÛ½{=Û Á{=Á ÁÛûb}ßb{q{d}p{¨ze=Vm{Ðu½Û{=Á
来自读者。
此 PDF 中的大部分文本都是使用各种“Type 3”字体编写的。这些字体声称使用带有“差异”数组的“WinAnsiEncoding”(也称为代码页 1252)。这个差异数组是错误的:
47 /BB 61 /BP /BQ 81 /C6...
第一个数字是被替换的代码点,第二个是替换该代码点原始值的字符的名称。
没有像 BB、BP、BQ、C9 等这样的字符名称。因此,当您复制粘贴该文本时,您会得到上述垃圾。
抱歉,从此类 PDF 中提取文本的唯一可靠方法是 OCR(光学字符识别)。
嗯...远射的想法:
如果您能找到用于生成此 PDF 的特定字体的特定版本,您也许能够确定通过这种方式转换为 Type 3 字体的已知字符的实际流内容。
获得这些已知流后,您可以将它们与 PDF 中的流进行比较,并使用它来构建您自己的翻译表。
您可以修复现有的 PDF[s](通过更改编码字典中的名称和 Type 3 charproc 条目)以使这些文本提取器能够正常工作,或者只是从流中获取字节并自己翻译它们.
工作流程是这样的:
- 对于表单中使用的字体中的每个字符:
- 使用相同的 LaTeK/GhostScript 版本自行将其渲染为 PDF。
- 打开 PDF 并找到该特定已知字符的 CharProc。
- 将该流与用于构建它的已知字符一起存储。
- 对于 PDF 中要解释的每个文本字节。
- 根据现有编码数组获取给定字节的字形名称
- 获取该字形名称的“char proc”流,并将其与您已知的 char proc 进行比较。
注意:这可以通过一些缓存被重写以提高效率,但它可以传达这个想法(我希望)。
所有这些都需要对 PDF 和所涉及的解析方法有相当深入的了解。但它可能会起作用。可能不会太...