他の回答はすでに「辞書とは何ですか?」をカバーしています。あなたの質問の一部。では、 「Ghostscript はそれらにどのようにアクセスできますか?」に移りましょう。
おそらく、質問は「私 (パワーユーザー、開発者、ギーク...) がそれらにアクセスするにはどうすればよいですか?」ということになるはずです。
PostScript インタープリター (Ghostscript の場合もあります) が認識しているアクセス可能な辞書の内容は、単純な PostScript プログラムのワンライナーを記述するか、または単にインタープリター (Ghostscript) を呼び出してプログラム コードを渡して出力できます。コマンドライン ( -c ...
)。
このために必要なのは、それぞれの辞書の名前だけです。
と呼ばれる興味深い内部 Ghostscript ディクショナリを見てみましょう.distillersettings
。
gs \
-dNODISPLAY \
-c ".distillersettings {exch ==only ( ) print ==} forall quit"
結果:
/default -dict-
/prepress -dict-
/PSL2Printer -dict-
/ebook -dict-
/screen -dict-
/printer -dict-
これは、一見しただけではあまりわかりません。しかし、その辞書のいくつかのキー名に気付くかもしれません: /prepress
、/printer
、/screen
、/ebook
...
-sDEVICE=pdfwrite
これらはすべて、Ghostscript コマンドラインで使用して、 (Ghostscript の「Distiller」に似た機能)によって出力が必要な場合に、事前定義された一連の設定を求めることができます。このような一連の設定を要求する-dPDFSETTINGS=/printer
には、コマンドラインに追加するだけです。
もう一度見てみると、.distillersettings
ディクショナリの内容は本質的に、さらに 6 つのディクショナリのセットであることがわかります。「辞書の辞書」です。
ディクショナリの内容はデフォルトでは出力されません (上記の PostScript コードでは出力されません)。ただし、それらが必要な場合は、上記のコマンドで===
標準の PostScript 言語演算子の代わりに呼び出される Ghostscript 固有のプロシージャを使用できます。このプロシージャは、辞書を展開し、それらに含まれるすべてのキーと値のペアも出力するという点で、execpt と==
同じように動作します。==
===
その手順には注意してください-dict-
。拡張しようとしているのは非常に長く、視力を失う可能性があります. :-)
ただし、現在のケースでは、まだ管理可能です。
gs \
-dNODISPLAY \
-c ".distillersettings {exch ==only ( ) print ===} forall quit"
出力は次のとおりです。
/default << /Optimize false /DoThumbnails false /PreserveEPSInfo true /ColorConversionStrategy /LeaveColorUnchanged /DownsampleMonoImages false /EmbedAllFonts true /CannotEmbedFontPolicy /Warning /PreserveOPIComments true /GrayACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >> /DownsampleColorImages false /PreserveOverprintSettings true /CreateJobTicket false /AutoRotatePages /PageByPage /NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats] /ColorACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >> /DownsampleGrayImages false /UCRandBGInfo /Preserve >>
/prepress << /DoThumbnails true /MonoImageResolution 1200 /ColorImageDownsampleType /Bicubic /PreserveEPSInfo true /ColorConversionStrategy /LeaveColorUnchanged /GrayImageDownsampleType /Bicubic /EmbedAllFonts true /CannotEmbedFontPolicy /Error /PreserveOPIComments true /GrayImageResolution 300 /GrayACSImageDict << /ColorTransform 1 /QFactor 0.15 /Blend 1 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /ColorImageResolution 300 /PreserveOverprintSettings true /CreateJobTicket true /AutoRotatePages /None /MonoImageDownsampleType /Bicubic /NeverEmbed [] /ColorACSImageDict << /ColorTransform 1 /QFactor 0.15 /Blend 1 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /CompatibilityLevel 1.4 /UCRandBGInfo /Preserve >>
/PSL2Printer << /DoThumbnails false /CompatibilityLevel 1.2 /TransferFunctionInfo /Preserve /MonoImageResolution 1200 /PreserveEPSInfo true /CompressFonts true /ColorImageDownsampleType /Bicubic /GrayImageDownsampleType /Bicubic /ColorConversionStrategy /LeaveColorUnchanged /EmbedAllFonts true /ColorACSImageDict << /ColorTransform 1 /QFactor 0.15 /Blend 1 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /CannotEmbedFontPolicy /Error /PreserveOPIComments true /CompressPages true /GrayImageResolution 600 /GrayACSImageDict << /ColorTransform 1 /QFactor 0.15 /Blend 1 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /ColorImageResolution 600 /PreserveOverprintSettings true /AutoRotatePages /None /MonoImageDownsampleType /Bicubic /ASCII85EncodePages true /MaxViewerMemorySize 8000000 /NeverEmbed [] /PreserveHalftoneInfo true /UCRandBGInfo /Preserve >>
/ebook << /DoThumbnails false /MonoImageResolution 300 /ColorImageDownsampleType /Bicubic /PreserveEPSInfo false /ColorConversionStrategy /sRGB /GrayImageDownsampleType /Bicubic /EmbedAllFonts true /CannotEmbedFontPolicy /Warning /PreserveOPIComments false /GrayImageResolution 150 /GrayACSImageDict << /ColorTransform 1 /QFactor 0.76 /Blend 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >> /ColorImageResolution 150 /PreserveOverprintSettings false /CreateJobTicket false /AutoRotatePages /All /MonoImageDownsampleType /Bicubic /NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats] /ColorACSImageDict << /ColorTransform 1 /QFactor 0.76 /Blend 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >> /CompatibilityLevel 1.4 /UCRandBGInfo /Remove >>
/screen << /DoThumbnails false /MonoImageResolution 300 /ColorImageDownsampleType /Average /PreserveEPSInfo false /ColorConversionStrategy /sRGB /GrayImageDownsampleType /Average /EmbedAllFonts true /CannotEmbedFontPolicy /Warning /PreserveOPIComments false /GrayImageResolution 72 /GrayACSImageDict << /ColorTransform 1 /QFactor 0.76 /Blend 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >> /ColorImageResolution 72 /PreserveOverprintSettings false /CreateJobTicket false /AutoRotatePages /PageByPage /MonoImageDownsampleType /Average /NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats] /ColorACSImageDict << /ColorTransform 1 /QFactor 0.76 /Blend 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >> /CompatibilityLevel 1.3 /UCRandBGInfo /Remove >>
/printer << /DoThumbnails false /MonoImageResolution 1200 /ColorImageDownsampleType /Bicubic /PreserveEPSInfo true /ColorConversionStrategy /UseDeviceIndependentColor /GrayImageDownsampleType /Bicubic /EmbedAllFonts true /CannotEmbedFontPolicy /Warning /PreserveOPIComments true /GrayImageResolution 300 /GrayACSImageDict << /ColorTransform 1 /QFactor 0.4 /Blend 1 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /ColorImageResolution 300 /PreserveOverprintSettings true /CreateJobTicket true /AutoRotatePages /None /MonoImageDownsampleType /Bicubic /NeverEmbed [] /ColorACSImageDict << /ColorTransform 1 /QFactor 0.4 /Blend 1 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /CompatibilityLevel 1.4 /UCRandBGInfo /Preserve >>
まだそれほど良くありません。それでは改善していきましょう。これを行う方法は、PostScript コードを変更することです。ここで、.distillersettings
辞書にアクセスし、そこからキーの 1 つの値を取得するように指示します ( を使用しましょう/screen
)。値が別のディクショナリであることがわかっているので、以前と同じ方法でフォーマットできるキーと値のペアの別のセットを取得できることがわかります。
gs \
-q \
-dNODISPLAY \
-c ".distillersettings /screen get {exch ==only ( ) print ===} forall quit"
これで見栄えが良くなりましたね。自分自身を見てください:
/DoThumbnails false
/MonoImageResolution 300
/ColorImageDownsampleType /Average
/PreserveEPSInfo false
/ColorConversionStrategy /sRGB
/GrayImageDownsampleType /Average
/EmbedAllFonts true
/CannotEmbedFontPolicy /Warning
/PreserveOPIComments false
/GrayImageResolution 72
/GrayACSImageDict -dict-
/ColorImageResolution 72
/PreserveOverprintSettings false
/CreateJobTicket false
/AutoRotatePages /PageByPage
/MonoImageDownsampleType /Average
/NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats]
/ColorACSImageDict -dict-
/CompatibilityLevel 1.3
/UCRandBGInfo /Remove
あなたの鋭い目ですでに気づいているかもしれませんが、重要な値のいくつかは再び辞書です。上記のコマンドを再度自由に使用できます。今回===
は、2 番目の代わりにa を使用して、隠れ続ける可能性の==
ある謎を解決します.../GrayACSImageDict -dict-
いずれにせよ、このディクショナリ-dPDFSETTINGS=/screen
に埋め込まれたすべての単一パラメータを列挙する代わりに、単純に使用することで入力を節約できることがわかりました.../screen
また、一般的な「画面」品質の出力が 必要な場合にオーバーライドする必要がある単一の値もわかっていますが、すべてのフォントが埋め込まれているという違いがあります。
gs \
-o out.pdf \
-sDEVICE=pdfwrite \
-dPDFSETTINGS=/screen \
-c "<</NeverEmbed [ ] /AlwaysEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats]>> setdistillerparams" \
-f input.pdf
Ghostscript が使用する辞書の名前さえ知っていれば、Ghostscript の内部について、この方法で多くの興味深いことを調べることができます。:-)