我正在尝试使用 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 设置: