我正在使用“pdftops”将 .pdf 文件转换为 .ps 文件,然后使用“ps2pdf”进行反向处理(poppler-utils)。问题是,从 .ps 文件创建 .pdf 文件时,文本看起来不错,但是当我尝试复制它时,字符非常奇怪(就像它们已损坏)。我在其他文件上使用了这些工具很长时间,效果很好。
我也试过“pdftohtml -xml”来创建一个.xml文件,文本没问题(字符提取正确)。
编辑:
“pdffonts original.pdf”的输出
“roundtripped.pdf”的输出
最佳答案
我只是在介绍 PS->PDF 转换......(我假设你的反之亦然的短语并不意味着指向同一个文件的“往返”转换 [PDF->PS- >PDF],但任何 PS 文件的一般转换方向。这是正确的吗?)
首先,很可能是您的 ps2pdf
只是一个shellscript,它在内部使用带有一些默认参数的Ghostscript 命令来完成实际工作。 ps2pdf
使用起来要容易得多。 Ghostscript 有更多的选择,但更难学。 ps2pdf
如果您使用 Ghostscript,它会剥夺您可能拥有的许多潜在控制权。 (你可以用 ps2pdf
调整一些参数——但是你已经离运行真正的 Ghostscript 命令更近了......)
其次,在不确切知道您的 PS 输入文件是如何被调节的情况下,很难给您很好的建议:您的 PS 是否嵌入了它使用的字体?它们是哪种字体?等等。
第三,Ghostscript 获得了很多额外的功能和控制,并且在过去几年中在输出 PDF 时消除了一些错误或弱点。那么,您系统上安装的 Ghostscript 版本是什么? (请记住,ps2pdf
调用 Ghostscript,如果没有本地安装的 gs
可执行文件,它将无法工作。)
您无法从 PDF 复制文本的一个可能原因可能是最终被使用并嵌入到您的 PDF 文件中的字体类型(和编码)。您可以告诉我们有关生成的 PDF 的哪些字体详细信息? (尝试 pdffonts your.pdf
找出- pdffonts 也是您提到的 Poppler 实用程序的一部分。)
您可以尝试使用此(完整)Ghostscript 命令进行 PS->PDF 转换,并检查它带您到哪里:
gs \
-o output.pdf \
-sDEVICE=pdfwrite \
-dPDFSETTINGS=/prepress \
-dHaveTrueTypes=true \
-dEmbedAllFonts=true \
-dSubsetFonts=false \
-c ".setpdfwrite <</NeverEmbed [ ]>> setdistillerparams" \
-f input.ps
关于pdf - 将 pdf 正确转换为 ps,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781588/