проблема при вызове libreoffice для генерации pdf из python of docx с диаграммами - PullRequest
0 голосов
/ 07 января 2019

с использованием Debian 9.5, Python 3.5, libreoffice 5.2, x86_64 arch.

У меня есть файл слов (docx) из 22 страниц, который содержит несколько диаграмм.

При запуске из терминала с использованием bash, следующая команда работает правильно, т. Е. Генерирует PDF-файл из 22 страниц:

/usr/bin/libreoffice --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx

выход:

конвертировать /tmp/docx5/output.docx -> /tmp/docx5//output.pdf с использованием фильтра : writer_pdf_Export

Проблема заключается в следующем: та же самая внешняя команда, выполняемая из python с использованием subprocess.run, создает pdf-файл только из одной страницы вместо 22 страниц без сообщения об ошибке.

Другие экземпляры libreoffice не запущены.

cmd = '/usr/bin/libreoffice --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx'

print(subprocess.run(cmd, shell=True, check=True))

это вывод этого скрипта python:

конвертировать /tmp/docx5/output.docx -> /tmp/docx5//output.pdf с использованием фильтра : writer_pdf_Export

CompletedProcess (args = '/ usr / bin / libreoffice --headless --convert-to pdf --outdir / tmp / docx5 / /tmp/docx5/output.docx ', код возврата = 0)

По-видимому, генерация PDF была успешной, но была преобразована только первая страница файла DOCX.

Кажется, что генерация pdf прекращается, когда libreoffice, запущенный из python, встречает первый график.

Требуется ли libreoffice среда выполнения java для генерации pdf?

Может ли быть проблема с безголовыми операциями libreoffice?

Есть подсказка?

Обновление:

добавлена ​​опция 'env: UserInstallation', при запуске из python модифицированный скрипт:

cmd = '/usr/bin/libreoffice -env:UserInstallation=file:///home/marco/  --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx'

print(subprocess.run(cmd, shell=True, check=True))

Вывод следующий, теперь он содержит предупреждение о том, что не найдена среда выполнения Java:

javaldx: не удалось найти среду выполнения Java!

Предупреждение: не удалось прочитать путь из javaldx

конвертировать /tmp/docx5/output.docx -> /tmp/docx5//output.pdf, используя фильтр : writer_pdf_Export

CompletedProcess (арг = '/ USR / бен / LibreOffice -env: UserInstallation = file: /// home / marco / --headless --convert-to pdf --outdir / tmp / docx5 / /tmp/docx5/output.docx ', код возврата = 0)

Есть идеи о том, как указать параметры командной строки, где libreoffice может найти необходимую среду выполнения Java?

1 Ответ

0 голосов
/ 08 января 2019

Я нашел решение, хотя мне не ясна техническая причина:

это РАБОТАЕТ (полная генерация PDF с использованием libreoffice файла docx с диаграммами):

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/lib/jvm/java-10-oracle/bin:/usr/lib/jvm/java-10-oracle/db/bin /usr/bin/libreoffice -env:UserInstallation=file:///tmp/docx5/ --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx

это НЕ РАБОТАЕТ (частичная генерация PDF с использованием libreoffice файла docx с диаграммами):

PATH=/home/marco/venv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/lib/jvm/java-10-oracle/bin:/usr/lib/jvm/java-10-oracle/db/bin /usr/bin/libreoffice -env:UserInstallation=file:///tmp/docx5/ --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx

Кажется, что python virtualenv вызывает какой-то конфликт с libreoffice. Я использовал strace, но ничего полезного не нашел.

Таким образом, решение для моего случая состоит в том, чтобы удалить путь virtualenv из переменной среды PATH при вызове libreoffice из python, и этого можно добиться, отключив virtualenv:

marco@pc:~$ source venv/bin/activate
...
(venv) marco@pc:~$ deactivate && /usr/bin/libreoffice -env:UserInstallation=file:///tmp/docx5/ --headless --convert-to pdf --outdir /tmp/docx5/ /tmp/docx5/output.docx
...