1.PDF
1.1.首先创建maven项目,并导入依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.1</version>
</dependency>
1.2.一些常用类的解释
一、页面对象
1.Document:生成pdf文件的对象,也可以理解为pdf对象,这个跟pdf文件的位置无关,就是说可以使用一个该对象生成不同位置的相同内容的pdf文件;
需要注意的是,如果要写入内容到之前已经存在的pdf文件,那么写入的时候会先将旧的内容删除掉,然后再写入新的内容,也就是说,新写入的内容会覆盖旧的内容
1)构造方法
Document(Rectangle pageSize, float marginLeft, float marginRight, float marginTop,float marginBottom):
分别指pdf页面大小和内容距离文档边的距离。默认,Document()为:A4,36,36,36,36
2)常用api
document.newPage():创建新的一页,会在新的页面上写入内容;如果新创建的页面没有内容(空白页),那么则不会显示该空白页
2.Rectangle:页面对象,实际上创建Document对象时传入的参数,就是该对象,该对象有更加详细的属性设置(页面大小、页边距啥的)
1)常用构造方法和属性
Rectangle tRectangle = null;
tRectangle = PageSize.A4;// PageSize封装了大量常用的Rectangle数据
tRectangle = new Rectangle(800, 600);// 长宽
tRectangle = new Rectangle(0, 0, 800, 600);// 等于上面
// 2-1 其他页面属性:不能和PageSize封装的静态一起使用
tRectangle.setBackgroundColor(BaseColor.BLACK);// 背景色
tRectangle.setBorder(1220);// 边框
tRectangle.setBorderColor(BaseColor.BLUE);
tRectangle.setBorderWidth(244.2f);
document = new Document(tRectangle);
//增加一个超链接
Anchor baidu = new Anchor("baidu");
baidu.setReference("www.baidu.com");
document.add(baidu);
//给pdf文件中添加图片
Image instance = Image.getInstance("E:\\myFile\\Picture\\1.jpg");
//图片对其的方式
instance.setAlignment(Image.ALIGN_CENTER);
//图片需要扩大的倍数
instance.scalePercent(1);
document.add(instance);
3.PdfWriter:写入pdf文件前,首先要使用该对象,不然无法写入pdf文件,不管要写入的pdf文件是否之前已经存在,都要先使用该对象
1)常用api
//获取当前所在页的页码
pdfWriter.getCurrentPageNumber();
//所有pdf文件总共有多少页
pdfWriter.getPageNumber();
二、内容对象
1.Font:字体的设置,如颜色、字体、大小等
public Font getChineseFont() {
BaseFont bfChinese;
Font fontChinese = null;
try {
bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
// fontChinese = new Font(bfChinese, 12, Font.NORMAL);
fontChinese = new Font(bfChinese, 12, Font.NORMAL, BaseColor.BLUE);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fontChinese;
}
2.Element接口
内容对象基本都实现这个接口。如Chunk、Phrase、Paragraph;他们之间的关系如下图1-1:
2.1.Chunk:最小的单位,比cell还要小
2.2.Phrase:
2.3.Paragraph:段落,每一个该对象都会从新的一行开始
1)常用api
//设置文字居中方式;靠左:0,居中:1,靠右2
paragraph.setAlignment(1);
//设置左缩进
paragraph.setIndentationLeft(12);
//设置右缩进
paragraph.setIndentationRight(12);
//设置首行缩进
paragraph.setFirstLineIndent(24);
//段落中上下两行的行间距
paragraph.setLeading(100f);
//当前段落后的距离,跟下一个段落前的距离有相同的作用
paragraph.setSpacingAfter(100);
//增加一条实线
paragraph.add(new Chunk(new LineSeparator()));
//增加一条有连续点构成的线
paragraph1.add(new Chunk(new DottedLineSeparator()));
3.表格对象
3.1.PdfPTable
表格对象
1)构造函数
public PdfPTable(float[] relativeWidths):可以理解为当前表格单元格的个数以及长度,float数组对象的个数就是单元格的个数,
float数组对象的值就是单元格的长度,如果表格本身的长度过大或者float数组的值过大,就会根据float数组值的百分比在表格中进行分配
2)常用api
//设置水平对齐方式,参照物为上一层对象,谁add这个table对象就以谁为参照物
pdfPTable.setHorizontalAlignment(Element.ALIGN_CENTER);
3.2.PdfCell
单元格对象
1)构造函数
2)常用api
//设置垂直对齐方式,注意这个并不是单元格的对齐方式,因为单元格在表格中的分布是固定的,这个是单元格中内容的对齐方式
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//这个也是单元格中内容的对齐方式
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//设置单元格中内容与单元格边框的距离,前提时上面那两个单元格的对齐方式没有设置,不然这个不会起作用;
//这个是离左边框的距离,当然上下左右都可以设置,这里就不在都写出来了
cell.setPaddingLeft(10f);
3)注意
创建单元格时,单元格的个数,要与上面的个数保持一致,PdfPTable构造方法中的那个数字,最少与那个数字相等,不然不会显示;
如果大于那个数字则且个数并非整数倍,只会显示整数倍的单元格(向下取整),多余的哪些不会显示;
如果大于那个数字,且个数为整数倍(PdfPTable构造方法中个数),则会全部显示
1.3.pdf文件生成的5步
public void createPdf() throws Exception {
// 1-创建文本对象 Document
Document document = new Document(PageSize.A4, 500, 150, 50, 50);
// 2-初始化 pdf输出对象 PdfWriter
PdfWriter.getInstance(document, new FileOutputStream(new File("D:\\test\\pdfExport2.pdf"));
// 3-打开 Document
document.open();
// 4-往 Document 添加内容
document.add(new Paragraph("Hello! PDF!!!"));
// 5-关闭 Document
document.close();
}
1. 4.未解决问题
- 文件中的中文字体无法显示。
- 页眉、页脚功能还未实现;水印功能还未实现。
2.Excel
2.1.基本API的使用
首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。
基本操作步骤
- 用HSSFWorkbook打开或者创建“Excel文件对象”
- 用HSSFWorkbook对象返回或者创建Sheet对象
- 用Sheet对象返回行对象,用行对象得到Cell对象
- 对Cell对象读写。
2.2.引入maven依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10.1</version>
</dependency>
2.3.看一个简单的例子
//创建HSSFWorkbook对象(Excel文件对象)
HSSFWorkbook wb = new HSSFWorkbook();
//创建HSSFSheet对象(也就是一页,参数为页的索引)
HSSFSheet sheet = wb.createSheet( "sheet0" );
//创建HSSFRow对象(一行,参数为行的索引)
HSSFRow row = sheet.createRow( 0 );
//创建HSSFCell对象(一个单元格,参数为单元格的索引,0就表示该单元格是该行的第一个单元格)
HSSFCell cell=row.createCell( 0 );
//设置单元格的值(单元格的内容)
cell.setCellValue( "单元格中的中文" );
//输出Excel文件
FileOutputStream output= new FileOutputStream( "d:\\workbook.xls" );
wkb.write(output);
output.flush();