Python-Datenextraktion aus einem verschlüsselten PDF

12

Ich bin ein Absolvent der reinen Mathematik, der nur wenige grundlegende Programmierkurse belegt hat. Ich mache ein Praktikum und habe ein internes Datenanalyseprojekt. Ich muss die internen PDFs der letzten Jahre analysieren. Die PDFs sind "gesichert". Mit anderen Worten, sie sind verschlüsselt. Wir haben keine PDF-Passwörter, noch mehr, wir sind nicht sicher, ob Passwörter existieren. Wir haben jedoch alle diese Dokumente und können sie manuell lesen. Wir können sie auch drucken. Das Ziel ist es, sie mit Python zu lesen, da wir in dieser Sprache eine Idee haben.

Zuerst habe ich versucht, die PDFs mit einigen Python-Bibliotheken zu lesen. Die gefundenen Python-Bibliotheken lesen jedoch keine verschlüsselten PDFs. Zu diesem Zeitpunkt konnte ich die Informationen auch nicht mit Adobe Reader exportieren.

Zweitens habe ich beschlossen, die PDFs zu entschlüsseln. Ich war erfolgreich mit der Python-Bibliothek pykepdf. Pykepdf funktioniert sehr gut! Die entschlüsselten PDFs können jedoch nicht so gut mit den Python-Bibliotheken des vorherigen Punkts ( PyPDF2 und Tabula ) gelesen werden . Zu diesem Zeitpunkt haben wir einige Verbesserungen vorgenommen, da ich mit Adobe Reader die Informationen aus den entschlüsselten PDF-Dateien exportieren kann. Ziel ist es jedoch, alles mit Python zu erledigen.

Der Code, den ich zeige, funktioniert perfekt mit unverschlüsselten PDFs, aber nicht mit verschlüsselten PDFs. Es funktioniert nicht mit den entschlüsselten PDFs, die auch mit pykepdf erstellt wurden.

Ich habe den Code nicht geschrieben. Ich fand es in der Dokumentation der Python-Bibliotheken Pykepdf und Tabula . Die PyPDF2-Lösung wurde von Al Sweigart in seinem Buch " Automate the Boring Stuff with Python " geschrieben, das ich sehr empfehlen kann. Ich habe auch überprüft, ob der Code mit den zuvor erläuterten Einschränkungen einwandfrei funktioniert.

Erste Frage, warum ich die entschlüsselten Dateien nicht lesen kann, wenn die Programme mit Dateien arbeiten, die noch nie verschlüsselt wurden?

Zweite Frage: Können wir mit Python die entschlüsselten Dateien irgendwie lesen? Welche Bibliothek kann das oder ist es unmöglich? Sind alle entschlüsselten PDFs extrahierbar?

Vielen Dank für Ihre Zeit und Hilfe !!!

Ich habe diese Ergebnisse mit Python 3.7, Windows 10, Jupiter Notebooks und Anaconda 2019.07 gefunden.

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()

Mit Tabula erhalte ich die Meldung "Die Ausgabedatei ist leer".

Mit PyPDF2 bekomme ich nur '/ n'

UPDATE 03.10.2019 Pdfminer.six (Version November 2018)

Mit der von DuckPuncher veröffentlichten Lösung habe ich bessere Ergebnisse erzielt . Für die entschlüsselte Datei habe ich die Etiketten bekommen, aber nicht die Daten. Gleiches passiert mit der verschlüsselten Datei. Denn die noch nie verschlüsselte Datei funktioniert einwandfrei. Da ich die Daten und Beschriftungen von verschlüsselten oder entschlüsselten Dateien benötige, funktioniert dieser Code bei mir nicht. Für diese Analyse habe ich pdfminer.six verwendet , eine Python-Bibliothek, die im November 2018 veröffentlicht wurde. Pdfminer.six enthält eine Bibliothek pycryptodome. Laut ihrer Dokumentation "ist PyCryptodome ein in sich geschlossenes Python-Paket von kryptografischen Grundelementen auf niedriger Ebene."

Der Code befindet sich in der Stapelaustauschfrage : Extrahieren von Text aus einer PDF-Datei mit PDFMiner in Python?

Ich würde mich freuen, wenn Sie mein Experiment wiederholen möchten. Hier ist die Beschreibung:

1) Führen Sie die in dieser Frage genannten Codes mit allen PDF-Dateien aus, die noch nie verschlüsselt wurden.

2) Machen Sie dasselbe mit einem PDF "Sicher" (dies ist ein Begriff, den Adobe verwendet). Ich nenne es das verschlüsselte PDF. Verwenden Sie ein allgemeines Formular, das Sie mit Google finden können. Nachdem Sie es heruntergeladen haben, müssen Sie die Felder ausfüllen. Andernfalls würden Sie nach Beschriftungen suchen, aber nicht nach Feldern. Die Daten befinden sich in den Feldern.

3) Entschlüsseln Sie das verschlüsselte PDF mit Pykepdf. Dies ist das entschlüsselte PDF.

4) Führen Sie die Codes erneut mit dem entschlüsselten PDF aus.

UPDATE 04.10.2019 Camelot (Version Juli 2019)

Ich habe die Python-Bibliothek Camelot gefunden. Achten Sie darauf, dass Sie camelot-py 0.7.3 benötigen.

Es ist sehr leistungsfähig und funktioniert mit Python 3.7. Es ist auch sehr einfach zu bedienen. Zunächst müssen Sie auch Ghostscript installieren . Andernfalls funktioniert es nicht. Sie müssen auch Pandas installieren . Verwenden Sie nicht pip install camelot-py . Verwenden Sie stattdessen pip install camelot-py [cv]

Der Autor des Programms ist Vinayak Mehta. Frank Du teilt diesen Code in einem YouTube-Video "Extrahieren von Tabellendaten aus PDF mit Camelot mit Python".

Ich habe den Code überprüft und er funktioniert mit unverschlüsselten Dateien. Es funktioniert jedoch nicht mit verschlüsselten und entschlüsselten Dateien, und das ist mein Ziel .

Camelot ist darauf ausgerichtet, Tabellen aus PDFs abzurufen.

Hier ist der Code:

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)

UPDATE 07.10.2019 Ich habe einen Trick gefunden. Wenn ich das gesicherte PDF mit Adobe Reader öffne und es mit Microsoft als PDF drucke und als PDF speichere, kann ich die Daten mit dieser Kopie extrahieren. Ich kann die PDF-Datei auch in JSON, Excel, SQLite, CSV, HTML und andere Formate konvertieren. Dies ist eine mögliche Lösung für meine Frage. Ich bin jedoch immer noch auf der Suche nach einer Option, um dies ohne diesen Trick zu tun, da das Ziel darin besteht, dies zu 100% mit Python zu tun. Ich mache mir auch Sorgen, dass der Trick möglicherweise nicht funktioniert, wenn eine bessere Verschlüsselungsmethode verwendet wird. Manchmal müssen Sie Adobe Reader mehrmals verwenden, um eine extrahierbare Kopie zu erhalten.

UPDATE 08.10.2019. Dritte Frage. Ich habe jetzt eine dritte Frage. Sind alle gesicherten / verschlüsselten PDFs passwortgeschützt? Warum funktioniert pikepdf nicht? Ich vermute, dass die aktuelle Version von pikepdf einige Verschlüsselungen aufheben kann, aber nicht alle. @constt erwähnte, dass PyPDF2 irgendeine Art von Schutz aufheben kann. Ich antwortete ihm jedoch, dass ich einen Artikel gefunden habe, in dem PyPDF2 Verschlüsselungen aufheben kann, die mit Adobe Acrobat Pro 6.0 erstellt wurden, aber keine mit früheren Versionen.

Anfänger
quelle
2
Ich konnte diese Probleme nicht reproduzieren PyPDF2, alles funktioniert einwandfrei. Ich habe pdftkneben Online-Diensten auch Dateien verschlüsselt. Können Sie Links zu "problematischen" PDF-Dateien veröffentlichen?
Constt
1
OK danke! Haben Sie versucht, qpdfIhre Dateien zu entschlüsseln? In dem Fall, dass es den Trick macht, können Sie es von Ihrem Skript aus mit einem subprocessModul aufrufen , um Dateien zu entschlüsseln, bevor Sie sie analysieren.
constt
1
Erstens kann PyPDF2 Acrobat PDF-Dateien nicht entschlüsseln => 6.0. Zweitens verfügt pikepdf derzeit nicht über ein Text-Extraktionsgerät.
Leben ist komplex
1
@Beginner Ich würde spekulieren, dass dies mit der zugrunde liegenden Formatierung zu tun hat, die von pykepdf zum Schreiben des unverschlüsselten PDF verwendet wird.
Leben ist komplex
2
"Sind alle gesicherten / verschlüsselten PDFs passwortgeschützt?" - Nein. Es gibt auch PDFs, die mit Kryptografie mit privatem / öffentlichem Schlüssel basierend auf X509-Zertifikaten verschlüsselt wurden.
mkl

Antworten:

8

LETZTE AKTUALISIERUNG 10-11-2019

Ich bin mir nicht sicher, ob ich Ihre Frage vollständig verstehe. Der folgende Code kann verfeinert werden, liest jedoch entweder eine verschlüsselte oder eine unverschlüsselte PDF-Datei ein und extrahiert den Text. Bitte lassen Sie mich wissen, wenn ich Ihre Anforderungen falsch verstanden habe.

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO

def extract_encrypted_pdf_text(path, encryption_true, decryption_password):

  output = StringIO()

  resource_manager = PDFResourceManager()
  laparams = LAParams()

  device = TextConverter(resource_manager, output, codec='utf-8', laparams=laparams)

  pdf_infile = open(path, 'rb')
  interpreter = PDFPageInterpreter(resource_manager, device)

  page_numbers = set()

  if encryption_true == False:
    for page in PDFPage.get_pages(pdf_infile, page_numbers, maxpages=0, caching=True, check_extractable=True):
      interpreter.process_page(page)

  elif encryption_true == True:
    for page in PDFPage.get_pages(pdf_infile, page_numbers, maxpages=0, password=decryption_password, caching=True, check_extractable=True):
      interpreter.process_page(page)

 text = output.getvalue()
 pdf_infile.close()
 device.close()
 output.close()
return text

results = extract_encrypted_pdf_text('encrypted.pdf', True, 'password')
print (results)

Ich habe festgestellt, dass in Ihrem Pikepdf- Code zum Öffnen einer verschlüsselten PDF-Datei ein Kennwort fehlt, das diese Fehlermeldung hätte auslösen müssen:

pikepdf._qpdf.PasswordError: encrypted.pdf: ungültiges Passwort

import pikepdf

with pikepdf.open("encrypted.pdf", password='password') as pdf:
num_pages = len(pdf.pages)
del pdf.pages[-1]
pdf.save("decrypted.pdf")

Sie können tika verwenden , um den Text aus der von pikepdf erstellten entschlüsselten.pdf zu extrahieren .

from tika import parser

parsedPDF = parser.from_file("decrypted.pdf")
pdf = parsedPDF["content"]
pdf = pdf.replace('\n\n', '\n')

Darüber hinaus implementiert pikepdf derzeit keine Textextraktion, einschließlich der neuesten Version v1.6.4.


Ich beschloss, ein paar Tests mit verschiedenen verschlüsselten PDF-Dateien durchzuführen.

Ich habe alle verschlüsselten Dateien "encrypted.pdf" genannt und sie haben alle dasselbe Verschlüsselungs- und Entschlüsselungskennwort verwendet.

  1. Adobe Acrobat 9.0 und höher - Verschlüsselungsstufe 256-Bit-AES

    • pikepdf konnte diese Datei entschlüsseln
    • PyPDF2 konnte den Text nicht korrekt extrahieren
    • Tika konnte den Text korrekt extrahieren
  2. Adobe Acrobat 6.0 und höher - Verschlüsselungsstufe 128-Bit-RC4

    • pikepdf konnte diese Datei entschlüsseln
    • PyPDF2 konnte den Text nicht korrekt extrahieren
    • Tika konnte den Text korrekt extrahieren
  3. Adobe Acrobat 3.0 und höher - Verschlüsselungsstufe 40-Bit-RC4

    • pikepdf konnte diese Datei entschlüsseln
    • PyPDF2 konnte den Text nicht korrekt extrahieren
    • Tika konnte den Text korrekt extrahieren
  4. Adobe Acrobat 5.0 und höher - Verschlüsselungsstufe 128-Bit-RC4

    • erstellt mit Microsoft Word
    • pikepdf konnte diese Datei entschlüsseln
    • PyPDF2 konnte den Text korrekt extrahieren
    • Tika konnte den Text korrekt extrahieren
  5. Adobe Acrobat 9.0 und höher - Verschlüsselungsstufe 256-Bit-AES

    • erstellt mit pdfprotectfree
    • pikepdf konnte diese Datei entschlüsseln
    • PyPDF2 konnte den Text korrekt extrahieren
    • Tika konnte den Text korrekt extrahieren

PyPDF2 konnte Text aus entschlüsselten PDF-Dateien extrahieren, die nicht mit Adobe Acrobat erstellt wurden.

Ich würde annehmen, dass die Fehler etwas mit der eingebetteten Formatierung in den von Adobe Acrobat erstellten PDFs zu tun haben. Weitere Tests sind erforderlich, um diese Vermutung über die Formatierung zu bestätigen.

tika konnte text aus allen mit pikepdf entschlüsselten dokumenten extrahieren.


 import pikepdf
 with pikepdf.open("encrypted.pdf", password='password') as pdf:
    num_pages = len(pdf.pages)
    del pdf.pages[-1]
    pdf.save("decrypted.pdf")


 from PyPDF2 import PdfFileReader

 def text_extractor(path):
   with open(path, 'rb') as f:
     pdf = PdfFileReader(f)
     page = pdf.getPage(1)
     print('Page type: {}'.format(str(type(page))))
     text = page.extractText()
     print(text)

    text_extractor('decrypted.pdf')

PyPDF2 kann Acrobat PDF-Dateien nicht entschlüsseln => 6.0

Diese Ausgabe ist seit dem 15. September 2015 für die Modulbesitzer offen . In den Kommentaren zu diesem Problem ist unklar, wann dieses Problem von den Projektbesitzern behoben wird. Das letzte Commit war der 25. Juni 2018.

PyPDF4- Entschlüsselungsprobleme

PyPDF4 ist der Ersatz für PyPDF2. Dieses Modul hat auch Entschlüsselungsprobleme mit bestimmten Algorithmen, die zum Verschlüsseln von PDF-Dateien verwendet werden.

Testdatei: Adobe Acrobat 9.0 und höher - Verschlüsselungsstufe 256-Bit-AES

PyPDF2-Fehlermeldung: Es werden nur die Algorithmuscodes 1 und 2 unterstützt

PyPDF4-Fehlermeldung: Es werden nur die Algorithmuscodes 1 und 2 unterstützt. Dieses PDF verwendet Code 5


UPDATE ABSCHNITT 10-11-2019

Dieser Abschnitt ist eine Antwort auf Ihre Aktualisierungen am 10-07-2019 und 10-08-2019.

In Ihrem Update haben Sie angegeben, dass Sie ein mit Adobe Reader gesichertes PDF öffnen und das Dokument in eine andere PDF-Datei drucken können, wodurch das Flag "SICHER" entfernt wird. Nach einigen Tests habe ich herausgefunden, was in diesem Szenario passiert.

Sicherheitsstufe von Adobe PDFs

Adobe PDFs verfügen über mehrere Arten von Sicherheitskontrollen, die vom Eigentümer des Dokuments aktiviert werden können. Die Steuerelemente können entweder mit einem Kennwort oder einem Zertifikat erzwungen werden.

  1. Dokumentenverschlüsselung (erzwungen mit einem Passwort zum Öffnen von Dokumenten)

    • Verschlüsseln Sie alle Dokumentinhalte (am häufigsten)
    • Verschlüsseln Sie alle Dokumentinhalte außer Metadaten => Acrobat 6.0
    • Nur Dateianhänge verschlüsseln => Acrobat 7.0
  2. Restriktives Bearbeiten und Drucken (erzwungen mit einem Berechtigungskennwort)

    • Drucken erlaubt
    • Änderungen erlaubt

Das folgende Bild zeigt ein Adobe PDF, das mit 256-Bit-AES-Verschlüsselung verschlüsselt wird. Zum Öffnen oder Drucken dieser PDF-Datei ist ein Passwort erforderlich. Wenn Sie dieses Dokument in Adobe Reader mit dem Kennwort öffnen, lautet der Titel SECURED

password_level_encryption

Für dieses Dokument ist ein Kennwort erforderlich, um mit den in dieser Antwort genannten Python-Modulen geöffnet zu werden. Wenn Sie versuchen, eine verschlüsselte PDF-Datei mit Adobe Reader zu öffnen. Sie sollten dies sehen:

password_prompt

Wenn Sie diese Warnung nicht erhalten, sind für das Dokument entweder keine Sicherheitskontrollen aktiviert oder nur die restriktiven Bearbeitungs- und Druckkontrollen aktiviert.

Das Bild unten zeigt, wie die restriktive Bearbeitung mit einem Kennwort in einem PDF-Dokument aktiviert wird. Das Drucken von Notizen ist aktiviert . Zum Öffnen oder Drucken dieser PDF-Datei ist kein Passwort erforderlich . Wenn Sie dieses Dokument in Adobe Reader ohne Kennwort öffnen, lautet der Titel SECURED lautet Dies ist dieselbe Warnung wie die verschlüsselte PDF-Datei, die mit einem Kennwort geöffnet wurde.

Wenn Sie dieses Dokument in eine neue PDF-Datei drucken, wird die Warnung SECURED entfernt, da die restriktive Bearbeitung entfernt wurde.

password_level_restrictive_editing

Alle Adobe-Produkte erzwingen die durch das Berechtigungskennwort festgelegten Einschränkungen. Wenn Produkte von Drittanbietern diese Einstellungen jedoch nicht unterstützen, können Dokumentempfänger einige oder alle der festgelegten Einschränkungen umgehen .

Daher gehe ich davon aus, dass für das Dokument, das Sie als PDF drucken, die restriktive Bearbeitung aktiviert ist und zum Öffnen kein Kennwort erforderlich ist.

Bezüglich der Unterbrechung der PDF-Verschlüsselung

Weder PyPDF2 noch PyPDF4 sind dafür ausgelegt, die Kennwortfunktion zum Öffnen eines Dokuments eines PDF-Dokuments zu unterbrechen . Beide Module geben den folgenden Fehler aus, wenn sie versuchen, eine verschlüsselte passwortgeschützte PDF-Datei zu öffnen.

PyPDF2.utils.PdfReadError: Datei wurde nicht entschlüsselt

Die Funktion zum Öffnen des Kennworts einer verschlüsselten PDF-Datei kann mit verschiedenen Methoden umgangen werden. Eine einzelne Technik funktioniert jedoch möglicherweise nicht und einige sind aufgrund verschiedener Faktoren, einschließlich der Komplexität des Kennworts, nicht akzeptabel.

Die PDF-Verschlüsselung funktioniert intern mit Verschlüsselungsschlüsseln von 40, 128 oder 256 Bit, abhängig von der PDF-Version. Der binäre Verschlüsselungsschlüssel wird von einem vom Benutzer bereitgestellten Kennwort abgeleitet. Das Passwort unterliegt Längen- und Codierungsbeschränkungen.

In PDF 1.7 Adobe Extension Level 3 (Acrobat 9 - AES-256) wurden beispielsweise Unicode-Zeichen (65.536 mögliche Zeichen) eingeführt und die maximale Länge in der UTF-8-Darstellung des Kennworts auf 127 Byte erhöht.


Der folgende Code öffnet eine PDF-Datei mit aktivierter restriktiver Bearbeitung. Diese Datei wird in einer neuen PDF-Datei gespeichert, ohne dass die Warnung SECURED hinzugefügt wird. Der Tika- Code analysiert den Inhalt der neuen Datei.

from tika import parser
import pikepdf

# opens a PDF with restrictive editing enabled, but that still 
# allows printing.
with pikepdf.open("restrictive_editing_enabled.pdf") as pdf:
  pdf.save("restrictive_editing_removed.pdf")

  # plain text output
  parsedPDF = parser.from_file("restrictive_editing_removed.pdf")

  # XHTML output
  # parsedPDF = parser.from_file("restrictive_editing_removed.pdf", xmlContent=True)

  pdf = parsedPDF["content"]
  pdf = pdf.replace('\n\n', '\n')
  print (pdf)

Dieser Code prüft, ob zum Öffnen der Datei ein Kennwort erforderlich ist. Dieser Code kann verfeinert und andere Funktionen hinzugefügt werden. Es gibt mehrere andere Funktionen, die hinzugefügt werden können, aber die Dokumentation für pikepdf stimmt nicht mit den Kommentaren in der Codebasis überein. Daher sind weitere Untersuchungen erforderlich, um dies zu verbessern.

# this would be removed once logging is used
############################################
import sys
sys.tracebacklimit = 0
############################################

import pikepdf
from tika import parser

def create_pdf_copy(pdf_file_name):
  with pikepdf.open(pdf_file_name) as pdf:
    new_filename = f'copy_{pdf_file_name}'
    pdf.save(new_filename)
    return  new_filename

def extract_pdf_content(pdf_file_name):
  # plain text output
  # parsedPDF = parser.from_file("restrictive_editing_removed.pdf")

  # XHTML output
  parsedPDF = parser.from_file(pdf_file_name, xmlContent=True)

  pdf = parsedPDF["content"]
  pdf = pdf.replace('\n\n', '\n')
  return pdf

def password_required(pdf_file_name):
  try:
    pikepdf.open(pdf_file_name)

  except pikepdf.PasswordError as error:
    return ('password required')

  except pikepdf.PdfError as results:
    return ('cannot open file')


filename = 'decrypted.pdf'
password = password_required(filename)
if password != None:
  print (password)
elif password == None:
  pdf_file = create_pdf_copy(filename)
  results = extract_pdf_content(pdf_file)
  print (results)
Das Leben ist komplex
quelle
2
Wie öffnen Sie eine sichere PDF-Datei ohne Angabe eines Passworts?
Leben ist komplex
1
Beziehen Sie sich nur auf einen restriktiven Bearbeitungsschutz?
Leben ist komplex
1
Die Antwort wurde mit Code aktualisiert, der mit einer PDF-Datei funktioniert, für die ein restriktiver Bearbeitungsschutz aktiviert war, der jedoch das Drucken zuließ.
Leben ist komplex
1
Können Sie XHTML verwenden?
Leben ist komplex
1
Ich habe die Antwort geändert, um XHTML auszugeben. JSON ist möglich, erfordert jedoch das Eingraben in den Github-Projektcode des Tika-Parsers.
Leben ist komplex
1

Sie können versuchen, den Fehler zu behandeln, den diese Dateien verursachen, wenn Sie diese Dateien ohne Kennwort öffnen.

import pikepdf

def open_pdf(pdf_file_path, pdf_password=''):
    try:
        pdf_obj = pikepdf.Pdf.open(pdf_file_path)

    except pikepdf._qpdf.PasswordError:
        pdf_obj = pikepdf.Pdf.open(pdf_file_path, password=pdf_password)

    finally:
        return pdf_obj

Sie können das zurückgegebene pdf_obj für Ihre Parsing-Arbeit verwenden. Sie können das Kennwort auch angeben, falls Sie eine verschlüsselte PDF-Datei haben.

Mahendra Singh
quelle
1
Vielen Dank für Ihre Antwort! Wir versuchen es ohne Passwort zu lesen. Zu diesem Zeitpunkt konnten wir dies mit der Methode tun, die in meinem UPDATE 07.10.2019
Anfänger
Dies ist weit davon entfernt, die Frage zu beantworten. Scheint, als hätten Sie die vollständige Frage nicht gelesen.
Shoonya ek
1
Dies behandelt die gesicherten PDFs, bei denen pikepdf normalerweise fehlschlägt, wenn der Standardwert des Kennworts Keine ist. Durch Übergeben einer leeren Zeichenfolge kann ein gesichertes PDF-Dokument ordnungsgemäß geöffnet und analysiert werden (in den von mir ausgeführten Testfällen).
Mahendra Singh
1
@Beginner In diesem Fall müssen Sie die PDFs hier nicht konvertieren. Dies ist nur aus meiner vorherigen Erfahrung, dass gesicherte PDFs durch die Angabe eines leeren Passworts funktionieren.
Mahendra Singh
1
@Beginner das ist mein gesamter Code. Dies gibt nur das pdf_object von pikepdf zurück. Wenn Sie dieses PDF speichern möchten, speichern Sie das zurückgegebene Objekt einfach mit pdf_obj.save ('your_file_path'). Danach können Sie dieses PDF verwenden, um Text und andere Objekte zu analysieren. Ich benutze eine Bibliothek namens PdfPlumber für die Textextraktion .
Mahendra Singh
1

Für tabula-py können Sie die Kennwortoption mit read_pdf ausprobieren. Es hängt von der Funktion von tabula-java ab, daher bin ich mir nicht sicher, welche Verschlüsselung unterstützt wird.

chezou
quelle