5

我必须自动对 PDF 文档进行预检检查。预检包括:

  1. 检测现有文档中图像的分辨率,如果它们尚未达到该分辨率,则将其更改为 300dpi。
  2. 检测图像的色彩空间,如果不是 CMYK,则使用颜色配置文件将它们转换为 CMYK。
  3. 检测现有 PDF 文档中是否嵌入了字体,并通过替换字体来纠正此问题。(或绘制字体轮廓——我不确定这部分)。

只是想知道这是否可以使用 PoDoFo 或任何其他开源项目来完成。或者,如果我真的需要在 2000 美元到 6000 美元之间订购一些合适的软件。我的托管环境在 Linux 上,支持 PHP、Perl、Python、Ruby、Java。

有任何想法吗?

4

3 回答 3

5

我不知道有任何现成的开源软件可以满足您的要求。

通过编写自己的 shell 脚本(或其他程序)只能解决其中的一部分问题。

  1. 检测图像的分辨率。

    运行pdfimages -list some.pdf以输出 PDF 中包含的图像列表以及它们的尺寸......看似。但并不明显的是:这些尺寸是原始图像的尺寸(嵌入在 PDF 中)。这可能是 720x720 像素。但是,如果渲染到页面的 10x10 平方英寸,则此图像在页面上的 DPI 为 72。如果在 1x1 英寸的正方形上渲染,它将是 720 DPI。PDF 中的两种“渲染”类型都可以从同一个嵌入的原始图像中进行,而当前“图形状态”的上下文决定了应用哪种类型。因此,要确定页面上显示的图像的实际 DPI,需要一些额外的 PDF 解析......

    在任何情况下,您都可以告诉 Ghostscript 将图像重新采样到 300 dpi,并为此使用“阈值”。(Ghostscript 永远不会对图像进行“上采样”,只会对超出阈值的图像进行下采样。上采样几乎没有任何意义——它只会放大文件大小而不会带来更高质量的回报。)

  2. 使用 ICC 配置文件将颜色转换为色彩空间 CMYK。

    最新版本的Ghostscript 可以做到这一点。另请参阅描述其对 ICC 的支持的最新 Ghostscript 文档。

  3. 嵌入未嵌入的字体。

    运行(并评估结果)pdffonts some.pdf将显示哪些字体未嵌入。

    Ghostscript 可以嵌入未嵌入的字体

因此,一个可以满足您大部分要求的 Ghostscript 命令是:

gs                                     \
  -o cmyk.pdf                          \
  -sDEVICE=pdfwrite                    \
  -sColorConversionStrategy=CMYK       \
  -sProcessColorModel=DeviceCMYK       \
  -sOutputICCProfile=/path/to/your.icc \
  -sColorImageDownsampleThreshold=2    \
  -sColorImageDownsampleType=Bicubic   \
  -sColorImageResolution=300           \
  -sGrayImageDownsampleThreshold=2     \
  -sGrayImageDownsampleType=Bicubic    \
  -sGrayImageResolution=300            \
  -sMonoImageDownsampleThreshold=2     \
  -sMonoImageDownsampleType=Bicubic    \
  -sMonoImageResolution=1200           \
  -dSubsetFonts=true                   \
  -dEmbedAllFonts=true                 \
  -sCannotEmbedFontPolicy=Error        \
  -c ".setpdfwrite<</NeverEmbed[ ]>> setdistillerparams" \
  -f some.pdf

此命令将对分辨率高于两倍所需分辨率 ( *ImageDownSampleThreshold=2) 的所有图像进行下采样。它还将所有这些设置应用于任何输入文件(除非某些特殊的 PDF 预检软件会根据特殊属性的“检查”结果应用选择性“修复”)。

最后,我看不出是什么让您认为您必须花费 2,000 到 6,000 美元,以防您不得不求助于封闭源代码的商业预检软件。(我在这个领域最喜欢的是非常强大的callas pdfToolbox6(它甚至有一个在 Linux 上作为 CLI 运行的版本)——它的基本版本需要 500 欧元。)

于 2012-09-30T14:40:22.853 回答
3

我的背景是印刷,所以在阅读我的答案时请记住这一点。您建议做的项目看起来有些直截了当,但当您深入了解其中的本质时,这些操作中有很多印刷行业知识。

以下是对您的要点的一些快速反馈:

  1. 您不希望将低分辨率图像上采样到 300 dpi,因为它会降低图像质量(通过重新插值)并增加文件大小。

  2. 您需要小心颜色转换。您可能只想将某些 RGB 版本转换为黑色。或者,如果有人提供了一个已经是 cmyk 并带有错误配置文件标记的文件,会发生什么情况。

  3. 字体检测 - 替换字体非常复杂。如果您没有与原始字体完全相同的字体,则最终可能会出现文本重排问题。要拥有该字体,您必须支付许可证费用。您也不能在没有嵌入字体的情况下将字体转换为轮廓。

我的建议是查看用于预检的商业包。这些开发人员已投入数年时间来开发他们的程序,并且是印刷领域的专家。具有挑战性的部分将是在您的价格范围内找到那些是 unix 的。大多数都是为 Windows 或 Mac 设计的。Callas 有一个 linux cl 版本,但没有列出的价格。你需要服务器版本。

您打算通过它运行什么类型的卷?

于 2012-10-01T20:49:18.753 回答
2

您尝试过 Enfocus PitStop Pro吗?根据您的具体要求联系他们的支持部门。他们有大量的PDF 预检示例,很乐意为您提供帮助。

于 2012-10-08T07:14:45.997 回答