报表生成工具 —— 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部件 ...
随机推荐
- New UWP Community Toolkit - RotatorTile
概述 UWP Community Toolkit 中有一个为图片或磁贴提供轮播效果的控件 - RotatorTile,本篇我们结合代码详细讲解 RotatorTile 的实现. RotatorTi ...
- kubernetes 手绘画,先收藏一下
- GIT入门笔记(7)- 修改文件并向版本库提交
1.修改文件vi readme.txt git status 发现被修改的文件列表git diff readme.txt 2.git add readme.txt git status --注意gi ...
- Spark入门(1-3)Spark的重要概念
1.什么是弹性分布式数据集? Spark提出了RDD(Resilient Distributed Datasets)这么一个全新的概念,RDD弹性分布式数据集是并行.容错的分布式数据结构:可以将RDD ...
- Spark入门(1-1)什么是spark,spark和hadoop
一.Spark是什么? Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎,可用来构建大型的.低延迟的数据分析应用程序. Spark是UC Berkeley AMP lab (加 ...
- IDE-Android Studio -FAQ-使用习惯(不断更新 欢迎留言)
摘要: 从ecplise工具切换到android studio后遇到了很多问题,起初亦非常痛苦,城墙内外阅博无数才得以解决.所以把当时遇到的问题记录下来,方便后来人学习. 另如果有遇到未纪录的问题欢迎 ...
- C# 基于Bootstrap的三级联动
实现效果如图: 一.声明市.县.乡对应的下拉控件select <div class="form-group"> <label class="col-sm ...
- jsp 九大内置对象和其作用详解
JSP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.config.page.exception 1. ...
- Python/模块与包之模块
Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用 ...
- hdu1249 三角形分割平面---递推
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1249 题目大意: 用N个三角形最多可以把平面分成几个区域? 思路: 知道了直线和折线分割平面的情况这 ...