Это потому, что PyPDF2 является непоследовательным шабером .Вы должны помнить, что не все PDF-файлы построены одинаково, поэтому в зависимости от структуры, в которой был создан PDF-файл, PyPDF2 может или не сможет его удалить.
Обычно, когда я копирую pdf, мне приходится переключаться между PyPDF2, pdfminer и slate3k в зависимости от того, получаю я текст с использованием PyPDF2 или нет.Я начинаю с PyPDF2, так как он самый простой на мой взгляд.
Мой порядок надежности (насколько хорошо пакет может утилизировать PDF-файлы):
1.) Pdfminer
2.) Slate3k
3.) PyPDF2
Использование slate3k:
import glob as glob
all_files = r'C:/Users/NAME.NAME/Downloads/Eu/T/*.pdf'
for filenames in glob.glob(all_files):
with open(filenames,'rb') as f:
pdf_text = slate.PDF(f)
print(text)
Использование pdfminer
import glob as glob
import io
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = open(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos = set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,
password=password,
caching=caching,
check_extractable=True):
interpreter.process_page(page)
text = retstr.getvalue()
fp.close()
device.close()
retstr.close()
return text
all_files = r'C:/Users/NAME.NAME/Downloads/Eu/T/*.pdf'
for files in glob.glob(all_files):
convert_pdf_to_txt(files)
Возможно, вам придется изменить функции, чтобы получить текст в нужном вам формате. Как ясказал, что PDF-файлы могут быть построены очень многими способами, ваш текст может быть выведен различными способами.Но это должно привести вас в правильном направлении.