准备配置文件 (解决乱码问题,字体问题)
stsong.TTF 为字体文件
jasperreports_extension.properties
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=stsong/fonts.xml
fonts.xml
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<!--<fontFamily name="Lobster Two">-->
<!--<normal>lobstertwo/LobsterTwo-Regular.otf</normal>-->
<!--<bold>lobstertwo/LobsterTwo-Bold.otf</bold>-->
<!--<italic>lobstertwo/LobsterTwo-Italic.otf</italic>-->
<!--<boldItalic>lobstertwo/LobsterTwo-BoldItalic.otf</boldItalic>-->
<!--<pdfEncoding>Identity-H</pdfEncoding>-->
<!--<pdfEmbedded>true</pdfEmbedded>-->
<!--<!–-->
<!--<exportFonts>-->
<!--<export key="net.sf.jasperreports.html">'Lobster Two', 'Times New Roman', Times, serif</export>-->
<!--</exportFonts>-->
<!--–>-->
<!--</fontFamily>-->
<fontFamily name="华文宋体">
<normal>stsong/stsong.TTF</normal>
<bold>stsong/stsong.TTF</bold>
<italic>stsong/stsong.TTF</italic>
<boldItalic>stsong/stsong.TTF</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'华文宋体', Arial, Helvetica, sans-serif</export>
<export key="net.sf.jasperreports.xhtml">'华文宋体', Arial, Helvetica, sans-serif</export>
</exportFonts>
<!--
<locales>
<locale>en_US</locale>
<locale>de_DE</locale>
</locales>
-->
</fontFamily>
</fontFamilies>
引入PDF模板文件
导入坐标依赖
<!--jasperreports 坐标-->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.5.0</version>
</dependency>
<dependency>
<groupId>org.olap4j</groupId>
<artifactId>olap4j</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
java 代码来了 Controller中
@Controller
@RequestMapping("/cargo/export")
public class PdfController extends BaseController {
@Reference
private ExportService exportService;
@Reference
private ExportProductService exportProductService;
//报运单进行下载
@RequestMapping("/exportPdf")
public void exportPdf(String id) throws Exception {
//根据传入的报运单id 查找到对应的报运单信息
//这里如果直接查询返回map 也是可以的
Export export = exportService.findById(id);
//根据报运单id 查找此单中所有的货物
ExportProductExample exportProductExample = new ExportProductExample();
exportProductExample.createCriteria().andExportIdEqualTo(id);
List<ExportProduct> all = exportProductService.findAll(exportProductExample);
//为了进行PDF传入下载 报运单应为Map集合
Map exportMap = BeanMapUtils.beanToMap(export);
//为了进行PDF传入下载 报运全部货物应为list 或 co集合
//核心代码
//1创建pdf的输出对象 参数关系 1 字节输入流 2 map 3dpf的datasource
//1 用于读取 jasper文件的 2 传递键值对的数据 3 传递list connection 集合数据
String contextPath = session.getServletContext().getRealPath("/jasper/export.jasper");
InputStream inputStream = new FileInputStream(contextPath);
//创建JrdataSource
JRDataSource jrDataSource = new JRBeanCollectionDataSource(all) ;
JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream,exportMap,jrDataSource);
//输入pdf jasperPrint , 输出流
JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
//关流
inputStream.close();
}
TIBCO Jaspersoft Studio-6.5.0.final的使用
使用此工具 进行 jasperreports 项目开发 生成PDF模板