使用PoDoFo或其他开源软件的PDF飞行前程序?

使用PoDoFo或其他开源软件的PDF飞行前程序?,pdf,printing,preflight,podofo,Pdf,Printing,Preflight,Podofo,我必须自动对PDF文档进行飞行前检查。飞行前包括: 检测现有文档中图像的分辨率,如果尚未达到该分辨率,则将其更改为300dpi 检测图像的颜色空间,如果不在CMYK中,则使用颜色配置文件将其转换为CMYK 检测现有PDF文档中是否嵌入字体,并通过替换字体来更正此问题。(或绘制字体轮廓-我不确定这部分) 只是想知道是否可以使用PoDoFo或其他任何开源项目来实现这一点。或者如果我真的需要去订购一些价值在2千到6千美元之间的软件。我的托管环境在Linux上,支持PHP、Perl、Python、Rub

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

  • 检测现有文档中图像的分辨率,如果尚未达到该分辨率,则将其更改为300dpi
  • 检测图像的颜色空间,如果不在CMYK中,则使用颜色配置文件将其转换为CMYK
  • 检测现有PDF文档中是否嵌入字体,并通过替换字体来更正此问题。(或绘制字体轮廓-我不确定这部分)
  • 只是想知道是否可以使用PoDoFo或其他任何开源项目来实现这一点。或者如果我真的需要去订购一些价值在2千到6千美元之间的软件。我的托管环境在Linux上,支持PHP、Perl、Python、Ruby和Java


    有什么想法吗?

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

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

  • 检测图像的分辨率。

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

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

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

    的最新版本。另请参见描述其对ICC的支持

  • 嵌入未嵌入的字体。

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

    鬼脚本可以

  • 因此,一个涵盖您大部分需求的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
    
    gs\
    -o cmyk.pdf\
    -sDEVICE=pdfwrite\
    -sColorConversionStrategy=CMYK\
    -sProcessColorModel=DeviceCMYK\
    -soutputicprofile=/path/to/your.icc\
    -sColorImageDownsampleThreshold=2\
    -SCOLORIMAGEDONSAMPLETYPE=双三次\
    -色度分辨率=300\
    -sGrayImageDownsampleThreshold=2\
    -sGrayImageDownsampleType=双三次\
    -sGrayImageResolution=300\
    -sMonoImageDownsampleThreshold=2\
    -sMonoImageDownsampleType=双三次\
    -SMONIMAGE分辨率=1200\
    -dSubsetFonts=true\
    -dEmbedAllFonts=true\
    -sCannotEmbedFontPolicy=错误\
    -c“.setpdfwrite SetDiversiterParams”\
    -f some.pdf
    
    此命令将对分辨率高于所需分辨率的所有图像进行降采样(
    *ImageDownSampleThreshold=2
    )。此外,它会将所有这些设置应用于任何输入文件(除非某些特殊的PDF预处理软件会根据特殊属性的“检查”结果应用选择性的“修复”)


    最后,我看不出是什么让你认为如果你不得不求助于封闭源代码的商业预处理软件,你必须花费2千到6千美元。(在这个领域我最喜欢的是非常强大的(它甚至有一个在Linux上运行CLI的版本)——它的基本版本价格为500欧元。)

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

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

  • 您不希望将低分辨率图像的采样提高到300 dpi,因为这会降低图像质量(通过重新插值)并增加文件大小

  • 你需要注意颜色转换。可能存在某些RGB版本,您只希望将其转换为黑色。或者,如果有人提供的文件已经是cmyk,并且标记了错误的配置文件,会发生什么情况

  • 字体检测-替换字体非常复杂。如果您没有与发起人完全相同的字体,那么最终可能会出现文本回流问题。要拥有这种字体,你必须支付许可证的费用。如果不嵌入字体,则无法将字体转换为轮廓

  • 我的建议是看一个预售的商业套餐。这些开发者已经投入数年时间开发他们的程序,并且是印刷领域的专家。具有挑战性的部分将是在您的价格范围内找到基于unix的产品。大多数是为Windows或Mac设计的。Callas有一个LinuxCL版本,但没有标价。您需要服务器版本


    您计划运行哪种类型的卷

    你试过Enfocus吗?请联系他们的支持部门以了解您的具体要求。他们有很多例子,很乐意为您提供帮助。

    非常感谢您提供这些信息!我要试试看!至于封闭源代码,我实际上也是指Callas。但我需要的版本是适用于unix的pdfToolbox CLI,正如一位经销商告诉我的那样:“Pdf Toolbox Server CLI(8个实例)包括第一年的SMA是4798欧元