ti-enxame.com

Comando `libreoffice --headless --convert-to pdf test.docx --outdir/pdf` não está funcionando

Eu tenho que esperar por muito tempo depois de usar este comando do LibreOffice que se destina a converter o DOCX em PDF:

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

Mas eu não estou recebendo resposta e sem erro. Nenhum arquivo é convertido. Parece que o terminal está pendurado.

Então, existe alguma maneira de rastrear o erro?

47
vishal
  1. Antes de mais nada, tentaria dar caminhos absolutos para o comando.

  2. Eu suspeito que o binário libreoffice não funciona - você tem que localizar o binário soffice e ver se isso funciona.

  3. Então, seu --convert-to pdf não é suficiente. Precisa ser:

    --convert-to pdf:writer_pdf_Export
    

    Certifique-se de seguir exatamente esta capitalização!

  4. Em seguida, o comando não funcionará se já houver uma instância da GUI do LibreOffice instalada em seu sistema. É causado por bug conhecido desde 2011 . Adicione este parâmetro adicional ao seu comando:

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

    Isso criará um ambiente novo e separado que pode ser utilizado por uma segunda instância de LO sem cabeçalho, sem interferir com uma primeira instância da GUI LO em execução possivelmente pelo mesmo usuário.

  5. Além disso, verifique se o --outdir /pdf que você especificou existe e se você tem permissão de gravação para ele. Ou melhor, use um diretório de saída diferente. Mesmo que seja apenas para o primeiro teste e esta rodada de depuração:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Conseqüentemente:

    /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
    

    Isso funciona para mim no Mac OS X Mavericks 10.9.5 com o LibreOffice v4.4.3.2 (usando o meu caminho específico para o binário soffice que será diferente para você de qualquer maneira ...).

    Se tudo isso não funcionar:

  7. Pode haver um problema com o arquivo DOCX específico com o qual você experimentou o comando ... Portanto, crie um documento DOCX muito simples primeiro. Use o próprio LibreOffice para isso. Escreva "Olá mundo!" em uma página vazia. Salve como DOCX.

  8. Tente novamente. Funciona com o DOCX simples?

  9. Se novamente não funcionar, repita o passo 7, mas salve como ODT desta vez.

  10. Repita o passo 8, mas certifique-se de referenciar o ODT desta vez.

  11. Por último: use o caminho completo para soffice, soffice.bin e libreoffice e execute cada um com o parâmetro -h:

    $ /path/to/libreoffice -h
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Você consegue uma saída aqui?
    • Para qual dos três binários/links simbólicos?
    • Registre as saídas.
    • Nos conte suas saídas !!! 

    Compare-os com a linha de comando que você usou:

    Há alguma mudança nos nomes dos parâmetros, capitalizações, número de traços usados, etc?

    Para comparação, minha própria saída está aqui:

    $ /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. Adicione mais um argumento à sua linha de comando para impor a aplicação de um filtro de entrada quando soffice abrir seu arquivo DOCX:

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

    ou

    --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"
    

Atualizar

O LibreOffice não pode apenas converter o DOCX para PDF na linha de comando:

  • Pode processar o formato de entrada any que pode abrir e "ler": DOC, XLS, XLSX, PPT, PPTX, ...
  • Pode converter ao formato de saída any que pode "escrever": DOC, XLS, XLSX, PPT, PPTX, ...

Naturalmente, os resultados nunca serão perfeitos e, às vezes, eles não serão aceitáveis ​​para você.

Re. saída como PDF:

Para controlar, qual componente do LibreOffice gera a saída PDF, você pode usar estas variantes:

--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. entrada que é não DOCX:

Para impor infra-estruturas para formatos de entrada não-DOCX, você poderia usar (lista não está completa):

--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. saída que é não PDF:

Para converter em formatos de saída específicos, você pode usar (lista não completa):

--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
Kurt Pfeifle

Pode parecer estúpido, mas eu sofri apenas com isso: no Ubuntu 14.04, não é suficiente instalar apenas o pacote libreoffice-core ou -common para converter em PDF, mas você precisa instalar o libreoffice-writer em vez disso/adicionalmente. O importante a notar é que o libreoffice-core | common parece trazer alguma base funcional do libreoffice, daí o nome ;-), que não comete erros se for executado para converter algum arquivo, mas apenas parece esperar em algum socket ou tal para entrada ou qualquer outra coisa ... Depois que instalei o libreoffice-writer, que tem -core | common como uma dependência, converter algum arquivo ODT para PDF funcionava como um encanto com a mesma linha de comando usada anteriormente.

Parece um pouco louco que o aplicativo pareça que funciona de alguma forma, mas simplesmente não poderia nunca por causa da falta de pacotes, e não diz nada sobre isso.

4
Thorsten Schöning

Atualizar

A versão atual do libreoffice está funcionando: v5.2.6.2 (mac) 

Estou usando o seguinte comando

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

VELHO

Parece que a conversão não está funcionando em uma versão mais recente (> 4.2.4.2) Estou usando o libreoffice 4.2.4.2 Você pode baixar versões antigas de http: //downloadarchive.documentfoundation .org/libreoffice/old/4.2.4.2/

  • linux (usando o pacote deb):

    libreoffice4.2 --headless --convert-to pdf  myfile.odt
    
  • janelas:

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

Também estou usando o LibreOffice 4.2.8.2 (no GNU/Linux), mas tentei converter um arquivo DOC em um arquivo HTML. Eu instalei libreoffice-headless, mas o terminal estava pendurado também. Eu tentei cada bala de Kurt Pfeifle, mas não estava funcionando ...

A soluçãofoi simples: instalar libreoffice-writer (talvez libreoffice-filters também está ok, mas depende do libreoffice-writer mais os outros grandes componentes do LibreOffice).

Espero que isso ajude.

0
Linkid