Vereinfachen Sie das Entsperren von PDF-Passwörtern mit Python + Bat

Umgebung

Windows 10 (Ich bin nicht mit Mac / Linux vertraut, daher kann ich es nicht unterstützen.) python 3.7

Inhaltsverzeichnis

--Motivation und Übersicht

Motivation und Überblick

Aufgrund des Einflusses des Koronavirus denke ich, dass viele Online-Kurse an Universitäten stattfinden. Ich denke, dass die meisten Unterrichtsmaterialien für diesen Zweck über die Dienste auf dem Campus verteilt werden, aber es gibt Lehrer, die ihnen manchmal ein Passwort geben können. Es ist nicht gut, es weiterzugeben, und Sie möchten wahrscheinlich das Surfen durch Nicht-Studenten ablehnen, aber dafür ist es ziemlich ärgerlich, das Passwort jedes Mal einzugeben, wenn Sie es öffnen ***. *** *** Erstellen wir also ein PDF mit dem entsperrten Passwort. Wenn Sie nach "PDF-Kennwortfreigabe" usw. suchen, werden Sie verschiedene Dinge finden, aber diesmal können Sie die PDF-Datei einfach durch Ziehen und Ablegen *** freigeben. Deshalb durchlaufen wir einen zweistufigen Prozess.

--Link Bat-Datei und Python-Datei

Es kann nur mit Python realisiert werden, aber ich denke, dass bat notwendig ist, um das Passwort einfach durch Ziehen und Ablegen zu entsperren. Verwenden wir also Python, um das PDF-Passwort zu entsperren.

Verzeichnisstruktur und Dateiinhalt

Zunächst werden die Verzeichnisstruktur und der implementierte Dateiinhalt angezeigt. Interpretieren Sie den Klassenordner als den Ordner, in dem die Klassenmaterialien abgelegt werden.

root/  ├ main.py  └ decoder.bat

class/  ├ password.txt  └ target.pdf

main.py


import sys, pathlib

from pikepdf import Pdf


def get_password(folder):
    passfile = None

    found : bool = False
    #Suchen Sie zunächst im selben Ordner
    for f in folder.glob("*"):
        if "password" == f.stem:
            passfile = f
            found = True

    #Wenn sie sich nicht auf derselben Ebene befinden, suchen Sie nach einer anderen Ebene darüber
    if not found:
        folder = folder.parent
        for f in folder.glob("*"):
            if "password" == f.stem:
                passfile = f

    #Wenn in der nächsthöheren Hierarchie keine Kennwortdatei vorhanden ist
    if not found:
        return None
    
    #Passwort aus Datei extrahieren
    with open(passfile, mode="r", encoding="utf-8") as f:
        password = f.read()

    return password

def main():
    #Beim Start von Fledermaus
    try:
        path = sys.argv[1]
    #Wenn Sie eine py-Datei alleine ausführen
    except:
        print("input target path")
        path = input()

    path = pathlib.Path(path)
    #Andere als PDF-Datei ablehnen
    if path.suffix != ".pdf":
        print("Only PDF file accept.")
        sys.exit()
    
    password = get_password(folder=path.parent)
    #Wenn die Passwortdatei nicht existiert
    if password == None:
        print("No password file. input password = ", end="")
        password = input()
    try:
        pdf = Pdf.open(path, password=password)
    except:     #Wenn das Passwort falsch ist
        print("failed to open PDF. check password.")
        sys.exit()

    pdf_unlock = Pdf.new()
    pdf_unlock.pages.extend(pdf.pages)
    #Speichern Sie auf der gleichen Ebene wie das Original-PDF
    newname = f"{path.parent / path.stem}-unlocked.pdf"
    pdf_unlock.save(newname)


if __name__ == '__main__':
    main()

decoder.bat


@echo off
Schreiben Sie den rem-Klassenteil mit dem vollständigen Pfad des Klassenordners neu
cd "class"
"main.py" %*

Abhängige Pakete

Sie können pip. Einfach.

pip install pikepdf

Verwenden Sie eine Bibliothek namens pikepdf, um das PDF-Passwort zu entsperren. Bestehend durch Referenz [1]. Ein Beispielprogramm ist auch hier verfügbar. Bitte beziehen Sie sich darauf.

Kommentar

Über die Zusammenarbeit zwischen Fledermausdatei und Python

Wenn Sie eine Datei wie eine Bilddatei per Drag & Drop in die bat-Datei ziehen, um sie an der Eingabeaufforderung zu öffnen

C:\Users\user> decoder.bat (Vollständiger Dateipfad)

Es sieht aus wie. Dieses Argument kann als% * in der bat-Datei empfangen werden. (Tatsächlich ist% 0 besser ...) (Einzelheiten siehe Referenz [2])

Übergeben Sie dieses Argument unverändert an Python. In Python können Sie Befehlszeilenargumente als sys empfangen. Referenz [3] beschreibt das Minimum. Daher enthält sys.argv [1] das Argument (Dateipfad), das dieses Mal aus der bat-Datei übergeben wurde.

Entsperren Sie das PDF-Passwort

Die grundlegenden Schritte sind wie folgt. Alle Variablennamen sind mit main.py identisch

PDF-Datei mit Passwort öffnen
pdf = Pdf.open(path, password=password)
Bereiten Sie eine neue PDF-Datei vor
pdf_unlock = Pdf.new()
Kopieren Sie das vorgeöffnete PDF in ein neues PDF
pdf_unlock.pages.extend(pdf.pages)
Neues PDF speichern
pdf_unlock.save(newname)
Das neu gespeicherte PDF hat kein Passwort, was bedeutet, dass Sie Ihr Ziel erreicht haben.

Eigentlich verwenden

1. Bereiten Sie Ihr Passwort vor.
Schreiben Sie das Passwort von target.pdf in password.txt in das Diagramm der Verzeichnisstruktur. Bitte beachten Sie zu diesem Zeitpunkt, dass Sie die Linie nicht durchbrechen sollten. Da die von den meisten Lehrern angegebenen Passwörter jedes Mal gleich sind, haben wir einen Mechanismus zur Erstellung einer Passwortdatei eingeführt.
Sie können die Eingabeaufforderung eingeben, ohne sie vorzubereiten. Wenn das Kennwort also jedes Mal anders ist, geben Sie es zur Laufzeit ein, ohne password.txt zu erstellen.

2. Erstellen Sie eine Verknüpfung
Es ist eine gute Idee, eine Verknüpfung für decoder.bat auf Ihrem Desktop zu platzieren. Es scheint bequemer zu sein, es vom Desktop aus ausführen zu können. Es ist nicht separat erforderlich.

3. Führen Sie aus
Ziehen Sie die PDF-Datei auf die in Schritt 2 erstellte Verknüpfung und legen Sie sie dort ab. Dann wird die Eingabeaufforderung (für einen Moment) gestartet und die mit dem Passwort entsperrte PDF-Datei wird am selben Speicherort wie die Originaldatei gespeichert.
Wenn Sie keine Kennwortdatei erstellt haben, werden Sie an der Eingabeaufforderung dazu aufgefordert. Bitte eingeben.
~~ Zusätzlich kann das Zeilenumbruchverbot von password.txt gelöst werden, indem es so implementiert wird, dass nur die erste Zeile auf der Python-Seite gelesen wird ~~

Tips

Betrieb der Python-Datei allein

Es funktioniert nur mit main.py. In diesem Fall werden Sie aufgefordert, den (absoluten) Pfad anzugeben, in dem die PDF-Datei vorhanden ist. Zu diesem Zeitpunkt können Sie die PDF-Datei auch per Drag & Drop an die Eingabeaufforderung ziehen.

Über password.txt

Wenn Sie zwei wie folgt vorbereiten, erhält diejenige, die näher an der PDF-Datei liegt, Vorrang.

class/  ├ password.txt  └ 0605/    ├ password.txt    └ target.pdf

Wenn Sie ein Lehrer sind, der das Kennwort je nach Tag ändert, möchten Sie möglicherweise für jeden Tag die Datei password.txt im Ordner erstellen.

Vorsichtsmaßnahmen

  • Passwort freigeben Geben Sie PDF-Dateien niemals ohne Erlaubnis an Lehrer weiter ――Geben Sie Ihr Passwort nicht an andere weiter.

Nachtrag

Es scheint nicht zu funktionieren, wenn das Passwort Zeichen in voller Breite enthält.

Zusammenfassung

――Python ist praktisch! !! !! --Freut mich wenn es dir gefällt

Verweise

[1] [Python] Entsperren wir das Passwort für die PDF-Datei! [2] Argumente beim Ausführen einer Batchdatei übergeben [3] Python: Was sind Befehlszeilenargumente?

Recommended Posts

Vereinfachen Sie das Entsperren von PDF-Passwörtern mit Python + Bat
Integrieren Sie PDF-Dateien in Python
Passwortverwaltung per Python: Schlüsselbund
[Python] Generiere ein Passwort mit Slackbot
Passwort für Lehrbuch mit Python generieren
FizzBuzz in Python3
Scraping mit Python
Zusammenfassung des Bibliotheksvergleichs zum Generieren von PDF mit Python
Konvertieren Sie PDF in Bilder (JPEG / PNG) mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
[Automatisierung] Extrahieren Sie die Tabelle als PDF mit Python
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
Experimentieren Sie mit NIST 800-63B-Kennwortregeln in Python
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Geben Sie ein Passwort in das PDF ein
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Konvertieren Sie das Bild in .zip mit Python in PDF
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
PDF mit Django ausgeben
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
PDF mit Python rastern
Kernel-Methode mit Python
Nicht blockierend mit Python + uWSGI
Tweets mit Python posten
Fahren Sie WebDriver mit Python
Verwenden Sie Mecab mit Python 3
[Python] Mit CGIHTTPServer umleiten
Sprachanalyse mit Python
Denken Sie an Yaml mit Python
Kinesis mit Python betreiben