我正在使用“pdftops”将.pdf文件转换为.ps文件,然后使用“ps2pdf”转换为反向过程(poppler-utils)。问题是,当从.ps文件创建.pdf文件时,文本看起来没问题,但是当我尝试复制它时,字符非常奇怪(就像它们被破坏一样)。我在其他文件上使用这些工具很长一段时间,它工作正常。 我还尝试了“pdftohtml -xml”来创建.xml文件,文本正常(字符被正确提取)。
编辑: 输出“pdffonts original.pdf”
“roundtripped.pdf”的输出
答案 0 :(得分:4)
我只是在报道PS-> PDF转换...(我假设您的反之亦然的短语并不意味着指向'圆形 - 对同一文件[PDF-> PS-> PDF]进行“”转换,但任何 PS文件的转换的一般方向。这是正确的吗?)
首先,很可能你的ps2pdf
只是一个shellcript,它在内部使用带有一些默认参数的Ghostscript命令来完成实际工作。 ps2pdf
更容易使用。 Ghostscript有更多选项,但学习起来比较困难。 ps2pdf
如果使用Ghostscript,它会带走很多潜在的控制权。 (您可以使用ps2pdf
调整一些参数 - 但是您已经非常接近于运行真正的Ghostscript命令......)
其次,如果不确切知道PS输入文件的准确程度,很难给出好的建议:你的PS是否嵌入了它使用的字体?他们是哪种类型的字体?等
第三,Ghostscript获得了很多额外的功能和控制,并且在输出PDF的过去几年中删除了一些错误或弱点。那么,是你系统上安装的Ghostscript的版本吗?(请记住,ps2pdf
调用Ghostscript,如果没有本地安装的gs
可执行文件,它将无法工作。)
您无法从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