使用Ghostscript处理后,我有时会在搜索或选择时看到用pdftotext或PDF查看器查看的空格。可能不相关但异常似乎与渲染字体中的字距变化相对应。
有没有办法避免这种情况?
例如,从GS 9.23(也发生在早期版本中):
gs -sDEVICE=pdfwrite \
-dNOPAUSE -dQUIET -dPARANOIDSAFER -dBATCH \
-sOutputFile=./output.pdf input.pdf
摘录自pdftotext input.pdf
:
Review this manual before
operating deep cleaner
while pdftotext output.pdf
:
Re vie w t his m a nua l be fore
ope ra t ing de e p c le a ne r
答案 0 :(得分:0)
Ghostscript和pdfwrite设备(如VectorDevices.htm中所述)在生成PDF文件时不会简单地“弄乱”输入。输入(来自任何来源; PDF,PostScript,XPS,PCL,PCL-XL)完全解释为标记操作,那些标记操作被发送到设备,将它们变回PDF结构。
因此,描述页面的低级(PDF)格式不需要与输入的低级格式有任何关系。特别是您不能指望输入中的PDF操作会反映在输出中。
视觉外观将是相同的(或应该是,因为这是主要目标),但实际操作不会。
文本输出不同的原因是,基本上,PDF文件中没有描述单词,段落,列等的“元数据”。当您从PDF文件中提取文本时,实际得到的是一系列字符代码和位置。
它取决于文本提取代码,试图理解它。我猜这个pdftotext正在使用相当天真的方法来假设文本字符串是单词。
这是有问题的,因为有许多不同的方法来处理PDF中的字距调整,对齐和其他间距。你可以这样做:
(Te) Tj
10 0 Td
(st) Tj
或者:
[(Te) 2 (st)] TJ
pdfwrite设备不知道原始内容是什么,因此它发出的内容可能是其中之一,具体取决于某些启发式方法。它与原版匹配的可能性很低。
我怀疑pdftotext会将第一个操作视为“Te st”,将第二个操作视为“Test”
一种可能的解决方案是使用Ghostscript的txtwrite设备提取文本,可能做得更好。
与您的其他问题一样,最好在提出这类问题时提供示例,因为如果没有这些问题,那就太多了。
TL; DR
有没有办法避免这种情况?
没有