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