将PDF正确转换为PS和反之亦然

5
我正在使用"pdftops"将.pdf文件转换为.ps文件,然后使用"ps2pdf"进行反向转换(poppler-utils)。问题是,在从.ps文件创建.pdf文件时,文本看起来很正常,但当我尝试复制它时,字符非常奇怪(就像它们已经损坏了)。我在其他文件上使用这些工具很长时间了,效果很好。 我还尝试过"pdftohtml -xml"来创建一个.xml文件,文本也很正常(字符被正确提取出来)。
  1. 关于转换,可能会出现什么问题?也许如果我使用"pdftops"和"ps2pdf",有一些需要更改的选项?
  2. 如果我创建.xml输出,是否有方法从.xml文件创建.pdf文件?
编辑: "pdffonts original.pdf"的输出结果 pdffonts_output_originalpdf "roundtripped.pdf"的输出结果 pdffonts_output_roundtrippedpdf

你的系统安装了哪个版本的Ghostscript? - Kurt Pfeifle
1个回答

7
我只涉及PS->PDF转换...(我假设你所说的“反之亦然”并不是指一个相同文件的“往返”转换 [PDF->PS->PDF],而是任何PS文件的一般转换方向。这样对吗?)
首先,很可能您的ps2pdf只是一个shell脚本,它在内部使用带有一些默认参数的Ghostscript命令来执行真正的工作。 ps2pdf更容易使用。 Ghostscript有许多其他选项,但学习起来更困难。 ps2pdf会带走您可以通过使用Ghostscript获得的许多潜在控制权。 (您可以使用ps2pdf调整一些参数--但是您已经非常接近运行真正的Ghostscript命令了...)
其次,在没有确切了解PS输入文件的条件的情况下,很难给出好的建议:您的PS是否嵌入了它使用的字体?它们是哪种类型的字体等。
第三,Ghostscript在输出PDF方面获得了许多额外的功能和控制,并在过去几年中消除了一些漏洞或弱点。那么,您系统上安装的Ghostscript版本是什么? (请记住,ps2pdf调用Ghostscript,如果没有本地安装的gs可执行文件,它将无法工作。)
您无法从PDF复制文本的一个可能原因是使用并嵌入在您的PDF文件中的字体类型(和编码)。关于您的结果PDF,您可以告诉我们哪些字体细节? (尝试pdffonts your.pdf查找--pdffonts也是您提到的Poppler工具的一部分。)
您可以尝试此PS->PDF转换的完整Ghostscript命令,并检查它带您去了哪里:
gs \
  -o output.pdf \
  -sDEVICE=pdfwrite \
  -dPDFSETTINGS=/prepress \
  -dHaveTrueTypes=true \
  -dEmbedAllFonts=true \
  -dSubsetFonts=false \
  -c ".setpdfwrite <</NeverEmbed [ ]>> setdistillerparams" \
  -f input.ps

对于第一个问题:我尝试了对同一文件进行往返转换:PDF->PS->PDF,结果是负面的:文本正确显示,但当我尝试复制它时,出现了损坏的字符。我还尝试了你的“gs”命令,结果也是一样的。 - Andrei F
@ice13ill:其他问题呢?尝试执行pdffonts original.pdf + pdffonts roundtripped.pdf并报告结果。 - Kurt Pfeifle
@ice13ill:您的系统安装了哪个版本的Ghostscript? - Kurt Pfeifle
我的一个同事使用gs的9版本运行了相同的测试。结果一样:( 我会尝试向您发送一个表现类似于我进行测试的文档的部分。 - Andrei F
请问您能提供一个私人电子邮件地址吗? - Andrei F
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接