あなたの要件を満たす既製のオープン ソース ソフトウェアを知りません。
独自のシェル スクリプト (または他のプログラム) を作成することで解決できるのは、その一部だけです。
画像の解像度を検出します。
pdfimages -list some.pdf
PDFに含まれる画像のリストとその寸法を出力するために実行します...一見。しかし、それについて明らかではないこと: これらの寸法は生の画像 (PDF に埋め込まれている) のものです。これは 720x720 ピクセルになります。ただし、ページの 10x10 インチの正方形にレンダリングすると、この画像はページ上で 72 DPI になります。1x1 インチの正方形にレンダリングすると、720 DPI になります。PDF 内の両方のタイプの「レンダリング」は、埋め込まれた同じ生の画像から作成できます。どちらが適用されるかを決定するのは、現在の「グラフィック状態」のコンテキストです。そのため、ページに表示される画像の実際の DPI を判断するには、追加の PDF 解析が必要です...
いずれにせよ、Ghostscript に画像を 300 dpi に再サンプリングし、これに「しきい値」を使用するように指示できます。(Ghostscript はイメージを「アップサンプリング」することは決してなく、しきい値をオーバーシュートするこれらのダウンサンプリングのみを行います。アップサンプリングはほとんど意味がありません。ファイル サイズが大きくなるだけで、品質の向上という点では見返りがありません。)
ICC プロファイルを使用して色を色空間 CMYK に変換します。
Ghostscriptの最新バージョンではそれが可能です。ICC のサポートについて説明している最新の Ghostscriptのドキュメントも参照してください。
埋め込まれていないフォントを埋め込みます。
実行 (および結果の評価)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
このコマンドは、必要な解像度の 2 倍よりも高い解像度を持つすべての画像をダウンサンプリングします ( *ImageDownSampleThreshold=2
)。また、これらすべての設定を任意の入力ファイルに適用します (特別なプロパティの「チェック」の結果に基づいて選択的な「フィックスアップ」を適用する特別な PDF プリフライト ソフトウェアを除く)。
最後に、クローズド ソースの商用プリフライト ソフトウェアに頼らなければならない場合、2,000 ドルから 6,000 ドルを費やさなければならないと考える理由がわかりません。(この分野で私のお気に入りは、非常に強力なcallas pdfToolbox6 (Linux 上で CLI として実行されるバージョンもあります) です。その基本バージョンは 500 € です。)