如何强制浏览器打印PDF版本的网页?

时间:2012-03-12 14:47:25

标签: javascript html printing

将静态HTML页面视为test.html,并且页面的可打印版本已存储在test.pdf中。当访问者告诉他们的浏览器进行打印时,如何引导浏览器加载并打印test.pdf而不是test.html

如果不可能,我怎样才能在HTML页面中引入打印按钮(使用JavaScript)呢?

3 个答案:

答案 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" />

请注意,据我所知,目前没有浏览器支持此。遗憾。