2

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

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

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

我正在使用 Mac OS X 10.8.5。

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

4

3 回答 3

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]
    

这些参数名称中的大多数都清楚地表明该工具与打印有关。该命令总共需要至少 5 个参数,或者是可选的第 6 个参数。如果只给出 5 个参数,它会从 中读取其输入<stdin>,否则从第 6 个参数中读取文件名。它总是将其输出发送到<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

然而,只有当我们尝试应用一些“打印选项”时,才对xhtmltopdfinto的输出进行管道传输。cgpdftopdf也就是说,我们需要在参数号中进行一些设置。5 实现某事。

在 CUPS 网页上查找CUPS 命令行选项会建议一些候选者:

-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 设置:

第一次 XHTML 到 PDF 的转换,没有 CSS 样式表。 1 第一次 XHTML 到 PDF 的转换,没有 CSS 样式表。 2

于 2015-06-05T16:26:17.350 回答
1

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

在 MacOS X 上使用 unoconv

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

于 2013-10-10T19:39:22.377 回答
0

我刚刚遇到了同样的问题,但我发现了这个 LibreOffice 帮助帖子。如果您也运行了 LibreOffice(通常的 GUI 版本),似乎无头模式将不起作用。解决方法是添加一个-env选项,例如

libreoffice "-env:UserInstallation=file:///tmp/LibO_Conversion" \
             --headless \
             --invisible \
             --convert-to csv file.xls
于 2015-07-20T03:10:32.320 回答