Windows 10 (Ich bin nicht mit Mac / Linux vertraut, daher kann ich es nicht unterstützen.) python 3.7
--Motivation und Übersicht
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.
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" %*
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.
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.
Die grundlegenden Schritte sind wie folgt. Alle Variablennamen sind mit main.py identisch
pdf = Pdf.open(path, password=password)
pdf_unlock = Pdf.new()
pdf_unlock.pages.extend(pdf.pages)
pdf_unlock.save(newname)
Tips
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.
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.
Es scheint nicht zu funktionieren, wenn das Passwort Zeichen in voller Breite enthält.
――Python ist praktisch! !! !! --Freut mich wenn es dir gefällt
[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