`

利用Applet进行Web打印

阅读更多

一web打印常见方法:
1,一种简单的方法是在html上调用window.print(),但是这种方法极其“简陋”,除了要弹出一个对话框让我们选择打印机外,还有就是打印的内容不大好控制。
2,利用pdf,先将要打印的内容呈现在pdf上,再点击pdf上的打印按钮,但是一般要执行两步。很多情况下,这是一种不错的选择。
3,利用插件,有ActiveX控件,Applet插件,一下讲解applet打印。
二指定客户端的打印机直接打印
利用java print sevice可以很好地控制打印,此处不直接用Java Print Service,为了更好地控制打印内容的格式,我这里推荐用jasperreport来进行打印。利用applet调用其JRPrintServiceExporter对象来打印。
1,创建一个servlet,负责生产要打印的报表

-----------------------------------------

public class JasperPrintServlet extends HttpServlet
{


/**
*
*/
public void service(
HttpServletRequest request,
HttpServletResponse response
) throws IOException, ServletException
{
ServletContext context = this.getServletConfig().getServletContext();

File reportFile = new File(context.getRealPath("/reports/WebappReport.jasper"));
if (!reportFile.exists())
throw new JRRuntimeException("File WebappReport.jasper not found. The report design must be compiled first.");

Map parameters = new HashMap();
parameters.put("ReportTitle", "Address Report");
parameters.put("BaseDir", reportFile.getParentFile());

JasperPrint jasperPrint = null;

try
{
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

jasperPrint =
JasperFillManager.fillReport(
jasperReport,
parameters,
new WebappDataSource()
);
}
catch (JRException e)
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>JasperReports - Web Application Sample</title>");
out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">");
out.println("</head>");

out.println("<body bgcolor=\"white\">");

out.println("<span class=\"bnew\">JasperReports encountered this error :</span>");
out.println("<pre>");

e.printStackTrace(out);

out.println("</pre>");

out.println("</body>");
out.println("</html>");

return;
}

if (jasperPrint != null)
{
response.setContentType("application/octet-stream");
ServletOutputStream ouputStream = response.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
oos.writeObject(jasperPrint);
oos.flush();
oos.close();

ouputStream.flush();
ouputStream.close();
}
else
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>JasperReports - Web Application Sample</title>");
out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"../stylesheet.css\" title=\"Style\">");
out.println("</head>");

out.println("<body bgcolor=\"white\">");

out.println("<span class=\"bold\">Empty response.</span>");

out.println("</body>");
out.println("</html>");
}
}


}
2,创建一个Applet,负责调用servlet,同时执行打印
------------------------------------------------------------------------------
public class HelloSwingApplet extends JApplet
{

private URL url = null;
private JasperPrint jasperPrint = null;

public HelloSwingApplet()
{

}

public void init()
{

String strUrl = getParameter("REPORT_URL");
if (strUrl != null)
{
try
{
url = new URL(getCodeBase(), strUrl);
}
catch (Exception e)
{
StringWriter swriter = new StringWriter();
PrintWriter pwriter = new PrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(this, swriter.toString());
}
}
if (url != null)
{
try
{
if (jasperPrint == null)
{
jasperPrint = (JasperPrint)JRLoader.loadObject(url);
}
if (jasperPrint != null)
{
//ViewerFrame viewerFrame = new ViewerFrame(this.getAppletContext(), jasperPrint);
//viewerFrame.show();
}
else
{
JOptionPane.showMessageDialog(this, "Empty report.");
}
}
catch (Exception e)
{
StringWriter swriter = new StringWriter();
PrintWriter pwriter = new PrintWriter(swriter);
e.printStackTrace(pwriter);
JOptionPane.showMessageDialog(this, swriter.toString());
}
}



}
public void printReport() throws Exception{
try {
//JRSaver.saveObject(jasperPrint, "PrintServiceReport.jrprint");
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.ISO_A4);

PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
//指定打印机,不会弹出打印机选择框(PDFill PDF&Image Writer是我的打印机)
printServiceAttributeSet.add(new PrinterName("PDFill PDF&Image Writer", null));

JRPrintServiceExporter exporter = new JRPrintServiceExporter();

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, printServiceAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.FALSE);

exporter.exportReport();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


3,创建一个html,嵌入applet

1)嵌入代码
<APPLET CODE = "HelloSwingApplet.class" archive="SSignedApplet.jar"   WIDTH = 400 HEIGHT = 50 >
<PARAM NAME = "REPORT_URL" VALUE ="servlets/jasperprint">
</APPLET>
2)编写一个js函数
function print(){
  document.applets[0].printReport();
}
3)编写一个button测试
<input type="button" value="print" name="button1" onclick="print();">

 

0
1
分享到:
评论
6 楼 July01 2017-11-06  
推荐用StratoIO打印控件,支持网页、URL、图片、PD、ZPL和EPL,浏览器和系统的兼容性都很好,
而且不会崩溃。页头页脚、页码都能定制。参考http://www.webprinter.cn/features
5 楼 zhongaili520 2010-08-04  
lyh7609 写道
对不起,现在找不到了

真可惜
4 楼 lyh7609 2010-07-28  
对不起,现在找不到了
3 楼 zhongaili520 2010-07-28  
跑不通,有没有eclipse工程源码
2 楼 lyh7609 2009-09-10  
建议参考jasperreport的官方示例:如何用servlet产生报表
1 楼 zhaibadoy 2009-08-25  
new WebappDataSource()

看到这里,不知如果下手了。

相关推荐

    Java EE Web开发实例精解完整光盘

    例程1-5:利用Applet在Web布面实现时钟 例程1-6:利用JSP与Flash实现用户登录和注册模块 例程1-7:利用JavaScript脚本实现奥运倒计时日历 例程1-8:利用XML、CSS和XSL显示食谱信息 例程1-9:利用标准标记库显示本地...

    Java典型模块

    20.3.5 过滤流打印类 20.4 小结 第21章 查找和替换项目(GUI+字符串处理) 21.1 查找和替换原理 21.1.1 项目结构框架分析 21.1.2 项目功能业务分析 21.2 查找和替换项目——利用AWT组件 21.2.1 设计项目的界面——...

    JAVA 范例大全 光盘 资源

    实例9 打印任一年日历 23 实例10 控制台输出几何图形 26 实例11 杨辉三角 28 实例12 拜访过程(break和continue) 29 常见问题 for循环初始化问题 31 .第4章 数组 32 实例13 一维数组复制、插入和合并 32 ...

    JAVA上百实例源码以及开源项目

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个简单...

    JAVA上百实例源码以及开源项目源代码

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的...

    java源码包---java 源码 大量 实例

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个简单...

    java源码包2

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个...

    RED HAT LINUX 6大全

    2.2.2 不利用引导软盘进行安装 7 2.2.3 虚拟控制台 7 2.2.4 对话框 7 2.3 一步步地安装 7 2.3.1 开始安装 7 2.3.2 内核参数选项 8 2.3.3 安装程序 9 2.3.4 选择一种安装方法 9 2.3.5 光盘安装 10 2.4 硬件配置 14 ...

    java源码包3

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个...

    java源码包4

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的...

    JAVA面试题最全集

    请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来. 43.请写一个java程序实现线程连接池功能? 44.给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46....

    h_JAVA 2应用编程150例.rar

    实例8 利用JNI实现窗口特效 20 实例9 文件选择对话框 24 实例10 改变字体 26 实例11 应用JTree 28 实例12 应用JTable 30 实例13 记事本 32 实例14 使用JTextPane 36 实例15 实现多文档视图 37 实例16 使用进度条 39 ...

    网管教程 从入门到精通软件篇.txt

    JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JFF,JFIF,JIF:JPEG文件 JPE,JPEG,JPG:JPEG图形文件 JS:javascript源文件 JSP:HTML网页,其中包含有对一个Java servlet...

    java应用软件程序设计

    18 实例8 利用JNI实现窗口特效 20 实例9 文件选择对话框 24 实例10 改变字体 26 实例11 应用JTree 28 实例12 应用JTable 30 实例13 记事本 32 实例14 使用JTextPane 36 实例15 实现多文档...

Global site tag (gtag.js) - Google Analytics