【问题标题】:Extract text from PDF files(Printed)从 PDF 文件中提取文本(打印)
【发布时间】:2018-06-13 18:32:25
【问题描述】:

我正在使用 RedMon(重定向端口监视器)、HP Universal Driver PS 和 GhostScript 来拦截文档打印。

但是,对于以下场景:

文件 PDF -> HP Universal Driver PS -> RedMon -> PostScript File** -> GhostScript 创建文件printed.pdf*。

* 无法从 PDF 文件中提取文本: gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=txtwrite -sOutputFile=output.txt print.pdf

** PostScript 文件被创建为压缩文件,无法提取文本。

问题是?

当 PDF 发送到打印机时,我可以创建 PostScript 文件而不进行压缩吗?

观察:Printed.pdf -> 图像(TIFF) -> Tesseract(OCR) -> 文本文件...有效!但是速度很慢。

【问题讨论】:

标签: c# .net ghostscript ghostscript.net redmon


【解决方案1】:

正如 Dweeberly 在 cmets 中所说,如果您想从 PDF 文件中提取文本,请不要从打印开始。尤其不要把它变成 PostScript。

PDF 文件中可以包含 ToUnicode CMap(其可选),这些允许可靠的文本提取。 PostScript 不支持这些,因此如果您从 PDF 创建 PostScript 文件(无论您使用什么方式创建 PostScript),信息都会丢失。

此外,PostScript 程序通常会使用子集字体、非标准编码和对文本的其他修改来创建,这将使得难以或不可能从中提取文本。

由于 Ghostscript 可以接受 PostScript PDF 作为输入,因此在将 PDF 输入到 txtwrite 设备之前将其转换为 PostScript 没有任何价值。您所做的只是让设备的使用变得更加困难并丢弃有用的信息。

只需使用 Ghostscript 和 txtwrite 设备,并将 PDF 文件作为输入。

OCR 自然会起作用,因为它会扫描文本的形状以确定字符,但它的速度很慢。另一方面,它适用于仅包含文本图像而非实际文本的 PDF 文件,而 txtwrite 设备不会。

【讨论】:

  • 不幸的是我需要拦截旧软件的打印(无源代码)。它发送打印文本或 PDF
  • 所以您是说软件打印到打印机,而您正在拦截它?如果是这样,PDF 来自哪里?查看您向 Ghostscript 提供的内容的示例可能会有所帮助。
  • 我正在使用 RedMon(重定向端口监视器)、HP Universal Driver PS 和 GhostScript 来拦截文档打印。
  • 尝试使用通用 PostScript 打印机(如果它仍然存在于您的 Windows 版本中)而不是 HP 打印机。 Microsoft PostScript 驱动程序执行特殊的额外操作来获取可用文本,而 txtwrite 设备能够使用这些额外信息。如果做不到这一点,请尝试任何其他 PostScript 打印机,但不是 HP 打印机。我仍然不清楚 PDF 文件的来源。
  • 同意@kenS - 使用微软驱动。我经常转到 Windows 驱动程序选择器对话框中的“通用”驱动程序部分,然后选择 MS Publisher ImageSetter 驱动程序。一旦将 PS 转换为 PDF,它就可以很好地工作并提供良好的文本提取功能(尽管我不使用 Ghostscript txwrite 的东西,而是使用一个 PDF 库来分析 PDF 中的文本块)
猜你喜欢
  • 2011-04-30
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2013-09-22
  • 2011-04-20
相关资源
最近更新 更多