将可搜索的PDF转换为不可搜索的PDF

时间:2012-02-02 03:53:50

标签: pdf ghostscript

我有一个可搜索的PDF,我需要将其转换为不可搜索的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吗?

3 个答案:

答案 0 :(得分:11)

您可以使用Ghostscript来实现这一目标。您需要两个步骤:

  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

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


    更新

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

     -dNoOutputFonts
    

    这将导致输出设备pdfwriteps2writeeps2write “将'拼接'字形转换为'基本'标记操作(而不是将字体写入输出) “

    这意味着可以避免上述两个步骤,只需一个命令即可实现所需的结果:

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

    警告:我使用基于当前Git源的自编译Ghostscript对一些输入文件进行了测试。它在每种情况下都完美无缺。

答案 1 :(得分:3)

从可搜索的向量pdf生成不可搜索的向量pdf的可能方法是

  1. 在单页中突发pdf

    <强> pdftk file.pdf burst

  2. 使用

    转换svg中的任何单个页面

    <强> pdftocairo

  3. 包含在 poppler utils

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

    3。删除文件夹

    中的 所有 pdf

    4。然后,使用 batikrasterizer

    所有 svg重新转换为pdf(这次生成的pdf将保持矢量化,但无法搜索)

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

    最后一步:在一个多页pdf文件中加入所有生成的单页pd

    pdftk *.pdf cat output out.pdf
    

答案 2 :(得分:0)

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