java使用itext生成pdf-CSDN博客
接上文
支持表格绘制表格
支持表格中的文本 字体加粗、字体上色、单元格背景上色,
支持拼接文本
支持单行文本 多种背景颜色、字体上色
支持自定义水印
废话不说先上效果图
工具类代码
package com.zxw.文件.PDF.util;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import com.itextpdf.text.pdf.draw.LineSeparator;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @projectName: ruoyi
* @package: com.zxw.文件.PDF.util
* @className: PDFUtil
* @author: zhangxuewei
* @description: TODO
* @date: 2023/9/18 14:31
* @version: 1.0
*/
@Component
public class PDFUtil {
public static String fontAddr;
public static TableCell tableCell = new TableCell();
@Value("${fontAddr}")
public void setFontAddr(String fontAddr) {
PDFUtil.fontAddr = fontAddr;
}
public static BaseFont getNormalBaseFont() throws IOException, DocumentException {
BaseFont bf = BaseFont.createFont(fontAddr, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
return bf;
}
public static Font getNormalFont(BaseFont bf) {
Font font = new Font(bf, 12);
return font;
}
/**
* 获取创建段落的类
*
* @param font
* @param fontSize 字体大小
* @throws DocumentException
*/
public static Paragraph getParagraph(Font font, Float fontSize) {
if (!ObjectUtils.isEmpty(fontSize)) {
font.setSize(fontSize);
}
// 添加中文内容
Paragraph paragraph = new Paragraph();
paragraph.setFont(font);
return paragraph;
}
/**
* 获取创建段落的类
*
* @param font
* @param fontSize 字体大小
* @param info 写入信息
* @throws DocumentException
*/
public static Paragraph getParagraphAndWrite(Font font, Float fontSize, String info) {
Paragraph paragraph = getParagraph(font, fontSize);
// 添加中文内容
paragraph.add(new Chunk(info));
return paragraph;
}
/**
* 拼接写入带有颜色的文本
*
* @param paragraph 创建段落对象
* @param info 写入的文本
* @param backgroundColor 文本背景颜色
* @return
*/
public static Paragraph appendWithBackgroundColor(Paragraph paragraph, String info, BaseColor backgroundColor) {
// 添加中文内容
Chunk chunk = new Chunk(info);
if (!ObjectUtils.isEmpty(backgroundColor)) {
chunk.setBackground(backgroundColor); // 根据索引获取背景颜色
}
paragraph.add(chunk);
return paragraph;
}
/**
* 拼接写入带有颜色的文本结束的方法
*
* @param paragraph 创建段落对象
* @param info 写入的文本
* @param backgroundColor 文本背景颜色
* @param document 文档对象
* @throws DocumentException
*/
public static void appendWithBackgroundColorEnd(Paragraph paragraph, String info, BaseColor backgroundColor, Document document) throws DocumentException {
appendWithBackgroundColor(paragraph, info, backgroundColor);
document.add(paragraph);
}
/**
* 正常书写
*
* @param document
* @param font
* @param fontSize 字体大小
* @param info 写入信息
* @throws DocumentException
*/
public static void writeParagraph(Document document, Font font, Float fontSize, String info) throws DocumentException {
if (!ObjectUtils.isEmpty(fontSize)) {
font.setSize(fontSize);
}
// 添加中文内容
Paragraph paragraph = new Paragraph(info, font);
document.add(paragraph);
}
/**
* 书写加粗的文字
*
* @param document
* @param bf
* @param fontSize 字体大小
* @param info 写入信息
* @throws DocumentException
*/
public static void writeBoldParagraph(Document document, BaseFont bf, Float fontSize, String info) throws DocumentException {
Font font = PDFUtil.getNormalFont(bf);
font.setStyle(Font.BOLD);
// 添加中文内容
writeParagraph(document, font, fontSize, info);
}
/**
* 书写带有颜色的字体
*
* @param document
* @param font
* @param fontSize
* @param fontColor
* @throws DocumentException
*/
public static void writeColorParagraph(Document document, Font font, Float fontSize, BaseColor fontColor, String info) throws DocumentException {
if (!ObjectUtils.isEmpty(fontColor))
font.setColor(fontColor);
writeParagraph(document, font, fontSize, info);
}
/**
* 书写带有颜色的加粗字体
*
* @param document
* @param bf
* @param fontSize
* @param fontColor
* @throws DocumentException
*/
public static void writeBoldColorParagraph(Document document, BaseFont bf, float fontSize, BaseColor fontColor, String info) throws DocumentException {
Font font = PDFUtil.getNormalFont(bf);
font.setStyle(Font.BOLD);
writeColorParagraph(document, font, fontSize, fontColor, info);
}
/**
* 书写带有颜色背景的字体
*
* @param document
* @param font
* @param fontSize
* @param backgroundColor 背景颜色
* @param info
* @throws DocumentException
*/
public static void writeColorBackgroundParagraph(Document document, Font font, float fontSize, BaseColor backgroundColor, String info) throws DocumentException {
if (fontSize > 0) {
font.setSize(fontSize);
}
Chunk chunk = new Chunk(info, font);
chunk.setBackground(backgroundColor);
Paragraph paragraphcb = new Paragraph();
paragraphcb.add(chunk);
document.add(paragraphcb);
}
/**
* 书写带有颜色背景的加粗字体
*
* @param document
* @param font
* @param fontSize
* @param backgroundColor
* @param info
* @throws DocumentException
*/
public static void writeBoldColorBackgroundParagraph(Document document, Font font, float fontSize, BaseColor backgroundColor, String info) throws DocumentException {
font.setStyle(Font.BOLD);
writeColorBackgroundParagraph(document, font, fontSize, backgroundColor, info);
}
/**
* 书写带有颜色背景的彩色字体
*
* @param document
* @param font
* @param fontSize
* @param backgroundColor
* @param fontColor
* @param info
* @throws DocumentException
*/
public static void writeColorBackgroundColorFontParagraph(Document document, Font font, float fontSize, BaseColor backgroundColor, BaseColor fontColor, String info) throws DocumentException {
if (fontSize > 0) {
font.setSize(fontSize);
}
font.setColor(fontColor);
Chunk chunk = new Chunk(info, font);
chunk.setBackground(backgroundColor);
Paragraph paragraphcb = new Paragraph();
paragraphcb.add(chunk);
document.add(paragraphcb);
}
/**
* 书写带有颜色背景的彩色加粗字体
*
* @param document
* @param font
* @param fontSize
* @param backgroundColor
* @param fontColor
* @param info
* @throws DocumentException
*/
public static void writeBoldColorBackgroundColorFontParagraph(Document document, Font font, float fontSize, BaseColor backgroundColor, BaseColor fontColor, String info) throws DocumentException {
font.setStyle(Font.BOLD);
writeColorBackgroundColorFontParagraph(document, font, fontSize, backgroundColor, fontColor, info);
}
/**
* 画线
*
* @param document
* @param percentage 所占页面宽度的百分比
* @param alignment 对齐方式 如:Element.ALIGN_RIGHT
* @throws DocumentException
*/
public static void drawLine(Document document, float percentage, int alignment) throws DocumentException {
LineSeparator line = new LineSeparator();
line.setPercentage(percentage);
line.setAlignment(alignment);
line.setLineWidth(1);
document.add(line);
}
/**
* 书写表格
*
* @param document
* @param font
* @param fontSize
* @param numColumns
* @param data
* @throws DocumentException
*/
public static void writeTable(Document document, Font font, Float fontSize, int numColumns, BaseColor borderColor, List
gitee地址:util-cloud: 小工具
所在controller: