[英]HTML2PDF automatic printing
有没有一种简单的方法可以让 HTML2PDF 在将 pdf 输出到浏览器时自动打开打印对话框窗口?
我尝试在输出之前设置 javascript - 我在 PDF 输出后尝试的标题冲突 - 我在 PDF 中尝试没有像 TCPDF 建议的那样影响(我认为 HTML2PDF 是在这个库上构建的)但由于 PDF 支持中没有 JS,它不允许这样做.
有没有其他人知道的方法,或者我将不得不用 iframe 或 windows 破解某些东西并通过该方法声明打印?
任何帮助表示赞赏。
打印内容取决于浏览器显示PDF的方式。 如果让浏览器将它们“正常”显示为插件(Adobe,FoxIT)或其本地PDF显示,那么您将无能为力,因为您无法使用JavaScript来访问它们。
您可以使用pdf.js来使用JavaScript在可打印的画布上呈现PDF,例如,参见使用pdf.js打印PDF。
一旦我在pyton上编写脚本,该脚本将转换HTML文档并将其发送以进行自动打印。 这里的链接: https : //gist.github.com/stopfaner/9b30b2f04aa47c5fb480如果这对您有用,我会很高兴
好吧,应该有一种方法,尽管我没有更深入地探讨它,但我希望这能激发其他人的灵感(如果有时间的话,我会继续努力的)。
如本页http://www.fpdf.org/en/script/script36.php所述 ,可以注入一些javascript(打开打印对话框)。 现在,此扩展名适用于FPDF,而不适用于HTML2PDF库。
也许有,或者将要编写一个HTML2PDF扩展名,但是我的直觉是,在创建文档之后,仅使用纯PHP会更容易。
如此处所述,应该很简单:
提取现有的PDF,在文本编辑器中将其打开,找到/ Catalog,并在/ Pages引用后插入样板,然后输入代码
(来源: http : //bililite.com/blog/2012/06/06/adding-javascript-to-pdf-files/ )
如果我有更多信息或概念证明(使用HTML2PDF),我将进行更新。
编辑
我刚刚测试了这个概念,并且效果很好。 像示例中一样,将此脚本插入/ Catalog之后,并在新行之后插入。
/Names << % the Javascript entry
/JavaScript <<
/Names [
(EmbeddedJS)
<<
/S /JavaScript
/JS (
print(true);
)
>>
]
>>
>> % end of the javascript entry
请注意,这仅适用于Adobe Reader或Acrobat Pro,可能不适用于其他PDF阅读器(例如OSX中的预览应用程序无法正常工作,但Chrome中的内置阅读器工作正常)
编辑2-使用HTML2PDF库进行概念验证
$printCommand = <<<EOF
/Type /Catalog
/Names <<
/JavaScript <<
/Names [
(EmbeddedJS)
<<
/S /JavaScript
/JS (
print(true);
)
>>
]
>>
>>
EOF;
// Using the output method like this, you will get
// the raw ouput back to manipulate
$bin = $html2pdf->Output('', true);
// When the /Names block shows up somewhere later in
// in PDF code, it will override your script and will do nothing.
// This is just for proof of concept, you want to use regex here
if (strpos($bin, '/Names << >>') === false) {
$bin = str_replace('/Type /Catalog', $printCommand, $bin);
} else {
$printCommand = str_replace('/Type /Catalog', '', $printCommand);
$bin = str_replace('/Names << >>', $printCommand, $bin);
}
// Since we don't use the output function from HTML2PDF,
// you have to set the headers manually
header('Content-Type: application/pdf');
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: public');
header('Expires: Sat, 29 Jun 1985 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Disposition: inline; filename="your-pdf-title";');
echo $bin;
exit;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.