在将pdf输出到浏览器时,是否有一种简单的方法可以让HTML2PDF自动打开打印对话框窗口?
我尝试在输出之前设置javascript - 标头冲突 我在输出PDF后尝试过 - 没有影响力 我在PDF中试过就像TCPDF建议的那样(我认为HTML2PDF是建立在这个库上的)但是由于PDF支持中没有JS,所以不允许这样做。
有没有其他人知道的方式,或者我将不得不用iframe或windows破解某些内容并通过该方法声明打印?
任何帮助表示感谢。
答案 0 :(得分:2)
打印取决于您如何让浏览器显示PDF。如果你让浏览器显示它们通常"无论是插件(Adobe,FoxIT)还是PDF的本机显示,您都无法做到,因为您无法使用JavaScript来访问这些内容。
您可以使用pdf.js在可以打印的画布上使用JavaScript渲染PDF,例如参见Printing PDF using pdf.js
答案 1 :(得分:2)
有一次我在pyton上编写脚本来转换HTML文档并将其发送给自动打印。 这里的链接: https://gist.github.com/stopfaner/9b30b2f04aa47c5fb480 如果它对你有用,我会很高兴
答案 2 :(得分:1)
嗯,应该有一种方法,虽然我没有更深入地探讨它,但我希望这能激发其他人的兴趣(如果我找到一些时间的话,我会尽力而为)。
如本页http://www.fpdf.org/en/script/script36.php所述,可以注入一些javascript(打开打印对话框)。现在这个扩展名是针对FPDF的,而不是针对HTML2PDF库。
也许有或者将会编写一个HTML2PDF扩展,但我的预感是,在创建文档之后,在普通的PHP中执行它会更容易。
如此处所述,它应该是直截了当的:
获取现有的PDF,在文本编辑器中打开它并查找/ Catalog并在/ Pages引用后插入样板,然后输入代码
(src: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;