2012-09-03 14 views
8

के प्रत्येक पृष्ठ पर वॉटरमार्क जोड़ने के लिए क्या यह संभव है मैं पीडीएफ कन्वर्ट -> कई जेपीईजी और कई जेपीईजी -> कई पीडीएफghostscript का उपयोग कर। मुझे प्रत्येक रूपांतरित जेपीईजी (पीडीएफ) पृष्ठ पर वॉटरमार्क टेक्स्ट जोड़ने की जरूरत है। क्या यह केवल घोस्टस्क्रिप्ट और पोस्टस्क्रिप्ट का उपयोग कर संभव है?Ghostscript पीडीएफ

एक ही रास्ता मैंने पाया:

gswin32c -q -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -sOutputFile=output.pdf watermark.ps input.pdf

लेकिन इस output.pdf में पहली अलग पृष्ठ पर watermark.ps वॉटरमार्क डाल देंगे।

क्या मैं इसे आउटपुट पीडीएफ पृष्ठों पर सीधे कर सकता हूं?

क्या मैं इसे आउटपुट जेपीईजी पृष्ठों पर सीधे कर सकता हूं?

<< 
    /BeginPage 
    { gsave 
     /Helvetica_Bold 120 selectfont 
     .85 setgray 130 70 moveto 50 rotate (Sample) show 
    grestore 
    } bind 
>> setpagedevice 

अगर मैं /EndPage/BeginPage के बजाय का उपयोग करें - यह कहते setpagedevice लागू नहीं है ...

कैसे /EndPage के लिए इस स्क्रिप्ट का रीमेक बनाने?

उत्तर

8

बिट भी एक टिप्पणी के लिए बड़ी अनुमति देता है।, तो मैं एक जोड़ दिया है नया उत्तर। एंडपेज प्रक्रिया (पोस्टस्क्रिप्ट भाषा संदर्भ मैनुअल के पृष्ठ 441 देखें) स्टैक पर दो अतिरिक्त पैरामीटर लेते हैं, एक गिनती अब तक उत्सर्जित पृष्ठों का, और एक कारण कोड।

आप डुप्लेक्सिंग जैसी दिलचस्प चीजें करने के लिए पृष्ठों की गिनती का उपयोग कर सकते हैं, या केवल पृष्ठों या जो कुछ भी चिह्नित कर सकते हैं, लेकिन मुझे लगता है कि इस मामले में आप इसे नहीं चाहते हैं, तो आप इसे स्टैक से 'पॉप' करें।

कारण कोड आपको बताता है कि पृष्ठ क्यों उत्सर्जित किया जा रहा है, फिर शायद आपको परवाह नहीं है ताकि आप केवल मूल्य को पॉप कर सकें।

अंत में EndPage कह या नहीं, पेज संचारित करने के लिए दुभाषिया के लिए एक बूलियन मान लौटाना चाहिए (इससे आप केवल पहले 10 पृष्ठों मुद्रण और इतने पर की तरह, अन्य रोचक काम करने की अनुमति देता है)।

तो आपको शुरुआत में दो मानों को हटाने, अपने कोड को निष्पादित करने और बूलियन लौटने की आवश्यकता है। बहुत छोटा:

<< 
    /EndPage 
    { pop pop %% *BEFORE* gsave as that puts a gsave object on the stack 
    gsave 
    /Helvetica_Bold 120 selectfont 
    .85 setgray 130 70 moveto 50 rotate (Sample) show 
    grestore 
    true %% transmit the page, set to false to not transmit the page 
    } bind 
>> setpagedevice 
+0

यह लगभग सही है, प्रत्येक असली वॉटरमार्क पेज के अलावा इसे वॉटरमार्क और आउटपुट पीडीएफ के साथ खाली पृष्ठ भी जोड़ता है, जिसमें दो बार पेज अधिक होते हैं। – radistao

+0

संभावित रूप से 'कारण' कोड समस्या है। इस प्रयास करें:/EndPage {Exch पॉप 2 लीटर {gsave ... grestore सच} {} झूठी ifelse} बाँध – KenS

+0

मैंने किया था यह: ** << /EndPage {Exch पॉप 2 यदि {gsave /Helvetica_Bold 120 selectfont .85 setgray 130 70 moveto 50 घुमाएँ (नमूना) दिखाने grestore सच } {} झूठी ifelse} बाँध >> setpagedevice ** और यह कारण त्रुटि: 'त्रुटि: में/typecheck -। एंडपेज - ''ऑपरेंड स्टैक: - नोस्ट्रिंगवल - 2 2 2' – radistao

1

मुझे नहीं पता कि आप 'सीधे' से क्या मतलब रखते हैं। जैसा कि आपने पाया है, पोस्टस्क्रिप्ट दुभाषिया के पास प्रति पृष्ठ आधार पर कई प्रकार की चीजें होती हैं। पोस्टस्क्रिप्ट सभी के बाद एक प्रोग्रामिंग भाषा है।

मैं सुझाव दूंगा कि पेज डिवाइस डिक्शनरी में/BeginPage और/या/EndPage प्रक्रियाएं शुरू होने वाली जगह होगी। ये आपको प्रत्येक पृष्ठ की शुरुआत या अंत में मनमाने ढंग से पोस्टस्क्रिप्ट निष्पादित करने की अनुमति देते हैं।

आप तो एक/BeginPage प्रक्रिया को परिभाषित अगर यह इनपुट कार्यक्रम से किसी भी अंकन संचालन से पहले निष्पादित किया जाएगा यदि आप एक/EndPage तो बताएं कि वह (पर के बाद इनपुट कार्यक्रम से अंकन संचालन निष्पादित किया जाएगा पेज आधार (द्वारा एक पेज।

यह आप अपने खुद के निशान 'पर' कार्यक्रम से निशान 'के अंतर्गत' झूठ या के लिए

+0

मैंने कोड उदाहरण के साथ प्रश्न अपडेट किया है। क्या आप एक नज़र देख सकते हैं? – radistao

3

स्वीकृत उत्तर मेरे लिए पेज डालने वाला था। पेज वॉटरमार्क से अलग थे।मैं निम्नलिखित साइट है कि मुझे सही दिशा

http://habjan.blogspot.com/2013/10/how-to-programmatically-add-watermark.html

यहाँ जहां ऊपर फ़ाइल के रूप में सहेजा गया है बुला वाक्य रचना है में बताया पाया तुम यहाँ

<< 
    /EndPage 
    { 
    2 eq { pop false } 
    { 
     gsave  
     /Helvetica_Bold 120 selectfont 
     .85 setgray 130 70 moveto 50 rotate (Sample) show 
     grestore 
     true 
    } ifelse 
    } bind 
>> setpagedevice 

2eq बिट जोड़ने इस कोशिश करना पड़े watermark.ps और gswin32c ghostscript exe

gswin32c -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=watermarked.pdf watermark.ps original.pdf 
+0

यह वास्तव में काम करता है! –