使用LibreOffice在终端的Mac命令中将HTML转换为PDF?

时间:2013-10-09 18:43:13

标签: html macos pdf libreoffice

我正在尝试使用Mac终端将HTML文件转换为PDF格式。

我发现了一个类似的帖子,我确实使用了他们提供的代码。但我一无所获。当我发出这个命令时,我没有在任何地方找到输出文件:

./soffice --headless --convert-to pdf --outdir /home/user ~/Downloads/*.odt

我正在使用Mac OS X 10.8.5。

有人可以给我看一个终端命令行,我可以用它将HTML转换为PDF吗?

3 个答案:

答案 0 :(得分:3)

  

我正在尝试使用Mac终端将HTML文件转换为PDF格式。

好的,这是在Mac命令行上将(X)HTML转换为PDF的另一种方法。它根本不使用LibreOffice,应该适用于所有Mac。

此方法(ab)使用Mac的打印子系统中的过滤器,称为xhtmltopdf。此过滤器通常不是由最终用户使用,而是仅由CUPS打印系统使用。

但是,如果您了解它,知道在哪里找到它并知道如何运行它,那么这样做没有问题:

  1. 首先要知道的是,它不在任何桌面用户的$PATH中。它位于/usr/libexec/cups/filter/xhtmltopdf
  2. 要知道的第二件事是它需要特定的语法和参数顺序才能运行,否则就不会。根本没有参数(或参数数量错误)调用它将发出一个小的使用提示

    $ /usr/libexec/cups/filter/xhtmltopdf
    
      Usage: xhtmltopdf job-id user title copies options [file]
    
  3. 这些参数名称中的大多数都表明该工具与打印明显相关。该命令总共需要至少5个或可选的第6个参数。如果仅给出5个参数,则从<stdin>读取其输入,否则从6ths参数读取文件名。它总是将其输出发送到<stdout>

    我们唯一感兴趣的CLI参数是5号(“选项”)和(可选)号码6(输入文件名)。

    当我们在命令行上运行它时,我们必须首先提供5个虚拟参数或空参数,然后才能输入输入文件的名称。我们还必须将输出重定向到PDF文件。

    所以,让我们试一试:

    /usr/libexec/cups/filter/xhtmltopdf "" "" "" "" "" my.html > my.pdf
    

    或者,或者(输入速度更快,更容易检查完整性,使用5个虚拟参数而不是5个空参数):

    /usr/libexec/cups/filter/xhtmltopdf 1 2 3 4 5 my.html > my.pdf
    

    虽然我们在这里,我们可以尝试在输出上应用其他一些CUPS打印子系统过滤器:/usr/libexec/cups/filter/cgpdftopdf看起来像一个可能有趣的。此附加过滤器需要相同类型的参数编号和顺序,例如所有CUPS过滤器。

    所以这应该有效:

    /usr/libexec/cups/filter/xhtmltopdf   1 2 3 4 5 my.html \
    | /usr/libexec/cups/filter/cgpdftopdf 1 2 3 4 ""        \
      > my.pdf
    

    但是,如果我们尝试应用一些“打印选项”,那么将xhtmltopdf的输出汇总到cgpdftopdf只会很有趣。也就是说,我们需要在参数no中提出一些设置。 5实现了某些目标。

    查看 CUPS command line options on the CUPS web page 会显示一些候选人:

    -o number-up=4 
    -o page-border=double-thick 
    -o number-up-layout=tblr 
    

    执行 看起来可以在进行PDF到PDF转换时应用它们。我们试试吧:

    /usr/libexec/cups/filter/xhtmltopdfcc 1 2 3 4 5 my.html        \
    | /usr/libexec/cups/filter/cgpdftopdf 1 2 3 4 5                \
      "number-up=4 page-border=double-thick number-up-layout=tblr" \
       > my.pdf
    

    以下是我使用此方法获得的结果的两个屏幕截图。两者都用作输入文件两个相同的HTML文件,除了一行之外:它是引用用于呈现HTML的CSS文件的行。

    正如您所看到的,xhtmltopdf过滤器在将输入转换为PDF时能够(至少部分地)考虑CSS设置:

    First XHTML-to-PDF conversion, CSS stylesheet no. 1 First XHTML-to-PDF conversion, CSS stylesheet no. 2

答案 1 :(得分:1)

从3.6.0.1开始,您需要在系统上使用unoconv来转换文档。

使用unoconv与MacOS X

在MacOS X下使用unoconv需要LibreOffice 3.6.0.1或更高版本。这是第一个随内部python脚本一起发布的版本。没有版本的OpenOffice for MacOS X(3.4是当前版本),因为必要的内部文件不包含在应用程序中。

答案 2 :(得分:0)

我遇到了同样的问题,但我找到了this LibreOffice help post。如果您还运行了LibreOffice(通常的GUI版本),那么无头模式似乎无法运行。修复是添加-env选项,例如

libreoffice "-env:UserInstallation=file:///tmp/LibO_Conversion" \
             --headless \
             --invisible \
             --convert-to csv file.xls