报表生成工具 —— iText
十二月份一直在做生成报表的功能,中间踩了不少坑,刚好今天有时间,写篇博客记录一下。
一、iText 简介
iText 是著名开放源码站点 sourceforge 的一个项目,是一个用于生成 PDF 文档的 java 类库。通过 iText 不仅可以生成 PDF 或 rtf 的文档,而且可以将 XML、Html 文件转化为 PDF 文件。 —— 百度百科
二、添加 JAR 包
首先在项目中添加 iText 依赖包,公司项目是用 Maven 管理的,可以在网站 mvnrepository 中搜索 iText,查询相关依赖配置,然后在项目 pom.xml 文件中加入相关配置,如下:
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext-rtf</artifactId>
<version>2.1.7</version>
</dependency>
三、常见问题
3.1 设置中文字体
Font arialFont = new RtfFont("黑 体");
Font songFont = new RtfFont("宋 体");
Font imitationSongFont = new RtfFont("仿宋");
注意,有的中文字体字符串中间要用空格隔开,有的不用,须自己测试。
3.2 不同等级标题
iText 默认只有三级标题。
RtfParagraphStyle oneLevelTitleStyle = RtfParagraphStyle.STYLE_HEADING_1;
RtfParagraphStyle twoLevelTitleStyle = RtfParagraphStyle.STYLE_HEADING_2;
RtfParagraphStyle threeLevelTitleStyle = RtfParagraphStyle.STYLE_HEADING_2;
如果要创建四级或五级标题怎么办?查看 iText 源码我们可以发现,iText 一二三级标题定义。
/**
* The style for level 1 headings.
*/
public static final RtfParagraphStyle STYLE_HEADING_1 = new RtfParagraphStyle("heading 1", "Normal");
/**
* The style for level 2 headings.
*/
public static final RtfParagraphStyle STYLE_HEADING_2 = new RtfParagraphStyle("heading 2", "Normal");
/**
* The style for level 3 headings.
*/
public static final RtfParagraphStyle STYLE_HEADING_3 = new RtfParagraphStyle("heading 3", "Normal");
我们可以参照源码,创建一个四级标题。
public static final RtfParagraphStyle STYLE_HEADING_4 = new RtfParagraphStyle("heading 4", "Normal");
但光这样还不行,我们需要注册我们创建的 STYLE_HEADING_4。
RtfWriter2 writer = RtfWriter2.getInstance(doc, outputStream);
RtfDocumentSettings settings = writer.getDocumentSettings();
settings.registerParagraphStyle(STYLE_HEADING_4);
3.3 排版问题
虽然通过 iText API 可以找到所有排版的设置方法,但找起来实在是麻烦,所以还是记录一下。
段落
Paragraph paragraph = new Paragraph(content, font);
paragraph.setFirstLineIndent(30f); // 设置首行缩进
paragraph.setLeading(24f); // 设置行间距
paragraph.setSpacingAfter(10f); // 设置段前距离
paragraph.setSpacingBefore(10f); // 设置段后距离
表格
Table table = new Table(columns);
table.setBorderWidth(1f); // 设置表格边线宽度
table.setWidth(100); // 设置表格宽度
table.setPadding(10); // 表格内边距
table.setOffset(1f); // 设置偏移量(该属性用来解决文字与表格中间有段落符号问题)
table.setAlignment(Element.ALIGN_CENTER); // 设置表格对齐方式
Cell cell = new Cell(content, font);
cell.setBackgroundColor(new Color(235, 235, 235)); // 设置单元格背景色
cell.setVerticalAlignment(Cell.ALIGN_CENTER); // 设置垂直对齐方式
cell.setHorizontalAlignment(Cell.ALIGN_CENTER); // 设置水平对齐方式
图片
Image image = Image.getInstance(imageBase64ToByteArray(rejectCompareImageStr));
image.setAlignment(Image.MIDDLE); // 设置对齐方式
image.scalePercent(getPercentByWidth(rejectCompareImage.getWidth())); // 设置缩放比例
因为我用的图片格式是 Base64 编码格式的,需要后台将其转成字节数组的格式。另外,如果图片太大,超出文档,需要设置图片缩放比例。
/**
* 将 Base64 的图片转成字节数组
*
* @param base64Str
* @return
* @throws Exception
*/
private byte[] imageBase64ToByteArray(String base64Str) throws Exception {
byte[] buffer = {};
base64Str = base64Str.replaceAll(" ", "+");
String[] array = base64Str.split("base64,");
if (array.length > 1) {
base64Str = array[1];
BASE64Decoder decoder = new BASE64Decoder();
buffer = decoder.decodeBuffer(base64Str);
}
return buffer;
}
/**
* 根据图片宽度设置图片缩放比例
*
* @param width
* @return
*/
private int getPercentByWidth(float width) {
int p = 0;
float p2 = 0.0f;
p2 = 450 / width * 100;
p = Math.round(p2);
return p;
}
报表生成工具 —— iText的更多相关文章
- 流行的报表生成工具-JXLS
如果你还在为灵活的生成各种复杂报表犯愁,在为常用报表工具消耗大量内存担心.我推荐一个很好用的开源的Java报表生成工具. 本工具封装了强大的POI.但与POI不同的是,它可以用很简洁的代码生成复查的, ...
- 报表生成工具ireport
最近又开始学习新的玩意儿了,扒拉扒拉网上的资源,先捣鼓个思维导图.
- 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?
0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...
- 推荐6款常用的Java开源报表制作工具
JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表.JasperReports 支持PDF.HTML.XLS.CSV和XML文件输出格 ...
- 搭建第一个web项目:jasperReports+ireport制作pdf报表
一:jasperReports介绍: 在web应用中,必须面临大量的报表问题,即将数据库中的数据形成报表并进行打印.传统开发只能使用html页面设计报表,效率低且不支持别的格式.所以jasperRep ...
- Jasperreport5.6.9-----1
Jasperreport5.6.0生成PDF 最近项目中需要生成报表,先是看了下itext,觉得还可以,但是如果数据字段多的话,不太灵活.所以后来看了下ireport,觉得还可以,下面简单说一下它们: ...
- Java操作pdf: JarsperReport的简单使用
在企业级应用开发中,报表生成.报表打印下载是其重要的一个环节.除了 Excel 报表之外,PDF 报表也有广泛的应用场景. 目前世面上比较流行的制作 PDF 报表的工具如下: iText PDF :i ...
- JasperReport框架使用教程(附带常见空白页问题说明)
概述与安装使用 1. PDF报表概述 概述 在企业级应用开发中,报表生成.报表打印下载是其重要的一个环节.在之前的课程中我们已经学习了报表中比较重要的一种:Excel报表.其实除了Excel报表之 ...
- R统计分析处理
[翻译]Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么? 阅读目录 0.前言 1.集成开发环境 2.语法 3.数据操作 4.图形显示 5.HTML部件 ...
随机推荐
- ELK学习总结(2-6)elk的mapping
1.什么是映射 映射:创建索引的时候,预先定义字段的类型及相关属性 作用:这样会让索引建立的更加细致和完善,如:是否存储.使用何种分析器.重要级别 分类:静态映射和动态映射 2.字段类型:string ...
- SpringCloud的服务消费者 (二):(rest+feign/ribbon)声明式访问注册的微服务
采用Ribbon或Feign方式访问注册到EurekaServer中的微服务.1.Ribbon实现了客户端负载均衡,Feign底层调用Ribbon2.注册在EurekaServer中的微服务api,不 ...
- maven入门(1-1)maven是什么?
Maven是一个项目管理工具,它包含了 一个项目对象模型 (Project Object Model), 一组标准集合, 一个项目生命周期(Project Lifecycle), 一个依赖管理系统(D ...
- websocketj--随时随地在Web浏览器中操作你的服务端程序
0 - 有没有觉得Linux标准终端界面输入输出枯燥无味? 1 - 什么?vmstat命令的输出数据不直观?有没有想过能够可视化该命令的输出? 2 - 尝试过用浏览器操作Windows中的cmd吗? ...
- 用UIWebView加载本地图片和gif图
加载gif图: NSData *gif = [NSData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@" ...
- Centos7 安装python3
Centos7 安装python3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #安装sqlite-devel yum -y ...
- break跳出循环的妙用
while True: temp = input('请输入一个整数:') try: temp = int(temp)#这里如果不是整数的话会引发报错,直接进入 except后面的reason,如果是整 ...
- #定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型。其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数)。
#定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型.其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数). def get_num(num): i ...
- CLR-基元类型以及溢出检查
=========(CLR via C#阅读笔记)======== 基元类型(primitive type): 基元类型也不做过多的解释,举个例子即可清晰的辨别 在java里曾使用过Sting s=& ...
- spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求
spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想 ...