使用PoDoFo或其他任何开源的PDF的预检程序?

时间:2012-09-30 12:00:59

标签: pdf printing preflight podofo

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

  1. 检测现有文档中图像的分辨率,如果它们尚未达到该分辨率,则将其更改为300dpi。
  2. 检测图像的色彩空间,如果不是CMYK,则使用颜色配置文件将其转换为CMYK。
  3. 检测字体是否嵌入现有PDF文档中,并通过替换字体来解决此问题。 (或绘制字体轮廓 - 我不确定这一部分。)
  4. 只是想知道是否可以使用PoDoFo或其他任何开源项目来完成。或者,如果我真的需要订购一些介于$ 2K到$ 6K之间的专有软件。我的托管环境在Linux上,支持PHP,Perl,Python,Ruby,Java。

    有什么想法吗?

3 个答案:

答案 0 :(得分:5)

我不知道任何现成的开源软件符合您的要求。

只有部分内容可以通过编写自己的shell脚本(或其他程序)来解决。

  1. 检测图像的分辨率。

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

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

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

    Ghostscript can do that的最新版本。另请参阅描述其对ICC的支持的most recent Ghostscript documentation

  3. 嵌入未嵌入的字体。

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

    Ghostscript可以embed un-embedded fonts

  4. 因此,一个满足您大部分要求的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美元到6,000美元,以防你不得不求助于闭源商业预检软件。 (我在这个领域最喜欢的是非常强大的callas pdfToolbox6(甚至有一个在Linux上作为CLI运行的版本) - 它的基本版本需要500欧元。)

答案 1 :(得分:3)

我的背景是印刷,所以在阅读我的答案时请记住这一点。你打算做的项目似乎有些直截了当,但是当你深入了解它时,有很多印刷行业的知识可以用于这些操作。

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

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

  2. 您需要注意颜色转换。可能存在某些RGB格式,您只想将其转换为黑色。或者,如果某人提供的文件已经是cmyk并且标记有错误的个人资料,会发生什么。

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

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

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

答案 2 :(得分:2)

您尝试过Enfocus PitStop Pro吗?根据您的具体要求联系他们的支持部门。他们有很多PDF preflight例子,很乐意帮助你。