【问题标题】:Linux PDF/Postscript OptimizingLinux PDF/Postscript 优化
【发布时间】:2023-04-09 00:46:02
【问题描述】:

所以我有一个使用 Java 和 iText 构建的报告系统。 PDF 模板是使用 Scribus 创建的。 Java 代码使用 iText 将数据合并到文档中。然后将文件复制到 NFS 共享,并由 BASH 脚本打印它们。

我使用 acroread 将它们转换为 PS,然后 lpr 转换为 PS。

FOSS 应用程序 pdftops 效率极低。

我的主要问题是使用 iText/Scribus 生成的 PDF 非常大。 而且我最近遇到了 acroread 呕吐的问题,因为它在大型(300 多页)文档上使用了 4gb 的内存。 (Adobe 在将内容更新到 64 位方面非常缓慢)。

现在我可以在 Windows 上使用 Adob​​e 阅读器,并使用减小文件大小选项或其他任何名称,它极大地(> 10 倍)减小了 PDF 的大小(它删除了很多关于表单字段的元数据,并且出现) 并生成一个基本上是打印图像的 PDF。

我的问题是,有没有人知道在 Linux 上做类似事情的好解决方案/程序。理想情况下,它将优化 PDF、减小大小并降低 PS 复杂性,以便打印机可以更快地打印,因为现在打印一页大约需要 15-20 秒。

【问题讨论】:

  • Scribus 应该可以创建好的 PDF,iText 也很受推崇。 pdftops,OTOH,基本上是在 PostScript 中发出一个矢量列表,这几乎是最糟糕的方式。为什么需要后记? PDF 更容易处理
  • 我实际上没有使用 pdftops,我使用的是 acroread。我正在使用 PS 打印到不直接支持 pdf 打印的打印机。
  • 您可以使用 CUPS 打印 PDF,同时处理特定于打印机的问题。
  • lpr,如上所述,是 CUPS 系统的一部分。 CUPS 实际上使用 pdftops 来转换和打印 pdf 文件。由于前面提到的 pdftops 效率低下,我使用 acroread -toPostScript 将 pdf 转换为 ps。然后 lpr(CUPS) 打印生成的 Postscript 文件。
  • gs -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pdf 如此接近,却又如此遥远。这大大减小了文件大小,但字体乱码。我一直在试图弄清楚如何让它使用正确的字体无济于事。

标签: linux optimization pdf itext postscript


【解决方案1】:

要减小 PDF 文件的大小,请使用我正在开发的软件 pdfsizeoptpdfsizeopt 在 Linux、Mac OS X、Windows 上运行(也可能在其他系统上运行)。

pdfsizeopt 有很多依赖项,所以安装起来可能有点麻烦(大约需要 10 分钟的时间)。我正在努力简化安装。

如果您需要一些快速的东西,您可以尝试它的一个依赖项:Multivalent tool.pdf.Compress,它是一个纯 Java 工具。

获取Multivalent20060102.jar,安装Java并运行

java -cp Multivalent20060102.jar tool.pdf.Compress input.pdf

gs -sDEVICE=pdfwrite 的功能有限制:

  • 它无法生成外部参照流(因此 PDF 会比需要的大)
  • 它不能生成对象流(所以 PDF 会比需要的大)
  • 它不会对图像或其他对象进行重复数据删除(即,如果同一个图像在输入 PDF 中出现多次,gs 会为每次出现在输出中复制一份)
  • 它以次优方式发出图像
  • 它将图像重新采样为低分辨率
  • 它有时会忽略 PDF 中的超链接
  • 它无法转换某些结构(因此输出 PDF 可能与输入在视觉上有所不同)

pdfsizeopt 和 Multivalent 的 tool.pdf.Compress 都不受这些限制。

【讨论】:

    【解决方案2】:
    gs \
      -dCompatibilityLevel=1.4 \
      -dPDFSETTINGS=/screen \
      -dNOPAUSE \
      -dBATCH \
      -sDEVICE=pdfwrite \
      -sOutputFile=output.pdf \
       input.pdf
    

    Ghostscript 似乎对这个问题最有效。我现在遇到了一个不同的问题,ghostscript 会混淆嵌入的字体,但我会为此提出一个新问题。

    【讨论】:

    • 您使用的是哪个 Ghostscript 版本?您是否知道/screen 将您的图像重新采样为相当低的分辨率 (72 dpi),这可能适合在屏幕上渲染,但可能会给您在打印机上的打印质量问题?
    猜你喜欢
    • 2016-12-02
    • 2011-03-30
    • 2016-11-07
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2018-12-23
    相关资源
    最近更新 更多