命令`libreoffice --headless --convert-to pdf test.docx --outdir / pdf`无效

时间:2015-05-20 12:22:53

标签: php pdf ubuntu-14.04 libreoffice libreoffice-base

使用这个旨在将DOCX转换为PDF的LibreOffice命令后,我必须等待很长时间:

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

但我没有得到任何回应而且没有错误。没有文件被转换。看起来终端正在悬挂。

那么,有没有办法跟踪错误?

6 个答案:

答案 0 :(得分:83)

  1. 我首先尝试给出命令的绝对路径。

  2. 我怀疑libreoffice二进制文件不起作用 - 您必须找到soffice二进制文件并查看其是否有效。

  3. 然后,您的--convert-to pdf还不够。它必须是:

    --convert-to pdf:writer_pdf_Export
    

    请务必完全遵循此大写字母!

  4. 接下来,如果您的系统上已经启动并运行了LibreOffice GUI实例,则该命令将不起作用。它是由bug known since 2011引起的。将此附加参数添加到命令中:

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

    这将创建一个新的独立环境,可由第二个无头LO实例使用,而不会干扰由同一用户启动的可能正在运行的第一个GUI LO实例。

  5. 此外,请确保您指定的--outdir /pdf确实存在,并且您具有写入权限。或者,而是使用不同的输出目录。即使它仅用于第一次测试和本次调试:

    $ mkdir ${HOME}/lo_pdfs
    
  6. <强> 因此:

    /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
    

    这适用于Mac OS X Mavericks 10.9.5和LibreOffice v4.4.3.2(使用我的二进制soffice的特定路径,无论如何都会有所不同......)。

    如果这一切都不起作用:

  7. 您尝试使用命令时特定DOCX文件可能存在问题...因此,首先创建一个非常简单的DOCX文档。使用LibreOffice本身。写下“Hello World!”在另一个空页面上。将其另存为DOCX。

  8. 再试一次。 是否适用于简单的DOCX?

  9. 如果它再次不起作用,请重复步骤7,但这次保存为ODT。

  10. 重复步骤8,但请确保此次参考ODT。

  11. 上次:使用sofficesoffice.binlibreoffice的完整路径,并使用-h参数运行每个路径:

    $ /path/to/libreoffice -h
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • 你甚至在这里得到一个输出?
    • 三个二进制文件/符号链接中的哪一个?
    • 记录输出。
    • 告诉我们您的输出!!!

    将它们与您使用的命令行进行比较:

      

    参数名称,大小写,使用的破折号等是否有任何变化???

    为了比较,我自己的输出在这里:

    $ /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. soffice打开DOCX文件时,在命令行中再添加一个参数以强制应用输入过滤器:

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

    --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"
    
  13. 更新

    LibreOffice不仅可以在命令行上将DOCX转换为PDF:

    • 它可以处理任何输入格式,它可以打开并“读取”:DOC,XLS,XLSX,PPT,PPTX,......
    • 它可以转换为任何输出格式,它可以“写”:DOC,XLS,XLSX,PPT,PPTX,......

    当然,结果永远不会是完美的,有时它们甚至会让你无法接受。

    <强>重新。输出为 PDF

    要控制哪个LibreOffice组件生成PDF输出,您可以使用以下变体:

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

    <强>重新。输入不是DOCX

    要强制使用非DOCX输入格式的过滤器,您可以使用(列表未完成):

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

    <强>重新。输出非PDF

    要转换为特定的输出格式,您可以使用(列表未完成):

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

答案 1 :(得分:4)

可能听起来很愚蠢,但我还是遭受了这样的困难:在Ubuntu 14.04中,只安装libreoffice-core软件包或者-common转换为PDF是不够的,但你需要安装libreoffice-writer代替/另外。需要注意的重要一点是,libreoffice-core | common似乎带来了一些功能性的libreoffice基础,因此名称;-),如果执行转换某些文件,它不会出错,但只是似乎等待一些套接字等用于输入或其他...在我安装了libreoffice-writer之后,将一些ODT文件转换为PDF,就像使用与之前使用的命令行完全相同的魅力一样。

看起来有点疯狂,应用程序看起来像是以某种方式工作,但由于缺少软件包而根本无法做到,并且没有告诉它任何事情。

答案 2 :(得分:3)

<强>更新

当前版本的libreoffice正在运行:v5.2.6.2(mac)

我正在使用以下命令

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

<强> OLD

似乎转换不适用于较新版本(&gt; 4.2.4.2) 我正在使用libreoffice 4.2.4.2 您可以从http://downloadarchive.documentfoundation.org/libreoffice/old/4.2.4.2/

下载旧版本
  • linux(使用deb包):

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

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

答案 3 :(得分:0)

我也使用LibreOffice 4.2.8.2(在GNU / Linux上),但我尝试将DOC文件转换为HTML文件。我安装了libreoffice-headless,但终端也挂了。我已经尝试了Kurt Pfeifle的每一颗子弹,但它没有用......

解决方案很简单:安装libreoffice-writer(也许libreoffice-filters也可以,但它取决于libreoffice-writer以及LibreOffice的其他重要组件。

希望这会有所帮助。

答案 4 :(得分:0)

我遇到了同样的问题,被困了一整天;愚蠢的我以弄清楚我正在尝试从网络文件系统转换到网络文件系统作为结尾。即使我已经写了权限,libreoffice似乎也不支持它,或者至少在我的配置中不支持。

我通过转换为/ tmp然后手动移动文件来解决此问题。希望对您有所帮助。

答案 5 :(得分:0)

我遇到了使用libreoffice将HTML转换为xlsx的问题。其他转换为选项效果很好。原来,它还需要--calc标志。万一其他人遇到同样的麻烦。在LibreOffice-6.4.3.2上进行了测试。

信用至:Libreoffice converting html to xls or xlsx