如何从浏览器打印PDF

时间:2008-10-15 15:31:07

标签: javascript html pdf

在Web应用程序中,是否可以强制在客户端上打印PDF文件?如果浏览器配置为在窗口内打开PDF,我猜调用window.print()会起作用,但是某些浏览器(比如我的)被配置为在外部打开PDF。

8 个答案:

答案 0 :(得分:28)

google docs的方法是将JavaScript嵌入到PDF中,告诉Acrobat Reader或任何其他兼容的读者打印它。

您需要一个PDF工具包才能使用随机PDF。

答案 1 :(得分:5)

<html>
<script language="javascript">
timerID = setTimeout("exPDF.print();", 1000);
</script>
<body>
<object id="exPDF" type="application/pdf" data="111.pdf" width="100%" height="500"/>
</body>
</html>

答案 2 :(得分:3)

您可以将http标头设置为application / pdf,然后使用javascript强制打开一个新窗口并以此方式打印。但是谁会这样做呢?我的意思是现在来吧。

答案 3 :(得分:3)

与taeyoung的建议类似,您可以使用iframe渲染pdf,然后使用contentWindow.print();

答案 4 :(得分:1)

你可以使用简单的图书馆 printjs http://printjs.crabbly.com” 如果需要,它需要PDF文件并打印而不显示打印对话框, 一种简单的方法:

 <button type="button" onclick="printJS('docs/printjs.pdf')">
    Print PDF
 </button>

答案 5 :(得分:0)

您的意思是要强制将文件发送到打印机吗?您是否正在考虑意外后果的法则 - 用户的设备未连接到打印机?可能是黑莓,可能是Wi-Fi上的笔记本电脑。如果用户不希望它转到默认打印机怎么办?

答案 6 :(得分:0)

您无法使用Javascript直接从浏览器打印PDF文档。 Javascript函数window.print()使用浏览器打印功能,这不是您需要的。 您可以通过Java Web Start实现开始打印的目标。 将您的PDF文档直接放入jnlp中,这样您就可以运行一个Java程序来接收原始PDF文档作为参数。 现在您正在系统中运行而不再在浏览器中运行,因此您可以通过JAVA API直接与打印驱动程序连接。 这看起来很简单,但实际上并不是因为JAVA打印API不接受文件作为输入,而是接受实现ava.awt.print.Pageable接口的特定数据结构。

www.pdfprint.it存在一项为您完成所有工作的网络服务。 这是一个摘自官方文档的片段。

<?php

// 1. GET the jnlp file with curl

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.pdfprint.it/printPdf?auth=XXXX");        
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //return the transfer as a string       
$jnlp = curl_exec($ch);
curl_close($ch); 

$pdfDoc ="example.pdf";


//2. put in the jnlp your PDF document base64 encoded

$jnlp = str_replace("####", base64_encode(file_get_contents($pdfDoc)),$jnlp);


//3. echo the jnlp file 

header('Content-type: application/x-java-jnlp-file');

echo $jnlp;

您只需要获取jnlp文件,放入PDF文档并将jnlp发送到浏览器。 运行打印的JAVA程序将直接从Web服务下载。 您还可以将一些打印选项设置为副本,边等等

答案 7 :(得分:0)

如果您想通过浏览器的打印对话框打印 PDF,您可以在调用 print() 方法的 iframe 内呈现 PDF。

// create iframe element
const iframe = document.createElement('iframe');

// create object URL for your blob or file and set it as the iframe's src
iframe.src = window.URL.createObjectURL(fileOrBlob);
iframe.name = 'pdf';

// call the print method in the iframe onload handler
iframe.onload = () => {
    const pdfFrame = window.frames["pdf"];
    pdfFrame.focus();
    pdfFrame.print();
}
document.body.appendChild(iframe);

您还可以将 iframe.hidden = true; 设置为在用户不会注意到的隐藏 iframe 中执行所有这些操作。

此解决方案应适用于除旧版 Microsoft Edge 之外的所有主要浏览器。如果您需要与旧版 Microsoft Edge 兼容,您可以使用 npm 包 print-js:https://www.npmjs.com/package/print-js