Comment débloquer un “sécurisé” (lecture seule) PDF en Python?
En Python, je suis en utilisant pdfminer pour lire le texte d'un fichier pdf avec le code ci-dessous ce message. Maintenant, je reçois un message d'erreur disant:
File "/usr/local/lib/python2.7/dist-packages/pdfminer/pdfpage.py", line 124, in get_pages
raise PDFTextExtractionNotAllowed('Text extraction is not allowed: %r' % fp)
PDFTextExtractionNotAllowed: Text extraction is not allowed: <cStringIO.StringO object at 0x7f79137a1
ab0>
Quand j'ouvre ce fichier pdf avec Acrobat Pro, il s'avère qu'il est sécurisé (ou "protégé"). De ce lien cependant, j'ai lu qu'il y a une multitude de services qui permettent de désactiver cette protection en lecture facilement (par exemple pdfunlock.com. Lors d'une plongée dans la source de pdfminer, je vois que l'erreur ci-dessus est générée sur ces lignes.
if check_extractable and not doc.is_extractable:
raise PDFTextExtractionNotAllowed('Text extraction is not allowed: %r' % fp)
Puisqu'il y a une multitude de services qui permettent de désactiver cette protection en lecture à l'intérieur d'une seconde, je présume que c'est vraiment facile à faire. Il semble que .is_extractable
est un simple attribut de la doc
, mais je ne pense pas que c'est aussi simple que de changer .is_extractable
à Vrai..
Quelqu'un sait comment je peux désactiver la lecture de protection sur un fichier pdf à l'aide de Python? Tous les conseils sont les bienvenus!
================================================
Vous trouverez ci-dessous le code avec lequel je suis actuellement extraire le texte de lecture non protégés.
def getTextFromPDF(rawFile):
resourceManager = PDFResourceManager(caching=True)
outfp = StringIO()
device = TextConverter(resourceManager, outfp, codec='utf-8', laparams=LAParams(), imagewriter=None)
interpreter = PDFPageInterpreter(resourceManager, device)
fileData = StringIO()
fileData.write(rawFile)
for page in PDFPage.get_pages(fileData, set(), maxpages=0, caching=True, check_extractable=True):
interpreter.process_page(page)
fileData.close()
device.close()
result = outfp.getvalue()
outfp.close()
return result
Avez-vous essayer de passer le mot de passe? pour la page en PDFPage.get_pages(fileData, set(), maxpages=0, mot de passe=mot de passe,la mise en cache=True, check_extractable=True):
OriginalL'auteur kramer65 | 2015-01-28
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, dans la plupart des cas, le contenu intégral de la PDF est en fait chiffré, en utilisant le mot de passe de la clé de chiffrement, et donc tout simplement réglage
.is_extractable
àTrue
ne va pas vous aider.Par ce fil:
Une bibliothèque existent pour supprimer les mots de passe de fichiers Pdf par programmation?
Je voudrais vous recommandons de retirer la protection en lecture avec un outil en ligne de commande tels que
qpdf
(facilement installable, par exemple sur Ubuntu utiliserapt-get install qpdf
si vous ne l'avez pas déjà):Puis ouvrez la déverrouillé le fichier avec
pdfminer
et faire de votre stuff.Pour un pur Python solution, vous pouvez essayer d'utiliser
PyPDF2
et ses.decrypt()
méthode, mais il ne fonctionne pas avec tous les types de chiffrement, alors, vraiment, vous êtes mieux de simplement en utilisantqpdf
- voir:https://github.com/mstamy2/PyPDF2/issues/53
OriginalL'auteur Jaza
Dans mon cas, il n'y a pas de mot de passe, mais simplement de réglage
check_extractable=False
contourné lePDFTextExtractionNotAllowed
exception pour un problème de fichier (qui a ouvert fine dans d'autres téléspectateurs).OriginalL'auteur jtlz2
J'ai eu quelques problèmes en essayant d'obtenir qpdf à se comporter dans mon programme. J'ai trouvé utile de la bibliothèque, pikepdf, qui est basé sur qpdf et convertit automatiquement les fichiers pdf afin d'être extractible.
Le code pour l'utiliser c'est assez simple:
OriginalL'auteur IanJ
Je suggère que le commentaire de ces deux lignes:
OriginalL'auteur mikewolfli