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

4

1 回答 1

6

我只是介绍 PS->PDF 转换...(我假设您的反之亦然的短语并不意味着指向同一个文件的“往返”转换 [PDF->PS- >PDF],但任何PS 文件的一般转换方向。对吗?)

首先,很可能您ps2pdf只是一个 shellscript,它在内部使用带有一些默认参数的 Ghostscript 命令来完成实际工作。ps2pdf更容易使用。Ghostscript 有更多的选择,但它更难学习。 ps2pdf如果您使用 Ghostscript,它会带走很多潜在的控制权。(您可以使用 -- 调整一些参数,ps2pdf但是您已经非常接近运行真正的 Ghostscript 命令了......)

其次,如果不确切知道你的 PS 输入文件的条件如何,很难给你好的建议:你的 PS 是否嵌入了它使用的字体?它们是哪种字体?等等

第三,Ghostscript 获得了很多额外的功能和控制,并且在过去几年中消除了一些在输出 PDF 方面的错误或弱点。那么,您系统上安装的 Ghostscript 版本是什么?(请记住,调用 Ghostscript,如果没有本地安装的可执行文件ps2pdf,它将无法工作。)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
于 2012-05-28T13:16:53.893 回答