घोस्टस्क्रिप्ट का उपयोग करें, लेकिन इसे छवियों को पुनरावृत्ति न करने के लिए कहें?


30

मेरे पास एक पीडीएफ है जो पहले से ही संपीड़ित है और कुछ हद तक विरूपण साक्ष्य-चित्र हैं, और मैं उस पीडीएफ में एक शीर्षक पृष्ठ को प्रस्तुत करने के लिए घोस्टस्क्रिप्ट का उपयोग कर रहा हूं।

हालाँकि, मुझे जीएस को यह बताने का कोई तरीका नहीं मिल रहा है कि मौजूदा छवियों का उपयोग करें-जैसा कि उन्हें पुन: प्रस्तुत किए बिना किया गया है, और अब मुझे लग रहा है कि यह जीएस कैसे काम करता है, यानी आप पीडीएफ को फिर से लिंक / लिंक नहीं कर सकते। अपनी छवियों को पुन: प्रस्तुत किए बिना .. क्या यह सच है?

मैं जीएसआई में डीपीआई सेटिंग बढ़ा सकता हूं, लेकिन यह 5 एमबी से 60 एमबी तक जाएगा, जबकि अभी भी खराब दिख रहा है।

क्या जीएस के लिए कोई बेहतर विकल्प है जो मुझे आवश्यकता होगी (जो कि ओएस एक्स पर संकलन करेगा)?


क्या आप अपना प्रश्न संपादित कर सकते हैं और अपने शीर्षक पृष्ठ को मूल पीडीएफ में प्रस्तुत करने के लिए आपके द्वारा उपयोग की जा रही सटीक कमांडलाइन को उद्धृत कर सकते हैं? फिर मैं आपको बता सकता हूं कि छवियों के लिए बेहतर आउटपुट प्राप्त करने के लिए कमांडलाइन में क्या बदलाव करना है या जोड़ना है ...
कर्ट फ़िफेले

मैं सिर्फ बेहतर दिखना नहीं चाहता, मैं बिना पुनरावृत्ति के विलय करना चाहता हूं। यह बेहतर गुणवत्ता (दोषरहित रूपांतरण), और बी) सीपीयू के समय को बर्बाद नहीं करेगा जिसका परिणाम मेरे 1000+ पृष्ठ दस्तावेज़ को संसाधित करेगा।
महमूद अल-कुद्सी

1
अरे, आपने मेरे प्रश्न का उत्तर नहीं दिया और आपने जिस जीएस कमांड का उपयोग कर रहे हैं, उसका सटीक उद्धरण नहीं दिया। जिसका अर्थ है: आप जीएस के बारे में सहायता प्राप्त नहीं कर रहे हैं ...
कर्ट फ़िफ़ल

जवाबों:


44

यदि आप केवल दो पीडीएफ फाइलों को बिना किसी सामग्री के पुनर्संसाधन के रूप में बदलना चाहते हैं, तो pdftkयह आपके लिए है। (Mac OS X पर यह MacPorts या Fink के माध्यम से उपलब्ध होना चाहिए, लिनक्स के लिए, सभी प्रमुख वितरणों के लिए देशी पैकेज हैं; Windows के लिए, यहां देखें। ) यह कोशिश करें:

 pdftk title.pdf content.pdf cat output book.pdf

यह content.pdf शीर्षक शीर्षक को आगे बढ़ाएगा और परिणाम को book.pdf में लिखेगा

pdftkएक "गूंगा" है, लेकिन दो (या अधिक) पीडीएफ फाइलों को संक्षिप्त करने का बहुत तेज़ तरीका है। "डंब" अभी तक, जैसा कि पीडीएफ डेटा स्ट्रीम की pdftkकिसी भी तरह से व्याख्या नहीं करता है, यह सिर्फ यह सुनिश्चित करता है कि आंतरिक ऑब्जेक्ट संख्या आवश्यकतानुसार फिर से फेरबदल की जाए और पीडीएफ xrefसंरचना में दिखाई दे (जो मूल रूप से एक प्रकार का पीडीएफ टूसी है) वस्तुओं)।

Ghostscript:

यदि आप घोस्टस्क्रिप्ट का उपयोग करना चाहते हैं, तो एक ही दो फाइलों को संक्षिप्त करने के लिए मूल कमांड होगी:

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
   title.pdf \
   content.pdf

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

इसलिए नई किताब बनाने के लिए घोस्टस्क्रिप्ट की विधि। Pdf 'मेथड' की तुलना में बहुत अधिक "बुद्धिमान" (लेकिन बहुत धीमी है) है pdftk(यह भी कारण है कि कई मामलों में घोस्टस्क्रिप्ट कई सीमाओं में सक्षम है - "मरम्मत" b0rken पीडीएफ फाइलें, या आउटपुट पीडीएफ में फोंट एम्बेड करने के लिए जो इनपुट पीडीएफ में एम्बेडेड नहीं हैं, या डुप्लिकेट छवियों को हटाने के लिए, प्रतिस्थापित कर रहे हैं उन्हें केवल संदर्भों द्वारा, आदि - और समग्र रूप से छोटे, बेहतर अनुकूलित फ़ाइलों से फूला हुआ इनपुट PDFs ...)

इसका मतलब यह है कि घोस्टस्क्रिप्ट अपनी डिफॉल्ट का उपयोग न करें: कमांड लाइन में अधिक कस्टम पैरामीटर जोड़कर।

इसका क्या मतलब है "घोस्टस्क्रिप्ट '' अपने पीडीएफ इनपुट" की व्याख्या करता है ?

फ़ाइल और उसकी सामग्री (ऑब्जेक्ट्स, स्ट्रीम, फोंट, इमेज, ...) के सभी को उसके पीडीएफ ऑब्जेक्ट्स के साथ फिर से परिणामित पीडीएफ को थूकने से पहले, अपने स्वयं के आंतरिक प्रतिनिधित्व में पढ़ा, जांचा और धारण किया जाता है। हालांकि, जब 'बाहर थूकना' होता है, तो घोस्टस्क्रिप्ट अपनी सभी आंतरिक डिफ़ॉल्ट सेटिंग्स को सैकड़ों मापदंडों [*] के लिए लागू करेगा, जो वहां उपलब्ध हैं।

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

JPEG2000 छवियों को JPEG एन्कोडिंग में फिर से एनकोड करने के लिए घोस्टस्क्रिप्ट की आवश्यकता (लाइसेंसिंग मुद्दों के कारण) के कारण आपकी छवि समस्याएं हो सकती हैं। यदि आप इससे बचना चाहते हैं, तो अपनी कमांडलाइन में निम्नलिखित जोड़ें:

-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \

शामिल करने के लिए विचार करने के लिए अन्य छवि से संबंधित कमांडलाइन विकल्प हैं:

-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \

तो पूरी भूतहा कमांडलाइन जो आपको खुश कर सकती है उसे पढ़ना चाहिए:

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dDownsampleMonoImages=false \
  -dDownsampleGrayImages=false \
  -dDownsampleColorImages=false \
  -dAutoFilterColorImages=false \
  -dAutoFilterGrayImages=false \
  -dColorImageFilter=/FlateEncode \
  -dGrayImageFilter=/FlateEncode \
   title.pdf \
   content.pdf

आप इस कमांडलाइन का उपयोग करके भूत पीडीएफ को आउटपुट पीडीएफ में छवियों को संपीड़ित करने के लिए नहीं कह सकते हैं :

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dEncodeColorImages=false \
  -dEncodeGrayImages=false \
  -dEncodeMonoImages=false \
   title.pdf \
   content.pdf


[*]:
यदि आप डिफ़ॉल्ट सेटिंग्स की पूरी सूची के बारे में जानना चाहते हैं, जो घोस्टस्क्रिप्ट के पीडीएफ़राइट डिवाइस का उपयोग कर रहा है , तो निम्न कमांड चलाएँ। यह आपको पूरी सूची लौटाता है :

 gs \
   -sDEVICE=pdfwrite \
   -o /dev/null \
   -c "currentpagedevice { exch ==only ( ) print == } forall"

इन सभी मापदंडों का क्या मतलब है, इसके बारे में स्पष्टीकरण के लिए, आपको "डिस्टिलर पैरामीटर्स" के बारे में एडोब प्रलेखन में पढ़ना होगा । भूतनी इन सभी की नकल करने की बहुत कोशिश करती है ...


3
(FYI) मेरे मामले में, झंडे dEncodeColorImages, dEncodeGrayImages, dEncodeMonoImagesआउटपुट फ़ाइल कारण एक बहुत अधिक बड़े पैमाने पर बन जाते हैं। उन्हें हटाकर, फ़ाइल का आकार 22 एमबी से 3.1 एमबी में बदल गया और छवि गुणवत्ता इन झंडे का उपयोग करने के साथ ठीक लगता है। सभी अद्वितीय मैं के साथ झंडे उपयोग कर रहे हैं: dColorConversionStrategy=/LeaveColorUnchanged, dDownsampleMonoImages=false, dDownsampleGrayImages=false, dDownsampleColorImages=false, dAutoFilterColorImages=false, dAutoFilterGrayImages=false, dColorImageFilter=/FlateEncode,dGrayImageFilter=/FlateEncode
डोर

@ कर्ट फ़िफ़ल को किन विकल्पों की अनुमति है -dColorImageFilter? मैं केवल प्राप्त कर सकते हैं FlateEncodeऔर DCTEncode। DCT को लगता है JPEG (उन्होंने ऐसा क्यों एन्क्रिप्ट किया?)। मुझे लगता है कि LZW पर बेल लैब्स पेटेंट के बाद अब FLATE छवियों के लिए एक पुराना विकल्प है, अब कोई समस्या नहीं है? हालाँकि, काफी समय बिताने के बाद, मुझे पता नहीं चला कि मैं पीएनजी (या कुछ और) का उपयोग कैसे कर सकता हूं ... मेरी मूल छवियां पीएनजी हैं और मैं चाहता हूं कि वे अपरिवर्तित रहें। मैंने -c विकल्प की कोशिश की, लेकिन यह मुझे देता है -c can only be used in a built with POSTSCRIPT included....
लुई सोमरस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.