【iText5⽣成PDF】纯Java代码实现⽣成PDF(⾃定义表格、
⽂本⽔印、单元格样式)
⼯作中遇到需要⽣成PDF。最终选择了iText。其他也有通过html再⽣成。感觉不太适合就⽤了代码实现。
使⽤iText 5.5.13.1版本。纯Java代码实现
1.⾃定义表格合并指定⾏列完成数据填充
2.⾃定义单元格显⽰
3.⽂本内容⽔平垂直居中显⽰
4.中⽂显⽰
5.图⽚增加(三⾓雷达图,基于JFreeChart 可参考另⼀篇博⽂)
先看个效果图
<!-- itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.1</version>
</dependency>
<!-- itext-asian -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<!-- itextpdf-tool-xmlworker -->
<dependency>
<groupId>l</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.13.1</version>
</dependency>
基于看到⽂档后,封装的⼯具类st;
菜单用英语怎么说import *;
import pdf.*;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @Description iTextPDFUtil
* @author ⼩帅⼂一式三份
* @className iTextPDFUtil
* @Date 2019/7/18-11:26
public class iTextPDFUtil {
/*
* @Description 蓝⾊背景⾊标题内容⾏添加
* @Author ⼩帅⼂
* @Date 2019/7/12 14:56
* @param table 表格
* @param cell 列
* @param text ⽂本
* @return void
**/
public static void addTableGroupTitle(PdfPTable table, PdfPCell cell, String text) {
cell = new PdfPCell(new Phra(text,getColorFont(BaColor.WHITE)));
table.addCell(addTitleCell(cell,25,new BaColor(69,153,241),2,fal));
}
/**
* @Description 蓝⾊背景⾊标题内容⾏添加
* @Author ⼩帅⼂
* @Date 2019/7/12 14:56
* @param table 表格
* @param cell 列
* @param text ⽂本
* @param colspan 需要合并的列
* @return void
**/
public static void addTableGroupTitle(PdfPTable table, PdfPCell cell, String text,int colspan) {
cell = new PdfPCell(new Phra(text,getColorFont(BaColor.WHITE)));
table.addCell(addTitleCell(cell,25,new BaColor(69,153,241),colspan,fal));
}
/**
* @Description 核查建议
* @Author ⼩帅⼂
* @Date 2019/7/12 14:43
* @param table 表格
* @param cell 列
* @param suggestText 核查建议内容
* @param fontColor 核查建议内容⽂字颜⾊
* @return Element
**/
public static void addSuggestLine(PdfPTable table,PdfPCell cell,String suggestText,BaColor fontColor) throws Exception {
addSuggestLine(table, cell, suggestText, fontColor, 0,10f,30f);
在线登陆qq}
/**
* @Description 核查建议
* @Author ⼩帅⼂
* @Date 2019/7/12 14:43
* @param table 表格
* @param cell 列
* @param suggestText 核查建议内容
* @param fontColor 核查建议内容⽂字颜⾊
* @param colspan 合并的列
关于虎的成语* @param widths 列所占宽
* @return Element
**/
public static void addSuggestLine(PdfPTable table,PdfPCell cell,String suggestText,BaColor fontColor,int widths) throws Exception { cell = new PdfPCell(new Phra("核查建议:",getColorFont()));
cell.tColspan(1);
table.addCell(addBaCell(cell,23,new BaColor(238,238,238),fal));
cell = new PdfPCell(new Phra(suggestText,getColorFont(fontColor)));
if(colspan>0){
cell.tColspan(colspan);
}
table.addCell(addBaCell(cell,23,new BaColor(238,238,238),fal));
table.tWidths(getColumnWiths(widths));
}
* @Description 信息分组table
* @Author ⼩帅⼂
* @Date 2019/7/12 14:43
* @param groupText ⽂本内容
* @return Element
**/
public static Element addTableGroupLine(String groupText) {
PdfPTable tableBaInfoIndex = new PdfPTable(1);
tableBaInfoIndex.tWidthPercentage(20);
PdfPCell cellBaInfo = new PdfPCell(new Phra(groupText,getColorFont()));
cellBaInfo.tHorizontalAlignment(Element.ALIGN_CENTER);
tableBaInfoIndex.addCell(addTitleCell(cellBaInfo,28,new BaColor(238,238,238),2,fal)); tableBaInfoIndex.addCell(addBlankLine(10,1));
return tableBaInfoIndex;
}
/**
* @Description 指定颜⾊字体默认处理中⽂显⽰
* @Author ⼩帅⼂
* @Date 2019/7/12 14:05
墙隔* @param color 字体颜⾊
* @param fontSize 字体⼤⼩
* @param fontFamily 字体
* @return Font
**/
public static Font getColorFont(BaColor color, int fontSize, String fontFamily) {
Font font = new Font(getFont());
font.tColor(color);
if(fontSize>0&&(null!=fontFamily||!"".equals(fontFamily))){
font.tSize(fontSize);
font.tFamily(fontFamily);
}
return font;
}
/
**
* @Description 指定颜⾊字体默认处理中⽂显⽰
* @Author ⼩帅⼂
* @Date 2019/7/12 14:05
* @param color 字体颜⾊
* @return Font
**/
public static Font getColorFont(BaColor color) {
return getColorFont(color, 0, null);
}
/**
* @Description 默认处理中⽂显⽰
* @Author ⼩帅⼂
* @Date 2019/7/12 14:05
* @return Font
**/
public static Font getColorFont() {
Font font = new Font(getFont());
鼻窦炎怎么治return font;
}
/**
* @Description 指定列宽度
* @Author ⼩帅⼂
* @Date 2019/7/12 11:59
* @param widths ⼀个或多个
* @return float[]
**/
public static float[] widths){
float[] columnWidths = new float[widths.length];
for (int i = 0; i < widths.length; i++) {
columnWidths[i]=widths[i];
}
return columnWidths;
}
/**
* @Description 添加表头cell
* @Author ⼩帅⼂
* @Date 2019/7/12 11:36
* @param titleCell 要操作的cell
* @param fixedHeight ⾏⾼度
* @param baColor 背景⾊
* @param colspan 合并的列数
* @param isBottomBorder 是否有下边框 true 有 fasle 没有
* @return pdf.PdfPCell
**/
public static PdfPCell addTitleCell(PdfPCell titleCell,int fixedHeight,BaColor baColor,int colspan,boolean isBottomBorder){ titleCell.tColspan(colspan);
titleCell.tFixedHeight(fixedHeight);
titleCell.tUVariableBorders(true);
titleCell.tUAscender(true);
titleCell.tUDescender(true);
titleCell.tBackgroundColor(baColor);
if(isBottomBorder){
titleCell.tBorder(Rectangle.BOTTOM);
titleCell.tBorderColorBottom(BaColor.LIGHT_GRAY);
}el{
titleCell.tBorder(Rectangle.NO_BORDER);
}
titleCell.tVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
return titleCell;
}
/**
* @Description 添加空⾏
* @Author ⼩帅⼂
* @Date 2019/7/12 11:36
* @param fixedHeight 空⾏⾼度
ppt模式
* @param colspan 合并的列数
* @return pdf.PdfPCell
**/大量许多的英文
public static PdfPCell addBlankLine(int fixedHeight,int colspan){
PdfPCell blankLine = new PdfPCell();
blankLine.tFixedHeight(fixedHeight);
blankLine.tBorder(Rectangle.NO_BORDER);
blankLine.tColspan(colspan);
return blankLine;
}
/**
* @Description 添加默认cell
* @Author ⼩帅⼂
* @param baCell 要操作的cell
* @Date 2019/7/12 11:36
* @return pdf.PdfPCell
**/
public static PdfPCell addBaCell(PdfPCell baCell){
baCell.tFixedHeight(23);
baCell.tUVariableBorders(true);
baCell.tUAscender(true);
baCell.tUDescender(true);
baCell.tBorder(Rectangle.BOTTOM);
baCell.tBorderColorBottom(BaColor.LIGHT_GRAY);
baCell.tVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
return baCell;
}
/**