繁体   English   中英

如何在HTML中打印一个PDF

[英]How to print a PDF in HTML

我想在浏览器中打印一个 PDF,它是由我的 ASP.NET Core 应用程序生成的。 我已经测试了无数文章和建议,但遗憾的是没有适用于所有浏览器的通用解决方案。

iframe打印等解决方案在 iPadOS/iOS 上不起作用 - 对于包含多页的文档,它仅打印第一页(并且页面缩放不正确)。 embed不再工作。

Print.js看起来不再维护,所有者在去年的帐户上没有任何活动。 根据项目上的问题,移动设备有很多错误,不再修复。

来自 mozilla 的PDF.js也不适用于 iPadOS/iOS 上的旧版本。 使用演示页面进行的测试表明,打印经常会卡住。 如这张中所述,主要目标是 Firefox - 他们不会太在意 safari 上的问题)。

我能想到的唯一解决方案是使用 iframe 在桌面设备上打印并在移动设备上显示 PDF,让用户自己打印。 但是,特别是在 iPadOS 上,默认设置是“请求桌面网站”,Safari 显示为 macOS。 所以无法从 user agent 判断是否是 iPadOS。

有人对此有解决方案吗?

<html>
<head>
    <title>Print PDF using Dynamic iFrame</title>
</head>
<body>
    <input type="button" id="bt" 
        onclick="print('../sample.pdf')" 
            value="Print PDF" />
</body>

<script>
    let print = (doc) => {
        let objFra = document.createElement('iframe');     // Create an IFrame.
        objFra.style.visibility = 'hidden';                // Hide the frame.
        objFra.src = doc;                   // Set source.

        document.body.appendChild(objFra);  // Add the frame to the web page.

        objFra.contentWindow.focus();       // Set focus.
        objFra.contentWindow.print();       // Print it.
    }
    
    // Using regular js features.
    
//     function print(doc) {
//         var objFra = document.createElement('iframe');
//         objFra.style.visibility = 'hidden';
//         objFra.src = doc;                  
//         document.body.appendChild(objFra);
//         objFra.contentWindow.focus();  
//         objFra.contentWindow.print();  
//     }
</script>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM