Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

  • Я прежде всего попробую его с предоставлением абсолютных путей к команде.

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

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

    --convert-to pdf:writer_pdf_Export
    

    Обязательно следуйте именно этой капитализации!

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

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

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

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

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

    /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, который будет по-другому для вас...).

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

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

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

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

  • Повторите шаг 8, но не забудьте на этот раз ссылаться на ODT.

  • Last: используйте полный путь до 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.
    
  • Добавьте еще один аргумент в свою командную строку для принудительного применения приложения входного фильтра, когда 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"
    

Update

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

  • Он может обрабатывать любой формат ввода, который он может открыть и "читать": DOC, XLS, XLSX, PPT, PPTX,...
  • Он может конвертировать в любой выходной формат, который он может "писать": DOC, XLS, XLSX, PPT, PPTX,...

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

Re. вывод в формате 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

Re. вход, который не является 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

Re. вывода, который не является 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

Ответ 2

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

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

Ответ 3

Обновление

Текущая версия 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
    

Ответ 4

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

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

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

Ответ 5

Я столкнулся с той же проблемой и застрял на целый день; Глупый я закончил, выяснив, что я пытался конвертировать из и в сетевую файловую систему; даже если у меня есть право написать libreoffice, кажется, не поддерживает его, или, по крайней мере, не в моей конфигурации.

Я решил эту проблему путем преобразования в /tmp и перемещения файла вручную. Надеюсь, поможет.