Конвертирование DOCX в PDF - libreoffice + Python

Igor123

Новичок
Пользователь
Апр 24, 2023
6
1
3
Возникла проблема конвертировать docx в pdf.
Как недавно узнал, libreoffice не дает на linux обрабатывать файлы в pdf. Альтернативы конвектации я не нашел.
После долгих мучений, и поиска информации, я нашел альтернативу:
Разворачивание в докере, отдельным контейнером, libreoffice, и обращение к нему по апи.
вроде все работает , все четко.
Но, я хотел бы , чтобы разворачивать внутри самого проекта, а не отдельным контейнером.
Подкажите, по настройке. Много перечитал, но путнего не нашел, либо не понял.
Разворачивать буду на ubuntu
 
Последнее редактирование модератором:
  • Мне нравится
Реакции: Student

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
Ты используешь libreoffice в качестве api для вызова конвертации в PDF?
 

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
Если вы хотите конвертировать документы в формате .docx в PDF без использования сторонних библиотек, вы можете использовать встроенный пакет subprocess для запуска LibreOffice в режиме headless.

Вот пример скрипта на Python:

Python:
import subprocess

def convert_to_pdf(input_file, output_file):
    command = ['soffice', '--headless', '--convert-to', 'pdf', '--outdir', '.', input_file]
    subprocess.run(command)
    pdf_file = input_file.replace('.docx', '.pdf')
    if pdf_file != output_file:
        subprocess.run(['mv', pdf_file, output_file])

Здесь мы запускаем LibreOffice в режиме headless и используем опцию --convert-to для указания формата конечного файла. Затем мы используем опцию --outdir для указания каталога, в котором будет сохранен выходной файл.

Чтобы использовать этот скрипт, просто вызовите функцию convert_to_pdf и передайте ей путь к входному файлу и путь к выходному файлу:

Python:
convert_to_pdf('input.docx', 'output.pdf')
 
  • Мне нравится
Реакции: robisho

Igor123

Новичок
Пользователь
Апр 24, 2023
6
1
3
Если вы хотите конвертировать документы в формате .docx в PDF без использования сторонних библиотек, вы можете использовать встроенный пакет subprocess для запуска LibreOffice в режиме headless.

Вот пример скрипта на Python:

Python:
import subprocess

def convert_to_pdf(input_file, output_file):
    command = ['soffice', '--headless', '--convert-to', 'pdf', '--outdir', '.', input_file]
    subprocess.run(command)
    pdf_file = input_file.replace('.docx', '.pdf')
    if pdf_file != output_file:
        subprocess.run(['mv', pdf_file, output_file])

Здесь мы запускаем LibreOffice в режиме headless и используем опцию --convert-to для указания формата конечного файла. Затем мы используем опцию --outdir для указания каталога, в котором будет сохранен выходной файл.

Чтобы использовать этот скрипт, просто вызовите функцию convert_to_pdf и передайте ей путь к входному файлу и путь к выходному файлу:

Python:
convert_to_pdf('input.docx', 'output.pdf')
проблема заключается в том, что это будет работать, если установлен libreoffice на linux. Если его нет, то выдает ошибку
Код:
File Not Found Error: [Errno 2] No such file or directory: 'soffice'

Без установки я решил проблему, просто развернул отдельным контейнером libreoffice, и конвектирую через него, обращаясь по Api. Но это не удобно , да и хотелось бы улучшить.
Один из вариантов, я думаю, просто вместе с проектом установить libreoffice. Для этого настроить файл Docker .
 
Последнее редактирование:

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
Почему не сделать это на рабочей машине? Просто установив программу?
 

Форум IT Специалистов