2015-01-28 7 views
8

पायथन में मैं इस संदेश के नीचे दिए गए कोड के साथ पीडीएफ से पाठ पढ़ने के लिए pdfminer का उपयोग कर रहा हूं। जब मैं के साथ एक्रोबेट प्रो इस पीडीएफ खोलने यह पता चला है कि यह (या "संरक्षित पढ़ें") सुरक्षित हैपायथन में "सुरक्षित" (पढ़ा गया) पीडीएफ अनलॉक कैसे करें?

File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdfpage.py", line 124, in get_pages 
    raise PDFTextExtractionNotAllowed('Text extraction is not allowed: %r' % fp) 
PDFTextExtractionNotAllowed: Text extraction is not allowed: <cStringIO.StringO object at 0x7f79137a1 
ab0> 

: मैं अब कह एक त्रुटि संदेश मिलता है। this link तथापि से, मैंने पढ़ा है वहाँ जो उदाहरण pdfunlock.com। जब pdfminer के स्रोत में डाइविंग, मुझे लगता है कि त्रुटि ऊपर these lines पर उत्पन्न होता है।

if check_extractable and not doc.is_extractable: 
    raise PDFTextExtractionNotAllowed('Text extraction is not allowed: %r' % fp) 
के लिए आसानी से इस पढ़ने के लिए सुरक्षा निष्क्रिय कर सकते हैं (सेवाओं की एक भीड़ है कि

चूंकि ऐसी कई सेवाएं हैं जो एक सेकंड के भीतर इस पठन-सुरक्षा को अक्षम कर सकती हैं, मुझे लगता है कि यह करना वास्तव में आसान है। ऐसा लगता है कि .is_extractabledoc की एक साधारण विशेषता है, लेकिन मुझे नहीं लगता कि यह उतना आसान है .is_extractable को सही में बदल रहा है ..

क्या कोई जानता है कि मैं कैसे पढ़ा समर्थक को अक्षम कर सकता हूं पायथन का उपयोग कर एक पीडीएफ पर tection? सभी सुझावों का स्वागत है!

============================================== ==

नीचे आपको वह कोड मिलेगा जिसके साथ मैं वर्तमान में गैर-संरक्षित संरक्षित से टेक्स्ट निकालता हूं।

def getTextFromPDF(rawFile): 
    resourceManager = PDFResourceManager(caching=True) 
    outfp = StringIO() 
    device = TextConverter(resourceManager, outfp, codec='utf-8', laparams=LAParams(), imagewriter=None) 
    interpreter = PDFPageInterpreter(resourceManager, device) 

    fileData = StringIO() 
    fileData.write(rawFile) 
    for page in PDFPage.get_pages(fileData, set(), maxpages=0, caching=True, check_extractable=True): 
     interpreter.process_page(page) 
    fileData.close() 
    device.close() 

    result = outfp.getvalue() 

    outfp.close() 
    return result 
+0

क्या आपने सही करने के लिए .is_extractable बदलने की कोशिश की है? वास्तव में एक उचित मौका है कि यह काम करेगा। – user3757614

उत्तर

9

जहाँ तक मुझे पता है, ज्यादातर मामलों में पीडीएफ की पूरी सामग्री को वास्तव में एन्क्रिप्टेड है, एन्क्रिप्शन कुंजी के रूप में पासवर्ड का उपयोग कर, और इसलिए बस की स्थापना .is_extractableTrue करने में मदद करने के लिए नहीं जा रहा है।

इस सूत्र के अनुसार

:

Does a library exist to remove passwords from PDFs programmatically?

मैं एक कमांड लाइन उपकरण के साथ पढ़ने के संरक्षण को दूर करने की सिफारिश करेंगे qpdf जैसे (आसानी से स्थापित करने योग्य, Ubuntu पर जैसे का उपयोग apt-get install qpdf अगर आप इसे नहीं है पहले से ही):

qpdf --password=PASSWORD --decrypt SECURED.pdf UNSECURED.pdf 

फिर pdfminer साथ खुला फ़ाइल को खोलने और अपना सामान है।

एक शुद्ध-अजगर समाधान के लिए, आप PyPDF2 और उसके .decrypt() पद्धति का उपयोग करके की कोशिश कर सकते हैं, लेकिन यह सिर्फ qpdf का उपयोग कर एन्क्रिप्शन के सभी प्रकार के साथ काम नहीं करता है, तो वास्तव में, आप से बेहतर कर रहे हैं - देखें:

https://github.com/mstamy2/PyPDF2/issues/53

1

मेरे मामले में कोई पासवर्ड था, लेकिन बस check_extractable=False की स्थापना एक समस्याग्रस्त फ़ाइल (कि अन्य दर्शकों में ठीक खोला) के लिए PDFTextExtractionNotAllowed अपवाद उन्हें धोखा दिया।

+0

फ़ाइल को एन्क्रिप्ट नहीं किया गया है और न ही पासवर्ड सुरक्षित होने पर त्रुटि फेंक दी गई है जब सबसे अच्छा जवाब। – Doug713705

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