2011-06-10 6 views
7

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

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

#!/usr/bin/env python 
import copy, sys 
from pyPdf import PdfFileWriter, PdfFileReader 
input = PdfFileReader(sys.stdin) 
output = PdfFileWriter() 

for i in range(0,input.getNumPages(),2): 
    p = input.getPage(i) 
    q = copy.copy(p) 
    r = copy.copy(p) 
    s = copy.copy(p) 
    t = copy.copy(p) 
    u = copy.copy(p) 
    (x, y) = p.mediaBox.lowerLeft 
    (w, h) = p.mediaBox.upperRight 

    p.mediaBox.lowerLeft = (x, 2 * h/3) 
    p.mediaBox.upperRight = (w/2, h) 

    q.mediaBox.lowerLeft = (w/2, 2 * h/3) 
    q.mediaBox.upperRight = (w, h) 

    r.mediaBox.lowerLeft = (x, h/3) 
    r.mediaBox.upperRight = (w/2, 2 * h/3) 

    s.mediaBox.lowerLeft = (w/2, h/3) 
    s.mediaBox.upperRight = (w, 2 * h/3) 

    t.mediaBox.lowerLeft = (x, y) 
    t.mediaBox.upperRight = (w/2, h/3) 

    u.mediaBox.lowerLeft = (w/2, y) 
    u.mediaBox.upperRight = (w, h/3) 

    a = input.getPage(i+1) 
    b = copy.copy(a) 
    c = copy.copy(a) 
    d = copy.copy(a) 
    e = copy.copy(a) 
    f = copy.copy(a) 
    (x, y) = a.mediaBox.lowerLeft 
    (w, h) = a.mediaBox.upperRight 

    a.mediaBox.lowerLeft = (x, 2 * h/3) 
    a.mediaBox.upperRight = (w/2, h) 

    b.mediaBox.lowerLeft = (w/2, 2 * h/3) 
    b.mediaBox.upperRight = (w, h) 

    c.mediaBox.lowerLeft = (x, h/3) 
    c.mediaBox.upperRight = (w/2, 2 * h/3) 

    d.mediaBox.lowerLeft = (w/2, h/3) 
    d.mediaBox.upperRight = (w, 2 * h/3) 

    e.mediaBox.lowerLeft = (x, y) 
    e.mediaBox.upperRight = (w/2, h/3) 

    f.mediaBox.lowerLeft = (w/2, y) 
    f.mediaBox.upperRight = (w, h/3) 

    output.addPage(p) 
    output.addPage(b) 
    output.addPage(q) 
    output.addPage(a) 
    output.addPage(r) 
    output.addPage(d) 
    output.addPage(s) 
    output.addPage(c) 
    output.addPage(t) 
    output.addPage(f) 
    output.addPage(u) 
    output.addPage(e) 

output.write(sys.stdout) 

फिर मैं रिक्त पृष्ठों को हटाने के लिए निम्न स्क्रिप्ट का उपयोग करता हूं।

#!/usr/bin/env python 
import copy, sys 
from pyPdf import PdfFileWriter, PdfFileReader 
input = PdfFileReader(sys.stdin) 
output = PdfFileWriter() 

for i in range(0,input.getNumPages()): 
    p = input.getPage(i) 

    text = p.extractText() 

    if (len(text) > 10): 
     output.addPage(p) 

output.write(sys.stdout) 

समस्या यह प्रतीत होती है कि पृष्ठों को स्पष्ट रूप से फसल कर दिया गया है, पाठ ड्रा आदेश अभी भी वहां हैं। इनमें से कोई भी पृष्ठ स्कैन नहीं किया गया है, इसलिए यदि वे खाली हैं, तो वे वास्तव में खाली हैं। क्या किसी के पास कुछ ऐसे विचार हैं जो मैं अलग-अलग कर सकता हूं या संभवतः रिक्त पृष्ठों को हटाने के लिए एक पूरी तरह से अलग दृष्टिकोण कर सकता हूं? मेरे द्वारा किसी भी सहायता की वास्तव में सराहना की जाएगी।

+1

अपडेट: यदि मैं एक्रोबैट में पहली स्क्रिप्ट का परिणाम खोलता हूं और फिर 'सेव करें ...' का उपयोग करता हूं, तो यह फ़ाइल को ग्राउंड अप से पुनर्निर्माण करता है। फिर जब मैं दूसरी स्क्रिप्ट चलाता हूं तो यह वैसे ही काम करता है जिस तरह से मैं चाहता हूं। मुझे उस स्क्रिप्ट में उपयोग करने के लिए 'सेव ...' में एक्रोबैट की प्रक्रिया को स्क्रिप्ट करने का एक तरीका चाहिए, जिसे एक्रोबैट की आवश्यकता नहीं होती है। – rpeck1682

+0

यह वास्तव में एक उत्तर नहीं है, इसलिए मैं इसे एक टिप्पणी के रूप में पोस्ट करूंगा। एक बार आईओएस ऐप में पूरी चीज डालने की जरूरत थी। मैंने अंत में रिक्त पृष्ठों की संख्या की पहचान करने के लिए सेटिंग के साथ मूल पीडीएफ के उपयुक्त क्षेत्रों को चित्रित करने का सहारा लिया। यह आदर्श नहीं है, लेकिन यह काम करता है। – rpeck1682

उत्तर

5

PdfFileReader एक विधि, getPage(self, page number) है कि एक वस्तु, PageObject देता है, बदले में एक विधि getContents, जो None वापस आ जाएगी अगर पेज खाली है गई है। तो, अपने पीडीएफ ऑब्जेक्ट के साथ, getNumPages(), if getPage(i).getContents(): के साथ पुनरावृत्त, आउटपुट के लिए पृष्ठ संख्याओं की सूची में हिट एकत्रित करें।

+0

धन्यवाद! मैं स्पष्ट रूप से pyPdf की एक प्रति का उपयोग कर रहा था जो कि कुछ साल पुराना था और getContents() विधि नहीं थी। मैंने इस समाधान का परीक्षण नहीं किया है क्योंकि मैंने मूल पोस्ट (एक समाधान नहीं, एक पूरी तरह से अलग मार्ग) पर एक टिप्पणी में वर्णित मार्ग लिया था। अगर मुझे कभी भी इस पर वापस लौटने की ज़रूरत है, तो मैं getContents() को शुरुआती बिंदु के रूप में उपयोग करूंगा। – rpeck1682