मैं शुद्ध गणित में हाल ही में स्नातक हूं, जिसने केवल कुछ बुनियादी प्रोग्रामिंग पाठ्यक्रम लिए हैं। मैं एक इंटर्नशिप कर रहा हूं और मेरे पास एक आंतरिक डेटा विश्लेषण परियोजना है। मुझे पिछले वर्षों के आंतरिक PDF का विश्लेषण करना है। PDF "सुरक्षित" हैं। दूसरे शब्दों में, वे एन्क्रिप्टेड हैं। हमारे पास पीडीएफ पासवर्ड नहीं है, इससे भी अधिक, अगर पासवर्ड मौजूद है तो हमें यकीन नहीं है। लेकिन, हमारे पास ये सभी दस्तावेज हैं और हम उन्हें मैन्युअल रूप से पढ़ सकते हैं। हम उन्हें भी प्रिंट कर सकते हैं। लक्ष्य उन्हें पायथन के साथ पढ़ना है क्योंकि वह भाषा है जिसका हमें कुछ विचार है।
सबसे पहले, मैंने कुछ पायथन पुस्तकालयों के साथ पीडीएफ पढ़ने की कोशिश की। हालाँकि, पायथन पुस्तकालय जो मुझे मिला वह एन्क्रिप्टेड पीडीएफ नहीं पढ़ता है। उस समय, मैं Adobe Reader का उपयोग करके जानकारी को निर्यात नहीं कर सका।
दूसरा, मैंने पीडीएफ को डिक्रिप्ट करने का फैसला किया। मैं पायथन लाइब्रेरी pykepdf का उपयोग करने में सफल रहा। Pykepdf बहुत अच्छा काम करता है! हालांकि, decrypted पीडीएफ़ अच्छी तरह से पिछले बिंदु (के पायथन पुस्तकालयों के साथ के रूप में पढ़ा नहीं जा सकता PyPDF2 और Tabula )। इस समय, हमने कुछ सुधार किया है क्योंकि Adobe Reader का उपयोग करके मैं डिक्रिप्टेड PDF से जानकारी निर्यात कर सकता हूं, लेकिन लक्ष्य सब कुछ पायथन के साथ करना है।
कोड जो मैं दिखा रहा हूं वह पूरी तरह से अनएन्क्रिप्टेड पीडीएफ के साथ काम करता है, लेकिन एन्क्रिप्टेड पीडीएफ के साथ नहीं। यह डिक्रिप्टेड PDF के साथ काम नहीं कर रहा है जो pykepdf के साथ भी प्राप्त किए गए थे।
मैंने कोड नहीं लिखा था। मैं पायथन पुस्तकालयों के दस्तावेज में यह पाया Pykepdf और Tabula । PyPDF2 समाधान को अल स्वेगार्ट ने अपनी पुस्तक, " ऑटोमेटिक द बोरिंग स्टफ इन पाइथन ," के साथ लिखा था कि मैं अत्यधिक अनुशंसा करता हूं। मैंने यह भी जांचा कि कोड ठीक काम कर रहा है या नहीं, जो मैंने पहले समझाया था।
पहला सवाल, मैं डिक्रिप्टेड फ़ाइलों को क्यों नहीं पढ़ सकता, अगर प्रोग्राम उन फाइलों के साथ काम करते हैं जिन्हें कभी एन्क्रिप्ट नहीं किया गया है?
दूसरा सवाल, क्या हम पायथन की डिक्रिप्टेड फाइलों को किसी तरह पढ़ सकते हैं? कौन सा पुस्तकालय यह कर सकता है या असंभव है? क्या सभी डिक्रिप्ट किए गए पीडीएफ निकालने योग्य हैं?
आपके समय और मदद के लिए धन्यवाद!!!
मैंने पायथन 3.7, विंडोज 10, ज्यूपिटर नोटबुक और एनाकोंडा 2019.07 का उपयोग करके ये परिणाम पाए।
Python
import pikepdf
with pikepdf.open("encrypted.pdf") as pdf:
num_pages = len(pdf.pages)
del pdf.pages[-1]
pdf.save("decrypted.pdf")
import tabula
tabula.read_pdf("decrypted.pdf", stream=True)
import PyPDF2
pdfFileObj=open("decrypted.pdf", "rb")
pdfReader=PyPDF2.PdfFileReader(pdfFileObj)
pdfReader.numPages
pageObj=pdfReader.getPage(0)
pageObj.extractText()
तबुला के साथ, मुझे संदेश मिल रहा है "आउटपुट फ़ाइल खाली है।"
PyPDF2 के साथ, मुझे केवल '/ n' मिल रहा है
अद्यतन 10/3/2019 Pdfminer.six (संस्करण नवंबर 2018)
डकपंचर द्वारा पोस्ट किए गए समाधान का उपयोग करके मुझे बेहतर परिणाम मिले । डिक्रिप्ट की गई फ़ाइल के लिए, मुझे लेबल मिला, लेकिन डेटा नहीं। एन्क्रिप्टेड फ़ाइल के साथ भी ऐसा ही होता है। उस फ़ाइल के लिए जिसे कभी एन्क्रिप्ट नहीं किया गया है, एकदम सही काम करती है। जैसा कि मुझे एन्क्रिप्टेड या डिक्रिप्टेड फ़ाइलों के डेटा और लेबल की आवश्यकता है, यह कोड मेरे लिए काम नहीं करता है। उस विश्लेषण के लिए, मैंने pdfminer.six का उपयोग किया जो कि पायथन लाइब्रेरी है जिसे नवंबर 2018 में जारी किया गया था। Pdfminer.six में एक पुस्तकालय pycryptodome शामिल है। उनके दस्तावेज के अनुसार " PyCryptodome निम्न-स्तरीय क्रिप्टोग्राफ़िक प्राथमिकताओं का एक स्व-निहित अजगर पैकेज है .."
कोड स्टैक एक्सचेंज प्रश्न में है: अजगर में PDFMiner का उपयोग करके एक पीडीएफ फाइल से टेक्स्ट को निकालना?
यदि आप मेरे प्रयोग को दोहराना चाहते हैं तो मुझे अच्छा लगेगा। यहाँ वर्णन है:
1) इस प्रश्न में वर्णित कोड को किसी भी पीडीएफ के साथ चलाएं जिसे कभी भी एन्क्रिप्ट नहीं किया गया है।
2) पीडीएफ "सिक्योर" के साथ भी ऐसा ही करें (यह एक शब्द है जिसे एडोब उपयोग करता है), मैं इसे एन्क्रिप्टेड पीडीएफ कह रहा हूं। एक सामान्य रूप का उपयोग करें जिसे आप Google का उपयोग करके पा सकते हैं। इसे डाउनलोड करने के बाद, आपको फ़ील्ड भरने की आवश्यकता है। अन्यथा, आप लेबल के लिए जाँच कर रहे होंगे, लेकिन फ़ील्ड नहीं। डेटा खेतों में है।
3) Pykepdf का उपयोग कर एन्क्रिप्टेड पीडीएफ को डिक्रिप्ट करें। यह डिक्रिप्टेड पीडीएफ होगा।
4) डिक्रिप्टेड पीडीएफ का उपयोग करके फिर से कोड चलाएं।
अद्यतन 10/4/2019 कैमलॉट (संस्करण जुलाई 2019)
मुझे पायथन लाइब्रेरी कैमलॉट मिला। सावधान रहें कि आपको कैमलोट-पी की आवश्यकता है 0.7.3।
यह बहुत शक्तिशाली है, और पायथन 3.7 के साथ काम करता है। इसके अलावा, इसका उपयोग करना बहुत आसान है। सबसे पहले, आपको घोस्टस्क्रिप्ट को स्थापित करने की भी आवश्यकता है । अन्यथा, यह काम नहीं करेगा। आपको पंडों को स्थापित करने की भी आवश्यकता है । पाइप इंस्टॉल कैमलोट-पी का उपयोग न करें । इसके बजाय पाइप इंस्टॉल कैमलॉट-पी [सीवी] का उपयोग करें
कार्यक्रम के लेखक विनायक मेहता हैं। फ्रैंक डू इस कोड को एक यूट्यूब वीडियो में साझा करता है "अजगर से पीडीएफ के साथ सारणीबद्ध डेटा निकालें" पायथन का उपयोग करते हुए।
मैंने कोड की जाँच की और यह अनएन्क्रिप्टेड फ़ाइलों के साथ काम कर रहा है। हालाँकि, यह एन्क्रिप्टेड और डिक्रिप्टेड फ़ाइलों के साथ काम नहीं करता है, और यही मेरा लक्ष्य है ।
कैमलॉट पीडीएफ से टेबल प्राप्त करने के लिए उन्मुख है।
यहाँ कोड है:
Python
import camelot
import pandas
name_table = camelot.read_pdf("uncrypted.pdf")
type(name_table)
#This is a Pandas dataframe
name_table[0]
first_table = name_table[0]
#Translate camelot table object to a pandas dataframe
first_table.df
first_table.to_excel("unencrypted.xlsx")
#This creates an excel file.
#Same can be done with csv, json, html, or sqlite.
#To get all the tables of the pdf you need to use this code.
for table in name_table:
print(table.df)
अद्यतन 10/7/2019 मुझे एक चाल मिली। यदि मैं एडोब रीडर के साथ सुरक्षित पीडीएफ खोलता हूं, और मैं इसे माइक्रोसॉफ्ट से पीडीएफ का उपयोग करके प्रिंट करता हूं, और मैं इसे पीडीएफ के रूप में सहेजता हूं, तो मैं उस कॉपी का उपयोग करके डेटा निकाल सकता हूं। मैं पीडीएफ फाइल को JSON, एक्सेल, SQLite, CSV, HTML और अन्य प्रारूपों में भी बदल सकता हूं। यह मेरे प्रश्न का एक संभावित समाधान है। हालाँकि, मैं अभी भी इसे बिना किसी चाल के करने के लिए एक विकल्प की तलाश कर रहा हूं क्योंकि लक्ष्य इसे पायथन के साथ 100% करना है। मुझे इस बात का भी मलाल है कि अगर एन्क्रिप्शन का बेहतर तरीका इस्तेमाल किया जाए तो शायद काम नहीं चलेगा। कभी-कभी आपको निकालने योग्य प्रतिलिपि प्राप्त करने के लिए कई बार एडोब रीडर का उपयोग करने की आवश्यकता होती है।
UPDATE 10/8/2019। तीसरा सवाल। मेरा अब तीसरा सवाल है। क्या सभी सुरक्षित / एन्क्रिप्टेड पीडीएफ पासवर्ड संरक्षित हैं? क्यों pikepdf काम नहीं कर रहा है? मेरा अनुमान है कि pikepdf का वर्तमान संस्करण कुछ प्रकार के एनक्रिप्ट को तोड़ सकता है, लेकिन उन सभी को नहीं। @constt ने उल्लेख किया कि PyPDF2 किसी प्रकार की सुरक्षा को तोड़ सकता है। हालांकि, मैंने उसे जवाब दिया कि मुझे एक लेख मिला है कि PyPDF2 एडोब एक्रोबैट प्रो 6.0 के साथ किए गए एन्क्रिप्ट को तोड़ सकता है, लेकिन पीछे के संस्करणों के साथ नहीं।
qpdf
अपनी फ़ाइलों को डिक्रिप्ट करने के लिए उपयोग करने की कोशिश की है ? इस मामले में यह चाल चलेगा, आप इसे अपने स्क्रिप्ट से subprocess
मॉड्यूल का उपयोग करके फ़ाइलों को पार्स करने से पहले डिक्रिप्ट कर सकते हैं।
PyPDF2
, सब कुछ ठीक काम करता है। मैंनेpdftk
फ़ाइलों को एन्क्रिप्ट करने के लिए ऑनलाइन सेवाओं का भी उपयोग किया । क्या आप "परेशानी" पीडीएफ फाइलों के लिंक पोस्ट कर सकते हैं?