x-easypdf基于pdfbox二次封装,极大降低使用门槛,以组件化的形式进行pdf的构建
官网地址 :https://www.x-easypdf.cn/#/README
jar包引入,截止2022-08-09 最新版本为 v2.9.10
<dependency>
<groupId>wiki.xsx</groupId>
<artifactId>x-easypdf</artifactId>
<version>2.9.10</version>
</dependency>
import wiki.xsx.core.pdf.component.image.XEasyPdfImage;
import wiki.xsx.core.pdf.component.layout.XEasyPdfHorizontalLayout;
import wiki.xsx.core.pdf.component.line.XEasyPdfDottedSplitLine;
import wiki.xsx.core.pdf.component.table.XEasyPdfCell;
import wiki.xsx.core.pdf.component.table.XEasyPdfRow;
import wiki.xsx.core.pdf.component.table.XEasyPdfTable;
import wiki.xsx.core.pdf.component.text.XEasyPdfText;
import wiki.xsx.core.pdf.doc.*;
import wiki.xsx.core.pdf.footer.XEasyPdfFooter;
import wiki.xsx.core.pdf.handler.XEasyPdfHandler;
import wiki.xsx.core.pdf.header.XEasyPdfHeader;
import wiki.xsx.core.pdf.mark.XEasyPdfWatermark;
/***
* 创建PDF
* @param outPdfPath 输出路径
* @param isReadOnly 是否只读
* @param titleStr 头部标题
* @param waterStr 水印
* @param tabHead 表格标题
* @param tables 表格内容
* @throws Exception
*/
public void createPdf2(String outPdfPath,boolean isReadOnly,String titleStr,String waterStr,String[] tabHead,List<HashMap<String,Object>> tables)throws Exception{
// 构建文档
XEasyPdfDocument document = XEasyPdfHandler.Document.build();
if(isReadOnly) {
// 获取文档权限
XEasyPdfDocumentPermission permission = document.permission();
// 设置为只读
permission.setReadOnly();
// 完成操作
permission.finish();
}
XEasyPdfPage page = XEasyPdfHandler.Page.build();
if(!StrUtil.isEmpty(waterStr)) {
//水印
XEasyPdfWatermark watermark = XEasyPdfHandler.Watermark.build(waterStr).setAlpha(0.1f).setFontSize(20);
page.setWatermark(watermark);
}
//页眉页脚
XEasyPdfHeader header=XEasyPdfHandler.Header.build();
XEasyPdfImage image = XEasyPdfHandler.Image.build(new File("D:/3.png"),30,30).setMarginLeft(5);
XEasyPdfText headTxt = XEasyPdfHandler.Text.build("江苏XXX有限公司").setVerticalStyle(XEasyPdfPositionStyle.CENTER);
// 水平布局
XEasyPdfHorizontalLayout layout = XEasyPdfHandler.Layout.Horizontal.build().addLayoutComponent(
XEasyPdfHandler.Layout.Component.build(100, 35).setComponent(image)
,XEasyPdfHandler.Layout.Component.build(200, 35).setComponent(headTxt)
);
header.addComponent(layout);
//页脚
XEasyPdfFooter footer = XEasyPdfHandler.Footer.build(XEasyPdfHandler.Text.build("第1页/共1页")).setMarginLeft(200);
page.setHeader(header);
page.setFooter(footer);
XEasyPdfDottedSplitLine line = XEasyPdfHandler.SplitLine.DottedLine.build();
line.setLineWidth(1).setColor(Color.CYAN);
page.addComponent(line);
//添加标题
XEasyPdfText title = XEasyPdfHandler.Text.build(titleStr);
title.setFontSize(18);
title.setHorizontalStyle(XEasyPdfPositionStyle.CENTER);
title.setMarginTop(10);
page.addComponent(title);
if(null!=tabHead&& tabHead.length>0){
//添加表格
// 表格
XEasyPdfTable table = XEasyPdfHandler.Table.build();
table.setBorderWidth(1);
table.setMarginLeft(50);
table.setMarginTop(20);
table.setVerticalStyle(XEasyPdfPositionStyle.CENTER);
table.setBorderColor(Color.BLACK);
// 表格行
XEasyPdfRow row =null;
// 表格列(单元格)
XEasyPdfCell cell =null;
//标题行
row=XEasyPdfHandler.Table.Row.build();
row.setHorizontalStyle(XEasyPdfPositionStyle.CENTER);
row.setBackgroundColor(Color.lightGray);
for (int i = 0; i <tabHead.length ; i++) {
cell=XEasyPdfHandler.Table.Row.Cell.build(100, 30);
cell.addContent(XEasyPdfHandler.Text.build(tabHead[i]).setMarginLeft(5));
row.addCell(cell);
}
table.addRow(row);
//内容行
for (HashMap<String, Object> r : tables) {
row=XEasyPdfHandler.Table.Row.build();
//row.setHorizontalStyle(XEasyPdfPositionStyle.CENTER);
for (Map.Entry<String, Object> entry : r.entrySet()) {
cell=XEasyPdfHandler.Table.Row.Cell.build(100, 25);
cell.addContent(XEasyPdfHandler.Text.build(entry.getValue().toString()).setMarginLeft(5));
// 添加单元格到表格行
row.addCell(cell);
}
// 添加表格行到表格
table.addRow(row);
}
page.addComponent(table);
}
// 添加空白页面
document.addPage(page);
document.save(outPdfPath);
}
public List<String> readPdf2(String pdfPath)throws Exception{
// 读取文档
XEasyPdfDocument document = XEasyPdfHandler.Document.load(pdfPath);
// 获取文档总页数
int totalPage = document.getTotalPage();
// 打印文档总页数
System.out.println("totalPage = " + totalPage);
// 获取文档信息
XEasyPdfDocumentInfo information = document.information();
System.out.println(information.getTitle()+" "+information.getAuthor());
// 定义待接收文本列表
List<String> dataList = new ArrayList<>(10);
// 获取文档图像器
/*XEasyPdfDocumentExtractor extractor = document.extractor();
extractor.extractText(dataList,0);*/
// 获取文档分析器
XEasyPdfDocumentAnalyzer analyzer = document.analyzer();
// 分析文本(第一页和第三页)
analyzer.analyzeText(0);
// 获取分析文本
List<XEasyPdfDocumentAnalyzer.TextInfo> textInfoList = analyzer.getTextInfoList();
// 打印文本
for (XEasyPdfDocumentAnalyzer.TextInfo textInfo : textInfoList) {
System.out.println(textInfo.getTextContent());
}
// System.out.println("textInfoList = " + textInfoList);
// 获取文档拆分器
//XEasyPdfDocumentFormFiller formFiller = document.formFiller();
/*List<XEasyPdfPage> pages = document.getPageList();
for (XEasyPdfPage page : pages) {
}*/
// 关闭文档
document.close();
return dataList;
}
public static void main(String[] args) {
try {
PdfUtil pdfUtil=new PdfUtil();
List<HashMap<String,Object>> tables=new ArrayList<>();
HashMap<String ,Object> row=null;
for (int i = 1; i <=10 ; i++) {
row=new HashMap<>();
row.put("fKey","row"+i);
row.put("fName","ZZZ"+i);
row.put("fBir","2022-07-0"+i);
tables.add(row);
}
String[] tabHead={"代码","名称","生日"};
pdfUtil.createPdf2("d:/3.pdf",false,"我是标题","6718",tabHead,tables);
pdfUtil.readPdf2("d:/2.pdf");
} catch (Exception e) {
e.printStackTrace();
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)