Це працює у травні 2020 року за допомогою PDFminer six у Python3.
Встановлення пакета
$ pip install pdfminer.six
Імпорт пакету
from pdfminer.high_level import extract_text
Використання PDF-файлу, збереженого на диску
text = extract_text('report.pdf')
Або як варіант:
with open('report.pdf','rb') as f:
text = extract_text(open('report.pdf','rb'))
Використання PDF-файлу вже в пам'яті
Якщо PDF-файл вже є в пам'яті, наприклад, якщо він отриманий з Інтернету разом із бібліотекою запитів, його можна перетворити в потік за допомогою io
бібліотеки:
import io
response = requests.get(url)
text = extract_text(io.BytesIO(response.content))
Продуктивність та надійність порівняно з PyPDF2
PDFminer.six працює надійніше, ніж PyPDF2 (який не працює з певними типами PDF-файлів), зокрема PDF версії 1.7
Однак вилучення тексту за допомогою PDFminer.six значно повільніше, ніж PyPDF2, у 6 разів.
Я приурочив вилучення тексту timeit
за допомогою 15-дюймового MBP (2018), синхронізуючи лише функцію вилучення (без відкриття файлу тощо), до 10-сторінкового PDF-файлу і отримав такі результати:
PDFminer.six: 2.88 sec
PyPDF2: 0.45 sec
pdfminer.six також має величезний розмір, вимагаючи pycryptodome, який потребує GCC та інших речей, встановлених, пересуваючи мінімальний образ докера встановлення на Alpine Linux з 80 МБ на 350 МБ. PyPDF2 не має помітного впливу на зберігання.