Как конвертировать из PDF в DOCX на Python
Все варианты кода выдают битый файл, хотя исходник читаемый, онлайн сервисы с эти справляются без ошибок.
Вот исходный файл obj46882-pd30-000198.pdf (Загрузка файла)
Вот код:
from pdf2docx import Converter
def convert_pdf_to_docx(pdf_file, docx_file):
# Создание объекта Converter
cv = Converter(pdf_file)
# Конвертация указанной страницы PDF в docx
cv.convert(docx_file, start=0, end=None)
cv.close()
# Конвертация PDF в файл Docx
convert_pdf_to_docx("2.pdf", "Output.docx")
На выходе получаю такое безобразие:
Как возможно исправить эту ошибку?
Ответы (2 шт):
- В общем случае эта задача - не решаемая. Потому что эти форматы - PDF и DOCХ - совершенно разные. В частности, если разобраться - каждый из них содержит встроенный в документ этого формата язык программирования (пример для PDF)
А вот эта статья показывает, насколько сложной вообще является задача выделения текста внутри PDF.
По приведенному Вами примеру видно, что авторы используемого преобразователя "не заморачивались": взяли и прикрутили банальную распознавалку текста. Которая, во первых, не умеет правильно определять язык, а во вторых, и в буквах ошибается. Зуб не дам, но, скорее всего, это какой нибудь банальный тессеракт. Это хорошо выглядело году этак в 1990-м.
Но всё не так плохо. Если сильно ограничить документы, например, сказать, что все документы - это таблицы с текстом (страница без таблиц - это частный случай, когда таблиц - 0 штук) - то задача становится решаемой, потому что разбиаение на ячейки таблиц можно сделать очень простым алгоритмом. Правда, надо использовать другую, более надежную распознавалку.
Мне кажется, что вот эта статья даст новое направление Вашим поискам
window10 python 3.10 LibreOffice 7.4.1 Ошибка не повторяется мой код:
from pdf2docx import Converter
path_input = 'obj46882_pd30-000198.pdf'
path_output = 'res1'
cv = Converter(path_input)
cv.convert(path_output+'.docx', start=0, end=1)
cv.close()
результат: res1.docx (дополнительно через найти и заменить, удалил неразрывной пробел)
А еще не понятна задача, современный MS Word и LibreOffice Writer Автоматически открывают такого типа файлы pdf(не картинка)