我使用iReport+jasperReport来做web打印,代码如下:
<%@page contentType="application/pdf;charset=GB2312"%>
<jsp:directive.page import="com.xit.classes.check" />
<jsp:directive.page import="com.xit.classes.Firm" />
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %>
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@page import="java.sql.*"%>
<%
String strdate = check.getStringDateShort();
// String sql = "select a.*,b.*,c.dwname,d.ckname,f.pjname from pjb_jhdz a,pjb_jhdx b,pjb_gysinfo c,pjb_ck d,pjb_pjinfo f where a.billno = b.billno and a.billno = '200811050078' and a.ckno = d.ckno and b.no = f.pjno ";
String sql = "select * from pjb_jhdz"; Firm firm = new Firm();
// 创建连接
Connection con = firm.getCon();
try {
Statement sta = con.createStatement();
ResultSet rs = sta.executeQuery(sql);
///查找报表文件
File reportFile = new File(application
.getRealPath("report/bbb.jasper"));
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath()); ////////生成pdf文件
Map parameters = new HashMap();
parameters.put("rpttoday", strdate);
//new JRResultSetDataSource(rs) byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
new JRResultSetDataSource(rs)
);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
//
rs.close();
out.clear();
out = pageContext.pushBody();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}%>导出的pdf格式,出来的预览窗口,汉字显示不出来,只能显示英文的和数字的,请大家指点一下。
<%@page contentType="application/pdf;charset=GB2312"%>
<jsp:directive.page import="com.xit.classes.check" />
<jsp:directive.page import="com.xit.classes.Firm" />
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %>
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@page import="java.sql.*"%>
<%
String strdate = check.getStringDateShort();
// String sql = "select a.*,b.*,c.dwname,d.ckname,f.pjname from pjb_jhdz a,pjb_jhdx b,pjb_gysinfo c,pjb_ck d,pjb_pjinfo f where a.billno = b.billno and a.billno = '200811050078' and a.ckno = d.ckno and b.no = f.pjno ";
String sql = "select * from pjb_jhdz"; Firm firm = new Firm();
// 创建连接
Connection con = firm.getCon();
try {
Statement sta = con.createStatement();
ResultSet rs = sta.executeQuery(sql);
///查找报表文件
File reportFile = new File(application
.getRealPath("report/bbb.jasper"));
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath()); ////////生成pdf文件
Map parameters = new HashMap();
parameters.put("rpttoday", strdate);
//new JRResultSetDataSource(rs) byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
new JRResultSetDataSource(rs)
);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
//
rs.close();
out.clear();
out = pageContext.pushBody();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}%>导出的pdf格式,出来的预览窗口,汉字显示不出来,只能显示英文的和数字的,请大家指点一下。
ireport:
右击 某个 textField 或者 static , 属性---》 font---> pdf font name 选择 STSong-Light下面的pdf embedded pdf encoding 选择 UniGB-UCS2-H (Chinese Simplified)
解决pdf中文问题需要下载itextasian.jar和itext-1.3.jar,将其下载后放到ireport/lib下即可··
要在这里提一下的是之前我也下载了这两个东东放到指定的位置了可还是乱码,后来还是解决了··
解决方法:
在iReport中新建一个TextField的时候会自动把pdf字体设为CP1252,这个是需要修改的
http://xiaoya317.bokee.com/2006282.html
重点是第6项