我正在尝试使用 Mac 终端将 HTML 文件转换为 PDF。
我发现了一个类似的帖子,我确实使用了他们提供的代码。但我一直一无所获。发出此命令时,我在任何地方都找不到输出文件:
./soffice --headless --convert-to pdf --outdir /home/user ~/Downloads/*.odt
我正在使用 Mac OS X 10.8.5。
有人可以给我看一个我可以用来将 HTML 转换为 PDF 的终端命令行吗?
我正在尝试使用 Mac 终端将 HTML 文件转换为 PDF。
我发现了一个类似的帖子,我确实使用了他们提供的代码。但我一直一无所获。发出此命令时,我在任何地方都找不到输出文件:
./soffice --headless --convert-to pdf --outdir /home/user ~/Downloads/*.odt
我正在使用 Mac OS X 10.8.5。
有人可以给我看一个我可以用来将 HTML 转换为 PDF 的终端命令行吗?
我正在尝试使用 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
into的输出进行管道传输。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 设置:
从 3.6.0.1 开始,您需要系统上的 unoconv 来转换文档。
在 MacOS X 上使用 unoconv
在 MacOS X 下使用 unoconv 需要 LibreOffice 3.6.0.1 或更高版本。这是第一个使用内部 python 脚本分发的版本。没有适用于 MacOS X 的 OpenOffice 版本(3.4 是当前版本)工作,因为必要的内部文件不包含在应用程序中。
我刚刚遇到了同样的问题,但我发现了这个 LibreOffice 帮助帖子。如果您也运行了 LibreOffice(通常的 GUI 版本),似乎无头模式将不起作用。解决方法是添加一个-env
选项,例如
libreoffice "-env:UserInstallation=file:///tmp/LibO_Conversion" \
--headless \
--invisible \
--convert-to csv file.xls