将静态HTML页面视为test.html
,并且页面的可打印版本已存储在test.pdf
中。当访问者告诉他们的浏览器进行打印时,如何引导浏览器加载并打印test.pdf
而不是test.html
?
如果不可能,我怎样才能在HTML页面中引入打印按钮(使用JavaScript)呢?
答案 0 :(得分:8)
您无法强制浏览器打印与用户请求/查看不同的文件。那将是一场安全噩梦!
选项1(JS(根据要求)和HTML)
我建议在您的网站上创建一个printable version
链接,将用户引导至.pdf(最好在新窗口中打开PDF)。
<!-- JS -->
<script type="text/javascript">
function LoadPrintableVersion() {
window.open("Test.pdf");
}
</script>
<!-- HTML -->
<span id="spanPrintableVersion" onclick="LoadPrintableVersion()">
Printable Version
</span>
选项2(纯HTML)
<a href="test.pdf" target="_blank">Printable Version</a>
答案 1 :(得分:3)
你不能在浏览器中劫持打印命令,但你可以劫持键盘快捷键(虽然我不推荐它),这样当用户使用ctrl/cmd + p
打印时,它会重定向到PDF(或者做其他事情)。这是一个可用的雷区,你应该只是创建一个大的链接,上面写着“可打印的版本”并将其链接到PDF(或使用打印友好的CSS的页面版本)。
另一个好的选择是简单地为CSS文件中的print
媒体类型定义一些规则,然后浏览器将在用户打印时应用这些规则,而不会有任何黑客或javascript。
但是因为你问我为print命令创建了一个小的快捷方式劫持脚本。由于mac命令键,它有点棘手,但有点像:
var cmd = false;
$(document).on('keydown', function(e) {
if(detectMacCommand(e.which)) {
cmd = true;
return;
}
// now detect print (ctr/cmd + p)
if ( e.which == 80 && ( e.ctrl || cmd ) ) {
e.preventDefault();
alert('redirect to PDF');
}
}).on('keyup', function(e) {
if(detectMacCommand(e.which)) {
cmd = false;
return;
}
});
function detectMacCommand(key) {
return ( $.browser.mozilla && key == 224 ||
$.browser.opera && key == 17 ||
$.browser.webkit && ( key == 91 || key == 93 ));
}
这很酷,但不要使用它:)
答案 2 :(得分:2)
以下是W3C所说的方式:
<LINK REL="alternate" HREF="/path/to/PDFVersion.pdf" TYPE="application/pdf" MEDIA="print" TITLE="PDF version" />
请注意,据我所知,目前没有浏览器支持此。遗憾。