Yakın zamanda sadece birkaç temel programlama dersi almış olan saf matematik mezunuyum. Staj yapıyorum ve dahili bir veri analiz projem var. Son yılların iç PDF'lerini analiz etmem gerekiyor. PDF'ler "güvenlidir". Başka bir deyişle, bunlar şifrelenir. PDF şifremiz yok, daha fazlası, şifrelerin olup olmadığından emin değiliz. Ancak, tüm bu belgelere sahibiz ve bunları manuel olarak okuyabiliriz. Onları da yazdırabiliriz. Amaç onları Python ile okumak, çünkü bazı fikirlerimiz var.
İlk olarak, bazı Python kütüphaneleriyle PDF'leri okumaya çalıştım. Ancak bulduğum Python kütüphaneleri şifreli PDF'leri okumuyor. O zaman, Adobe Reader kullanarak da bilgileri veremedim.
İkincisi, PDF'lerin şifresini çözmeye karar verdim. Python kütüphanesi pykepdf kullanarak başarılı oldum. Pykepdf çok iyi çalışıyor! Ancak, şifresi çözülmüş PDF'ler önceki noktanın ( PyPDF2 ve Tabula ) Python kütüphaneleri ile de okunamaz . Şu anda, bazı iyileştirmeler yaptık çünkü Adobe Reader'ı kullanarak şifresi çözülmüş PDF'lerden bilgileri dışa aktarabiliyorum, ancak amaç Python ile her şeyi yapmak.
Gösterdiğim kod şifrelenmemiş PDF'lerle mükemmel çalışıyor, ancak şifrelenmiş PDF'lerle çalışmıyor. Pykepdf ile alınan şifresi çözülmüş PDF'lerle çalışmıyor.
Kodu yazmadım. Python'ın kütüphaneleri arasında belgelerinde buldum Pykepdf ve Tabula . PyPDF2 çözümü, Al Sweigart tarafından " Sıkıcı Öğeleri Python ile Otomatikleştirin " adlı kitabında yazdı . Ayrıca kodun daha önce açıkladığım sınırlamalarla iyi çalışıp çalışmadığını kontrol ettim.
İlk soru, programlar şifrelenmemiş dosyalarla çalışıyorsa neden şifresi çözülmüş dosyaları okuyamıyorum?
İkinci soru, Python ile şifresi çözülmüş dosyaları bir şekilde okuyabilir miyiz? Hangi kütüphane bunu yapabilir veya imkansızdır? Şifresi çözülmüş tüm PDF'ler çıkarılabilir mi?
Zaman ayırdığınız ve yardım ettiğiniz için teşekkür ederiz !!!
Bu sonuçları Python 3.7, Windows 10, Jupiter Notebooks ve Anaconda 2019.07 kullanarak buldum.
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()
Tabula ile "çıktı dosyası boş" mesajını alıyorum.
PyPDF2 ile sadece '/ n' alıyorum
GÜNCELLEME 10/3/2019 Pdfminer.six (Sürüm Kasım 2018)
DuckPuncher tarafından gönderilen çözümü kullanarak daha iyi sonuçlar aldım . Şifresi çözülen dosya için etiketleri aldım, ama verileri değil. Şifrelenmiş dosyada da aynı şey olur. Hiç şifrelenmemiş dosya için mükemmel çalışır. Verilere ve şifrelenmiş veya şifresi çözülmüş dosyaların etiketlerine ihtiyacım olduğu için bu kod benim için çalışmıyor. Bu analiz için, kullandığım pdfminer.six Pdfminer.six kütüphane pycryptodome içerir Kasım 2018 yılında yayınlandı Python kütüphanesi olduğunu. Dokümanlarına göre " PyCryptodome , düşük seviyeli kriptografik ilkellerin bağımsız bir Python paketidir."
Kod yığın değişimi sorusudur: Python'da PDFMiner kullanarak bir PDF dosyasından metin çıkartılıyor mu?
Denememi tekrarlamak isterseniz çok isterim. İşte açıklama:
1) Bu soruda belirtilen kodları hiç şifrelenmemiş herhangi bir PDF ile çalıştırın.
2) Aynı şeyi bir PDF "Güvenli" ile yapın (bu Adobe'nin kullandığı bir terimdir), şifreli PDF olarak adlandırıyorum. Google'ı kullanarak bulabileceğiniz genel bir form kullanın. İndirdikten sonra alanları doldurmanız gerekir. Aksi takdirde, etiketleri kontrol edersiniz, ancak alanları kontrol etmezsiniz. Veriler alanların içindedir.
3) Pykepdf kullanarak şifreli PDF'nin şifresini çözün. Bu şifresi çözülmüş PDF olacaktır.
4) Şifre çözülmüş PDF kullanarak kodları tekrar çalıştırın.
GÜNCELLEME 10/4/2019 Camelot (Sürüm Temmuz 2019)
Camelot Python kütüphanesini buldum. Camelot-py 0.7.3'e ihtiyacınız olduğuna dikkat edin .
Çok güçlü ve Python 3.7 ile çalışıyor. Ayrıca, kullanımı çok kolaydır. İlk olarak, Ghostscript'i de kurmanız gerekir . Aksi takdirde çalışmaz. Ayrıca Pandaları yüklemeniz gerekir . Pip kurulum camelot-py kullanmayın . Bunun yerine pip install camelot-py [cv] kullanın
Programın yazarı Vinayak Mehta. Frank Du bu kodu bir YouTube videosunda paylaşıyor "Python Kullanarak Camelot ile PDF'den tablo verileri ayıkla".
Kodu kontrol ettim ve şifrelenmemiş dosyalarla çalışıyor. Ancak, şifreli ve şifresi çözülmüş dosyalarla çalışmaz ve bu benim amacım .
Camelot, PDF'lerden tablo almaya yöneliktir.
İşte kod:
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)
GÜNCELLEME 10/7/2019 Bir numara buldum. Güvenli pdf'yi Adobe Reader ile açarsam ve Microsoft'u PDF olarak kullanarak yazdırırsam ve PDF olarak kaydedersem, bu kopyayı kullanarak verileri çıkarabilirim. Ayrıca PDF dosyasını JSON, Excel, SQLite, CSV, HTML ve başka formatlara dönüştürebilirim. Soruma olası bir çözüm bu. Ancak, hala bu hile olmadan yapmak için bir seçenek arıyorum çünkü hedef Python ile% 100 yapmaktır. Ayrıca daha iyi bir şifreleme yöntemi kullanılırsa hile belki işe yaramaz endişeli. Bazen çıkarılabilir bir kopya almak için Adobe Reader'ı birkaç kez kullanmanız gerekir.
GÜNCELLEME 10/8/2019. Üçüncü soru. Şimdi üçüncü bir sorum var. Tüm güvenli / şifreli pdf'ler parola korumalı mıdır? Pikepdf neden çalışmıyor? Benim tahminim pikepdf'in mevcut sürümünün bazı şifreleme türlerini kırabileceğidir, ancak hepsini değil. @constt, PyPDF2'nin bir tür korumayı bozabileceğini belirtti. Ancak, PyPDF2'nin Adobe Acrobat Pro 6.0 ile yapılan şifrelemeleri kırabileceği, ancak posterior sürümlerde bulunmadığı bir makale bulduğumu söyledim.
qpdf
Dosyalarınızın şifresini çözmek için kullanmayı denediniz mi? Hile yapacaksa, subprocess
dosyaları ayrıştırmadan önce şifresini çözmek için modülü kullanarak kodunuzdan çağırabilirsiniz .
PyPDF2
, her şey iyi çalışıyor.pdftk
Dosyaları şifrelemek için çevrimiçi hizmetlerin yanı sıra kullandım . "Sorunlu" pdf dosyalarına link gönderebilir misiniz?