`

利用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();">

分享到:
评论

相关推荐

    jasperreport+applet客户端打印demo

    在"jasperreport+applet客户端打印demo"中,我们探讨的是如何利用JasperReport结合Java Applet技术实现客户端的打印功能。 首先,JasperReport提供了丰富的模板设计功能,通过JRXML文件可以定义报告的布局、样式、...

    applet和servlet的通讯,并打印

    在Applet和Servlet之间进行通信,通常是为了实现一些复杂的交互功能,比如在这个例子中,Applet需要请求Servlet来获取文件流,然后利用该文件流进行打印。 1. **Applet请求Servlet**: 当Applet需要从服务器获取...

    Java燗applet+jasperReport 实现web端打印

    传统的Web打印方式通常依赖于浏览器的内置打印功能,但这往往无法满足对打印格式有较高要求的应用场景。因此,本文介绍了一种结合Java Applet与JasperReport来实现Web端精确打印的方法。 #### 技术选型 为了实现这...

    zebra Applet打印

    2. 零售业:零售商可以利用Applet打印价格标签、促销标签,快速响应市场变化。 3. 医疗保健:在医院中,Applet可以用于打印患者腕带、药品标签,确保医疗安全。 4. 工厂自动化:生产线上,Applet可用于打印条形码...

    Java web 打印,Java pdf打印,Java 打印

    综上所述,这个项目涉及了Java Web打印的自定义实现,利用Java技术直接调用PDF打印,而非依赖浏览器功能。开发者使用了MyEclipse作为开发工具,并可能借助了特定库如iText或PDFBox来生成和打印PDF。而“mimeograph”...

    jasperreports-applet-5.1.0.jar

    在5.1.0版本中,引入了applet技术,使得用户能够通过浏览器实现报表的打印,极大地扩展了其在Web环境中的应用可能性。本文将深入探讨JasperReports Applet 5.1.0的核心特性和使用方法。 一、JasperReports基础 ...

    web打印教程.doc

    Web打印在互联网应用中扮演着...同时,不断关注浏览器的更新和技术发展,以便利用新的打印功能和支持,改进Web打印的性能和可定制性。在后续的教程中,将进一步探讨如何在实际项目中应用这些技术,以优化Web打印体验。

    基于Web打印控件jatoolsPrinter在物理平台下的应用及研究

    【基于Web打印控件jatoolsPrinter在物流平台下的应用及研究】 在信息化时代,Web应用平台已经成为各行各业不可或缺的一部分,特别是在物流行业中。物流服务平台作为物流业务的核心,需要处理各种复杂的信息,其中...

    Jacob在Applet里的应用

    将Jacob与Applet结合使用,可以让Java Applets利用COM组件,从而在Web环境中访问特定于Windows系统的功能,如自动化Office文档处理、打印服务等。 在Java Applet中应用Jacob的关键知识点包括: 1. **Jacob库的引入...

    runqian_report4.jar、runqianReport4Applet.jar

    此JAR包包含的类和资源使得用户无需安装额外软件,即可在Web浏览器上进行报表操作,提升了用户体验。 在实际开发中,可能会遇到与原版润乾报表JAR包不兼容或者存在错误的情况,这可能会影响到报表的打印、导出等...

    Java实现Web报表打印功能.

    ### Java实现Web报表打印功能:基于iText组件的实践 #### 概述 在Web应用领域,打印功能一直是开发者面临的挑战之一。由于Web应用本质上属于瘦客户端架构,直接操作客户端设备(如打印机)存在限制。这促使业界...

    java打印全集

    Java打印全集主要涵盖Java平台中的打印功能,包括如何使用...通过以上知识点的学习和实践,开发者可以充分理解和利用Java的打印功能,为用户提供便捷的打印体验,无论是在传统的桌面应用程序还是Web环境下的Applet中。

    SWT或Applet打开Office文件

    本文将详细探讨如何利用SWT和Applet来打开和操作本地的Office文件,包括Word、Excel和PowerPoint等。 首先,SWT是Eclipse基金会开发的一种Java GUI库,它提供了一种更接近于本机应用程序的用户体验,因为它的控件...

    applet与servlet的网络通信

    5. **使用WebSocket进行双向通信**:如果需要实时通信,如聊天室或游戏应用,`Applet`可以利用WebSocket协议与`Servlet`建立持久连接,实现实时数据交换。 在实际应用中,为了安全性和性能考虑,通常会限制`Applet`...

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

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

Global site tag (gtag.js) - Google Analytics