FileNotFoundError lors de l’utilisation de la fonction convert_from_path () du package pdf2image

J’essaie de convertir mon fichier pdf en fichier png en utilisant la bibliothèque pdf2 de Python. J’utilise le code suivant pour convertir mon fichier pdf.

from pdf2image import convert_from_path, convert_from_bytes pdf_file_path = './samples/my_pdf.pdf' images = convert_from_path(pdf_file_path) 

Je veux le faire afin de convertir ultérieurement mon fichier pdf en texte de chaîne en utilisant pytesseract .

Le problème que je continue à rencontrer est l’erreur FileNotFound suivante, même si le fichier est dans le bon chemin. Quelqu’un pourrait-il m’aider à comprendre ce que je fais mal?

 --------------------------------------------------------------------------- FileNotFoundError Traceback (most recent call last)  in () 1 from pdf2image import convert_from_path, convert_from_bytes 2 pdf_file_path = './samples/my_pdf.pdf' ----> 3 images = convert_from_path(pdf_file_path) C:\Users\hamza.ameur\AppData\Local\Continuum\anaconda3\lib\site-packages\pdf2image\pdf2image.py in convert_from_path(pdf_path, dpi, output_folder, first_page, last_page, fmt) 22 uid, args, parse_buffer_func = __build_command(['pdftoppm', '-r', str(dpi), pdf_path], output_folder, first_page, last_page, fmt) 23 ---> 24 proc = Popen(args, stdout=PIPE, stderr=PIPE) 25 26 data, err = proc.communicate() C:\Users\hamza.ameur\AppData\Local\Continuum\anaconda3\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors) 707 c2pread, c2pwrite, 708 errread, errwrite, --> 709 restore_signals, start_new_session) 710 except: 711 # Cleanup if the child failed starting. C:\Users\hamza.ameur\AppData\Local\Continuum\anaconda3\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session) 995 env, 996 os.fspath(cwd) if cwd is not None else None, --> 997 startupinfo) 998 finally: 999 # Child is launched. Close the parent's copy of those pipe FileNotFoundError: [WinError 2] The system cannot find the file specified 

Essayez d’utiliser le chemin complet.

Ex:

 import os basePath = os.path.dirname(os.path.realpath(__file__)) pdf_file_path = os.path.join(basePath, "samples/my_pdf.pdf") images = convert_from_path(pdf_file_path) 

Désolé pour la réponse tardive.

Raison

Après avoir creusé dans le code source de pdf2image , l’erreur est causée par pdfinfo , qui est une commande de base * nix, dans le package pdf2image . En conséquence, lorsque vous utilisez ce package sur Windows avec la commande pdfinfo manquante, cela provoquera l’erreur ci-dessus.

Code de pdf2image :

 #inside __page_count() function ... else: proc = Popen(["pdfinfo", pdf_path], stdout=PIPE, stderr=PIPE) ... 

À partir du code ci-dessus, vous pouvez voir qu’il a appelé un sous-processus de pdfinfo pour obtenir le nombre de pages du fichier pdf.

Solution

Télécharger les outils poppler de version de fenêtre à partir de: http://blog.alivate.com.au/poppler-windows/

décompressez-le et ajoutez l’emplacement de bin (comme C: \ somepath \ poppler-0.67.0_x86 \ poppler-0.67.0 \ bin) à votre environnement PATH.

redémarrez votre CMD et python virtualenv si vous ouvrez

Je viens d’avoir ce problème lors de l’exécution de Python 2.

Après avoir regardé à nouveau, la page pypi précise que le code n’est pas compatible avec Python 2.