扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Print.java--打印内容定义 [code] import java.awt.*; import java.awt.event.*; import java.awt.print.*; import java.awt.image.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; import javax.swing.event.*; import java.util.*; import java.io.*; public class Print implements Printable{ int m_wPage; int m_hPage; int m_orientation; Printable m_target; int maxNumPage=1; String title="数据表格打印"; Font titleFont=new Font("黑体",Font.BOLD,14); boolean hasTail=true; int tailAlign=0; int headAlign=0; int topSpace=0; int leftSpace=0; int yStart=0; int yEnd=0; int xStart=topSpace; int xEnd=0; int x=0,y=0; String strTemp="打印内容"; public void doPrint(){ try{ m_orientation=PageFormat.PORTRAIT; //设置打印对象,默认纸张 PrinterJob prnJob=PrinterJob.getPrinterJob(); PageFormat pageFormat=prnJob.defaultPage(); pageFormat.setOrientation(m_orientation); m_wPage=(int)(pageFormat.getWidth()); m_hPage=(int)(pageFormat.getHeight()); //将待打印的窗体根据默认纸张设置传入打印对象 prnJob.setPrintable(this,pageFormat); if(!prnJob.printDialog()) return; prnJob.print(); }catch(PrinterException ex){ ex.printStackTrace(); System.err.println("打印错误:"+ex.toString()); } } /** * 初始化打印参数 */ public void initPrintParameter() { } /** *构造打印内容,以送打印机打印 */ public int print(Graphics pg,PageFormat pageFormat, int pageIndex) throws PrinterException{ //初始化打印参数 initPrintParameter(); //将画布设置为页面大小 pg.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY()); int wPage=0; int hPage=0; //根据打印机页面设置调整画布大小 if(pageFormat.getOrientation()==pageFormat.PORTRAIT){ wPage=(int)pageFormat.getImageableWidth(); hPage=(int)pageFormat.getImageableHeight(); } else{ wPage=(int)pageFormat.getImageableWidth(); wPage+=wPage/2; hPage=(int)pageFormat.getImageableHeight(); pg.setClip(0,0,wPage,hPage); } wPage=wPage-2*leftSpace; hPage=hPage-2*topSpace; xStart=leftSpace; xEnd=wPage-2; //为画布设置颜色和字体 int y=topSpace; pg.setFont(titleFont); pg.setColor(Color.black); //画标题,并使其居中 Font fn=pg.getFont(); FontMetrics fm=pg.getFontMetrics(); y+=fm.getAscent(); alignText(title,pg,y,xStart,xEnd,headAlign); y+=30; x=leftSpace+2; Font headerFont=new Font("宋体",Font.BOLD,14); pg.setFont(headerFont); fm=pg.getFontMetrics(); int h=fm.getAscent(); yStart=y-1; y+=h; pg.setFont(headerFont); fm=pg.getFontMetrics(); int header=y; h=fm.getHeight(); //计算行高,每页行数,总行数和指定页码的起始行、结束行 int rowH=Math.max(h,10); int tailH=rowH+30; int rowPerPage=0; int leftPix=0; if(hasTail){ rowPerPage=(hPage-header-tailH)/rowH; leftPix=(hPage-header-tailH)%rowH; yEnd=hPage-leftPix-tailH+2; } else{ rowPerPage=(hPage-header)/rowH; leftPix=(hPage-header)%rowH; yEnd=hPage-leftPix+2; } pg.drawString(strTemp,x,y); //画表格边框 pg.drawLine(xStart,yStart,xStart,yEnd); pg.drawLine(xStart,yStart,xEnd,yStart); pg.drawLine(xEnd,yStart,xEnd,yEnd); pg.drawLine(xStart,yEnd,xEnd,yEnd); //打印页码 if(hasTail){ int pageNumber=pageIndex+1; String s="第"+pageNumber+"页"; alignText(s,pg,yEnd+30,xStart,xEnd,tailAlign); } System.gc(); return PAGE_EXISTS; } /** * 文字排列,坐标在y处,显示范围(start-end) * 0表示居中显示,1表示左对齐,2表示右对齐 */ private void alignText(String s,Graphics pg,int y,int start, int end,int mode){ Font fn=pg.getFont(); FontMetrics fm=pg.getFontMetrics(); int wString=fm.stringWidth(s); int x=start; switch(mode) { case 0: if((end-start-wString)0) x=start+(end-start-wString)/2; break; case 1: break; case 2: if((end-start-wString)0) x=start+(end-start-wString); break; } pg.drawString(s,x,y); } public static void main(String[] args){ Print p=new Print(); p.doPrint(); } } [code] 运行方法: javac -d . Print.java java Print 自己运行一下 from:
南江网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联建站从2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
采纳哦
java后台定义定时打印的功能,同时又需要直接调用报表的打印的时候,由于打印机型号和纸张的不同,需要指定打印机,从而打印是否成功并设置返回值
package com.fr.io;
import java.io.File;
import java.util.HashMap;
import com.fr.base.FRContext;
import com.fr.base.Parameter;
import com.fr.dav.LocalEnv;
import com.fr.main.TemplateWorkBook;
import com.fr.print.PrintUtils;
public class JavaPrint {
public static void main(String[] args) {
// 定义报表运行环境,才能执行报表
String envPath = "D:\\FineReport\\develop\\code\\build\\package\\WebReport\\WEB-INF";
FRContext.setCurrentEnv(new LocalEnv(envPath));
try {
TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(), "GettingStarted.cpt");
// 参数传值
Parameter[] parameters = workbook.getParameters();
HashMapString, String paraMap = new HashMapString, String();
paraMap.put(parameters[0].getName(), "华北");
// java中调用报表打印方法
boolean a = PrintUtils.printWorkBook("GettingStarted.cpt", paraMap, true);
if (a == false) {
System.out.println("失败啦!返回" + a);
} else {
System.out.println("成功!返回" + a);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
还有问题的话可以到帮助文档中寻找答案或者帆软论坛求助
1. BIRT Project
BIRT报表是一款非常流行的开源报表开发工具。拥有和Dreamweaver一般的操作界面,可以像画table一样画报表,生成图片,导出Excel,html分页样样齐全,样式和script设置简单。
2. Pentaho
Pentaho Report Designer是一款所见即所得的开源报表设计工具。在设计报表的时候,用户可以随意拖放和设置各种报表的控件,还可以快速方便地设置报表的数据来源。在报表的设计过程中,用户可以随时预览报表的结果。
3. OpenRPT
OpenRPT支持各种平台PostgreSQL的最佳化的图形化界面的SQL报表撰写。
4. OpenReports
OpenReports 提供基于web 的灵活报表解决方案,支持 PDF,HTML 和XLS 报表格式,基于WebWork,Hibernate 和 Velocity 开发完成,并且还提供一个整合了Tomcat 的OpenReports-Tomcat 文件下载。使用Java进行开发,JasperReports 作为报表引擎。
5. FreeReportBuilder
FreeReportBuilder是一个Java报表工具,可以与任何数据库正常工作,只需要有一个JDBC驱动程序。
6. JMagallanes
JMagallanes是一个开源的使用Java/J2EE开发的Olap和动态报表应用程序。JMagallanes结合了静态报表(基于JasperReports),Swing pivot表格(用于OLAP分析),和图表(基于JFreeChart)。它可从多种数据源(如:SQL,Excel,XML和其它)读取数据并可生成多种输出如:PDF,XML,应用程序特殊文件用于将来报表的脱机查看。
7. ART – A lightweight reporting solution
ART是一个轻量级的,多平台基于web的报表引擎。定制容易,支持图形报表,支持通过插件把结果导出为各种格式。
8. DataVision
DataVision是一个用Java编写的类似于Crystal Reports的报表工具。它支持多种数据源(JDBC, 文本文件) ,输出格式有HTML, XML, PDF, LaTeX, 逗号或tab分隔的数据文件, 和DocBook。它让你用一个支持拖放操作的GUI设计报表,报表描述存储为XML。
9. The Wabit – Open Source Reporting Tool
Wabit 是一个跨平台开源的报表工具,提供了一个GUI程序和可嵌入式的接口。
10. Rlib
RLIB是一个基于XML的报表引擎,可以生成PDF,HTML,CSV,文本格式
11. JavaEye Reporting Tool – JERT
JERT是一个开放源代码的,基于web的,数据库报表工具,它能够让你不需要编程而能创建各种灵活的报表。
12. iReport
iReport是一个能够创建复杂报表的开源项目,并且它能调用JasperReports库应用于任何一种java应用程序,使用纯Java编写,拥有非常丰富的图形界面。
参考:
用浏览器自带的打印功能直接打印;这种方式是最直接的,方便的,不需要加什么插件jar包,只要前台在一个 div 中模仿着报表的格式去设置界面布局,然后把数据动态的填充进去,再调用JavaScript打印函数,就可以实现界面的局部打印功能。(如果不想让报表div在界面中显示出来可以隐藏之)PS:不过直接在前台界面打印还是会遇到意想不到的情况,不同浏览器的问题,反正我就遇到不同浏览器打印出来的报表排版不一的情况,用的时候需要注意。eg:pre t="code" l="java"div布局
div id="printdiv" style="display:none;"
table id="tableid" class="main" cellspacing="0" cellpadding="0" border="1"
bordercolor="#" width="800px;"
/****** your code ******/
/table
/div
JavaScript部分:(自己根据需要选择触发响应的JS函数)
function windowprint() {
var f = document.getElementById("printdiv");
f.style.display = "";
window.print();
f.style.display = "none";
}
function myPrint(obj){
var newWindow=window.open("打印窗口","_blank");
var docStr = obj.innerHTML;
newWindow.document.write(docStr);
newWindow.document.close();
newWindow.print();
newWindow.close();
}
将需要批量打印的内容生成的结果集传递给报表模板就可以了,会自动批量打印。
不预览循环批量打印要怎样实现?
需要调用打印接口 JasperPrintManager类可以直接实现打印。具体资料你可以参考Api
我用的是printReport 方法。
主要就是先在服务器端生成JasperPrint对象,返回给客户端。
下面代码百度到的,你可以参考。
import java.io.File;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameNotFoundException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.lowagie.text.ExceptionConverter;
import com.sofn.struts.dto.UserInfoDTO;
import com.sofn.struts.op.UserInfo;
import com.sofn.util.UserSessionOperate;
public class ReportViewAction extends Action {
(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response)
throws Exception {
//已编译文件路径和格式
String fp =this.getServlet().getServletContext().getRealPath("/")+ "report\\jasper\\"+ request.getAttribute("rdoc")+ ".jasper";
File reportFile = new File(fp);
// System.out.println("报表路径!!!!!!!"+reportFile);
Map parameters = (Map) request.getAttribute("paras");
byte[] bytes = null;
List list = new ArrayList();
DataSource ds = null;
JasperPrint jasperPrint=null;
//参数传递
UserSessionOperate uso = new UserSessionOperate();
String user = uso.getUser(request);
UserInfo eidr = new UserInfo();
UserInfoDTO eidrdto = null;
String deptname = "物流部门";
String username = "陈云刚";
parameters.put("marker", username);
parameters.put("bumen", deptname);
//数据库连接
try {
String source = "java:comp/env/jdbc/posuse";
Context ic = null;
if (ic == null)
ic = new InitialContext();
ds = (DataSource) ic.lookup(source);
if (ds == null) {
System.out.println("Reportview----22222!");
}
} catch (NameNotFoundException nfe) {
nfe.toString());
} catch (Exception ne) {
ne.printStackTrace();
}
//使用数据源
if (request.getAttribute("datasource") != null) {
list = (List) request.getAttribute("reportlist");
JRBeanCollectionDataSource jds =new JRBeanCollectionDataSource(list); //使用数据源
}
//使用SQL查询
try {
jasperPrint =JasperFillManager.fillReport(reportFile.getPath(),parameters,ds.getConnection());//填充报表数据生成JasperPrint对象
JasperPrintManager.printReport(jasperPrint, false);//2008-08-25 直接打印,不用预览PDF直接打印 true为弹出打印机选择.false为直接打印.
} catch (JRException jre) {
//System.out.println("Reportview----JRException88888");
jre.printStackTrace();
} catch (ExceptionConverter ec) {
ec.getLocalizedMessage());
ec.printStackTrace();
} catch (NullPointerException npe) {
npe.getLocalizedMessage());
npe.getMessage());
npe.toString());
System.err);
} catch (Exception ee) {
ee.printStackTrace();
}
//输出
response.setContentType("application/octet-stream");
ServletOutputStream ouputStream = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
oos.writeObject(jasperPrint);//将JasperPrint对象写入对象输出流中
oos.flush();
oos.close();
ouputStream.flush();
ouputStream.close();
return mapping.findForward("view"); //转向
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流