Windows 10 (je ne connais pas Mac / Linux, donc je ne peux pas le supporter) python 3.7
--Motivation et vue d'ensemble
En raison de l'influence du virus corona, je pense que de nombreux cours en ligne ont lieu dans les universités. Je pense que la plupart des matériels de cours à cet effet sont distribués en utilisant les services du campus, mais il y a des enseignants qui peuvent parfois leur mettre un mot de passe. Ce n'est pas bon de le redistribuer, et vous voulez probablement refuser la navigation par des non-étudiants, mais pour cela, il est assez ennuyeux de saisir le mot de passe à chaque fois que vous ouvrez ***. *** *** Alors créons un PDF avec le mot de passe déverrouillé. Si vous recherchez "PDF password release", etc., vous trouverez diverses choses, mais cette fois, vous pouvez libérer le PDF simplement en faisant un glisser-déposer ***. C'est pourquoi nous suivons un processus en deux étapes.
-Lien fichier bat et fichier python --Déverrouillez le mot de passe PDF (s'il est connu)
Cela peut être réalisé avec python seul, mais je pense que bat est nécessaire pour déverrouiller le mot de passe simplement par glisser-déposer. Utilisons donc python pour déverrouiller le mot de passe PDF.
Tout d'abord, la structure du répertoire et le contenu du fichier implémenté sont affichés. Interprétez le dossier de classe comme le dossier dans lequel les matériaux de classe sont placés.
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
#Tout d'abord, recherchez dans le même dossier
for f in folder.glob("*"):
if "password" == f.stem:
passfile = f
found = True
#S'ils ne sont pas au même niveau, recherchez un autre niveau au-dessus
if not found:
folder = folder.parent
for f in folder.glob("*"):
if "password" == f.stem:
passfile = f
#S'il n'y a pas de fichier de mots de passe dans la hiérarchie immédiatement supérieure
if not found:
return None
#Extraire le mot de passe du fichier
with open(passfile, mode="r", encoding="utf-8") as f:
password = f.read()
return password
def main():
#Au départ de la chauve-souris
try:
path = sys.argv[1]
#Lors du déplacement du fichier py seul
except:
print("input target path")
path = input()
path = pathlib.Path(path)
#Rejeter un fichier autre que PDF
if path.suffix != ".pdf":
print("Only PDF file accept.")
sys.exit()
password = get_password(folder=path.parent)
#Si le fichier de mots de passe n'existe pas
if password == None:
print("No password file. input password = ", end="")
password = input()
try:
pdf = Pdf.open(path, password=password)
except: #Si le mot de passe est incorrect
print("failed to open PDF. check password.")
sys.exit()
pdf_unlock = Pdf.new()
pdf_unlock.pages.extend(pdf.pages)
#Enregistrer au même niveau que le PDF d'origine
newname = f"{path.parent / path.stem}-unlocked.pdf"
pdf_unlock.save(newname)
if __name__ == '__main__':
main()
decoder.bat
@echo off
Réécrire la partie de classe rem avec le chemin complet du dossier de classe
cd "class"
"main.py" %*
Vous pouvez piper. Facile.
pip install pikepdf
Utilisez une bibliothèque appelée pikepdf pour déverrouiller le mot de passe PDF. Existe par référence [1]. Un exemple de programme est également disponible ici, veuillez donc vous y référer.
Si vous faites glisser et déposez un fichier tel qu'un fichier image dans le fichier bat pour l'ouvrir, à l'invite de commande
C:\Users\user> decoder.bat (Chemin complet du fichier)
On dirait. Cet argument peut être reçu en tant que% * dans le fichier bat. (En fait,% 0 est meilleur ...) (Reportez-vous à la référence [2] pour plus de détails)
Passez cet argument tel quel à python. En python, vous pouvez recevoir des arguments de ligne de commande en tant que sys. La référence [3] décrit le minimum. Ainsi, sys.argv [1] contient l'argument (chemin du fichier) passé du fichier bat cette fois.
Les étapes de base sont les suivantes. Tous les noms de variables sont les mêmes que main.py
pdf = Pdf.open(path, password=password)
pdf_unlock = Pdf.new()
pdf_unlock.pages.extend(pdf.pages)
pdf_unlock.save(newname)
Tips
Cela fonctionne uniquement avec main.py. Dans ce cas, vous serez invité à indiquer le chemin (absolu) où se trouve le PDF. À ce stade, vous pouvez également faire glisser et déposer le fichier PDF vers l'invite de commande.
Si vous en préparez deux comme ci-dessous, celui le plus proche du fichier PDF aura la priorité.
class/ ├ password.txt └ 0605/ ├ password.txt └ target.pdf
Si vous êtes un enseignant qui change le mot de passe en fonction du jour, vous pouvez créer password.txt dans le dossier pour chaque jour.
Cela ne semble pas fonctionner si le mot de passe contient des caractères pleine largeur.
――Python est pratique! !! !! ――Je suis content si tu l'aimes
[1] [Python] Débloquons le mot de passe du fichier pdf! [2] Passer des arguments lors de l'exécution du fichier batch [3] Python: Que sont les arguments de ligne de commande?
Recommended Posts