Команда `libreoffice —headless —convert-to pdf test.docx —outdir / pdf` не работает

Я должен ждать долго после использования этой команды LibreOffice, которая предназначена для преобразования DOCX в PDF:

libreoffice --headless --convert-to pdf test.docx --outdir /pdf

Но я не получаю ответа и ошибок. Ни один файл не конвертируется. Похоже терминал висит.

Итак, есть ли способ отследить ошибку?

47

Решение

  1. Прежде всего, я бы попробовал указать абсолютные пути к команде.

  2. Я подозреваю, что libreoffice бинарный не работает — вы должны найти soffice двоичный файл и посмотреть, если это работает.

  3. Тогда ваш --convert-to pdf недостаточно Это должно быть:

    --convert-to pdf:writer_pdf_Export
    

    Обязательно следуйте именно этой заглавной!

  4. Затем команда не будет работать, если в вашей системе уже запущен экземпляр GUI LibreOffice. Это вызвано ошибкой известен с 2011 года. Добавьте этот дополнительный параметр к вашей команде:

     "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"

    Это создаст новую отдельную среду, которая может использоваться вторым, безголовым экземпляром LO без вмешательства в возможно работающий первый экземпляр GUI LO, запущенный тем же пользователем.

  5. Кроме того, убедитесь, что --outdir /pdf Вы указываете, что существует, и что у вас есть разрешение на запись в него. Или, скорее, используйте другой выходной каталог. Даже если это только для первого тестирования и этого раунда отладки:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Следовательно:

    /path/to/soffice                                                     \
    --headless                                                         \
    "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}" \
    --convert-to pdf:writer_pdf_Export                                 \
    --outdir ${HOME}/lo_pdfs                                           \
    /path/to/test.docx
    

    Это работает для меня на Mac OS X Mavericks 10.9.5 с LibreOffice v4.4.3.2 (используя мой конкретный путь для двоичного файла soffice который все равно будет другим для вас …).

    Если все это не работает:

  7. Это может быть проблема с конкретным файлом DOCX, с которым вы пытаетесь выполнить команду … Так что сначала создайте очень простой собственный документ DOCX. Для этого используйте сам LibreOffice. Напишите «Привет, мир!» на пустой странице. Сохраните это как DOCX.

  8. Попробуйте снова. Работает ли он с простым DOCX?

  9. Если это снова не работает, повторите шаг 7, но на этот раз сохраните как ODT.

  10. Повторите шаг 8, но на этот раз обязательно укажите ODT.

  11. Последнее: используйте полный путь к soffice, чтобы soffice.bin и к libreoffice и запустить каждый с -h параметр:

    $ /path/to/libreoffice -h
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Вы вообще получаете выход здесь?
    • Для какой из трех двоичных / символических ссылок?
    • Запишите результаты.
    • Расскажите нам свои выводы !!!

    Сравните их с командной строкой, которую вы использовали:

    Есть ли какие-либо изменения в именах параметров, заглавных буквах, количестве используемых тире и т. Д. ??

    Для сравнения, мой собственный вывод здесь:

    $ /Applications/LibreOffice.app/Contents/MacOS/soffice -h
    
    LibreOffice 4.4.3.2 88805f81e9fe61362df02b9941de8e38a9b5fd16
    
    Usage: soffice [options] [documents...]
    
    Options:
    --minimized    keep startup bitmap minimized.
    --invisible    no startup screen, no default document and no UI.
    --norestore    suppress restart/restore after fatal errors.
    --quickstart   starts the quickstart service
    --nologo       don't show startup screen.
    --nolockcheck  don't check for remote instances using the installation
    --nodefault    don't start with an empty document
    --headless     like invisible but no userinteraction at all.
    --help/-h/-?   show this message and exit.
    --version      display the version information.
    --writer       create new text document.
    --calc         create new spreadsheet document.
    --draw         create new drawing.
    --impress      create new presentation.
    --base         create new database.
    --math         create new formula.
    --global       create new global document.
    --web          create new HTML document.
    -o             open documents regardless whether they are templates or not.
    -n             always open documents as new files (use as template).
    
    --display <display>
    Specify X-Display to use in Unix/X11 versions.
    -p <documents...>
    print the specified documents on the default printer.
    --pt <printer> <documents...>
    print the specified documents on the specified printer.
    --view <documents...>
    open the specified documents in viewer-(readonly-)mode.
    --show <presentation>
    open the specified presentation and start it immediately
    --accept=<accept-string>
    Specify an UNO connect-string to create an UNO acceptor through which
    other programs can connect to access the API
    --unaccept=<accept-string>
    Close an acceptor that was created with --accept=<accept-string>
    Use --unnaccept=all to close all open acceptors
    --infilter=<filter>[:filter_options]
    Force an input filter type if possible
    Eg. --infilter="Calc Office Open XML"--infilter="Text (encoded):UTF8,LF,,,"--convert-to output_file_extension[:output_filter_name[:output_filter_options]] [--outdir output_dir] files
    Batch convert files.
    If --outdir is not specified then current working dir is used as output_dir.
    Eg. --convert-to pdf *.doc
    --convert-to pdf:writer_pdf_Export --outdir /home/user *.doc
    --convert-to "html:XHTML Writer File:UTF8" *.doc
    --convert-to "txt:Text (encoded):UTF8" *.doc
    --print-to-file [-printer-name printer_name] [--outdir output_dir] files
    Batch print files to file.
    If --outdir is not specified then current working dir is used as output_dir.
    Eg. --print-to-file *.doc
    --print-to-file --printer-name nasty_lowres_printer --outdir /home/user *.doc
    --cat files
    Dump text content of the files to console
    Eg. --cat *.odt
    --pidfile file
    Store soffice.bin pid to file.
    -env:<VAR>[=<VALUE>]
    Set a bootstrap variable.
    Eg. -env:UserInstallation=file:///tmp/test to set a non-default user profile path.
    
    Remaining arguments will be treated as filenames or URLs of documents to open.
    
  12. Добавьте еще один аргумент в вашу командную строку, чтобы обеспечить применение фильтра ввода, когда soffice открывает ваш файл DOCX:

    --infilter="Microsoft Word 2007/2010/2013 XML"

    или же

    --infilter="Microsoft Word 2007/2010/2013 XML"--infilter="Microsoft Word 2007-2013 XML"--infilter="Microsoft Word 2007-2013 XML Template"--infilter="Microsoft Word 95 Template"--infilter="MS Word 95 Vorlage"--infilter="Microsoft Word 97/2000/XP Template"--infilter="MS Word 97 Vorlage"--infilter="Microsoft Word 2003 XML"--infilter="MS Word 2003 XML"--infilter="Microsoft Word 2007 XML Template"--infilter="MS Word 2007 XML Template"--infilter="Microsoft Word 6.0"--infilter="MS WinWord 6.0"--infilter="Microsoft Word 95"--infilter="MS Word 95"--infilter="Microsoft Word 97/2000/XP"--infilter="MS Word 97"--infilter="Microsoft Word 2007 XML"--infilter="MS Word 2007 XML"--infilter="Microsoft WinWord 5"--infilter="MS WinWord 5"

Обновить

LibreOffice может не только конвертировать DOCX в PDF из командной строки:

  • Может обрабатывать любой Формат ввода, который он может открыть и «прочитать»: DOC, XLS, XLSX, PPT, PPTX, …
  • Это может конвертировать в любой выходной формат, который он может «записать»: DOC, XLS, XLSX, PPT, PPTX, …

Конечно, результаты никогда не будут идеальными, а иногда они даже будут неприемлемы для вас.

Число рейнольдса вывод как PDF:

Чтобы определить, какой компонент LibreOffice генерирует PDF-файл, вы можете использовать следующие варианты:

--convert-to pdf:writer_pdf_Export
--convert-to pdf:calc_pdf_Export
--convert-to pdf:draw_pdf_Export
--convert-to pdf:impress_pdf_Export
--convert-to pdf:writer_web_pdf_Export

Число рейнольдса вход, который не DOCX:

Чтобы применить инфильтры для входных форматов, отличных от DOCX, вы можете использовать (список не полный):

--infilter="HTML Document"                      # for HTML input
--infilter="MediaWiki"                          # for MediaWiki input
--infilter="Text CSV"                           # for CSV spreadsheet input
--infilter="Microsoft PowerPoint 2007/2010 XML" # for PPTX input
--infilter="Microsoft PowerPoint 97/2000/XP"    # for PPT input
--infilter="Windows Metafile"                   # for WMF input
--infilter="Enhanced Metafile"                  # for EMF input
--infilter="Scalable Vector Graphics"           # for SVG input
--infilter="Microsoft Excel 2007/2010 XML"      # for XLSX input
--infilter="Microsoft Excel 97/2000/XP"         # for XLS input
--infilter="Microsoft Excel 95"                 # for some XLS input
--infilter="Microsoft Excel 5.0"                # for some XLS input

Число рейнольдса выход, который не PDF:

Чтобы преобразовать в определенные выходные форматы, вы можете использовать (список не полный):

--convert-to html:HTML
--convert-to html:draw_html_Export                 # force "Draw" to generate the HTML
--convert-to mediawiki:MediaWiki_Web               # generate MediaWiki output
--convert-to csv:"Text - txt - csv (StarCalc)"     # generate CSV spreadsheet output
--convert-to pptx:"Impress MS PowerPoint 2007 XML" # generate PPTX
--convert-to ppt:"MS PowerPoint 97"                # generate PPT
--convert-to wmf:impress_wmf_Export                # force "Impress" to generate the WMF
--convert-to wmf:draw_wmf_Export                   # force "Draw" to generate the WMF
--convert-to emf:impress_emf_Export                # force "Impress" to generate the EMF
--convert-to emf:draw_emf_Export                   # force "Draw" to generate the EMF
--convert-to svg:impress_svg_Export                # force "Impress" to generate the SVG
--convert-to svg:draw_svg_Export                   # force "Draw" to generate the SVG
--convert-to xlsx:"Calc MS Excel 2007 XML"         # generate XLSX
--convert-to xls:"MS Excel 97"                     # generate XLS like Excel 97
--convert-to xls:"MS Excel 95"                     # generate XLS like Excel 95
--convert-to xls:"MS Excel 5.0/95"                 # generate XLS like Excel 5.0/95
79

Другие решения

Звучит глупо, но я пострадал только от этого: в Ubuntu 14.04 недостаточно установить только пакет libreoffice-core или -common для преобразования в PDF, но вместо этого вам нужно установить libreoffice-writer. Важно отметить, что libreoffice-core | common, кажется, вводит некоторую функциональную базу libreoffice, отсюда и имя ;-), которое не выдает ошибку при выполнении для преобразования какого-либо файла, а вместо этого просто ожидает некоторый сокет или что-то для ввода или чего-то еще … После того, как я установил libreoffice-writer, у которого -core | common в качестве зависимости, преобразование некоторого ODT-файла в PDF работало как талисман с той же командной строкой, что и раньше.

Кажется немного сумасшедшим, что приложение выглядит так, как-то работает, но просто не может из-за отсутствия пакетов и ничего об этом не говорит.

4

Обновить

Текущая версия libreoffice работает: v5.2.6.2 (mac)

Я использую следующую команду

/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir . the_file_to_convert

OLD

Похоже, что преобразование не работает в более новой версии (> 4.2.4.2)
Я использую libreoffice 4.2.4.2
Вы можете скачать более старые версии с http://downloadarchive.documentfoundation.org/libreoffice/old/4.2.4.2/

  • linux (используя пакет deb):

    libreoffice4.2 --headless --convert-to pdf  myfile.odt
    
  • окна:

    swriter.exe --headless --convert-to pdf myfile.odt
    
3

Я тоже использую LibreOffice 4.2.8.2 (в GNU / Linux), но я пытался преобразовать файл DOC в файл HTML. Я установил libreoffice-headless, но терминал тоже завис. Я пробовал каждую пулю Курта Пфайфа, но она не работала …

решение было просто: установка libreoffice-writer (может быть libreoffice-filters тоже хорошо, но это зависит от libreoffice-writer плюс другие большие компоненты LibreOffice).

Надеюсь, это поможет.

0
По вопросам рекламы [email protected]