2011-09-16 8 views
32

का उपयोग करके पीडीएफ का आकार बदलना मैं एक पीडीएफ स्केल करने की कोशिश कर रहा हूं जो उदाहरण के लिए ए 4 आकार के छोटे आकार के लिए है।घोस्टस्क्रिप्ट

यह पोर्ट्रेट दस्तावेज़ों के साथ ठीक काम करता है। दस्तावेज़ सही ढंग से बढ़ाया गया है और फिर शीर्ष पर पैडिंग जोड़ा जाता है।

परिदृश्य दस्तावेज़ों पर पैडिंग को जोड़ा नहीं गया है। दस्तावेज़ के लिए ए 4 के लिए सही ऊंचाई होने के बाद समाप्त हो जाएगा लेकिन फिर पर्याप्त नहीं है, क्योंकि दस्तावेज़ पक्ष पर पैडिंग नहीं जोड़ा गया है (जैसा कि मैंने आशा की थी)।

gs \ 
-sOutputFile=output.pdf \ 
-sDEVICE=pdfwrite \ 
-sPAPERSIZE=a4 \ 
-dCompatibilityLevel=1.4 \ 
-dNOPAUSE \ 
-dBATCH \ 
-dPDFFitPage \ 
    input.pdf 

उत्तर

7

आपका आदेश किसी भी स्केलिंग नहीं करता है, यह सिर्फ एक पीडीएफ फाइल लेता है और एक PDF फ़ाइल में परिवर्तित कर:

यह है कि मैं क्या ए 4 चित्र दस्तावेजों के लिए काम यह है करने के लिए इस्तेमाल करते हैं।

मैं आपको सुझाव दूंगा कि आप -dPDFFitPage जोड़ने का प्रयास करें जो वर्तमान पृष्ठ आकार से मेल खाने के लिए पीडीएफ फ़ाइल में पृष्ठ को स्केल करेगा (जैसा कि इस मामले में -पैपर्स द्वारा निर्दिष्ट किया गया है)।

आमतौर पर प्रिंटर के साथ काम करने का इरादा होता है जिसमें एक निर्धारित पेपर आकार होता है, और इसलिए पीडीएफराइट डिवाइस के साथ अच्छी तरह से काम नहीं कर सकता है, जिसमें एक निश्चित पृष्ठ आकार नहीं है, लेकिन इसकी कोशिश एक खराब है।

+0

उत्तर के लिए धन्यवाद, मैंने पहले से ही -dPDFFITPAGE तर्क का उपयोग किया है और यह काम नहीं कर रहा है। – Matt

+0

पीडीएफ इनपुट को स्केल करने के तरीके हैं (बदसूरत वाले), लेकिन आमतौर पर इसकी आवश्यकता नहीं होती है। क्या आप देखने के लिए एक उदाहरण फ़ाइल साझा कर सकते हैं? – KenS

+0

@ मैट: मुझे लगता है कि अगर आप '-dFIXEDMEDIA' स्विच जोड़ते हैं तो यह काम करेगा ... –

42

आप -dFIXEDMEDIA स्विच जोड़ना चाहिए:

gs \ 
-o output.pdf \ 
-sDEVICE=pdfwrite \ 
-sPAPERSIZE=a4 \ 
-dFIXEDMEDIA \ 
-dPDFFitPage \ 
-dCompatibilityLevel=1.4 \ 
    input.pdf 

-dFIXEDMEDIA हमेशा आवश्यक होता है यदि आप किसी विशिष्ट कागज/पेज/मीडिया आकार मजबूर और कागज/पेज/मीडिया आकार दस्तावेज़ में निर्दिष्ट की अनदेखी करने की जरूरत है। क्योंकि पीडीएफ में हमेशा एक पेपर/पेज/मीडिया आकार परिभाषित होता है (पोस्टस्क्रिप्ट हो सकता है, या हो सकता है ...)।

(मेरे -o ... कम है और -dBATCH -dNOPAUSE जोड़ने से एक की बचत होती है -। लेकिन केवल Ghostscript के नवीनतम संस्करण के लिए काम करता है)

+3

धन्यवाद, ए 5 और एक-पंक्ति के लिए: 'gs -sDEVICE = pdfwrite -sPAPERSIZE = a5 -dFIXEDMEDIA -dPDFFitPage -dCompatibilityLevel = 1.4 -o out.pdf in.pdf' – Dorian

+1

धन्यवाद , यह काम करता हैं! मैंने ए 3 के साथ प्रयोग किया: 'gs -o outputA3.pdf -sDEVICE = pdfwrite -sPAPERSIZE = a3 -dFIXEDMEDIA -dPDFFitPage -dCompatibilityLevel = 1.4 input.pdf' – Tenaciousd93

+0

इस कमांड के साथ होने वाली भारी गुणवत्ता में कमी को कैसे रोकें? – JohnnyFromBF

-1

यह एक शर्म की बात है यह है कि स्केलिंग के लिए pstops, एक बहुत ही उपयोगी पैकेज की विशेषताओं और पोस्टस्क्रिप्ट के पृष्ठों को संयोजित करना, पीडीएफ के लिए उपलब्ध नहीं प्रतीत होता है। Pdftopdf नामक एक प्रोग्राम है, लेकिन यह करता है (जहां तक ​​मैं देख सकता हूं) वही चीजें जैसे कि पस्टॉप। आप एक पीएस फ़ाइल (मैं evince में फ़ाइल में प्रिंट), pstops, और तो ps2pdf का उपयोग कर सकते हैं, लेकिन यह काफी बेकार है।

5

ऐसा लगता है कि आउटपुट का आकार (सर्वोत्तम) अंक में आकार निर्दिष्ट करके मजबूर किया जा सकता है और -DPDFFitPage का उपयोग नहीं कर सकता है। मुझे आंशिक बिंदु आकार मिल रहा था, जो बुरा था। मांग पर एक प्रिंट का उपयोग कर ए 5 प्रिंटिंग के लिए निम्नलिखित है। "असली" ए 5 420x595 अंक है। मैंने पाया कि -sPAPERSIZE = a5 का उपयोग करके आंशिक बिंदु पृष्ठ आकार दिए गए थे, लेकिन ऐसा हो सकता है क्योंकि मूल जीता गया था।

gs \ 
-o output.pdf \ 
-sDEVICE=pdfwrite \ 
-dDEVICEWIDTHPOINTS=419 -dDEVICEHEIGHTPOINTS=595 \ 
-dFIXEDMEDIA \ 
-dCompatibilityLevel=1.4 \ 
    input.pdf 

आदेश में इस परीक्षण करने के लिए में, मैंने पाया कि PDFshuffler का उपयोग कर रहा व्यक्तिगत पृष्ठों, तो pdfinfo मैं उन पेजों के सटीक आकार प्राप्त करने में सक्षम था के साथ निर्यात करने में सक्षम था। इसने पुष्टि की कि डिवाइस पैरामीटर का उपयोग करके स्पष्ट रूप से मदद मिली है।

3

सबसे पहले, यहां पोस्ट किए गए सभी के लिए धन्यवाद।

मेरे पास pdfScale नामक छोटी सी लिपि है जो यहां पोस्ट किए गए उत्तरों के हिस्सों को अवशोषित करती है। तो मैंने अपने 2 सेंट वापस पोस्ट करने का फैसला किया। मैं कर्ट और टिम के उत्तरों के मिश्रण का थोड़ा सा उपयोग कर रहा हूं। हालांकि टिम के समान ही है।मैं कुछ दिनों के लिए इस के साथ खेला और यहाँ तरीकों यहां पोस्ट पर मेरे आंशिक निष्कर्ष यह है है

सेट कागज -sPAPERSIZE

  • आसान के साथ नाम के आधार पर आकार सिर्फ कागज का नाम (उदाहरण के लिए पारित करने के लिए। ए 4)
  • 100% सही अंक आकार का निर्माण नहीं कर सकते हैं
  • फ्लिप मई लैंडस्केप <> पोर्ट्रेट

PS-अंक -dDEVICEWIDTHPOINTS में सेट पेपर आकार, -dDEVICEHEIGHTPOINTS

  • खुद
  • You need to know the sizes in Points
  • इतना आसान नहीं यकीन है कि आप आकार आप अंक में चाहते
  • आप चौड़ाई < फ्लिप कर सकते हैं> ऊंचाई प्राप्त करता है इसके चारों ओर स्क्रिप्ट करने के लिए, क्योंकि आपको अंक में नए पेज आकार की आवश्यकता होगी और यदि आप लैंडस्केप/पोर्ट्रेट का पता लगाना चाहते हैं तो स्रोत के पेज आकारों की भी आवश्यकता होगी।
  • आप कस्टम परिभाषित कागजात भी सेट कर सकते हैं (किसी भी आकार को आप वास्तव में चाहते हैं)।
  • मैं -dDEVICEWIDTH, -dDEVICEHEIGHT का उपयोग लंबे, बिंदु संस्करण के बजाय कर रहा था, लेकिन वे दोनों एक ही चीज़ (दोनों अंक प्राप्त करते हैं) प्रतीत होते हैं।

क्योंकि मेरी पार्टी स्क्रिप्ट हो रही स्रोत पृष्ठ आकार के पहले से ही सक्षम है और मैं विचार पसंद आया कस्टम पृष्ठ आकार सेट करने के लिए सक्षम होने के लिए, मैं अंक में पृष्ठ आकार की स्थापना पर ध्यान केंद्रित करने का फैसला किया। मैंने अपनी स्क्रिप्ट में नामों और आकारों के साथ पहले से ही GS Paper Sizes भी शामिल किया था। तो वह जानकारी प्राप्त करना भी आसान था।

-dFIXEDMEDIA का उपयोग करना दोनों मामलों पर जरूरी प्रतीत होता है, जैसा कि पहले बताया गया था।

तो यह कि मेरे दृष्टिकोण चला गया है (एक पटकथा तरह से)

  1. प्राप्त स्रोत पीडीएफ पृष्ठ आकार (फ्लिप पता लगाने के लिए)
  2. जाओ अंक में लक्ष्य के पृष्ठ आकार (उदा। ए 4> 595x842)
  3. चेक वे एक ही अभिविन्यास या अंक के साथ लक्ष्य फ्लिप यदि आवश्यक हो तो
  4. भागो जी एस या फ़्लिप अंक

जब मैं ऑटो-रोटेशन समस्या को ठीक करने का प्रयास कर रहा था, I found this other Kurt response। यह -dAutoRotatePages का उपयोग करने के बारे में है। बस यहां अपने उत्तर का एक हिस्सा कॉपी करें:

  • -dAutoRotatePages=/None - प्रत्येक पृष्ठ के अभिविन्यास को बनाए रखता है;
  • -dAutoRotatePages=/All - "बहुमत निर्णय" के आधार पर सभी पृष्ठों (या कोई नहीं) को घुमाता है;
  • -dAutoRotatePages=/PageByPage - अलग-अलग पृष्ठों को स्वत: घुमाता है।

मेरी स्क्रिप्ट PageByPage पर डिफ़ॉल्ट है लेकिन यह समायोज्य है। यह मेरे परीक्षणों में अच्छी तरह से काम किया। -dAutoRotatePages का उपयोग पृष्ठ आकार को पूर्व-फ़्लिप करने की आवश्यकता को कम करने के लिए प्रतीत होता है, भले ही यह वही बात न हो। मैंने दोनों विकल्प रखे।

मेरा छोटा ऐप मूल रूप से पीडीएफ स्केल करने के लिए बनाया गया था (पेज आकार को बदले बिना)। तब मैंने अब एक या दूसरे को करने की कार्यक्षमता को जोड़ा। हालांकि मैं अभी भी एक ही जीएस कॉल में ऐसा नहीं कर सका।

यही वह है जिसे मैं आकार बदलने के लिए बुला रहा हूं, वास्तविक मूल्यों में चर बदल रहा हूं। यह PageByPage ऑटो रोटेशन के साथ ए 4 पोर्ट्रेट आकार के लिए है:

gs \ 
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \ 
-dCompatibilityLevel="1.5" -dPDFSETTINGS="/printer" \ 
-dColorConversionStrategy=/LeaveColorUnchanged \ 
-dSubsetFonts=true -dEmbedAllFonts=true \ 
-dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842 \ 
-dAutoRotatePages='/PageByPage' \ 
-dFIXEDMEDIA -dPDFFitPage \ 
-sOutputFile='../myOutputFile.pdf' \ 
-f '../input.pdf' 

कृपया ध्यान दें कि मैं भी -dFIXEDMEDIA और -dPDFFitPage उपयोग कर रहा हूँ। चूंकि यह फ़िट-टू-पेज है, मेरी स्क्रिप्ट का दूसरा भाग आकार बदलने के बाद पीडीएफ के अंदर सामग्री को स्केल करने के लिए आसान हो सकता है (विशेष रूप से यदि पीडीएफ का अनुपात बहुत बदल गया है)। और यही कारण है कि मैं हमेशा अपनी स्क्रिप्ट (मिश्रित मोड में) में आकार बदलने के बाद स्केलिंग चलाता हूं।

पेपर नाम का उपयोग करते समय अंश की समस्याओं के बारे में, मैं एमएम/इंच से अंक तक रूपांतरण को गोल करने से पहले मेरे साथ ऐसा कर रहा था। जब मैंने उन्हें गोल करना शुरू किया, तो वे हमेशा एक की जरूरत महसूस करते हैं। अजीब लगता है कि जीएस हालांकि उन मूल्यों को मंजिल करेगा।

तो मेरा निष्कर्ष यह है कि कठिन हिस्सा बोर्ड को विभिन्न आकारों और उन्मुखताओं के साथ विभिन्न दस्तावेजों पर काम करने के लिए एक समाधान ढूंढना है। मुझे अभी भी यकीन नहीं है कि मैं उचित समाधान का उपयोग कर रहा हूं। लेकिन उपयोगकर्ता को फ्लिप डिटेक्शन और जीएस ऑटो-रोटेशन बदलने की अनुमति देकर मुझे कम से कम ज्यादातर मामलों का समाधान होने की उम्मीद है।

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

https://github.com/tavinus/pdfScale

पुनश्च: pdfScale अपनी मूल on this StackOverflow thread है।

संबंधित मुद्दे

 संबंधित मुद्दे