String outputPath = "D:\\document.pdf";
Document document = TemplateHandler.Document.build();
Font font = new Font("微软雅黑", Font.PLAIN, 12);
//============================================水印====================================================//
// 创建多行水印
Watermark watermark = TemplateHandler.Watermark.build()
// 设置水印id
.setId("SY")
// 设置水印文本
.setText("我就是个水印")
// 设置水印文本字体大小
.setFontSize("54pt")
// 设置水印图片宽度
.setWidth("300pt")
// 设置水印图片高度
.setHeight("200pt")
// 设置水印显示宽度
.setShowWidth("300pt")
.setFontAlpha("20")
.setRepeat("no-repeat")
.setHorizontalPosition("center")
.setVerticalPosition("center")
.setRadians("-45")
// 开启文件覆盖
.enableOverwrite();
//封面
Page fm = TemplateHandler.Page.build().setFontFamily("微软雅黑");
fm.setBodyBackgroundColor("#f6f5ec");
// 添加水印
fm.setBodyWatermark(watermark);
// 创建普通文本
Text fmtext1 = TemplateHandler.Text.build().setText("验房大师验房报告").setFontSize("36").setHorizontalStyle("center").setMarginTop("150pt");
Text fmtext2 = TemplateHandler.Text.build().setText("房屋面积: 132㎡").setFontSize("18").setTextIndent("200pt").setMarginTop("130pt");
Text fmtext3 = TemplateHandler.Text.build().setText("楼盘名称: 真隆夫").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");
Text fmtext4 = TemplateHandler.Text.build().setText("门牌号码: 7-1-302").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");
Text fmtext5 = TemplateHandler.Text.build().setText("验房老师: 杨老师").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");
Text fmtext6 = TemplateHandler.Text.build().setText("验房日期: 2024-10-10").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");
Text fmtext7 = TemplateHandler.Text.build().setText("咨询电话: 18833665656").setFontSize("18").setTextIndent("200pt").setMarginTop("10pt");
// // 创建图像
// Barcode lCode = TemplateHandler.Barcode.build()
// // 设置类型
// .setType("qr_code")
// // 设置宽度
// .setWidth("150px")
// // 设置高度
// .setHeight("150px")
// .setMarginTop("50pt")
// // 设置内容
// .setContent("https://www.x-easypdf.cn")
// // 设置显示文本
// .setWords("https://www.x-easypdf.cn")
// // 设置水平居中
// .setHorizontalStyle("center");
// // 创建图像
// Barcode rCode = TemplateHandler.Barcode.build()
// // 设置类型
// .setType("qr_code")
// // 设置宽度
// .setWidth("150px")
// // 设置高度
// .setHeight("150px")
// .setMarginTop("50pt")
// // 设置内容
// .setContent("https://www.x-easypdf.cn")
// // 设置显示文本
// .setWords("https://www.x-easypdf.cn")
// // 设置水平居中
// .setHorizontalStyle("center");
// 创建表格
Table fmtable = TemplateHandler.Table.build();
fmtable.setMarginTop("70pt");
fmtable.setMarginLeft("60pt");
fmtable.setMarginRight("60pt");
// 创建表格体
TableBody fmtableBody = TemplateHandler.Table.Body.build();
TableRow fmrow = TemplateHandler.Table.Row.build();
// 循环创建表格单元格
for (int j = 1; j <= 2; j++) {
// 创建表格单元格
TableCell cell = TemplateHandler.Table.Cell.build();
// 创建图像
Barcode rCode = TemplateHandler.Barcode.build()
// 设置类型
.setType("qr_code")
// 设置宽度
.setWidth("150px")
// 设置高度
.setHeight("150px")
// 设置内容
.setContent("https://www.x-easypdf.cn")
// 设置显示文本
.setWords("https://www.x-easypdf.cn");
// 添加文本
cell.addComponent(rCode);
cell.setHorizontalStyle("center");
// 添加单元格
fmrow.addCell(cell);
}
// 添加行
fmtableBody.addRow(fmrow);
// 设置表格体
fmtable.setBody(fmtableBody);
// 添加文本
fm.addBodyComponent(fmtext1);
fm.addBodyComponent(fmtext2);
fm.addBodyComponent(fmtext3);
fm.addBodyComponent(fmtext4);
fm.addBodyComponent(fmtext5);
fm.addBodyComponent(fmtext6);
fm.addBodyComponent(fmtext7);
// 添加图像
fm.addBodyComponent(fmtable);
document.addPage(fm);
//============================================页眉====================================================//
//正文
Page page = TemplateHandler.Page.build().setFontFamily("微软雅黑");
// 添加水印
page.setBodyWatermark(watermark);
page.setBodyMarginTop("70pt");
page.setBodyMarginBottom("50pt");
page.setMarginLeft("50pt");
page.setMarginRight("50pt");
//页眉
Text headerText = TemplateHandler.Text.build().setText("品质验房,专业品质,贴心服务");
// 创建图像
org.dromara.pdf.fop.core.doc.component.image.Image iheader = TemplateHandler.Image.build()
// 设置图像路径(绝对路径)
.setPath("/D:\\360Downloads\\4_0.png")
// 设置图像宽度
.setWidth("20px")
// 设置图像高度
.setHeight("20px");
// 创建表格
Table h_table = TemplateHandler.Table.build().setHeight("40pt").setMarginTop("20pt");
// 创建表格体
TableBody h_tableBody = TemplateHandler.Table.Body.build();
// 创建表格行
TableRow h_row = TemplateHandler.Table.Row.build();
// 创建表格单元格
TableCell l_cell = TemplateHandler.Table.Cell.build();
l_cell.setHorizontalStyle("left");
l_cell.setVerticalStyle("after");
// 添加文本
l_cell.addComponent(iheader);
// 添加单元格
h_row.addCell(l_cell);
// 创建表格单元格
TableCell r_cell = TemplateHandler.Table.Cell.build();
r_cell.setHorizontalStyle("right");
r_cell.setVerticalStyle("after");
// 添加文本
r_cell.addComponent(headerText);
// 添加单元格
h_row.addCell(r_cell);
// 添加行
h_tableBody.addRow(h_row);
// 设置表格体
h_table.setBody(h_tableBody);
//分割线
SplitLine solid1 = TemplateHandler.SplitLine.build().setStyle("solid").setLength("100%");
solid1.enableKeepTogether();
page.setHeaderHeight("50pt").setMarginBottom("10pt").addHeaderComponent(h_table, solid1);
//============================================页脚====================================================//
// 创建页脚
Text l_footerText = TemplateHandler.Text.build().setText("服务人员");
Text r_footerText = TemplateHandler.Text.build().setText("电话:18825365655");
// 创建当前页码
CurrentPageNumber currentPageNumber = TemplateHandler.CurrentPageNumber.build();
// 创建总页码
TotalPageNumber totalPageNumber = TemplateHandler.TotalPageNumber.build().setPageId("page");
// 创建表格
Table f_table = TemplateHandler.Table.build().setHeight("50pt");
// 创建表格体
TableBody f_tableBody = TemplateHandler.Table.Body.build();
// 创建表格行
TableRow f_row = TemplateHandler.Table.Row.build();
// 创建表格单元格
TableCell l_f_cell = TemplateHandler.Table.Cell.build();
l_f_cell.setHorizontalStyle("left");
l_f_cell.setVerticalStyle("after");
// 添加文本
l_f_cell.addComponent(l_footerText);
// 添加单元格
f_row.addCell(l_f_cell);
// 创建表格单元格
TableCell z_cell = TemplateHandler.Table.Cell.build();
z_cell.setHorizontalStyle("center");
z_cell.setVerticalStyle("after");
// 创建容器
BlockContainer container = TemplateHandler.BlockContainer.build();
// 创建当前页码文本
Text pageCurrentText = TemplateHandler.Text.build().setText("第 ");
// 创建总页码文本
Text pageTotalText = TemplateHandler.Text.build().setText(" 页/共 ");
Text pageTotalEndText = TemplateHandler.Text.build().setText(" 页");
// 添加容器内组件
container.addComponent(pageCurrentText, currentPageNumber, pageTotalText, totalPageNumber, pageTotalEndText);
container.setMarginTop("5pt");
// 添加文本
z_cell.addComponent(container);
// 添加单元格
f_row.addCell(z_cell);
// 创建表格单元格
TableCell r_f_cell = TemplateHandler.Table.Cell.build();
r_f_cell.setHorizontalStyle("right");
r_f_cell.setVerticalStyle("after");
// 添加文本
r_f_cell.addComponent(r_footerText);
// 添加单元格
f_row.addCell(r_f_cell);
// 添加行
f_tableBody.addRow(f_row);
// 设置表格体
f_table.setBody(f_tableBody);
page.setFooterHeight("50pt").addFooterComponent(f_table);
page.setId("page");
//============================================第一页====================================================//
Text title_1 = TemplateHandler.Text.build().setText("一、委托信息").setFontSize("24");
page.addBodyComponent(title_1);
// 创建表格
Table t1_table = TemplateHandler.Table.build().setMarginTop("30pt");
// 创建表格体
TableBody t1_tableBody = TemplateHandler.Table.Body.build();
for (int i = 0; i < 4; i++) {
// 创建表格行
TableRow row = TemplateHandler.Table.Row.build();
if (i == 0) {
// 创建表格单元格
TableCell cell1 = TemplateHandler.Table.Cell.build();
// 设置单元格边框
// 创建文本
Text text1 = TemplateHandler.Text.build().setText("楼盘: 真隆夫");
// 添加文本
cell1.addComponent(text1);
cell1.setHeight("40");
// 添加单元格
row.addCell(cell1);
// 创建表格单元格
TableCell cell = TemplateHandler.Table.Cell.build();
// 设置单元格边框
//cell.setBorder("1 solid black");
// 创建文本
Text text = TemplateHandler.Text.build().setText("房间: 7-1-302");
// 添加文本
cell.addComponent(text);
cell.setHeight("40");
// 添加单元格
row.addCell(cell);
// 添加行
t1_tableBody.addRow(row);
} else if (i == 1) {
// 创建表格单元格
TableCell cell1 = TemplateHandler.Table.Cell.build();
// 设置单元格边框
//cell1.setBorder("1 solid black");
// 创建文本
Text text1 = TemplateHandler.Text.build().setText("姓名: 王先生");
// 添加文本
cell1.addComponent(text1);
cell1.setHeight("40");
// 添加单元格
row.addCell(cell1);
// 创建表格单元格
TableCell cell = TemplateHandler.Table.Cell.build();
// 设置单元格边框
//cell.setBorder("1 solid black");
// 创建文本
Text text = TemplateHandler.Text.build().setText("电话: 18832653232");
// 添加文本
cell.addComponent(text);
cell.setHeight("40");
// 添加单元格
row.addCell(cell);
// 添加行
t1_tableBody.addRow(row);
} else if (i == 2) {
// 创建表格单元格
TableCell cell = TemplateHandler.Table.Cell.build();
// 设置单元格边框
//cell.setBorder("1 solid black");
cell.setColumnSpan(2);
cell.setHeight("50");
// 创建文本
Text text = TemplateHandler.Text.build().setText("【委托书】:应业主要求,研发岗的后代洒家打开就ask了解的卡拉就是考虑到吉安卡罗设计的刻录机");
// 添加文本
cell.addComponent(text);
// 添加单元格
row.addCell(cell);
// 添加行
t1_tableBody.addRow(row);
} else {
// 创建表格单元格
TableCell cell = TemplateHandler.Table.Cell.build();
// 设置单元格边框
//cell.setBorder("1 solid black");
cell.setColumnSpan(2);
cell.setHeight("120");
// 创建文本
Text text = TemplateHandler.Text.build().setText("【业主须知】:暗红色的卡卡洒家打开hjhjkhjk法国很多很多的的还得反对法二撒旦发射点发生的发生的发生的发生的发生的发生的垃圾卡拉就是快乐的骄傲看似简单卡拉就是看了大家深刻理解奥克兰的就卡了就打开垃圾的卡拉打开了案件考虑到吉安卡罗的金克拉觉得卡拉就打开垃圾贷款");
// 添加文本
cell.addComponent(text);
// 添加单元格
row.addCell(cell);
// 添加行
t1_tableBody.addRow(row);
}
}
// 设置表格体
t1_table.setBody(t1_tableBody);
t1_table.setHeight("800");
t1_table.setWidth("400");
t1_table.setMargin("10pt");
// 添加表格
page.addBodyComponent(t1_table);
Text title_2 = TemplateHandler.Text.build().setText("二、查询数据分析").setFontSize("24");
title_2.setMarginTop("20pt");
page.addBodyComponent(title_2);
//饼图
DefaultPieDataset bar_dataset = new DefaultPieDataset();
bar_dataset.setValue("前厅 A", 40);
bar_dataset.setValue("大门 B", 30);
bar_dataset.setValue("阳台 C", 20);
bar_dataset.setValue("卫生间 D", 10);
ChartFactory.setChartTheme(JfreeChartUtil.createChartTheme());
JFreeChart bar_chart = ChartFactory.createPieChart(
"饼图", // chart title
bar_dataset, // dataset
true, // include legend
true,
false
);
// 设置中文字体
bar_chart.getTitle().setFont(font);
bar_chart.setTextAntiAlias(false);
JfreeChartUtil.setPieRender(bar_chart.getPlot());
File bar_file = new File("D:\\360Downloads\\22.png");
try {
ChartUtils.saveChartAsJPEG(bar_file, bar_chart, 400, 300);
} catch (IOException e) {
e.printStackTrace();
}
org.dromara.pdf.fop.core.doc.component.image.Image barImage = TemplateHandler.Image.build()
// 设置图像路径(绝对路径)
.setPath("/" + bar_file.getPath())
// 设置图像宽度
.setWidth("600px")
// 设置图像高度
.setHeight("280px")
// 设置水平居中
.setHorizontalStyle("center")
.setMarginTop("10pt");
// 添加图像
page.addBodyComponent(barImage);
//============================================第er页====================================================//
//曲线图
DefaultCategoryDataset line_taset = new DefaultCategoryDataset();
// 添加数据,横轴为字符串,纵轴为数值
line_taset.addValue(1.0, "", "前厅");
line_taset.addValue(4.0, "", "卫生间");
line_taset.addValue(3.0, "", "厨房");
line_taset.addValue(5.0, "", "客厅");
// 创建柱状图
JFreeChart line_Chart = ChartFactory.createBarChart(
"房屋问题统计", // 图表标题
"", // 横轴标签
"", // 纵轴标签
line_taset, // 数据集
PlotOrientation.VERTICAL, // 图表方向
false, // 显示图例
true, // 显示工具提示
false);// 显示 URL
// 设置中文字体
line_Chart.getTitle().setFont(font);
JfreeChartUtil.setBarRenderer(line_Chart.getPlot(),true);
File line_file = new File("D:\\360Downloads\\33.png");
try {
ChartUtils.saveChartAsPNG(line_file, line_Chart, 400, 300);
} catch (IOException e) {
e.printStackTrace();
}
org.dromara.pdf.fop.core.doc.component.image.Image lineImage = TemplateHandler.Image.build()
// 设置图像路径(绝对路径)
.setPath("/" + line_file.getPath())
// 设置图像宽度
.setWidth("600px")
// 设置图像高度
.setHeight("280px")
// 设置水平居中
.setHorizontalStyle("center");
// 添加图像
page.addBodyComponent(lineImage);
Text title_3 = TemplateHandler.Text.build().setText("三、房屋查验内容").setFontSize("24");
title_3.setMarginTop("20pt");
page.addBodyComponent(title_3);
//图片内容 table
// 创建表格
Table img_table = TemplateHandler.Table.build().setHorizontalStyle("center");
// 创建表格体
TableBody img_tableBody = TemplateHandler.Table.Body.build();
// 循环创建表格行
for (int i = 1; i <= 5; i++) {//问题数量
//标题
TableRow row1 = TemplateHandler.Table.Row.build();
TableCell cell1 = TemplateHandler.Table.Cell.build();
cell1.setHorizontalStyle("center");
cell1.setVerticalStyle("center");
cell1.addComponent(TemplateHandler.Text.build().setText("部位"));
cell1.setBackgroundColor("green");
cell1.setColumnSpan(2);
cell1.setHeight("30pt");
cell1.setBorder("1 solid black");
row1.addCell(cell1);
img_tableBody.addRow(row1);
//描述
TableRow row2 = TemplateHandler.Table.Row.build();
TableCell cell2 = TemplateHandler.Table.Cell.build();
cell2.setHorizontalStyle("left");
cell2.setColumnSpan(2);
cell2.setVerticalStyle("center");
cell2.setHeight("70pt");
cell2.setBorder("1 solid black");
cell2.addComponent(TemplateHandler.Text.build().setText("这里是问题描述的地方,爱睡觉的卢卡库老师金克拉就是卡拉几十块Djakarta吉安卡罗觉得卡拉就是的卡拉就是的刻录机ask了点击"));
row2.addCell(cell2);
img_tableBody.addRow(row2);
//图片
int img = RandomUtil.randomInt(0, 7);//图片数量
if (img == 0) continue;
int c = 0;
while (c <= img) {
for (int x = 1; x <= 2; x++) {//标题 描述 图片
TableRow row = TemplateHandler.Table.Row.build();
for (int y = c; y <= c+1; y++) {//问题数量
//判断数据集是否超出
if (y> img) continue;
TableCell cell = TemplateHandler.Table.Cell.build();
cell.setBorder("1 solid black");
if (x == 1) {
Image m1 = TemplateHandler.Image.build()
// 设置图像路径(绝对路径)
.setPath("/D:\\360Downloads\\4_0.png")
// 设置图像宽度
.setWidth("200px")
// 设置图像高度
.setHeight("150px")
// 设置水平居中
.setHorizontalStyle("center")
.setMarginBottom("5pt");
cell.addComponent(m1);
} else {
cell.addComponent(TemplateHandler.Text.build().setText("这里是问题描述的地方"));
cell.setHorizontalStyle("center");
cell.setVerticalStyle("center");
cell.setHeight("20px");
}
row.addCell(cell);
}
img_tableBody.addRow(row);
}
c = c + 2;
}
}
// 设置表格体
img_table.setWidth("490");
img_table.setMarginTop("20pt");
img_table.setBody(img_tableBody);
// 添加表格
page.addBodyComponent(img_table);
Text title_4 = TemplateHandler.Text.build().setText("四、查验依据说明").setFontSize("24").setBreakBefore("page");
title_4.setMarginTop("20pt");
page.addBodyComponent(title_4);
// 创建表格
Table we_table = TemplateHandler.Table.build().setHorizontalStyle("center");
// 创建表格体
TableBody we_tableBody = TemplateHandler.Table.Body.build();
// 循环创建表格行
TableRow we_row = TemplateHandler.Table.Row.build();
TableCell we_cell = TemplateHandler.Table.Cell.build();
we_cell.setBorder("1 solid black");
we_cell.setHorizontalStyle("left");
we_cell.setVerticalStyle("top");
we_cell.setHeight("300pt");
Text text = TemplateHandler.Text.build().setText("【精装房整改共性建议】\n").setLeading("2");
Text text1 = TemplateHandler.Text.build().setText("1、五金件松动、故障需调试安装\n").setLeading("2");
Text text2 = TemplateHandler.Text.build().setText("一、五金件:松动、故障:调试、更换。\n").setLeading("2");
Text text3 = TemplateHandler.Text.build().setText("参考规范:《建筑装饰装修工程质量验收标准》GB50210-2018\n").setLeading("2");
Text text4 = TemplateHandler.Text.build().setText("二、石材:破损可通过相近颜色云石胶修补,破损严重需更换。\n").setLeading("2");
Text text5 = TemplateHandler.Text.build().setText("参考规范:《建筑地面工程施工质量验收规范》GB50209-2010\n").setLeading("2");
Text text6 = TemplateHandler.Text.build().setText("三、木地板:\n").setLeading("2");
Text text7 = TemplateHandler.Text.build().setText("1.软塌:地坪重新找平。\n").setLeading("2");
Text text8 = TemplateHandler.Text.build().setText("2.起灰:清理地板余灰。\n").setLeading("2");
Text text9 = TemplateHandler.Text.build().setText("参考规范:《建筑地面工程施工质量验收规范》GB50209-2010\n").setLeading("2");
Text text10 = TemplateHandler.Text.build().setText("四、瓷砖:\n").setLeading("2");
Text text11 = TemplateHandler.Text.build().setText("1.空鼓:墙砖空鼓需重新铺贴。地砖边角空鼓可灌浆处理,面积较大、中空需重新铺贴。\n").setLeading("2");
Text text12 = TemplateHandler.Text.build().setText("2.高低差:地砖高低差超0.5mm需重新铺贴,墙砖高低差超1mm需重新铺贴。\n").setLeading("2");
Text text13 = TemplateHandler.Text.build().setText("3.平整度:瓷砖超过2mm需重新铺贴。\n").setLeading("2");
Text text14 = TemplateHandler.Text.build().setText("参考规范:《建筑装饰装修工程质量验收标准》GB50210-2018;《建筑地面工程施工质量\n").setLeading("2");
Text text15 = TemplateHandler.Text.build().setText("第10页\n").setLeading("2");
Text text16 = TemplateHandler.Text.build().setText("验收规范》GB50209-2010\n").setLeading("2");
Text text17 = TemplateHandler.Text.build().setText("五、地漏:\n").setLeading("2");
Text text18 = TemplateHandler.Text.build().setText("1.错位:弯头连接或重新铺装。\n").setLeading("2");
Text text19 = TemplateHandler.Text.build().setText("2.下水管短缺:短管连接,防水砂浆抹边。\n").setLeading("2");
Text text20 = TemplateHandler.Text.build().setText("参考规范:《建筑给水排水及采暖工程施工质量验收规范》GB50242-2002\n").setLeading("2");
we_cell.addComponent(text, text1, text2, text3, text4, text5, text6, text7, text8, text9, text10, text11, text12, text13, text14, text15, text16, text17, text18, text19, text20);
we_row.addCell(we_cell);
we_tableBody.addRow(we_row);
// 设置表格体
we_table.setWidth("490");
we_table.setMarginTop("20pt");
we_table.setBody(we_tableBody);
// 添加表格
page.addBodyComponent(we_table);
document.addPage(page);
document.transform(outputPath);
springboot l 利用x-easypdf生成PDF
于 2024-10-21 13:55:04 首次发布