2012-05-04 21 views
6

मैं प्रिंटिंग के लिए पीडीएफ दस्तावेज़ों को पीडीएफ दस्तावेजों में परिवर्तित करने के लिए घोस्टस्क्रिप्ट का उपयोग करता हूं। हाल ही में मेरे पास अतिरिक्त आवश्यकता है कि प्रिंटिंग से पहले सभी पृष्ठों को पोर्ट्रेट में घुमाया जाना चाहिए। मुझे निम्न आदेश और पोस्टस्क्रिप्ट फ़ंक्शन के साथ Ghostscript का उपयोग करके ऐसा करने का एक तरीका मिला है।घोस्टस्क्रिप्ट पृष्ठों को घुमाएं

"C:\Program Files (x86)\gs\bin\gswin32c.exe" "-dNOPAUSE" "-dNOPROMPT" "-dBATCH" "-sDEVICE=pxlmono" "-Ic:\Program Files (x86)\gs\fonts\;c:\Program Files (x86)\gs\lib\;c:\Program Files (x86)\gs\lib\;" "-r300" "-sOutputFile=C:\EXPORTFILE_e542e04f-5e84-4c8e-9b41-55480cd5ec52.cache" "rotate612x792.ps" "C:\EXPORTFILE_3a5de9da-d9ca-4562-8cb6-10fb8715385a.cache" 

rotate612x792.ps

%! Rotate Pages 
<< /Policies << /PageSize 5 >> 
    /PageSize [612 792] 
    /InputAttributes currentpagedevice 
    /InputAttributes get mark exch {1 index /Priority eq not {pop << /PageSize [612 792] >>} if } forall >> 
    >> setpagedevice 

समस्या की सामग्री इस समारोह पत्र आकार के साथ सभी पृष्ठ आकार को बदल देता है। मेरे दस्तावेज़ कभी-कभी कानूनी या ए 4 होते हैं। मैंने लैंडस्केप आकार को अपने पोर्ट्रेट समकक्ष के साथ बदलने के लिए इस फ़ंक्शन को संशोधित करने का प्रयास किया है, लेकिन फ़ंक्शनिंग पोस्टस्क्रिप्ट तैयार करने में सक्षम नहीं है। मुझे निम्नलिखित छद्म कोड के समकक्ष पोस्टस्क्रिप्ट का उत्पादन करने के लिए सही दिशा में इंगित करने की आवश्यकता है।

for(each page) 
{ 
    if(PageSize == [792 612]) 
     PageSize = [612 792]; 
} 

मुझे पता है घूर्णन पृष्ठों का गैर Ghostscript तरीके हैं कि कर रहा हूँ, लेकिन अगर मैं मिल सकता है इस यह मेरी प्रक्रिया में अच्छी तरह से फिट हैं काम करने के लिए और प्रदर्शन को कम नहीं होता। Sample1.pdf

उत्तर

2

मुझे एक व्यावहारिक समाधान मिला। जैसा कि मैंने आशा की थी, यह बहुमुखी नहीं है, लेकिन यह मेरी सभी आवश्यकताओं को हिट करता है।

निम्नलिखित पोस्टस्क्रिप्ट स्क्रिप्ट पोर्ट्रेट को ए 4, पत्र और कानूनी दस्तावेज़ घुमाएगी। इसे अन्य पेज आकार करने के लिए न्यूनतम और अधिकतम आकार समायोजित करें।

%!PS 
    % Sequence to set up for a single page size, auto fit all pages. 
    % Autorotate A4 Letter and Legal page sizes to Portrait 
    << /Policies << /PageSize 3 >> 
    /InputAttributes currentpagedevice /InputAttributes get %current dict 
    dup { pop 1 index exch undef } forall % remove all page sizes 
    dup 0 << /PageSize [ 595 0 612 99999 ] >> put % [ min-w min-h max-w max-h ] 
    >> setpagedevice 

यह पोस्टस्क्रिप्ट स्क्रिप्ट लैंडस्केप में ए 4, पत्र और कानूनी दस्तावेज़ घुमाएगी। केवल अंतर ही न्यूनतम/अधिकतम पृष्ठ आकार मान है।

%!PS 
    % Sequence to set up for a single page size, auto fit all pages. 
    % Autorotate A4 Letter and Legal page sizes to Landscape 
    << /Policies << /PageSize 3 >> 
    /InputAttributes currentpagedevice /InputAttributes get %current dict 
    dup { pop 1 index exch undef } forall % remove all page sizes 
    dup 0 << /PageSize [ 0 595 99999 612 ] >> put % [ min-w min-h max-w max-h ] 
    >> setpagedevice 

यह समाधान मैं hylafax परियोजना के लिए स्रोत कोड में पाया auto-rotate.ps फ़ाइल बंद आधारित है। प्रतीत होता है कि यह परियोजना बीएसडी के तहत लाइसेंस प्राप्त है।

4

पोस्टस्क्रिप्ट, एक प्रोग्रामिंग भाषा है तो आप इसके साथ बहुत कुछ कर सकते:

यहाँ मेरी पीडीएफ फ़ाइलों में से एक का एक नमूना है। आपको यहां क्या करना है पृष्ठ आकार के अनुरोध की कार्रवाई को फिर से परिभाषित करना है। पृष्ठ आकार और सामग्री पोस्टस्क्रिप्ट में अलग कर रहे हैं, तो आप 2 काम करने होंगे:

1) चित्र

2) करने के लिए परिदृश्य से मीडिया अनुरोध परिवर्तन पेज

सरल की सामग्री के बारी बारी से ऐसा करने का तरीका 'setpagedevice' ऑपरेटर को फिर से परिभाषित करना है। यहाँ एक उदाहरण है:

/oldsetpagedevice /setpagedevice load def %% copy original definition 

/setpagedevice { 
    dup /PageSize known {     %% Do we have a page size redefinition ? 
    dup /PageSize get      %% get the array if so 
    aload pop        %% get elements remove array copy 
    gt {         %% is width > height ? 
     dup /PageSize get aload    %% get size array, put content on stack 
     3 1 roll       %% roll stack to put array at back 
     exch        %% swap width and height 
     3 -1 roll       %% bring array back to front of stack 
     astore        %% put swapped elements into array 
     /PageSize exch      %% put key on stack and swap with value 
     2 index        %% copy the original dict 
     3 1 roll       %% move dict to back of stack 
     put         %% put new page size array in dict 
     90 rotate       %% rotate content 90 degrees anti-clockwise 
    } if 
    } if 
    oldsetpagedevice      %% call the original definition 
} bind def 

यह जाँच करता है विन्यास बदलाव करता है, तो पृष्ठ आकार बदल रहा है अगर यह यह नया आकार हो जाता है, और देखने के लिए लग रहा है देखने के लिए, अगर चौड़ाई> ऊंचाई (परिदृश्य का एक सरल परिभाषा)। यदि यह सत्य है तो यह चौड़ाई और ऊंचाई को स्वैप करके अनुरोध को बदल देता है, और फिर पेज सामग्री को 90 डिग्री तक घुमाता है।

आप उपरोक्त सामग्री (जैसे prolog.ps) एक फ़ाइल में डालने और फिर अपने खुद के काम से पहले उस फ़ाइल चलाकर Ghostscript के साथ इस का उपयोग कर सकते हैं:

gs ...... काम prolog.ps। पीएस

मैंने यह कोशिश की है, लेकिन एक लैंडस्केप फ़ाइल के साथ नहीं, क्योंकि मेरे पास हाथ नहीं था। ध्यान दें कि पोस्टस्क्रिप्ट प्रोग्राम बनाना संभव है जो इसे पराजित करेगा।

+0

मैंने इस स्क्रिप्ट की कोशिश की और इससे कोई त्रुटि उत्पन्न नहीं हुई, लेकिन यह पृष्ठों को घुमा नहीं गया। इनपुट इनपुट पीडीएफ फ़ाइल का नमूना यहां दिया गया है। [https://docs.google.com/open?id=0B2LzHaZ9pUynWXc2X0J3M0RvN28 ](https://docs.google.com/open?id=0B2LzHaZ9pUynWXc2X0J3M0RvN28) – Zig158

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