首页 新闻 会员 周边

webform直接打印PDF

0
悬赏园豆:20 [已关闭问题] 关闭于 2016-08-26 11:48

如题,页面上有个按钮,点击获取到服务器上的PDF然后无预览直接打印,请问有什么好的实现方式?十分感谢!

又沙又甜的主页 又沙又甜 | 初学一级 | 园豆:120
提问于:2016-08-11 14:43
< >
分享
所有回答(2)
0

异想天开啊,你是要做黑客吗???

顾晓北 | 园豆:10844 (专家六级) | 2016-08-11 14:57

为啥这样说呢?

支持(0) 反对(0) 又沙又甜 | 园豆:120 (初学一级) | 2016-08-11 15:08

@Result_For: 因为打印是需要客户端的打印机驱动之类的东西滴,客户端有没有这东西,有没有打印机都不知道,js确实有个window.print(),但功能很弱。。。

总是想着替浏览器把客户端的事儿都做了。。。不是异想天开吧。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-08-11 15:15

@顾晓北: 老板说可以,物理反驳,下面这段代码是java写的,你看C#是否也支持呢?

借助iText和Adobe Acrobat的Javascript支持,可以实现PDF文档的自动打印(可以做到不显示打印对话框)

……

PdfReader reader = new PdfReader(pdfStream); [1]

StringBuffer script = new StringBuffer(); [2]
 script.append(“this.print({bUI: false,bSilent: true,bShrinkToFit: false});”)
 .append(“\r\nthis.closeDoc();”);

ByteArrayOutputStream bos = new ByteArrayOutputStream(pdfStream.length);
 try {
 PdfStamper stamp = new PdfStamper(reader, bos); [3]
 stamp.setViewerPreferences(PdfWriter.HideMenubar
 | PdfWriter.HideToolbar | PdfWriter.HideWindowUI);
 stamp.addJavaScript(script.toString());
 stamp.close();
 } catch (DocumentException e) {
 logger.error(e.getMessage(), e.getCause());
 }

return new StreamingResolution(“application/pdf”,
new BufferedInputStream(new ByteArrayInputStream(bos.toByteArray()))) ;

……

代码说明:
1、pdfStream是用iText生成的PDF文档字节流
2、script是要加入到PDF文档里的Javascript代码。这段Javascript代码先调用PDF文档对象的print方法,然后用closeDoc方法关闭文档。print方法的参数指定了不要显示打印对话框,参数含义参考Acrobat JavaScript Scripting Reference
 3、bos用来保存加入Javascript后的PDF文档字节流,它作为PdfStamper对象的输出流。PdfStamper对象调用addJavaScript方法将Javascript代码加入到PDF文档中。

Web页面嵌入PDF文档:
支持(0) 反对(0) 又沙又甜 | 园豆:120 (初学一级) | 2016-08-11 15:23

@Result_For: [三次方懵逼]bos里真的能装进去javascript么。浏览器真能认识这个流么。

支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-08-11 15:37

@Result_For: 应该是你们老板牛逼吧。。。还Java,浏览器能运行的只有JavaScript。。。额,或许在ie里VBScript也可以???

做出来了可以跟我说一下让我学习一下这么牛逼的技术。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-08-11 15:56
0

http://stackoverflow.com/a/16239785/3762081

參考這個,載入PDF的區塊隱藏即可

RosonJ | 园豆:4910 (老鸟四级) | 2016-08-11 15:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册