4

色が含まれている場合、PDFをグレースケールに変換する必要があります。この目的のために、pdfがすでにグレースケールであるかどうかを判断できるスクリプトを見つけました。

convert "source.pdf" -colorspace RGB -unique-colors txt:- 2> /dev/null \
   | egrep -m 2 -v "#([0-9|A-F][0-9|A-F])\1{3}" \
   | wc -l

これは、ドキュメント内に存在する RGB の値が異なる (グレーではない) 色の数をカウントします。

PDF がまだグレースケール ドキュメントでない場合は、ghostscript を使用して変換を続行します。

gs \
  -sOutputFile=temp.pdf \
  -sDEVICE=pdfwrite \
  -sColorConversionStrategy=Gray \
  -dProcessColorModel=/DeviceGray \
  -dCompatibilityLevel=1.4 \
  -dNOPAUSE \
  -dBATCH \
   source.pdf < /dev/null

PDFビューアで出力ドキュメントを開くと、色なしで正しく表示されます。しかし、新しく生成されたドキュメントで最初のスクリプトを試してみると、まだいくつかの色が含まれていることがわかります。ドキュメントを正確なグレースケールに変換するにはどうすればよいですか? このドキュメントをカラー プリンターで印刷すると、プリンターは黒ではなくカラーを使用してグレーを印刷するため、これが必要です。

4

2 に答える 2

9

私は一般的にImageMagickを非常に高く評価しています-しかしconvert、使用しているコマンドで色を正しく数えることは信頼できません...

PDF ページでカラーが使用されているかどうかを確認する別の方法を提案してもよろしいですか? inkcovこれは、( Ghostscript v9.05 以降が必要です) と呼ばれる (比較的新しい) Ghostscript デバイスに基づいています。各ページの CMYK のインク量を表示します (RGB カラーの場合、内部で CMYK へのサイレント変換を行います)。

まず、Ghostscript を使用してサンプル PDF を生成します。

gs \
  -o test.pdf \
  -sDEVICE=pdfwrite \
  -g5950x2105 \
  -c "/F1 {100 100 moveto /Helvetica findfont 42 scalefont setfont} def" \
  -c "F1                         (100% 'pure' black)   show showpage" \
  -c "F1 .5 .5 .5   setrgbcolor  (50% 'rich' rgbgray)  show showpage" \
  -c "F1 .5 .5 .5 0 setcmykcolor (50% 'rich' cmykgray) show showpage" \
  -c "F1 .5         setgray      (50% 'pure' gray)     show showpage"

人間の目にはすべてのページがまったく色を使用していないように見えますが、ページ 2 と 3 では実際に色からの明らかなグレー値が混在しています。

次に、各ページのインク カバレッジを確認します。

gs  -o - -sDEVICE=inkcov test.pdf 
 [...]
 Page 1
 0.00000  0.00000  0.00000  0.02230 CMYK OK
 Page 2
 0.02360  0.02360  0.02360  0.02360 CMYK OK
 Page 3
 0.02525  0.02525  0.02525  0.00000 CMYK OK
 Page 4
 0.00000  0.00000  0.00000  0.01982 CMYK OK

(値 1.00000 は、それぞれのカラー チャネルの 100% のインク適用範囲にマップされます。その0.02230ため、結果の最初の行では2.23 %、ページ領域の平均が黒インクで覆われています。) したがって、Ghostscript によって得られる結果inkcovは、まさに期待どおりのものです。

  • ページ 1 + 4 は、C (シアン)、M (マゼンタ)、Y (イエロー) のいずれの色も使用せず、K (ブラック) のみを使用します。
  • ページ 2 + 3 は、C (シアン)、M (マゼンタ)、Y (イエロー) のインクを使用しますが、K (ブラック) はまったく使用しません。

次に、元の PDF のすべてのページを変換して、カラースペースを使用しますDeviceGray

gs \
 -o temp.pdf \
 -sDEVICE=pdfwrite \
 -sColorConversionStrategy=Gray \
 -sProcessColorModel=DeviceGray \
  test.pdf

...そして、インクの適用範囲を再度確認します。

gs -q  -o - -sDEVICE=inkcov temp.pdf
 0.00000  0.00000  0.00000  0.02230 CMYK OK
 0.00000  0.00000  0.00000  0.02360 CMYK OK
 0.00000  0.00000  0.00000  0.02525 CMYK OK
 0.00000  0.00000  0.00000  0.01982 CMYK OK

ここでも、色変換が成功した場合に期待される結果とまったく同じです! (ところで、あなたのコマンドは、[オリジナル]と[グレー変換]の両方のファイルに対してconvert返さ2test.pdftemp.pdfれます-したがって、このコマンドは正しくありません...)

于 2012-05-06T23:00:21.953 に答える
6

ドキュメントに透明な図が含まれている可能性があります。オプションを渡してみる

-dHaveTransparency=false

あなたのゴーストスクリプト変換コマンドに。pdfwrite デバイスのオプションの完全なリストは、 http: //ghostscript.com/doc/current/Ps2pdf.htm#Optionsにあります。

于 2012-10-10T10:45:16.997 に答える