IReport生成pdf

一.iReport安装与使用

1.下载安装iReport(5.6.0)

下载地址(社区地址需要): https://community.jaspersoft.com/project/ireport-designer/releases

下载地址(csdn下载): https://download.csdn.net/download/csdndemimang/12766669

2.使用介绍

2.1安装完成之后,运行程序

2.2创建模板  文件 --> new ,后面全部点下一步

3.3模板制作(注意要把所有包含中文的设置成宋体,不然中文不显示)

3.4创建完成,点击preview,进行预览,   点击小锤子生成jasper文件(代码生成pdf的时候用,文件和创建模板文件在一个目录)

二.代码部分,生成pdf

1.添加相关依赖

        <dependency>
            <groupId>net.sourceforge.javydreamercsw</groupId>
            <artifactId>JasperReport</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>5.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>2.5.7</version>
        </dependency>
        <dependency>
            <groupId>cn.lesper</groupId>
            <artifactId>iTextAsian</artifactId>
            <version>3.0</version>
        </dependency>

2.在项目根目录添加jasperreports_extension.properties文件

###通过iReport生成的pdf模板生成pdf的相关配置
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml
# barcode4j 生成图片格式默认为svg,改用普通图片格式
net.sf.jasperreports.components.barcode4j.image.producer=image
# 图片dpi,默认值为72,Lodop打印使用的是96px,因此需要覆盖
net.sf.jasperreports.image.dpi=96
# HTML单位长度单位,默认为px,由于jasperReports的像素是按照1dpi=72px设计,和Lodop打印插件冲突,此处改为1dpi=72pt即可和Lodop的单位换算一致
net.sf.jasperreports.export.html.size.unit=pt
net.sf.jasperreports.engine.export.JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR=true
net.sf.jasperreports.engine.export.JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN=false
net.sf.jasperreports.engine.export.JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS=true  

3.项目根目录创建fonts文件夹,放入字体文件(解决中文不显示)

文件地址: https://download.csdn.net/download/csdndemimang/12767731

4.写代码进行测试(代码中的jasper文件替换成自己生成的)

public static void main(String[] args) {

		HashMap<String, Object> map = new HashMap<>();
		map.put("str1", "动态文本");
		ArrayList<Object> objects = new ArrayList<>();
		HashMap<String, Object> item = new HashMap<>();
		item.put("name", "张三");
		item.put("sex", "男");
		item.put("age", "11");
		objects.add(item);
		item = new HashMap<>();
		item.put("name", "李四");
		item.put("sex", "女");
		item.put("age", "12");
		objects.add(item);
		item = new HashMap<>();
		item.put("name", "李四");
		item.put("sex", "女");
		item.put("age", "12");
		objects.add(item);


		OutputStream output = null;
		ByteArrayOutputStream  byteOut = new ByteArrayOutputStream();
		List<JasperPrint> jsperList = new ArrayList<JasperPrint>();
		try{
			//模板文件流
			File reportFile = new File("D:\\tmp\\jasperreports\\report1.jasper");
			//数据源
			JRDataSource dataSource = new JRBeanCollectionDataSource(objects);
			//构造jasper文件 此处使用同一个jasper模板,如果你有其它的模板也可以拼凑
			JasperReport jasper = (JasperReport) JRLoader.loadObject(reportFile);
			//用数据填充jasperreport文件
			JasperPrint jasperPrint = JasperFillManager.fillReport(jasper, map, dataSource);
			jsperList.add(jasperPrint);

			//将生成文件流,到byteout
			JRPdfExporter exporter = new JRPdfExporter();
			exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jsperList);
			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, byteOut);
			exporter.exportReport();

			//创建pdf文件,写入流
			File pdfFile = new File("D:\\tmp\\test.pdf");
			output = new FileOutputStream(pdfFile);
			output.write(byteOut.toByteArray());

		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				output.close();
				byteOut.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

5.执行成功

附加:图片

如果模板需要包含图片,

1.拖一个图片到模板,(如果是静态的,拖的时候会让你选地址,直接选择就可以了)

2.如果是动态的(不用选地址直接下一步),选中图片点击右上角的属性

3.修改上图的属性为

new java.io.ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($P{imgStr}.getBytes()))

4.然后后台传base64字符串就行

        //图片转字符串
		/*File file = new File("D:\\tmp\\img\\170f3d215630fa69795af44a0b67481.jpg");
		FileInputStream in = new FileInputStream(file);
		byte[] b = new byte[in.available()];
		//将流转二进制
		in.read(b);
		Encoder encoder = Base64.getEncoder();
		//将二进制文件转base64字符串
		String imgStr = encoder.encodeToString(b);*/
        map.put("imgStr", imgStr);

 

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值