引入jar包
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.3</version>
</dependency>
使用itext导出pdf文件,因为国内itext的文档太少了,所以一些个常用的api做说明:
1.生成pdf封面
2.生成pdf,目录
3.生成pdf,目录跳转
4.生成pdf,页眉页脚
5.解决pdf的图片排序,乱序问题。
6.解决pdf字体问题
7.itext常用api介绍
1.生成pdf封面
封面就不赘述了,很简单,使用Chapter ,给图片和内容,添加到chapter中,并且给chapter,放入document中,就可以实现封面
2.生成pdf,目录
下面展示一些 内联代码片
。
//添加章节目录
Chapter indexChapter = new Chapter(new Paragraph("目录", pdfFont.getCnFont()), 0);
indexChapter.setNumberDepth(-1); // 设置数字深度
int num = 1;
for (Map.Entry<String, Integer> index : footer.getIndex().entrySet()) {
String keyValue = index.getKey();
String[] str = keyValue.split("\\.");
String desc = str[str.length - 1];
Chunk chunk = new Chunk(keyValue, pdfFont.getCnFont());
chunk.setLocalGoto(desc);// 点击目录,跳转到指定锚点
Paragraph paragraph = new Paragraph(chunk);
if (num == 1) {
paragraph.setSpacingBefore(20);
num++;
}
//加入点点
paragraph.add(new Chunk(new DottedLineSeparator()));
//加入页码
paragraph.add(new Chunk((index.getValue() + 2) + ""));
indexChapter.add(paragraph);
}
document.add(indexChapter);
3.生成pdf,目录跳转
Chunk chunk = new Chunk("我是标题,标题标题:" + i, pdfFont.getCnFont());
chunk.setLocalDestination(" " + chunk.getContent());// 设置锚点,点击标题跳转到指定锚点
chapter = new Chapter(new Paragraph(chunk), i);
4.生成pdf,页眉页脚
// 设置页眉
try {
PdfPTable table = new PdfPTable(2);
table.setTotalWidth(PageSize.A4.getWidth() - 80);
table.setWidths(new int[]{80, 18});
table.setLockedWidth(true);
table.getDefaultCell().setFixedHeight(-10);
table.getDefaultCell().setBorder(Rectangle.BOTTOM);
table.getDefaultCell().setBorderWidth(0.5f);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
PdfPCell cell = new PdfPCell(new Phrase("我是页眉!!", boldFont));
cell.setBorder(Rectangle.BOTTOM);
cell.setPaddingTop(2);
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell(cell);
PdfPCell cell1 = new PdfPCell(new Phrase("我是页眉1111!!", boldFont));
cell1.setBorder(Rectangle.BOTTOM);
cell1.setPaddingTop(2);
cell1.setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell(cell1);
// 将页眉写到document中,位置可以指定,指定到下面就是页脚
table.writeSelectedRows(0, -1, 40, PageSize.A4.getHeight() - 20, writer.getDirectContent());
// 将页眉写到document中,位置可以指定,指定到下面就是页脚
// table.writeSelectedRows(0, -1, 40, 20, writer.getDirectContent()); 页脚设置,指定在页脚生成
} catch (Exception de) {
throw new ExceptionConverter(de);
}
5.解决pdf的图片排序,乱序问题。
如果出现图片乱序问题,可以使用PdfPTable,强制设置内容位置
6.解决pdf字体问题
this.baseFontCn = BaseFont.createFont("C:\\sourcejar/Global_Pro_light.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
指定使用包含汉字的字体。
7.itext常用api介绍
BaseFont 指定字体
Font 字体样式,颜色,粗体,大小
Chapter 章节,可以设置于上一页强制换页,或者不换页
Paragraph 段落,每个段落之间会换行
Phrase 短句,包含块
Chunk 块,段落中的块
PdfPTable 表格
PdfPCell 单元格
PdfPTable table = new PdfPTable(2); // 设置表格列数
table.setTotalWidth(PageSize.A4.getWidth() - 80);//表格宽度
table.setWidths(new int[]{80, 18});// 表格每列的比例
table.setLockedWidth(true);// 锁定宽度
table.getDefaultCell().setFixedHeight(-10);
table.getDefaultCell().setBorder(Rectangle.BOTTOM); // 单元格,底部显示边框
table.getDefaultCell().setBorderWidth(0.5f);// 边框宽度
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);// 单元格对其方式
PdfPCell cell3 = new PdfPCell(new Paragraph(String.valueOf(writer.getPageNumber()), fontDetail));
cell3.setBorder(Rectangle.TOP);
cell3.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell3);
导出pdf,dome.java
https://download.csdn.net/download/qq_30594137/86438310