【问题标题】:Converting searchable PDF to a non-searchable PDF将可搜索的 PDF 转换为不可搜索的 PDF
【发布时间】:2012-02-02 03:53:49
【问题描述】:

我有一个可搜索的 PDF,我需要将其转换为不可搜索的。

我尝试使用 Ghostscript 并将其更改为 JPEG,然后再改回 PDF,这可以解决问题,但文件大小太大且无法接受。

我尝试先使用 Ghostscript 将 PDF 转换为 PS,然后是 PDF,这也可以解决问题,但质量不够好。

gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite -r1000 -sOutputFile=out.ps in.pdf
gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -dDEVICEWIDTHPOINTS=596 -dDEVICEHEIGHTPOINTS=834 -dPDFSETTINGS=/ebook -sDEVICE=pdfwrite -sOutputFile=out.pdf out.ps

有没有办法让 PDF 质量更好?

还有一种更简单的方法可以将可搜索的 PDF 转换为不可搜索的 PDF?

【问题讨论】:

    标签: pdf ghostscript


    【解决方案1】:

    您可以使用 Ghostscript 来实现。您需要 2 个步骤:

    1. 将 PDF 转换为 PostScript 文件,该文件已将所有使用的字体转换为轮廓形状。这里的关键是-dNOCACHE 参数:

      gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf
    2. 将 PS 转换回 PDF(并且可能再次删除中间 PS):

      gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps rm somepdf.ps

    请注意,生成的 PDF 很可能会比原始 PDF 大。 (并且,如果没有额外的命令行参数,原始 PDF 中的所有图像也很可能会根据 Ghostscript 内置默认值进行转换,除非您添加更多命令行参数来做其他事情。但质量应该比您自己尝试使用 Ghostscript 更好...)


    更新

    显然,从版本 9.15(将于 2014 年 9 月/10 月发布),Ghostscript 将支持新的命令行参数:

     -dNoOutputFonts
    

    这将导致输出设备 pdfwriteps2writeeps2write“将字形“扁平化”为“基本”标记操作(而不是将字体写入输出)”

    这意味着上面两个步骤都可以省略,只需要一条命令就可以达到想要的结果:

     gs -o somepdf-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite somepdf.pdf
    

    注意事项:我已经使用基于当前 Git 源代码的自编译 Ghostscript 对几个输入文件进行了测试。它在每种情况下都完美无缺。

    【讨论】:

    • 在我的拙见中,我建议先在 postscript 中转换:gs -dBATCH -dNOPAUSE -dNOCACHE -dSAFER -sDEVICE=pswrite -sOutputFile=output.ps input.pdf,然后将生成的 postscript 传递给 ps2pdf。如果您的页面有自定义页面大小(例如 17x24 厘米),您需要将 -g 开关传递给 ps2pdf,例如,对于 17x24 厘米的页面大小:ps2pdf -g4820x6800 input.ps output.pdf ;换句话说,以磅为单位查看页面大小(使用 pdfinfo),然后将两个维度乘以 10
    • @Dingo:如果您使用最新的 GS 版本,-o out.ps-dBATCH -dNOPAUSE -sOutputFile=out.ps 相同。此外,最新版本的 GS 确实将输出文件 (PostScript) 的页面大小自动设置为与输入文件 (PDF) 相同。如果您想安全起见,您可以另外设置-gNNNxMMM 没有问题。在大多数情况下,我不喜欢 ps2pdf,因为无论如何它都是 Ghostscript 命令行的包装器...... -- 那么,你的最新推荐和我的推荐之间还有什么区别?
    • 你是对的。我以前没有仔细阅读过。对不起,谢谢你的好建议!
    • 它在我的 gentoo 系统上也与gs -o somepdf-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite somepdf.pdf 配合得很好。 9.10 太旧了,但 9.15 可以很好地转换为曲线。
    • 也许是一站式解决方案的一些亮点:)
    【解决方案2】:

    从可搜索矢量 pdf 生成不可搜索矢量 pdf 的一种可能方法是

    1. 在单个页面中突发 pdf

      pdftk file.pdf burst

    2. 用 svg 转换任何单个页面

      pdftocairo

    包含在 poppler utils

    for f in *.pdf; do pdftocairo -svg $f; done
    

    3 .删除文件夹中的 ALL pdf

    4 。然后,使用 batikrasterizer

    ALL svg 重新转换为 pdf(这次生成的 pdf 将保持矢量,但不可搜索)

    java -jar ./batik-rasterizer.jar -m application/pdf *.svg
    

    最后一步:将所有生成的单页 pd 合并到一个多页 pdf 文件中

    pdftk *.pdf cat output out.pdf
    

    【讨论】:

    • 第 4 步的 alternative tool 可以与以下命令一起使用:$ for f in *.svg; do rasterizer -m application/pdf $f; done。 PS:虽然我不太确定这两个工具是如何相关或重叠的......
    • 扩大原始问题的范围,这将是一种裁剪结果文件的方法:tex.stackexchange.com/a/42259/27721
    【解决方案3】:

    我认为转换为 jpg 之类的图像是可行的方法,可能值得转换为 am 图像,优化/减小图像的大小,然后用这些创建 PDF?

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2017-12-12
      相关资源
      最近更新 更多