新闻资讯 | 控件产品 | 技术文章 | 购物车 | 合作伙伴 | 问题解答 | 电子简报 | PDF论坛 | 资源下载
您现在的位置:技术文章>PDF开发篇 首页|PDF应用篇|PDF开发篇|解决方案

客户端自动打印PDF(Print PDF in client automatically)

发布日期:2007-9-5 作者:Arren zhang 出处:http://blog.csdn.net


    也许您想要在自己的程序中打印由服务器生成的PDF文件,您也许希望把文件发送到客户端打印。使用ActiveX 控件嵌在html页面中由浏览器自动打印的话,也许能实现您的想法。但是在linux下无法使用。也许您选择使用java小程序来完成打印,但是java本身不支持PDF打印。您需要编写许多代码来完成这个简单的工作。免费的Adobe reader在世界范围内的PC上广泛安装,它提供了很好的PDF打印功能。
    在最近的项目中,我在http服务器上使用iText类库生成PDF文件,然后将文件嵌在html页面中,当页面装载完毕,可以自动打印,打印结束,通知用户任务完成。这样,用户不必点击adobe Reader的“打印”按钮,而我们可以完全控制打印过程。

    [1] 在服务器端使用iText库生成PDF

Document doc = new Document(); 
PdfWriter writer 
= PdfWriter.getInstance(doc, oByteArrayOutputStream); 
doc.open(); 
// fill document content with your content. 
//.... 
// Before we close the PDF, we add one PdfAction to the document. 
StringBuilder sb=new StringBuilder(); 
sb.append(
"var _this=this; "
.append(
"this.hostContainer.messageHandler={"
.append(
" onMessage:function(aMessage){ _this.print(false); _this.hostContainer.postMessage(['ok']); },"
.append(
" onError:function(error, aMessage){}, "
.append(
" onDisclose:function(cURL, cDocURL){return true;}")
.append(
"};"); 
writer .addJavaScript(sb.toString()); 


    [2] 将PDF嵌在html页面中

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%-- 本页显示打印对话框,
     
"AzPrinter"将负责生成要打印的文件,
     在本页中开始打印此文档。
         @Arren zhang
--%>
<html>
    
<head>
        
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        
<title>Print Startup Interface</title>
<script language="javascript">
<!--
    var read_file_timer;
    function stopFileCheck()
{
         
if(read_file_timer){
             clearTimeout(read_file_timer);
             read_file_timer
=null;
         }

     }


     
/** start load file 
      **
*/

     function init()
{        
        var oHandler
={
            onMessage:function(aMessage)
{
                
if(aMessage[0]=="file ok"){
                    stopFileCheck();
                    window.parent.AzPrinter.handlePrintStatus(
999);
                    
this.container.postMessage(["print"]);
                }
else if(aMessage[0]=="print ok"){
                    window.parent.AzPrinter.handlePrintResult(
0);
                }
else{
                    var s
=aMessage[0];
                    
if(s=="no data") s="无法生成打印数据";
                    window.parent.AzPrinter.handlePrintResult(
10, s);
                }

            }
,
            onError:function(error, aMessage)
{
                stopFileCheck();
                window.parent.AzPrinter.handlePrintResult(
11""+error);
            }

        }
;
        var obj 
= document.object_pdf;        
        
if(typeof obj.postMessage!="function"){
            window.parent.AzPrinter.handlePrintResult(
2"不支持打印");
        }
else{
            
/** 如果10秒内pdf文件没有传递给浏览器,我们就认为再也回不来了。报错
             *
*/

            read_file_timer
=setTimeout(function(){
                stopFileCheck();
                window.parent.AzPrinter.handlePrintResult(
3," 无法生成打印数据");
                document.close();
            }
10*1000);

            oHandler.container 
= obj;
            obj.messageHandler 
= oHandler;
            obj.postMessage([
"check file"]); //dump message
        }

     }


     function printerError()
{
        window.parent.AzPrinter.handlePrintResult(
4,"浏览器错误");
     }

//-->
</script>
    
</head>
    
<body onerror="printerError();" onload="init();">
        
<object id="object_pdf" name="object_pdf" type="application/pdf" 
                data
="/rentsys/_check/AzPrinter?<%=request.getQueryString()%>" 
                style
="position:absolute; top:0px; left:0px; visibility:hidden" width="1" height="1" border="0">
        
</object>
    
</body>
</html>


如果你正在编程打印PDF发票的话,上面的内容也许会对您有所帮助。需要更详细的代码,可以发邮件到arrenzhang@gmail.com.

发布人:管理员 【报告错误】·【推荐好友】·【打印文章】
相关评论 本文现有 2 条评论 评分人数: 2 平均分: 4
fireboy   2007-10-17 16:23:42
麻烦问一下大侠,AzPrinter是个什么?是个servlet吗?直接用“window.parent.AzPrinter”这种方式访问是什么原理?我试了上面的代码,老报“缺少对象”的脚本错误,为什么?多谢指教
fireboy   2007-10-17 16:26:07
我的yahoo通/MSN:yunloveqiongw@yahoo.com.cn,希望能和你交流
相关评论
用户名: 密  码:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
注意:请不要在评论中含与内容无关的广告链接,违者封ID
文章搜索
推荐文章
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
热门点击
一个简单的PDF文件结构的分析(22460)
PHP的FDF文档支持(16188)
用C#制作PDF文件全攻略(13629)
Word转换PDF格式的C#或(12146)
pdfMaker文章:PDF加(11643)
ITextRenderer学习(11209)
PDF文件加密仿真(11057)
怎样用iReport制作Web(10413)
iText PDF概述(1)(9921)
循序渐进学习iTextShar(9871)
热门评论
从pdf文档中提取出文本(8)
PDFlib开发:创建超文本元(2)
客户端自动打印PDF(Prin(2)
浅谈PDFlib中文输出(一)(2)
xml的转换之pdf 2 ((1)
xml的转换之pdf 1 (x(1)
PDF知识讲座(1)(1)
PDFBox使用简介(1)
使用正则表达式计算PDF文档的(1)
word转pdf(1)