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

vis*_*hal 53 php pdf libreoffice libreoffice-base ubuntu-14.04

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

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

但我没有得到回应,也没有错误.没有文件被转换.它看起来像终端悬挂.

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

Kur*_*fle 102

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

  2. 我怀疑libreoffice二进制文件不起作用 - 你必须找到soffice二进制文件,看看是否有效.

  3. 那么,你--convert-to pdf还不够.它需要是:

    --convert-to pdf:writer_pdf_Export
    
    Run Code Online (Sandbox Code Playgroud)

    一定要完全遵循这个大写!

  4. 接下来,如果已在系统上启动并运行LibreOffice GUI实例,则该命令将不起作用.它是由2011年以来的错误引起的.将此附加参数添加到您的命令:

     "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    $ mkdir ${HOME}/lo_pdfs
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

    这适用于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. 最后:使用完整路径to soffice,to soffice.bin和to libreoffice并使用-h参数运行每个参数:

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

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

    参数名称,大小写,使用的破折号等都有变化吗?

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

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

    --infilter="Microsoft Word 2007/2010/2013 XML"
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    --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"
    
    Run Code Online (Sandbox Code Playgroud)

更新

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
Run Code Online (Sandbox Code Playgroud)

回覆.输入不是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
Run Code Online (Sandbox Code Playgroud)

回覆.输出不是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
Run Code Online (Sandbox Code Playgroud)

  • @vishal:我对你的回答非常具体.尽管被明确要求,你甚至都懒得告诉你的版本.你也没说,如果你的'soffice'与'libreoffice'二进制文件存在...抱歉,我对你的问题调试的支持在这里结束. (9认同)
  • Kurt,我发现详细的回复非常有帮助.感谢您花时间回答这个问题. (6认同)
  • @Massimo:在这里,在我的回答中。我不知道还有其他更完整或更全面的文件。我的答案部分来自 LibreOffice 源代码,部分来自 LibreOffice 文档。 (3认同)
  • @dat:感谢您说“谢谢”。这里太多的野蛮人已经不再熟悉这种礼貌了。 (2认同)
  • 感谢概述!#4对我来说是错的。 (2认同)
  • 第4点...非常感谢您指出这一点, (2认同)

小智 5

更新资料

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

我正在使用以下命令

/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir . the_file_to_convert
Run Code Online (Sandbox Code Playgroud)

似乎该转换在较新版本(> 4.2.4.2)中不起作用我正在使用libreoffice 4.2.4.2您可以从http://downloadarchive.documentfoundation.org/libreoffice/old/4.2.4.2/下载较旧版本


Tho*_*ing 5

听起来可能很愚蠢,但我遭受了这一点:在 Ubuntu 14.04 中,仅安装软件包libreoffice-core-common转换为 PDF是不够的,但您需要libreoffice-writer改为/另外安装。需要注意的重要一点是,它libreoffice-core|common似乎引入了一些功能性的 libreoffice 基础,因此得名 ;-)。如果执行转换某些文件,这不会出错,而是似乎只是在等待某个套接字或诸如此类的输入或其他任何东西...安装后libreoffice-writer,它具有[...]-core|common依赖项,将某些 ODT 文件转换为 PDF 就像与之前使用的完全相同的命令行的魅力。

看起来有点疯狂,该应用程序看起来像它以某种方式工作,但由于缺少包而根本无法运行,并且没有说明任何有关它的信息。