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?
Antes de mais nada, tentaria dar caminhos absolutos para o comando.
Eu suspeito que o binário libreoffice
não funciona - você tem que localizar o binário soffice
e ver se isso funciona.
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!
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.
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
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:
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.
Tente novamente. Funciona com o DOCX simples?
Se novamente não funcionar, repita o passo 7, mas salve como ODT desta vez.
Repita o passo 8, mas certifique-se de referenciar o ODT desta vez.
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
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.
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"
O LibreOffice não pode apenas converter o DOCX para PDF na linha de comando:
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
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.
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
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.