Ya no necesitas buscar más en otros sitios porque estás al sitio justo, tenemos la solución que buscas y sin problemas.
Solución:
-
En primer lugar, lo probaría dando rutas absolutas al comando.
-
Sospecho que el
libreoffice
binario no funciona, tienes que localizar elsoffice
binario y ver si funciona. -
Entonces tu
--convert-to pdf
No es suficiente. Necesita ser:--convert-to pdf:writer_pdf_Export
¡Asegúrese de seguir exactamente estas mayúsculas!
-
A continuación, el comando no funcionará si ya hay una instancia de GUI de LibreOffice en funcionamiento en su sistema. Es causado por un error conocido desde 2011. Agregue este parámetro adicional a su comando:
"-env:UserInstallation=file:///tmp/LibreOffice_Conversion_$USER"
Esto creará un entorno nuevo e independiente que puede ser utilizado por una segunda instancia de LO sin cabeza sin interferir con una primera instancia de LO de GUI que posiblemente se esté ejecutando iniciada por el mismo usuario.
-
Además, asegúrese de que el
--outdir /pdf
que especifique que existe y que tiene permiso de escritura. O, mejor dicho, utilice un directorio de salida diferente. Incluso si es solo para la primera prueba y esta ronda de depuración:$ mkdir $HOME/lo_pdfs
-
Por eso:
/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
Esto me funciona en Mac OS X Mavericks 10.9.5 con LibreOffice v4.4.3.2 (usando mi ruta específica para el binario
soffice
que será diferente para ti de todos modos …).Si todo esto no funciona:
-
Puede ser un problema con el archivo DOCX específico con el que intentas usar el comando … Así que primero crea tu propio documento DOCX muy simple. Utilice LibreOffice para esto. Escribe “¡Hola mundo!” en una página que de otro modo estaría vacía. Guárdelo como DOCX.
-
Intentar otra vez. ¿Funciona con el DOCX simple?
-
Si nuevamente no funciona, repita el paso 7, pero esta vez guárdelo como ODT.
-
Repita el paso 8, pero asegúrese de hacer referencia al ODT esta vez.
-
Último: use la ruta completa para
soffice
, parasoffice.bin
y paralibreoffice
y ejecutar cada uno con el-h
parámetro:$ /path/to/libreoffice -h $ /path/to/soffice -h $ /path/to/soffice.bin -h
- ¿Incluso obtienes una salida aquí?
- ¿Para cuál de los tres binarios / enlaces simbólicos?
- Registre las salidas.
- Cuéntanos tus salidas !!!
Compárelos con la línea de comando que utilizó:
¿Hay cambios en los nombres de los parámetros, las mayúsculas, el número de guiones utilizados, etc.?
A modo de comparación, mi propia salida está aquí:
$ /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
Specify X-Display to use in Unix/X11 versions. -p print the specified documents on the default printer. --pt print the specified documents on the specified printer. --view open the specified documents in viewer-(readonly-)mode. --show open the specified presentation and start it immediately --accept= Specify an UNO connect-string to create an UNO acceptor through which other programs can connect to access the API --unaccept= Close an acceptor that was created with --accept= Use --unnaccept=all to close all open acceptors --infilter= [: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:[= ] 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. -
Agregue un argumento más a su línea de comando para hacer cumplir la aplicación de un filtro de entrada cuando
soffice
abre su archivo DOCX:--infilter="Microsoft Word 2007/2010/2013 XML"
o
--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"
Actualizar
LibreOffice no solo puede convertir DOCX a PDF en la línea de comando:
- Puede procesar alguna formato de entrada que puede abrir y “leer”: DOC, XLS, XLSX, PPT, PPTX, …
- Puede convertir a alguna formato de salida que puede “escribir”: DOC, XLS, XLSX, PPT, PPTX, …
Por supuesto, los resultados nunca serán perfectos y, a veces, incluso serán inaceptables para usted.
Re. salida como PDF:
Para controlar qué componente de LibreOffice genera salida PDF, puede utilizar 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 es no DOCX:
Para hacer cumplir los infiltrados para formatos de entrada que no son DOCX, puede usar (la lista no 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. salida que es no PDF:
Para convertir a formatos de salida específicos, puede usar (lista no 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
Actualizar
La versión actual de libreoffice está funcionando: v5.2.6.2 (mac)
Estoy usando el siguiente comando
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir . the_file_to_convert
VIEJO
Parece que la conversión no funciona en la versión más reciente (> 4.2.4.2) Estoy usando libreoffice 4.2.4.2 Puede descargar versiones anteriores desde http://downloadarchive.documentfoundation.org/libreoffice/old/4.2.4.2/
-
linux (usando el paquete deb):
libreoffice4.2 --headless --convert-to pdf myfile.odt
-
ventanas:
swriter.exe --headless --convert-to pdf myfile.odt
Puede sonar estúpido, pero sufrí solo de esto: en Ubuntu 14.04 no es suficiente instalar solo el paquete libreoffice-core o -common para convertir a PDF, sino que necesita instalar libreoffice-writer en su lugar / adicionalmente. Lo importante a tener en cuenta es que libreoffice-core | common parece traer alguna base funcional de libreoffice, de ahí el nombre ;-), que no genera errores si se ejecuta para convertir algún archivo, sino que parece esperar en algún socket o algo así para la entrada o lo que sea … Después de instalar libreoffice-writer, que tiene -core | common como dependencia, la conversión de algún archivo ODT a PDF funcionó a la perfección con exactamente la misma línea de comando que se usó antes.
Parece un poco loco que la aplicación parezca que funciona de alguna manera, pero simplemente no podría nunca debido a la falta de paquetes y no dice nada al respecto.
Finalizando este artículo puedes encontrar las críticas de otros administradores, tú además eres capaz mostrar el tuyo si te apetece.