2012-06-21 98 views
6

मैं आमतौर पर कमांड लाइन उपकरण के रूप में ghostscript पर देखता हूं; हालांकि, मैं वहां मौजूद बहुत सी सेटिंग्स और विकल्पों पर आश्चर्यचकित नहीं रहूंगा - जो इस तथ्य के कारण है कि ghostscript एक पूर्ण उड़ा हुआ पोस्टस्क्रिप्ट भाषा दुभाषिया है (जिसे मैं अक्सर भूल जाता हूं)।पोस्टस्क्रिप्ट शब्दकोश क्या हैं, और उन्हें कैसे पहुंचा जा सकता है (Ghostscript के माध्यम से)?

उदाहरण के लिए, Querying Ghostscript for the default options/settings of an output device (such as 'pdfwrite' or 'tiffg4') में; कोई एक आउटपुट आउटपुट डिवाइस के लिए डिफ़ॉल्ट विकल्पों को पुनर्प्राप्त करने का तरीका सीखता है। हालांकि, मैं क्या जानना चाहता हूं - क्या ये विकल्प तथाकथित पोस्टस्क्रिप्ट शब्दकोश से संबंधित हैं?

या, इसे दूसरे शब्दों में रखने के लिए - पोस्टस्क्रिप्ट शब्दकोश क्या हैं; और ghostscript क्या सुविधाओं को क्वेरी (और संभवतः) इस डेटा को संशोधित करने के लिए है?

उत्तर

8

इसे सबसे सरल शब्दों में रखने के लिए: पोस्टस्क्रिप्ट में, एक शब्दकोश कुंजी (नाम) + मान जोड़े की एक सूची है। शब्दकोश पोस्टस्क्रिप्ट दुभाषिया को देखने के लिए अनुमति देते हैं यदि कोई कुंजी मौजूद है और किसी भी प्रक्रिया में इसका उपयोग करने के लिए अपना मान लाती है। दुभाषिया भी कुंजी बना सकता है, मूल्यों को स्टोर या संशोधित कर सकता है और यहां तक ​​कि पूर्ण कस्टम शब्दकोश भी बना सकता है (पोस्टस्क्रिप्ट कोड द्वारा इसकी प्रसंस्करण द्वारा निर्धारित)। कुंजी आमतौर पर प्रकार का नाम (लेकिन वे शून्य के अपवाद के साथ किसी भी अन्य प्रकार के हो सकते हैं)। से परिभाषित पूर्व पोस्टस्क्रिप्ट ऑपरेटरों

  • systemdict यह एक रखती है (और कार्यान्वयन के लिए उन्हें क्या करना बनाने के लिए:

    इन शब्दकोशों के दो हमेशा की तरह, उपस्थित होना चाहिए एक PostScript दुभाषिया के किसी भी लागू करने के लिए पोस्टस्क्रिप्ट विनिर्देश उन्हें उम्मीद करता है)।

  • userdict यह एक चर और एक PostScript कार्यक्रम की प्रक्रियाओं (कार्य या सबरूटीन्स होने के रूप में 'प्रक्रियाओं' जो भाषा से परिभाषित ऑपरेटरों और कार्यक्रम से परिभाषित मूल्यों और पैरामीटर का संयोजन से निर्माण कर रहे हैं के बारे में सोच) रखती है।

एक शब्द के बारे में नाम: नाम क्या अन्य प्रोग्रामिंग भाषाओं के लिए uniq पहचानकर्ता हैं (और वे केस-संवेदी होते)। ये पहचानकर्ता चर या प्रक्रिया नाम हो सकते हैं।वे ASCII के 256 अक्षरों के किसी भी संयोजन से बने हो सकते हैं (लेकिन वे तार नहीं हैं)।

जैसा कि आप जानते होंगे, पोस्टस्क्रिप्ट स्टैक-केंद्रित भाषा है। यह कई ढेर का उपयोग करता है:

  • संकार्य ढेर यह ढेर हर एक संकार्य और मध्यवर्ती संचालन के हर परिणाम (अंतिम परिणाम संकार्य ढेर के सर्वोच्च तत्व में अस्थायी रूप से मोड़) रखती है।

  • शब्दकोश स्टैक जैसा कि नाम कहता है: इस ढेर में केवल शब्दकोश हैं। जैसे कि स्टैक किसी भी कुंजी/नाम लुकअप के लिए वर्तमान संदर्भ को परिभाषित करता है।

  • निष्पादन ढेर यह एक निष्पादन वस्तुओं, अर्थात् मुख्य रूप से प्रक्रियाओं और फ़ाइलों जो वर्तमान में निष्पादित किया जा रहा है। यदि दुभाषिया वर्तमान ऑब्जेक्ट के निष्पादन को बाधित करता है, तो यह बाधित वस्तु को इस ढेर पर रखता है। ऑब्जेक्ट को पूरी तरह से निष्पादित करने के बाद, इसे स्टैक से निकाल दिया जाता है और निष्पादन अब सबसे ऊपर है।

  • ग्राफिक्स राज्य ढेर यह ढेर ग्राफिकल तत्वों के इंजेक्शन के लिए वर्तमान संदर्भ होस्ट करता है: वर्तमान पंक्ति चौड़ाई की स्थापना, वर्तमान फ़ॉन्ट, वर्तमान रंग या ग्रेस्केल मूल्य, वर्तमान पथ ... वर्तमान ग्राफिक राज्यों बचाया जा सकता है (gsave) और बहाल (grestore) बाद में। शीर्ष-ग्राफिक्स स्थिति हमेशा वर्तमान ग्राफिक्स स्थिति है।

ये सभी ढेर एक-दूसरे से स्वतंत्र हैं। हालांकि, ऑपरेंड, डिक्शनरी और ग्राफिक्स स्टेट स्टैक पोस्टस्क्रिप्ट प्रोग्राम के नियंत्रण में हैं (यानी, इसके द्वारा छेड़छाड़ की जा सकती है)। निष्पादन ढेर दुभाषिया की एकमात्र संपत्ति है।

प्रत्येक ढेर के लिए कुछ सीमाएं हैं (जैसे तत्वों की संख्या के लिए इसे संग्रहीत किया जा सकता है)। पोस्टस्क्रिप्ट ऑपरेटरों जो ढेर में हेरफेर कर सकते हैं जानता है: सर्वोच्च तत्व ढेर पर एक नए तत्व डाल दिया, को दूर सर्वोच्च तत्व (pop), डुप्लिकेट (dup), ढेर पर तत्वों का क्रम शफ़ल (roll), दो शीर्ष Moste तत्वों (exch) स्वैप, और काफी कुछ अधिक (एक अच्छा पोस्टस्क्रिप्ट प्रोग्रामिंग में परिचय 'Bluebook' एडोब) है।

जैसा कि मैंने पहले ही कहा है, शब्दकोशों का अपना स्टैक है जिसमें सभी शब्दकोश एक पोस्टस्क्रिप्ट दुभाषिया का उपयोग कर सकते हैं।

कि ढेर पर फोंट की एक अलग शब्दकोश, या शब्दकोशों एक PostScript कार्यक्रम, (dict कीवर्ड का उपयोग) बना सकते हैं और निजी तौर पर उपयोग करना चाहता है के किसी भी संख्या या कुछ शब्दकोशों कि एक निश्चित पोस्टस्क्रिप्ट दुभाषिया के लिए विशिष्ट हैं हो सकता है , जैसे घोस्टस्क्रिप्ट।

systemdict हमेशा नीचे सबसे अधिक है; इसके ऊपर userdict है। इन दोनों को डिक्शनरी स्टैक से हटाया नहीं जा सकता है, अन्य सभी किसी भी स्टैक मैनिपुलेशन ऑपरेटर (जैसे pop जो स्टैक से सबसे ऊपर तत्व को हटा देता है) के अधीन हो सकते हैं।

जब भी दुभाषिया एक नाम देख रहा है, तो यह शीर्ष-अधिकांश शब्दकोश से शुरू होने वाले नाम के लिए शब्दकोशों की खोज करता है। इसलिए userdictsystemdict से पहले खोजा गया है। जैसे ही नाम पाया जाता है (एक कुंजी), दुभाषिया खोज बंद कर देता है और उस कुंजी का उपयोग करता है (या इसके बजाय, वह मान रखता है)। इस आर्किटेक्चर का नतीजा यह है कि पोस्टस्क्रिप्ट प्रोग्रामर किसी भी पोस्टस्क्रिप्ट ऑपरेटर को ओवरराइट कर सकता है जो systemdict में अपने स्वयं के संस्करण के साथ पूर्व-परिभाषित है।

इसके अलावा, कुछ शब्दकोश पीएस प्रोग्राम 'निजी' (नो-एक्सेस, जैसे फ़ॉन्ट डिक्शनरी) या 'रीड-ओनली' के लिए हो सकते हैं।


अद्यतन - अधिक उत्तर:

+0

विस्तृत उत्तर के लिए बहुत धन्यवाद, @pipitas! यदि आपके पास समय है, तो क्या आप "_the दुभाषिया [] को एक नाम_ ढूंढने" का एक छोटा 'भूत-स्क्रिप्ट' टर्मिनल उदाहरण भी जोड़ सकते हैं (जो "_dusdict' को" systemdict'_ "से पहले खोजा जा सकता है, और संभवतः एक ऑपरेटर ओवरराइटिंग)? बहुत धन्यवाद फिर - चीयर्स! – sdaau

+1

@sdaau: मेरा अन्य उत्तर आपको दिखाता है कि शब्दकोश '.distillersettings' में नाम/कुंजी'/स्क्रीन' को कैसे देखना है: यह '.distillersettings/स्क्रीन get' के रूप में सरल है। 'Get' ऑपरेटर ऑपरेंड स्टैक पर कुंजी (यदि पाया गया) का मान रखता है (यदि कोई' अपरिभाषित 'त्रुटि नहीं मिलेगी)। अब जब कुंजी का मूल्य ढेर पर है, तो बाकी कोड स्निपेट बस इसे वहां लाता है, इसे थोड़ा और अधिक अच्छी तरह से दिखने के लिए थोड़ा सा प्रारूप बनाता है और इसकी सामग्री को प्रिंट करता है ... –

+0

बहुत धन्यवाद, @pipitas - बहुत सराहना की! – sdaau

2

पोस्टस्क्रिप्ट में डिक्शनियर एक 'कंटेनर' ऑब्जेक्ट हैं, वे संक्षेप में जोड़ों, एक कुंजी और मूल्य की एक सूची हैं। अधिक जानकारी के लिए पोस्टस्क्रिप्ट भाषा संदर्भ मैनुअल देखें, विशेष रूप से तीसरे संस्करण में सेक्शन 3.3.9।

शब्दकोश अक्सर पोस्टस्क्रिप्ट ऑपरेटर या फ़ंक्शन पर पैरामीटर के सेट को पास करने के लिए उपयोग किए जाते हैं, उदाहरण के लिए छवि ऑपरेटर एक शब्दकोश तर्क ले सकता है लेकिन वे समान रूप से बस स्टोरेज हो सकते हैं।

शब्दकोशों में एक्सेस अनुमतियां हो सकती हैं, इसलिए केवल पढ़ने के लिए शब्दकोशों को पढ़ना संभव है, जिनके मूल्यों की जांच की जा सकती है, लेकिन संशोधित नहीं किया जा सकता है, और पोस्टस्क्रिप्ट में रूपरेखा डेटा निकालने से रोकने के लिए फ़ॉन्ट शब्दकोशों को 'एक्सेस नहीं' किया जा सकता है।

एक ऐसे शब्दकोश में प्रविष्टियां जो केवल पढ़ने या नहीं पहुंच के लिए संशोधित की जा सकती हैं।

+0

उत्तर के लिए बहुत धन्यवाद, @ केएनएस; यहां वर्तमान [पोस्टस्क्रिप्ट भाषा संदर्भ मैनुअल (पीएलआरएम.pdf)] का एक लिंक भी है (http://www.adobe.com/products/postscript/pdfs/PLRM.pdf) - चीयर्स! – sdaau

5

अन्य उत्तर पहले से ही कवर "शब्दकोशों क्या हैं?" आपके प्रश्न का हिस्सा। अब चलिए पर जाएं "घोस्टस्क्रिप्ट उन्हें कैसे एक्सेस कर सकता है?"

शायद प्रश्न होना चाहिए: "मैं (एक पावर उपयोगकर्ता, डेवलपर, एक गीक ...) कैसे पहुंच सकता हूं?" (Ghostscript हो सकता है)

आप बाहर किसी भी सुलभ शब्दकोश की सामग्री है कि अपने पोस्टस्क्रिप्ट दुभाषिया के लिए जाना जाता है मुद्रित कर सकते हैं एक सरल पोस्टस्क्रिप्ट कार्यक्रम एक लाइनर लिख कर - या द्वारा बस कार्यक्रम के साथ दुभाषिया (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 (घोस्टस्क्रिप्ट 'डिस्टिलर'-समान कार्यक्षमता) द्वारा किए गए आउटपुट चाहते समय सेटिंग के प्री-डिफ़ाइंड सेट के लिए एक भूतस्क्रिप्ट कमांडलाइन पर उपयोग कर सकते हैं। सेटिंग्स के ऐसे सेट के लिए पूछने के लिए, बस कमांडलाइन पर -dPDFSETTINGS=/printer जोड़ें।

दूसरी नज़र में अब आप देखेंगे कि .distillersettings शब्दकोश की सामग्री अनिवार्य रूप से 6 और शब्दकोशों का एक सेट है। यह 'शब्दकोशों का शब्दकोश' है।

शब्दकोश सामग्री डिफ़ॉल्ट रूप से मुद्रित नहीं होती है (ऊपर पोस्टस्क्रिप्ट कोड के साथ नहीं)। लेकिन यदि आप उन्हें चाहते हैं, तो आप उपरोक्त आदेश में मानक पोस्टस्क्रिप्ट भाषा ऑपरेटर == के बजाय === नामक एक घोस्टस्क्रिप्ट-विशिष्ट प्रक्रिया का उपयोग कर सकते हैं। यह प्रक्रिया == के समान व्यवहार करती है, यह निष्पादित करती है कि यह शब्दकोशों का विस्तार करता है और सभी कुंजी प्रिंट करता है: उनमें वर्णित मूल्य जोड़े।

कि === प्रक्रिया के साथ सावधान रहें:-dict- आप विस्तार करने के लिए veeeeeery लंबा हो सकता है की कोशिश कर रहे हैं और आप अपने दृष्टि ढीली हो जायेगी। :-)

हमारे वर्तमान मामले में लेकिन यह अभी भी प्रबंधनीय है:

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 >> 

फिर भी इतना अच्छा नहीं। तो आइए बेहतर इसे पाने का प्रयास करें। जिस तरीके से हम इसे कर सकते हैं, वह हमारे पोस्टस्क्रिप्ट कोड को संशोधित करना है: हम इसे अब .distillersettings शब्दकोश तक पहुंचने के लिए बताते हैं और इससे चाबियों में से एक का मूल्य प्राप्त करते हैं (चलो /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 

:: अपने आप को देखें कुंजी मूल्यों के कुछ फिर से शब्दकोशों हैं। आप उपरोक्त आदेश को फिर से रहस्यों को हल करने कि /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 internals के बारे में बहुत सारी रोचक चीजों का पता लगा सकते हैं, अगर आप केवल उन शब्दकोशों का नाम जानते हैं जो इसका उपयोग करते हैं।:-)

+0

शानदार, @pipitas - अब ** यह ** कुछ ऐसा है जो मैं थोड़ी देर के लिए जानना चाहता था; खासकर '==' का अर्थ क्या है, और इसका उपयोग कैसे करें; लंबे शब्दकोशों के बारे में चेतावनी भी सराहना की जाती है - ठीक है, पूरी पोस्ट है! संपादित शीर्षक - और यदि आप स्वीकार किए गए एक के अंत में इस उत्तर को लिंक कर सकते हैं, तो यह बहुत अच्छा होगा! बहुत से, इसके लिए बहुत धन्यवाद - चीयर्स! – sdaau

4

तुम सिर्फ चलाने अन्य शब्दकोशों जो systemdict और userdict शब्दकोशों में शामिल हैं, की सूची प्राप्त करना चाहते हैं:

for _dict in userdict systemdict; \ 
    do \ 
    gs \ 
    -dNODISPLAY \ 
    -c "${_dict} {exch ==only () print ==} forall quit"; \ 
done \ 
| awk '{print $1, $2}' \ 
| grep -- -dict- \ 
| sort 

इस शब्दकोश नामों की एक क्रमबद्ध सूची का उत्पादन करेगा जिसे आप संभावित रूप से 'दिलचस्प' नामों के लिए जांच सकते हैं।

आप की तरह Fontmap, localdict, AdobeGlyphList, userparams, .eexec_param_dict, .substitutefamilies, EncodingDirectory, colorspacedict, .distillerparamkeys, devicedict, .symbol_list ...

इन नामों में से प्रत्येक आप और अधिक देख सकते हैं के साथ

ऐसे नामों मिल जाएगा या कम दिलचस्प जानकारी और छोटी-मोटी बातें Ghostscript के internals के बारे में फ़े चलाकर:

gs \ 
    -q \ 
    -dNODISPLAY \ 
    -c "Fontmap {exch ==only () print ==} forall quit" 

आप देख सकते हैं, यहां तक ​​कि Ghostmap द्वारा उपयोग किए गए Fontmap को एक शब्दकोश में संग्रहीत किया जाता है।

[....] 
/Arial [/ArialMT] 
/Arial,Bold [/Arial-BoldMT] 
/AvantGarde-Book [/URWGothicL-Book] 
/Bookman-Demi [/URWBookmanL-DemiBold] 
/Calligraphic-Hiragana [(fhirw.gsf)] 
/Calligraphic-Katakana [(fkarw.gsf)] 
/Charter-Bold [/CharterBT-Bold] 
/CharterBT-Bold [(bchb.pfa)] 
/Courier [/NimbusMonL-Regu] 
/Courier-Bold [/NimbusMonL-Bold] 
/Courier-BoldOblique [/NimbusMonL-BoldObli] 
/Courier-Oblique [/NimbusMonL-ReguObli] 
/Helvetica [/NimbusSanL-Regu] 
/Helvetica-Bold [/NimbusSanL-Bold] 
/NewCenturySchlbk-Bold [/CenturySchL-Bold] 
/Palatino-Roman [/URWPalladioL-Roma] 
/Symbol [/StandardSymL] 
/Times-Bold [/NimbusRomNo9L-Medi] 
/TimesNewRoman,Bold [/TimesNewRomanPS-BoldMT] 
/Utopia-Regular [(putr.pfa)] 
/ZapfDingbats [/Dingbats] 
[....] 

सावधानी से ध्यान दें:: मेरे परिणाम यहाँ से एक उद्धरण स्थानीय रूप से यह वह जगह है से ऊपर है नहीं वास्तव में फ़ाइल स्वरूप के रूप में आप का उपयोग करने के लिए जब आप Fontmap फ़ाइल हेरफेर करना चाहते होगा कि Ghostscript का उपयोग करना चाहिए (सामान्य रूप से, या किसी विशेष नौकरी के लिए)। उस प्रारूप के लिए, कृपया Ghostscript द्वारा भेजे गए फ़ॉन्टमैप फ़ाइल के उदाहरण में टिप्पणियां पढ़ें। उपर्युक्त सूची फ़ॉन्टमैप प्रस्तुति है जो घोस्टस्क्रिप्ट स्टोर के आंतरिक शब्दकोश में है।

5

अच्छा जवाब में से बहुत सारे पहले से ही है, लेकिन कोई भी इस उल्लेख किया गया है:

जब Ghostscript लागू, -d और -s विकल्पों systemdict में प्रारंभिक परिभाषाओं पैदा करते हैं। यह आपको parameterized invocation of your postscript program करने की अनुमति देता है।

मूल्य को शून्य, या एक संख्या (या किसी अन्य एकल पोस्टस्क्रिप्ट टोकन) को सेट करने के लिए -dname[=token] का उपयोग करें। एक स्ट्रिंग मान सेट करने के लिए -sname=string का उपयोग करें (जो कि अधिकांश संदर्भों में काम करता है साथ ही साथ नाम भी)।

और आप दाएं ऑपरेटरों के साथ कुछ हद तक सभी ढेर में हेरफेर कर सकते हैं।

  • token स्ट्रिंग या फ़ाइल से संकार्य ढेर करने के लिए धक्का (यह क्या दुभाषिया पाश कार्यक्रम स्ट्रीम उपभोग करने के लिए उपयोग करता है, तो इससे आपको क्या उपयोग कर रहे हैं कि क्या एक फ़ाइल के माध्यम से या सीधे कीबोर्ड से कोड inputting)
  • संकार्य ढेर से
  • pop छोड़ें
  • begin धक्का dict ढेर
  • end dict ढेर से पॉप
  • run, exec, ०१२३९४५६६७६२ कोकार्यकारी ढेर
  • exit, stop पॉप या स्पष्ट कार्यकारी ढेर
  • gsave धक्का gstate ग्राफिक्स ढेर पर
  • grestore पॉप ग्राफिक्स ढेर
  • save धक्का सभी वी एम-सामग्री की एक प्रतिलिपि (सभी dicts और सरणियों को धक्का, लेकिन नहीं तार) को बचाया राज्य के लिए
  • restore रिवाइंड स्मृति (पहले वाली स्थिति सभी dicts और सरणियों)
वापस लौटने

शब्दकोश, समग्र वस्तुओं होने के नाते, सभी समग्र वस्तुओं के लिए आम तौर पर कई ऑपरेटरों को प्राप्त करते हैं।

  • -typename- वस्तु बनाने, वस्तु
  • put की जैसे dict
  • length रिपोर्ट आकार एक तत्व
  • get सम्मिलित एक तत्व
  • copy पुनः प्राप्त किसी अन्य वस्तु
  • forall से सामग्री के साथ एक वस्तु को पॉप्युलेट प्रत्येक तत्व
  • 0 पर कुछ करें
  • *load वैकल्पिक पुनर्प्राप्ति तत्व (शब्दकोशों के लिए, loadwhere और फिर get के साथ एक खोज करता है; सरणियों के लिए, aload फैल संकार्य स्टैक पर सरणी)
  • *store वैकल्पिक डालने तत्व की सारी सामग्री (शब्दकोशों के लिए, storewhere करके खोज करता है और फिर एक put अगर पाया, या def नहीं तो; सरणियों के लिए, astore भरण स्टैक पर वस्तुओं से सरणी)
इस सूट करने के लिए

, शब्दकोशों वर्तमान शब्दकोश (dict ढेर के शीर्ष में जोड़ने

  • def पुट) 0,123,470 एक तत्व
  • where क्वेरी तत्व
  • maxlength अब दिलचस्प के बाद पी एस स्तर 2 जोड़ा ऑटो का विस्तार एक सरणी में शब्दकोशों और जीसी
  • dictstack dictstack कॉपी (हो सकता है आप चाहते हैं के लिए सभी शब्दकोशों के लिए
  • known क्वेरी शब्दकोश खोज बॉटम-अप, आप कर सकते हैं!)
  • नाम एक स्लैश / से पहले नहीं स्वचालित रूप से load एड और, निष्पादन योग्य है, मार डाला
  • ०१२३२७६०३५९ हैं // जबकि token एक पोस्टस्क्रिप्ट ऑब्जेक्ट का निर्माण कर रहा है, डबल-स्लैश से पहले के किसी भी नाम load एड हैं और प्रक्रिया सरणी में प्रतिस्थापित हैं। यह बहुत शक्तिशाली है, क्योंकि आप लिस्प मैक्रोज़ की नकल कर सकते हैं।

संपादित करें: एक और बात। जब आप शब्दकोश के लिए आकार चुनते हैं तो एक शब्दकोश बनाते समय एक समय/स्थान व्यापार बंद होता है। शब्दकोश लगभग निश्चित रूप से एक हैश-टेबल (सबसे सरल दुभाषिया के रूप में) के रूप में कार्यान्वित किए जाते हैं, और अधिकांश हैश-फ़ंक्शंस टकराव से बच सकते हैं जब तालिका लगभग आधा भरा होता है (अंगूठे का नियम: गति के लिए डबल आकार के डिक का उपयोग करें) । स्तर -2 के बाद से, जब आप आकार + 1 तत्व जोड़ते हैं, तो संभवतया शब्दकोश स्वचालित रूप से बढ़ेगा, संभावित रूप से के * आकार का नया शब्दकोश आवंटित करके (जहां के शायद 1.5 या 2 है); लेकिन मैन्युअल रूप से नियंत्रण आकार आपको गति वृद्धि दे सकता है। स्तर -1 में, यदि आप अपने शब्दकोशों को गुणा नहीं कर रहे हैं, तो आप के लिए errordict में प्रतिस्थापन को स्थापित करने और पुट (या डीफ़ या जो कुछ भी) निष्पादित करने के लिए प्रतिस्थापन स्थापित कर सकते हैं। चूंकि स्तर -2 यह आंतरिक रूप से करता है, यह सभी संदर्भों को प्रतिस्थापित कर सकता है।

+2

बहुत बढ़िया, @luserdroog - आपके स्पष्टीकरण के लिए बहुत धन्यवाद! चीयर्स! – sdaau