«PDF-файл не был расшифрован» проблема все еще сохраняется в PyPDF2 - PullRequest
0 голосов
/ 12 февраля 2019

Получение следующих ошибок при чтении файлов PDF с использованием PyPDF2

raise utils.PdfReadError("File has not been decrypted")
PdfReadError: File has not been decrypted

Я пытался программно читать документы PDF через python.Для большинства файлов PDF это работает нормально, но для немногих я получаю следующую ошибку

raise utils.PdfReadError("File has not been decrypted")
PdfReadError: File has not been decrypted

Я уже пробовал решения из другого решения для работы со стеком: PyPDF 2 Расшифровка не работает

Это решение из приведенного выше вопроса все еще не решило мою проблему.

import os
import PyPDF2
from PyPDF2 import PdfFileReader

fp = open(filename)
pdfFile = PdfFileReader(fp)
if pdfFile.isEncrypted:
   try:
       pdfFile.decrypt('')
       print('File Decrypted (PyPDF2)')
   except:
       command = ("cp "+ filename +
        " temp.pdf; qpdf --password='' --decrypt temp.pdf " + filename
        + "; rm temp.pdf")
       os.system(command)
       print('File Decrypted (qpdf)')
       fp = open(filename)
       pdfFile = PdfFileReader(fp)
else:
    print('File Not Encrypted')

Кажется, что проблема не в том, что между именами файлов и паролем установлено ''.

Почему-то не удалосьчтобы решить эту ошибку.Любая помощь приветствуется.Спасибо.

Мой код:

import PyPDF2
import os
from os import listdir
from os.path import isfile, join

mypath='D:/POC PDF'
onlyfiles = [os.path.join(mypath, f) for f in os.listdir(mypath) if os.path.isfile(os.path.join(mypath, f))]
for file in onlyfiles:
    fileReader = PyPDF2.PdfFileReader(open(file,'rb'))
    countpage = fileReader.getNumPages()
    print(countpage)

1 Ответ

0 голосов
/ 19 февраля 2019

Чтобы ответить на мой собственный вопрос: благодаря моему другу я нашел лучшую упаковку, чем PyPDF2.Это PyMuPDF.Вот пример реализации

import fitz

def extractText(file): 
    doc = fitz.open(file) 
    text = []
    for page in doc: 
        t = page.getText().encode("utf8") 
        text.append(t)
    return text
...