在终端中使用 LibreOffice 从 Mac 命令将 HTML 转换为 PDF?
Posted
技术标签:
【中文标题】在终端中使用 LibreOffice 从 Mac 命令将 HTML 转换为 PDF?【英文标题】:Use LibreOffice to convert HTML to PDF from Mac command in terminal? 【发布时间】:2013-10-09 18:43:13 【问题描述】:我正在尝试使用 Mac 终端将 html 文件转换为 PDF。
我发现了一个类似的帖子,我确实使用了他们提供的代码。但我一直一无所获。当我发出这个命令时,我没有在任何地方找到输出文件:
./soffice --headless --convert-to pdf --outdir /home/user ~/Downloads/*.odt
我使用的是 Mac OS X 10.8.5。
谁能给我看一个终端命令行,我可以用它来将 HTML 转换为 PDF 吗?
【问题讨论】:
为什么人们会否决这个问题 【参考方案1】:我正在尝试使用 Mac 终端将 HTML 文件转换为 PDF。
好的,这是在 Mac 命令行上将 (X)HTML 转换为 PDF 的另一种方法。它根本不使用 LibreOffice,应该适用于所有 Mac。
此方法 (ab) 使用来自 Mac 打印子系统的过滤器,称为 xhtmltopdf
。此过滤器通常不打算供最终用户使用,而仅供 CUPS 打印系统使用。
但是,如果您了解它,知道在哪里可以找到它并知道如何运行它,那么这样做就没有问题:
-
首先要知道的是它不在任何桌面用户的
$PATH
中。它位于/usr/libexec/cups/filter/xhtmltopdf
。
要知道的第二件事是它需要特定的语法和参数顺序才能运行,否则不会。完全不带参数(或参数数量错误)调用它会发出一个小的使用提示:
$ /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
然而,只有当我们尝试应用一些“打印选项”时,将xhtmltopdf
的输出通过管道传输到cgpdftopdf
才有意义。也就是说,我们需要在参数号中进行一些设置。 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 设置:
【讨论】:
【参考方案2】:从 3.6.0.1 开始,您需要系统上的 unoconv 来转换文档。
在 MacOS X 中使用 unoconv
在 MacOS X 下使用 unoconv 需要 LibreOffice 3.6.0.1 或更高版本。这是第一个使用内部 python 脚本分发的版本。没有适用于 MacOS X 的 OpenOffice 版本(当前版本为 3.4)工作,因为必要的内部文件未包含在应用程序中。
【讨论】:
【参考方案3】:我刚遇到同样的问题,但我找到了this LibreOffice help post。如果您也运行了 LibreOffice(通常的 GUI 版本),似乎无头模式将不起作用。解决方法是添加一个-env
选项,例如
libreoffice "-env:UserInstallation=file:///tmp/LibO_Conversion" \
--headless \
--invisible \
--convert-to csv file.xls
【讨论】:
以上是关于在终端中使用 LibreOffice 从 Mac 命令将 HTML 转换为 PDF?的主要内容,如果未能解决你的问题,请参考以下文章
LibreOffice SDK:如何在 mac 中安装和配置 LibreOffice SDK
将终端的输出重定向到 libreoffice excel 文件