Board logo

标题: 怎么在web页面中,打印一个pdf文件? [打印本页]

作者: admin    时间: 2015-8-13 11:14     标题: 怎么在web页面中,打印一个pdf文件?

有一些报表软件,可以在后台,动态生成一个pdf文件,比如jasperreport,那么,有没有办法,让用户点击责面上的一个按钮,直接在打印机中打印出来呢?答案是可以,使用jatoolsPrinter,方法如下:
复制内容到剪贴板
代码:
function printReport() { var url = getPDFUrl(); // 取得报表输出的pdf地址 document.getElementById("jatoolsPrinter").printDocument(url); } function getPDFUrl() { return "a.pdf" // 给出pdf地址,可以是一个静态pdf文件,也可以动态生成的一个pdf } <input type="button" value="打印报表" onClick="printReport()"> <!-- 插入打印控件 --> <object id="ojatoolsPrinter" codebase="jatoolsPrinter.cab#version=5,4,0,0" classid="clsid:B43D3361-D075-4BE2-87FE-057188254255" width="0" height="0"> </object>

作者: admin    时间: 2015-8-13 11:30

确实方便!,但我机子里有很多打印机,要想指定打印机,不死菜? 呵呵,printDocument的第二个参数,可以帮助到你:
复制内容到剪贴板
代码:
function printReport() { var url = getPDFUrl(); // 取得报表输出的pdf地址 document.getElementById("jatoolsPrinter").printDocument(url,{printer:"pdfFactory"}); }

作者: admin    时间: 2015-8-13 11:49

各个客户,有可能挂不同的打印机,这样把输出打印机写死在代码里,不太好吧? 那改进一下,多一个下拉框,让控件检索出可用打印机,然后,让用户来选择吧:
复制内容到剪贴板
代码:
function getAvailablePrinters() { var jatoolsPrinter = getJatoolsPrinter(); var printer_list = document.getElementById('printer_list'); var printers = jatoolsPrinter.getPrinters(); // 打印机列表是一个字符串数组 if(printers) { for (i=0;i< printers.length;i++) printer_list.options[i+1]=new Option(printers[i],printers[i]); printer_list.options[0].selected = true; } }

作者: admin    时间: 2015-8-13 12:06

完成效果: 完整代码:
复制内容到剪贴板
代码:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script> function printReport() { var printer = document.getElementById('printer_list').value; var url = getPDFUrl(); document.getElementById("jatoolsPrinter").printDocument(url, { printer : printer }); } function getPDFUrl() { return "a.pdf" // 给出pdf地址,可以是一个静态pdf文件,也可以动态生成的一个pdf } function getAvailablePrinters() { var printer_list = document.getElementById('printer_list'); var printers = document.getElementById("jatoolsPrinter").getPrinters(); // 打印机列表是一个字符串数组 if (printers) { for (i = 0; i < printers.length; i++) printer_list.options[i + 1] = new Option(printers[i], printers[i]); printer_list.options[0].selected = true; } } </script> </head> <body onload='getAvailablePrinters()' style='padding:30px;'> <select id="printer_list"> <option>--默认--</option> </select> <input type="button" value="打印pdf报表" onClick="printReport()"> <object id="jatoolsPrinter" codebase="jatoolsPrinter.cab#version=5,4,0,0" classid="clsid:B43D3361-D075-4BE2-87FE-057188254255" width="0" height="0"> </object> </body> </html>


图片附件: QQ图片20150813120412.png (2015-8-13 12:06, 22.95 KB) / 该附件被下载次数 9057
http://bwtvl16d.jatools.com/attachment.php?aid=768&k=67f24ab361b130f9b8b74c8e7fa329a4&t=1740391041



附件: printpdf.html (2015-8-13 12:06, 1.22 KB) / 该附件被下载次数 14678
http://bwtvl16d.jatools.com/attachment.php?aid=769&k=161c477cce70bca4d9f6e082188f6f58&t=1740391041
作者: xue_0521    时间: 2016-2-5 13:44     标题: 谢谢


作者: xue_0521    时间: 2016-2-5 13:57

document.getElementById("jatoolsPrinter").getPrinters() 提示对象不支持该属性或方法




欢迎光临 杰表技术论坛 (http://bwtvl16d.jatools.com/) Powered by Discuz! 6.1.0