Saya seorang lulusan baru dalam matematika murni yang hanya mengambil beberapa kursus pemrograman dasar. Saya sedang magang dan saya memiliki proyek analisis data internal. Saya harus menganalisis PDF internal beberapa tahun terakhir. PDF-nya "diamankan." Dengan kata lain, mereka dienkripsi. Kami tidak memiliki kata sandi PDF, bahkan lebih lagi, kami tidak yakin apakah kata sandi itu ada. Tetapi, kami memiliki semua dokumen ini dan kami dapat membacanya secara manual. Kami juga bisa mencetaknya. Tujuannya adalah untuk membacanya dengan Python karena merupakan bahasa yang kami punya beberapa ide.
Pertama, saya mencoba membaca PDF dengan beberapa pustaka Python. Namun, pustaka Python yang saya temukan tidak membaca PDF terenkripsi. Pada saat itu, saya tidak dapat mengekspor informasi menggunakan Adobe Reader.
Kedua, saya memutuskan untuk mendekripsi PDF. Saya berhasil menggunakan pustaka Python pykepdf. Pykepdf bekerja dengan sangat baik! Namun, dekripsi PDF tidak dapat dibaca juga dengan pustaka Python dari poin sebelumnya ( PyPDF2 dan Tabula ). Saat ini, kami telah membuat beberapa peningkatan karena menggunakan Adobe Reader saya dapat mengekspor informasi dari PDF yang didekripsi, tetapi tujuannya adalah untuk melakukan segalanya dengan Python.
Kode yang saya perlihatkan berfungsi sempurna dengan PDF yang tidak terenkripsi, tetapi tidak dengan PDF terenkripsi. Itu tidak bekerja dengan PDF yang didekripsi yang didapat dengan pykepdf juga.
Saya tidak menulis kode. Saya menemukannya di dokumentasi Python libraries Pykepdf dan Tabula . Solusi PyPDF2 ditulis oleh Al Sweigart dalam bukunya, " Automate the Boring Stuff with Python ," yang sangat saya rekomendasikan. Saya juga memeriksa bahwa kodenya berfungsi dengan baik, dengan batasan yang saya jelaskan sebelumnya.
Pertanyaan pertama, mengapa saya tidak bisa membaca file yang didekripsi, jika program bekerja dengan file yang tidak pernah dienkripsi?
Pertanyaan kedua, bisakah kita membaca file yang didekripsi dengan Python? Perpustakaan mana yang bisa melakukannya atau tidak mungkin? Apakah semua dekripsi PDF dapat diekstraksi?
Terima kasih atas waktu dan bantuannya !!!
Saya menemukan hasil ini menggunakan Python 3.7, Windows 10, Jupiter Notebooks, dan Anaconda 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()
Dengan Tabula, saya mendapatkan pesan "file output kosong."
Dengan PyPDF2, saya hanya mendapatkan '/ n'
UPDATE 10/3/2019 Pdfminer.six (Versi November 2018)
Saya mendapat hasil yang lebih baik menggunakan solusi yang diposting oleh DuckPuncher . Untuk file yang didekripsi, saya mendapatkan labelnya, tetapi bukan datanya. Hal yang sama terjadi dengan file yang dienkripsi. Untuk file yang belum pernah dienkripsi berfungsi dengan sempurna. Karena saya memerlukan data dan label file yang dienkripsi atau didekripsi, kode ini tidak berfungsi untuk saya. Untuk analisis itu, saya menggunakan pdfminer.six yaitu pustaka Python yang dirilis pada November 2018. Pdfminer.six menyertakan pycryptodome perpustakaan. Menurut dokumentasi mereka " PyCryptodome adalah paket Python mandiri dari primitif kriptografi tingkat rendah .."
Kode ada di tumpukan pertanyaan pertukaran: Mengekstrak teks dari file PDF menggunakan PDFMiner di python?
Saya akan senang jika Anda ingin mengulang percobaan saya. Berikut uraiannya:
1) Jalankan kode yang disebutkan dalam pertanyaan ini dengan PDF apa pun yang belum pernah dienkripsi.
2) Lakukan hal yang sama dengan PDF "Secure" (ini adalah istilah yang digunakan Adobe), saya menyebutnya PDF terenkripsi. Gunakan formulir umum yang dapat Anda temukan menggunakan Google. Setelah mengunduhnya, Anda harus mengisi kolom. Kalau tidak, Anda akan memeriksa label, tetapi bukan bidang. Data ada di kolom.
3) Dekripsi PDF terenkripsi menggunakan Pykepdf. Ini akan menjadi dekripsi PDF.
4) Jalankan kode lagi menggunakan PDF yang didekripsi.
UPDATE 10/4/2019 Camelot (Versi Juli 2019)
Saya menemukan perpustakaan Python Camelot. Hati-hati karena Anda membutuhkan camelot-py 0.7.3.
Ini sangat kuat, dan bekerja dengan Python 3.7. Juga, sangat mudah digunakan. Pertama, Anda juga harus menginstal Ghostscript . Kalau tidak, itu tidak akan berhasil. Anda juga perlu menginstal Panda . Jangan gunakan pip install camelot-py . Sebagai gantinya gunakan pip install camelot-py [cv]
Penulis program ini adalah Vinayak Mehta. Frank Du membagikan kode ini dalam video YouTube "Ekstrak data tabular dari PDF dengan Camelot Menggunakan Python."
Saya memeriksa kode dan berfungsi dengan file yang tidak terenkripsi. Namun, itu tidak berfungsi dengan file yang dienkripsi dan didekripsi, dan itulah tujuan saya .
Camelot berorientasi untuk mendapatkan tabel dari PDF.
Ini kodenya:
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)
PEMBARUAN 10/7/2019 Saya menemukan satu trik. Jika saya membuka pdf yang diamankan dengan Adobe Reader, dan saya mencetaknya menggunakan Microsoft ke PDF, dan saya menyimpannya sebagai PDF, saya bisa mengekstrak data menggunakan salinan itu. Saya juga dapat mengonversi file PDF ke JSON, Excel, SQLite, CSV, HTML, dan format lain. Ini adalah solusi yang mungkin untuk pertanyaan saya. Namun, saya masih mencari opsi untuk melakukannya tanpa trik itu karena tujuannya adalah untuk melakukannya 100% dengan Python. Saya juga khawatir bahwa jika metode enkripsi yang lebih baik digunakan triknya mungkin tidak akan berfungsi. Terkadang Anda perlu menggunakan Adobe Reader beberapa kali untuk mendapatkan salinan yang bisa diekstraksi.
PEMBARUAN 10/8/2019. Pertanyaan ketiga. Sekarang saya punya pertanyaan ketiga. Apakah semua pdf yang diamankan / terenkripsi dilindungi kata sandi? Mengapa pikepdf tidak berfungsi? Dugaan saya adalah bahwa versi saat ini dari pikepdf dapat memecah beberapa jenis enkripsi tetapi tidak semuanya. @constt menyebutkan bahwa PyPDF2 dapat merusak beberapa jenis perlindungan. Namun, saya menjawab kepadanya bahwa saya menemukan sebuah artikel yang PyPDF2 dapat memecah enkripsi yang dibuat dengan Adobe Acrobat Pro 6.0, tetapi tidak dengan versi posterior.
qpdf
untuk mendekripsi file Anda? Dalam hal ini akan melakukan trik, Anda dapat memanggilnya dari skrip Anda menggunakan subprocess
modul untuk mendekripsi file sebelum menguraikannya.
PyPDF2
, semuanya berfungsi dengan baik. Saya menggunakanpdftk
serta layanan online untuk mengenkripsi file. Bisakah Anda memposting tautan ke file pdf "bermasalah"?