-
I would first of all try it with giving absolute paths to the command.
-
I suspect that the
libreoffice
binary does not work — you have to locate thesoffice
binary and see if that works. -
Then, your
--convert-to pdf
is not sufficient. It needs to be:--convert-to pdf:writer_pdf_Export
Be sure to follow exactly this capitalization!
-
Next, the command will not work if there is already a LibreOffice GUI instance up and running on your system. It is caused by bug known since 2011. Add this additional parameter to your command:
"-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
This will create a new, separate environment which can be used by a second, headless LO instance without interfering with a possibly running first GUI LO instance started by the same user.
-
Also, make sure that the
--outdir /pdf
you specify does exist, and that you have write permission to it. Or, rather use a different output dir. Even if it is just for the first testing and this debugging round:$ mkdir ${HOME}/lo_pdfs
-
Hence:
/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
This works for me on Mac OS X Mavericks 10.9.5 with LibreOffice v4.4.3.2 (using my specific path for the binary
soffice
which will be different for you anyway…).If all this doesn’t work:
-
It may be a problem with the specific DOCX file you try the command with… So create a very simple DOCX document of your own first. Use LibreOffice itself for this. Write “Hello World!” on an otherwise empty page. Save it as DOCX.
-
Try again. Does it work with the simple DOCX?
-
If it again doesn’t work, repeat step 7, but save as ODT this time.
-
Repeat step 8, but make sure to reference the ODT this time.
-
Last: Use full path to
soffice
, tosoffice.bin
and tolibreoffice
and run each with the-h
parameter:$ /path/to/libreoffice -h $ /path/to/soffice -h $ /path/to/soffice.bin -h
- Do you even get an output here?
- For which one of the three binaries/symlinks?
- Record the outputs.
- Tell us your outputs!!!
Compare them to the command line you used:
Are there any changes in parameter names, capitalizations, number of dashes used, etc.??
For comparison, my own output is here:
$ /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.
-
Add one more argument to your command line to enforce the application of an input filter when
soffice
opens your DOCX file:--infilter="Microsoft Word 2007/2010/2013 XML"
or
--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 cannot only convert DOCX to PDF on the command line:
- It can process any input format which it can open and “read”: DOC, XLS, XLSX, PPT, PPTX, …
- It can convert to any output format which it can “write”: DOC, XLS, XLSX, PPT, PPTX, …
Of course, results will never be perfect, and sometimes they will even be un-acceptable to you.
Re. output as PDF:
To control, which LibreOffice component generates PDF output, you can use these variants:
--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. input which is not DOCX:
To enforce infilters for non-DOCX input formats, you could use (list is not complete):
--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. output which is not PDF:
To convert to specific output formats, you could use (list not complete):
--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