5

有没有办法明确告诉 CUPS 服务器您发送的文件text/html因此覆盖了 mime.types 查找?

4

1 回答 1

11

就在这里。

使用这个命令行:

lp -d printername -o document-format=text/html file.html

更新(回应评论)

我对OP的问题提供了准确的答案。

但是,这(单独)并不能保证文件将被成功打印。为此,CUPS 需要一个过滤器来处理 MIME 类型的输入text/html

CUPS 本身不提供这样的过滤器。但是,很容易将您自己的过滤器插入 CUPS 过滤系统,并且一些 Linux 发行版提供了这样的过滤器,它能够使用 HTML 文件并将它们转换为可打印的格式。

可以在系统上检查在这种情况下会发生什么。该cupsfilter命令是一个帮助实用程序,用于运行可用/已安装的 CUPS 过滤器,而无需通过 CUPS 守护程序进行实际打印:

touch 1.html
/usr/sbin/cupsfilter --list-filters 1.html

现在在没有准备好使用 HTML 的过滤器的系统上,您会得到以下响应:

cupsfilter: No filter to convert from text/html to application/pdf.

在不同的系统上(比如在 Mac 上),你会看到:

xhtmltopdf

您甚至可以强制输入和输出 MIME 类型,以查看当被要求打印此文件和支持特定输出 MIME 类型的打印机时 CUPS 会自动运行哪些过滤器(-i设置输入 MIME 类型、-m输出):

/usr/sbin/cupsfilter                  \
            -i text/html              \
            -m application/postscript \
            --list-filters            \
              1.html
  xhtmltopdf
  cgpdftops

在这里,它将首先使用 将 HTML 转换为 PDF xhtmltopdf,然后使用 将生成的 PDF 转换为 PostScript cgpdftops

如果您跳过该--list-filters参数,该命令实际上甚至会通过主动运行(不仅仅是列出)两个过滤器并将结果发送到<stdout>.

您可以基于 Shell 脚本编写自己的 CUPS 过滤器。htmldoc您需要的唯一其他成分是命令行工具,例如wkhtmltopdf,能够处理 HTML 输入并生成某种格式的工具,这些格式反过来可以被 CUPS 过滤链进一步使用。

请注意,一些(尤其是 JavaScript 繁重的)HTML 文件无法通过简单的命令行工具成功处理为可打印的格式。

如果您需要有关此的更多详细信息,请再问一个问题...

于 2012-02-11T14:06:09.110 回答