有没有办法明确告诉CUPS服务器您发送的文件是text/html
从而覆盖mime.types查找?
答案 0 :(得分:7)
是的,有。
使用此命令行:
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类型,以查看当要求打印此文件时,CUPS会自动运行哪些过滤器支持该特定输出MIME类型的打印机( -i
设置输入MIME类型, -m
输出):
/usr/sbin/cupsfilter \
-i text/html \
-m application/postscript \
--list-filters \
1.html
xhtmltopdf
cgpdftops
此处首先使用xhtmltopdf
将HTML转换为PDF,然后使用cgpdftops
将生成的PDF转换为PostScript。
如果您跳过--list-filters
参数,该命令实际上甚至可以通过主动运行(不仅仅列出)两个过滤器并将结果发送到 <stdout>
<来进行转换/ em>的
您可以根据Shell脚本编写自己的CUPS过滤器。您需要的唯一其他成分是命令行工具,例如htmldoc
或wkhtmltopdf,
,它能够处理HTML输入并生成某种格式,而这些格式又可以被CUPS过滤链消耗。路。
请注意,一些(特别是JavaScript)重的HTML文件无法通过简单的命令行工具成功处理为打印就绪格式。
如果您需要更多详细信息,请提出另一个问题......