soffice convert php pdf ubuntu-14.04 libreoffice libreoffice-base

php - soffice - libreoffice-- invisible-- convert to docx ms word 2007 xml



El comando `libreoffice--headhead--convert-to pdf test.docx--outdir/pdf` no funciona (5)

Tengo que esperar mucho después de usar este comando de LibreOffice que está destinado a convertir DOCX en PDF:

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

Pero no recibo respuesta ni error. No se convierte ningún archivo. Parece que la terminal está colgando.

Entonces, ¿hay alguna forma de rastrear el error?


  1. En primer lugar, lo intentaría dando rutas absolutas al comando.

  2. Sospecho que el binario de libreoffice no funciona: debe localizar el binario de soffice y ver si funciona.

  3. Entonces, su --convert-to pdf no es suficiente. Necesita ser:

    --convert-to pdf:writer_pdf_Export

    ¡Asegúrese de seguir exactamente esta capitalización!

  4. A continuación, el comando no funcionará si ya hay una instancia de LibreOffice GUI 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 nuevo entorno separado que puede ser utilizado por una segunda instancia de LO sin cabeza sin interferir con una posible primera instancia de LO de GUI iniciada por el mismo usuario.

  5. Además, asegúrese de que --outdir /pdf el --outdir /pdf que especifique y de que tenga permiso de escritura. O, más bien, use un directorio de salida diferente. Incluso si es solo para la primera prueba y esta ronda de depuración:

    $ mkdir ${HOME}/lo_pdfs

  6. Por lo tanto:

    /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 funciona para mí en Mac OS X Mavericks 10.9.5 con LibreOffice v4.4.3.2 (usando mi ruta específica para el soffice binario que será diferente para usted de todos modos ...).

    Si todo esto no funciona:

  7. Puede ser un problema con el archivo DOCX específico con el que prueba el comando ... Así que primero cree un documento DOCX muy simple. Use LibreOffice para esto. Escribe "¡Hola mundo!" en una página vacía Guárdelo como DOCX.

  8. Inténtalo de nuevo. ¿Funciona con el simple DOCX?

  9. Si nuevamente no funciona, repita el paso 7, pero guárdelo como ODT esta vez.

  10. Repita el paso 8, pero asegúrese de hacer referencia a la ODT esta vez.

  11. Último: use la ruta completa a soffice , soffice.bin y libreoffice y ejecute cada uno con el parámetro -h :

    $ /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?
    • Grabar las salidas.
    • ¡Cuéntanos tus resultados!

    Compárelos con la línea de comando que utilizó:

    ¿Hay algún cambio 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 <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. Agregue un argumento más a su línea de comando para aplicar la aplicación de un filtro de entrada cuando soffice abra 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 cualquier formato de entrada que pueda abrir y "leer": DOC, XLS, XLSX, PPT, PPTX, ...
  • Puede convertir a cualquier formato de salida que pueda "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 en PDF, puede 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 no es DOCX :

Para aplicar infiltrados para formatos de entrada que no sean 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 no es 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


Puede sonar estúpido, pero sufrí por esto: en Ubuntu 14.04 no es suficiente instalar solo el paquete libreoffice-core o -common para convertirlo 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 falla si se ejecuta para convertir algún archivo, sino que parece esperar en algún socket o tal como entrada o lo que sea ... Después de instalar libreoffice-writer, que tiene -core | common como una dependencia, la conversión de un archivo ODT a PDF funcionó de maravilla con la misma línea de comando como la utilizada anteriormente.

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.


También estoy usando LibreOffice 4.2.8.2 (en GNU / Linux) pero intenté convertir un archivo DOC en un archivo HTML. He instalado libreoffice-headless , pero el terminal también estaba colgado. He probado cada bala de Kurt Pfeifle, pero no funcionaba ...

La solución era simple: instalar libreoffice-writer (quizás libreoffice-filters está bien, pero depende de libreoffice-writer más los otros componentes importantes de LibreOffice).

Espero que esto ayude.


Tuve el mismo problema y me quedé atrapado por un día entero; tonto terminé por descubrir que estaba tratando de convertir desde y hacia un sistema de archivos de red; incluso aunque tengo la escritura correcta de libreoffice parece que no es compatible, o al menos no en mi configuración.

Resolví esto convirtiendo a / tmp y luego moviendo el archivo a mano. Espero eso ayude.


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

ANTIGUO

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