Commit 591a74a6 authored by wangxl's avatar wangxl

1

parent 8e46a719
...@@ -20,6 +20,7 @@ public class ProjectInfoToPDF { ...@@ -20,6 +20,7 @@ public class ProjectInfoToPDF {
/** /**
* 生成项目申请书和合同书PDF * 生成项目申请书和合同书PDF
*
* @param project 项目信息 * @param project 项目信息
* @return 生成的PDF文件字节数组 * @return 生成的PDF文件字节数组
*/ */
...@@ -27,14 +28,14 @@ public class ProjectInfoToPDF { ...@@ -27,14 +28,14 @@ public class ProjectInfoToPDF {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document document = new Document(PageSize.A4); Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, baos); PdfWriter writer = PdfWriter.getInstance(document, baos);
try { try {
// 文件水印 // 文件水印
String watermark = project.getAppNo(); String watermark = project.getAppNo();
if (project.getProjState() >= CommonEnum.projState.pass.getCode()) { if (project.getProjState() >= CommonEnum.projState.pass.getCode()) {
watermark = project.getProjNo(); watermark = project.getProjNo();
} }
// 宋体 // 宋体
BaseFont bfChinese = loadChineseFont("simsun.ttc"); BaseFont bfChinese = loadChineseFont("simsun.ttc");
// 仿宋 // 仿宋
...@@ -52,14 +53,14 @@ public class ProjectInfoToPDF { ...@@ -52,14 +53,14 @@ public class ProjectInfoToPDF {
//首页内容 //首页内容
FirstPageInfo(document, project, bfChinese, fsChinese); FirstPageInfo(document, project, bfChinese, fsChinese);
// 添加新页面 // 添加新页面
document.newPage(); document.newPage();
// 添加项目内容章节 // 添加项目内容章节
addSection(document, "一、项目基本情况", boldFont); addSection(document, "一、项目基本情况", boldFont);
addProjectBasicTable(document, project, bfChinese, fsChinese); // 添加项目基本信息表格 addProjectBasicTable(document, project, bfChinese, fsChinese); // 添加项目基本信息表格
// 添加横向页面 // 添加横向页面
document.setPageSize(PageSize.A4.rotate()); document.setPageSize(PageSize.A4.rotate());
document.newPage(); document.newPage();
...@@ -77,12 +78,17 @@ public class ProjectInfoToPDF { ...@@ -77,12 +78,17 @@ public class ProjectInfoToPDF {
// 项目经费预算表 // 项目经费预算表
addProjectBudgetTable(document, project, bfChinese, fsChinese); addProjectBudgetTable(document, project, bfChinese, fsChinese);
if (Objects.nonNull(project.getDownloadUrl())) {
// 插入申请书正文PDF String fileExtName = project.getDownloadUrl().substring(project.getDownloadUrl().lastIndexOf(".") + 1);
if (null != project.getConvertUrl() && !project.getConvertUrl().trim().isEmpty()) { if (fileExtName.toLowerCase().equals("pdf")) {
InsertPdfContent(document, "申请书正文", System.getProperty("user.dir") + project.getConvertUrl(), writer); // 插入申请书正文PDF
InsertPdfContent(document, "申请书正文", System.getProperty("user.dir") + project.getDownloadUrl(), writer);
} else {
if (null != project.getConvertUrl() && !project.getConvertUrl().trim().isEmpty()) {
InsertPdfContent(document, "申请书正文", System.getProperty("user.dir") + project.getConvertUrl(), writer);
}
}
} }
// 加载项目组成员简历 // 加载项目组成员简历
List<ComProjectMembersDTO> MemberList = project.getMembers(); List<ComProjectMembersDTO> MemberList = project.getMembers();
if (null != MemberList && MemberList.size() > 0) { if (null != MemberList && MemberList.size() > 0) {
...@@ -122,6 +128,7 @@ public class ProjectInfoToPDF { ...@@ -122,6 +128,7 @@ public class ProjectInfoToPDF {
/** /**
* 加载中文字体 * 加载中文字体
*
* @param fontName 字体文件名 * @param fontName 字体文件名
* @return BaseFont 中文字体 * @return BaseFont 中文字体
* @throws RuntimeException 加载字体失败时抛出异常 * @throws RuntimeException 加载字体失败时抛出异常
...@@ -161,6 +168,7 @@ public class ProjectInfoToPDF { ...@@ -161,6 +168,7 @@ public class ProjectInfoToPDF {
/** /**
* 首页项目信息 * 首页项目信息
*
* @param document * @param document
* @param project * @param project
* @param bfChinese * @param bfChinese
...@@ -216,7 +224,7 @@ public class ProjectInfoToPDF { ...@@ -216,7 +224,7 @@ public class ProjectInfoToPDF {
table.setSpacingBefore(50f); // 增加表格前的间距 table.setSpacingBefore(50f); // 增加表格前的间距
table.setSpacingAfter(10f); table.setSpacingAfter(10f);
table.setHorizontalAlignment(Element.ALIGN_LEFT); // 设置表格左对齐 table.setHorizontalAlignment(Element.ALIGN_LEFT); // 设置表格左对齐
// 设置列宽度 // 设置列宽度
float[] columnWidths = {0.35f, 0.65f}; float[] columnWidths = {0.35f, 0.65f};
table.setWidths(columnWidths); table.setWidths(columnWidths);
...@@ -236,6 +244,7 @@ public class ProjectInfoToPDF { ...@@ -236,6 +244,7 @@ public class ProjectInfoToPDF {
/** /**
* 添加首页项目表格信息 * 添加首页项目表格信息
*
* @param table * @param table
* @param label * @param label
* @param value * @param value
...@@ -250,7 +259,7 @@ public class ProjectInfoToPDF { ...@@ -250,7 +259,7 @@ public class ProjectInfoToPDF {
labelCell.setHorizontalAlignment(Element.ALIGN_RIGHT); labelCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
labelCell.setPaddingRight(5f); labelCell.setPaddingRight(5f);
labelCell.setBorder(Rectangle.NO_BORDER); labelCell.setBorder(Rectangle.NO_BORDER);
// 值单元格 // 值单元格
Phrase valuePhrase; Phrase valuePhrase;
if (value != null && !value.trim().isEmpty()) { if (value != null && !value.trim().isEmpty()) {
...@@ -258,7 +267,7 @@ public class ProjectInfoToPDF { ...@@ -258,7 +267,7 @@ public class ProjectInfoToPDF {
} else { } else {
valuePhrase = new Phrase(" ", valueFont); // 空值时使用一个空格 valuePhrase = new Phrase(" ", valueFont); // 空值时使用一个空格
} }
PdfPCell valueCell = new PdfPCell(valuePhrase); PdfPCell valueCell = new PdfPCell(valuePhrase);
valueCell.setMinimumHeight(28f); valueCell.setMinimumHeight(28f);
valueCell.setVerticalAlignment(Element.ALIGN_MIDDLE); valueCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
...@@ -266,7 +275,7 @@ public class ProjectInfoToPDF { ...@@ -266,7 +275,7 @@ public class ProjectInfoToPDF {
valueCell.setPaddingLeft(5f); valueCell.setPaddingLeft(5f);
valueCell.setPaddingRight(10f); valueCell.setPaddingRight(10f);
valueCell.setBorder(Rectangle.NO_BORDER); valueCell.setBorder(Rectangle.NO_BORDER);
// 添加自定义事件来绘制下划线 // 添加自定义事件来绘制下划线
valueCell.setCellEvent(new PdfPCellEvent() { valueCell.setCellEvent(new PdfPCellEvent() {
public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) { public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) {
...@@ -278,13 +287,14 @@ public class ProjectInfoToPDF { ...@@ -278,13 +287,14 @@ public class ProjectInfoToPDF {
cb.stroke(); cb.stroke();
} }
}); });
table.addCell(labelCell); table.addCell(labelCell);
table.addCell(valueCell); table.addCell(valueCell);
} }
/** /**
* 项目基本信息 * 项目基本信息
*
* @param document * @param document
* @param project * @param project
* @param bfChinese * @param bfChinese
...@@ -305,7 +315,7 @@ public class ProjectInfoToPDF { ...@@ -305,7 +315,7 @@ public class ProjectInfoToPDF {
PdfPTable personTable = new PdfPTable(9); // 9列,第一列用于标题 PdfPTable personTable = new PdfPTable(9); // 9列,第一列用于标题
float[] personWidths = {1f, 1.5f, 2f, 1f, 2f, 1.5f, 2f, 2f, 2f}; // 调整第一列宽度 float[] personWidths = {1f, 1.5f, 2f, 1f, 2f, 1.5f, 2f, 2f, 2f}; // 调整第一列宽度
personTable.setWidths(personWidths); personTable.setWidths(personWidths);
// 申请人信息标题行 // 申请人信息标题行
PdfPCell titleCell = new PdfPCell(new Phrase("申\n请\n人\n信\n息", titleFont)); PdfPCell titleCell = new PdfPCell(new Phrase("申\n请\n人\n信\n息", titleFont));
titleCell.setRowspan(6); // 合并6行 titleCell.setRowspan(6); // 合并6行
...@@ -313,28 +323,28 @@ public class ProjectInfoToPDF { ...@@ -313,28 +323,28 @@ public class ProjectInfoToPDF {
titleCell.setVerticalAlignment(Element.ALIGN_MIDDLE); titleCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
titleCell.setMinimumHeight(150f); // 调整高度以适应内容 titleCell.setMinimumHeight(150f); // 调整高度以适应内容
personTable.addCell(titleCell); personTable.addCell(titleCell);
// 第一行 // 第一行
addBasicTableCell(personTable, "姓 名", project.getAppPersonName(), 2, labelFont, valueFont); addBasicTableCell(personTable, "姓 名", project.getAppPersonName(), 2, labelFont, valueFont);
addBasicTableCell(personTable, "性别", project.getSex(), 2, labelFont, valueFont); addBasicTableCell(personTable, "性别", project.getSex(), 2, labelFont, valueFont);
addBasicTableCell(personTable, "出生年月", DateUtils.formatDateRange(project.getBirthday(), 1), 2, labelFont, valueFont); addBasicTableCell(personTable, "出生年月", DateUtils.formatDateRange(project.getBirthday(), 1), 2, labelFont, valueFont);
addBasicTableCell(personTable, "民族", project.getNationName(), 2, labelFont, valueFont); addBasicTableCell(personTable, "民族", project.getNationName(), 2, labelFont, valueFont);
// 第二行 // 第二行
addBasicTableCell(personTable, "学 位", project.getDegreeName(), 2, labelFont, valueFont); addBasicTableCell(personTable, "学 位", project.getDegreeName(), 2, labelFont, valueFont);
addBasicTableCell(personTable, "职称", project.getTitleName(), 2, labelFont, valueFont); addBasicTableCell(personTable, "职称", project.getTitleName(), 2, labelFont, valueFont);
addBasicTableCell(personTable, "每年工作时间(月)", project.getJobTime().toString(), 4, labelFont, valueFont); addBasicTableCell(personTable, "每年工作时间(月)", project.getJobTime().toString(), 4, labelFont, valueFont);
// 第三行 // 第三行
addBasicTableCell(personTable, "电 话", project.getMobile(), 4, labelFont, valueFont); addBasicTableCell(personTable, "电 话", project.getMobile(), 4, labelFont, valueFont);
addBasicTableCell(personTable, "电子邮箱", project.getEmail(), 4, labelFont, valueFont); addBasicTableCell(personTable, "电子邮箱", project.getEmail(), 4, labelFont, valueFont);
// 第四行 // 第四行
addBasicTableCell(personTable, "个人通讯地址", project.getAddress(), 8, labelFont, valueFont); addBasicTableCell(personTable, "个人通讯地址", project.getAddress(), 8, labelFont, valueFont);
// 第五行 // 第五行
addBasicTableCell(personTable, "工作单位", project.getAppUnitName(), 8, labelFont, valueFont); addBasicTableCell(personTable, "工作单位", project.getAppUnitName(), 8, labelFont, valueFont);
// 第六行 // 第六行
addBasicTableCell(personTable, "主要研究领域", project.getMainResearchAreas(), 8, labelFont, valueFont); addBasicTableCell(personTable, "主要研究领域", project.getMainResearchAreas(), 8, labelFont, valueFont);
...@@ -343,12 +353,12 @@ public class ProjectInfoToPDF { ...@@ -343,12 +353,12 @@ public class ProjectInfoToPDF {
personCell.setPadding(0); personCell.setPadding(0);
personCell.setBorder(Rectangle.BOX); personCell.setBorder(Rectangle.BOX);
mainTable.addCell(personCell); mainTable.addCell(personCell);
// 申请单位信息部分 // 申请单位信息部分
PdfPTable unitTable = new PdfPTable(5); // 5列,第一列用于标题 PdfPTable unitTable = new PdfPTable(5); // 5列,第一列用于标题
float[] unitWidths = {1.2f, 3f, 5f, 3f, 5f}; // 调整所有列的比例,保持第一列宽度一致 float[] unitWidths = {1.2f, 3f, 5f, 3f, 5f}; // 调整所有列的比例,保持第一列宽度一致
unitTable.setWidths(unitWidths); unitTable.setWidths(unitWidths);
// 申请单位信息标题行 // 申请单位信息标题行
titleCell = new PdfPCell(new Phrase("申\n请\n单\n位\n信\n息", titleFont)); titleCell = new PdfPCell(new Phrase("申\n请\n单\n位\n信\n息", titleFont));
titleCell.setRowspan(5); // 合并5行 titleCell.setRowspan(5); // 合并5行
...@@ -356,7 +366,7 @@ public class ProjectInfoToPDF { ...@@ -356,7 +366,7 @@ public class ProjectInfoToPDF {
titleCell.setVerticalAlignment(Element.ALIGN_MIDDLE); titleCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
titleCell.setMinimumHeight(100f); titleCell.setMinimumHeight(100f);
unitTable.addCell(titleCell); unitTable.addCell(titleCell);
// 单位信息内容 // 单位信息内容
addBasicTableCell(unitTable, "单位名称", project.getAppUnitName(), 4, labelFont, valueFont); addBasicTableCell(unitTable, "单位名称", project.getAppUnitName(), 4, labelFont, valueFont);
addBasicTableCell(unitTable, "联系人", project.getUnitLinkName(), 2, labelFont, valueFont); addBasicTableCell(unitTable, "联系人", project.getUnitLinkName(), 2, labelFont, valueFont);
...@@ -369,12 +379,12 @@ public class ProjectInfoToPDF { ...@@ -369,12 +379,12 @@ public class ProjectInfoToPDF {
unitCell.setPadding(0); unitCell.setPadding(0);
unitCell.setBorder(Rectangle.BOX); unitCell.setBorder(Rectangle.BOX);
mainTable.addCell(unitCell); mainTable.addCell(unitCell);
// 项目基本情况部分 // 项目基本情况部分
PdfPTable projTable = new PdfPTable(5); // 5列,第一列用于标题 PdfPTable projTable = new PdfPTable(5); // 5列,第一列用于标题
float[] projWidths = {1.2f, 3f, 5f, 3f, 5f}; // 与申请单位信息表格使用相同的比例 float[] projWidths = {1.2f, 3f, 5f, 3f, 5f}; // 与申请单位信息表格使用相同的比例
projTable.setWidths(projWidths); projTable.setWidths(projWidths);
// 项目基本情况标题行 // 项目基本情况标题行
titleCell = new PdfPCell(new Phrase("项\n目\n基\n本\n信\n息", titleFont)); titleCell = new PdfPCell(new Phrase("项\n目\n基\n本\n信\n息", titleFont));
titleCell.setRowspan(8); // 合并8行 titleCell.setRowspan(8); // 合并8行
...@@ -382,7 +392,7 @@ public class ProjectInfoToPDF { ...@@ -382,7 +392,7 @@ public class ProjectInfoToPDF {
titleCell.setVerticalAlignment(Element.ALIGN_MIDDLE); titleCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
titleCell.setMinimumHeight(200f); titleCell.setMinimumHeight(200f);
projTable.addCell(titleCell); projTable.addCell(titleCell);
// 项目基本情况内容 // 项目基本情况内容
addBasicTableCell(projTable, "项目名称", project.getProjName(), 4, labelFont, valueFont); addBasicTableCell(projTable, "项目名称", project.getProjName(), 4, labelFont, valueFont);
addBasicTableCell(projTable, "学科代码", project.getKnowledgeName(), 2, labelFont, valueFont); addBasicTableCell(projTable, "学科代码", project.getKnowledgeName(), 2, labelFont, valueFont);
...@@ -405,6 +415,7 @@ public class ProjectInfoToPDF { ...@@ -405,6 +415,7 @@ public class ProjectInfoToPDF {
/** /**
* 添加基本信息表格单元格 * 添加基本信息表格单元格
*
* @param table * @param table
* @param label * @param label
* @param value * @param value
...@@ -418,7 +429,7 @@ public class ProjectInfoToPDF { ...@@ -418,7 +429,7 @@ public class ProjectInfoToPDF {
labelCell.setVerticalAlignment(Element.ALIGN_MIDDLE); labelCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
labelCell.setHorizontalAlignment(Element.ALIGN_CENTER); labelCell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(labelCell); table.addCell(labelCell);
PdfPCell valueCell = new PdfPCell(new Phrase(value != null ? value : "", valueFont)); PdfPCell valueCell = new PdfPCell(new Phrase(value != null ? value : "", valueFont));
valueCell.setMinimumHeight(25f); valueCell.setMinimumHeight(25f);
valueCell.setVerticalAlignment(Element.ALIGN_MIDDLE); valueCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
...@@ -429,8 +440,9 @@ public class ProjectInfoToPDF { ...@@ -429,8 +440,9 @@ public class ProjectInfoToPDF {
/** /**
* 添加项目组主要成员表格 * 添加项目组主要成员表格
* @param document PDF文档 *
* @param project 项目信息 * @param document PDF文档
* @param project 项目信息
* @param bfChinese 宋体字体 * @param bfChinese 宋体字体
* @param fsChinese 仿宋字体 * @param fsChinese 仿宋字体
* @throws DocumentException * @throws DocumentException
...@@ -438,7 +450,7 @@ public class ProjectInfoToPDF { ...@@ -438,7 +450,7 @@ public class ProjectInfoToPDF {
private static void addProjectMembersTable(Document document, ComProjectDTO project, BaseFont bfChinese, BaseFont fsChinese) throws DocumentException { private static void addProjectMembersTable(Document document, ComProjectDTO project, BaseFont bfChinese, BaseFont fsChinese) throws DocumentException {
Font titleFont = new Font(bfChinese, 12, Font.BOLD); Font titleFont = new Font(bfChinese, 12, Font.BOLD);
Font contentFont = new Font(bfChinese, 12, Font.NORMAL); Font contentFont = new Font(bfChinese, 12, Font.NORMAL);
// 添加表格标题 // 添加表格标题
Paragraph title = new Paragraph("项目组主要成员", titleFont); Paragraph title = new Paragraph("项目组主要成员", titleFont);
title.add(new Chunk(" (注:不包括项目申请人)", contentFont)); title.add(new Chunk(" (注:不包括项目申请人)", contentFont));
...@@ -449,7 +461,7 @@ public class ProjectInfoToPDF { ...@@ -449,7 +461,7 @@ public class ProjectInfoToPDF {
// 创建表格 // 创建表格
PdfPTable table = new PdfPTable(12); // 12列 PdfPTable table = new PdfPTable(12); // 12列
table.setWidthPercentage(98); table.setWidthPercentage(98);
// 设置列宽度比例 // 设置列宽度比例
float[] widths = {0.5f, 1f, 1f, 0.8f, 0.8f, 0.8f, 2f, 0.8f, 1.2f, 1f, 1.2f, 1f}; float[] widths = {0.5f, 1f, 1f, 0.8f, 0.8f, 0.8f, 2f, 0.8f, 1.2f, 1f, 1.2f, 1f};
table.setWidths(widths); table.setWidths(widths);
...@@ -510,7 +522,7 @@ public class ProjectInfoToPDF { ...@@ -510,7 +522,7 @@ public class ProjectInfoToPDF {
PdfPTable statsTable = new PdfPTable(7); // 7列 PdfPTable statsTable = new PdfPTable(7); // 7列
statsTable.setWidthPercentage(98); statsTable.setWidthPercentage(98);
statsTable.setSpacingBefore(20f); // 与上表格保持间距 statsTable.setSpacingBefore(20f); // 与上表格保持间距
// 设置列宽度比例 // 设置列宽度比例
float[] statsWidths = {1f, 1f, 1f, 1f, 1f, 1f, 1f}; float[] statsWidths = {1f, 1f, 1f, 1f, 1f, 1f, 1f};
statsTable.setWidths(statsWidths); statsTable.setWidths(statsWidths);
...@@ -539,8 +551,9 @@ public class ProjectInfoToPDF { ...@@ -539,8 +551,9 @@ public class ProjectInfoToPDF {
/** /**
* 添加项目绩效目标表 * 添加项目绩效目标表
* @param document PDF文档 *
* @param project 项目信息 * @param document PDF文档
* @param project 项目信息
* @param bfChinese 宋体字体 * @param bfChinese 宋体字体
* @param fsChinese 仿宋字体 * @param fsChinese 仿宋字体
* @throws DocumentException * @throws DocumentException
...@@ -552,7 +565,7 @@ public class ProjectInfoToPDF { ...@@ -552,7 +565,7 @@ public class ProjectInfoToPDF {
Font titleFont = new Font(bfChinese, 12, Font.BOLD); Font titleFont = new Font(bfChinese, 12, Font.BOLD);
Font contentFont = new Font(bfChinese, 12, Font.NORMAL); Font contentFont = new Font(bfChinese, 12, Font.NORMAL);
Font wingdng2Font = new Font(WINGDNG2, 12, Font.NORMAL); Font wingdng2Font = new Font(WINGDNG2, 12, Font.NORMAL);
// 添加表格标题 // 添加表格标题
Paragraph title = new Paragraph("绩效目标表", titleFont); Paragraph title = new Paragraph("绩效目标表", titleFont);
title.setAlignment(Element.ALIGN_CENTER); title.setAlignment(Element.ALIGN_CENTER);
...@@ -765,6 +778,7 @@ public class ProjectInfoToPDF { ...@@ -765,6 +778,7 @@ public class ProjectInfoToPDF {
/** /**
* 项目经费预算表 * 项目经费预算表
*
* @param document * @param document
* @param project * @param project
* @param bfChinese * @param bfChinese
...@@ -924,28 +938,28 @@ public class ProjectInfoToPDF { ...@@ -924,28 +938,28 @@ public class ProjectInfoToPDF {
Rectangle pageSize = document.getPageSize(); Rectangle pageSize = document.getPageSize();
float width = pageSize.getWidth(); float width = pageSize.getWidth();
float height = pageSize.getHeight(); float height = pageSize.getHeight();
// 设置水印字体 // 设置水印字体
canvas.saveState(); canvas.saveState();
canvas.beginText(); canvas.beginText();
canvas.setFontAndSize(baseFont, 30); // 减小字体大小 canvas.setFontAndSize(baseFont, 30); // 减小字体大小
canvas.setGrayFill(0.9f); canvas.setGrayFill(0.9f);
// 计算水印间距 // 计算水印间距
float xStep = width / 2; // 水平间距 float xStep = width / 2; // 水平间距
float yStep = height / 3; // 垂直间距 float yStep = height / 3; // 垂直间距
// 在页面上添加多个水印 // 在页面上添加多个水印
for (float y = yStep/2; y < height; y += yStep) { for (float y = yStep / 2; y < height; y += yStep) {
for (float x = xStep/2; x < width; x += xStep) { for (float x = xStep / 2; x < width; x += xStep) {
canvas.showTextAligned(Element.ALIGN_CENTER, canvas.showTextAligned(Element.ALIGN_CENTER,
watermarkText, watermarkText,
x, x,
y, y,
45); 45);
} }
} }
canvas.endText(); canvas.endText();
canvas.restoreState(); canvas.restoreState();
...@@ -955,20 +969,20 @@ public class ProjectInfoToPDF { ...@@ -955,20 +969,20 @@ public class ProjectInfoToPDF {
canvasOver.beginText(); canvasOver.beginText();
canvasOver.setFontAndSize(baseFont, 12); // 设置页码字体大小 canvasOver.setFontAndSize(baseFont, 12); // 设置页码字体大小
canvasOver.setColorFill(BaseColor.BLACK); canvasOver.setColorFill(BaseColor.BLACK);
// 页码文本 // 页码文本
String text = String.format("第 %d 页", writer.getPageNumber()); String text = String.format("第 %d 页", writer.getPageNumber());
// 在页面底部居中添加页码 // 在页面底部居中添加页码
canvasOver.showTextAligned(Element.ALIGN_CENTER, canvasOver.showTextAligned(Element.ALIGN_CENTER,
text, text,
width / 2, // 页面中心 width / 2, // 页面中心
15, // 距离底部15单位,降低页码位置 15, // 距离底部15单位,降低页码位置
0); // 不旋转 0); // 不旋转
canvasOver.endText(); canvasOver.endText();
canvasOver.restoreState(); canvasOver.restoreState();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -977,9 +991,10 @@ public class ProjectInfoToPDF { ...@@ -977,9 +991,10 @@ public class ProjectInfoToPDF {
/** /**
* 插入PDF文件到指定位置 * 插入PDF文件到指定位置
* @param document 目标文档 *
* @param document 目标文档
* @param titleName 标题名称 * @param titleName 标题名称
* @param pdfPath 要插入的PDF文件路径 * @param pdfPath 要插入的PDF文件路径
* @throws DocumentException * @throws DocumentException
* @throws IOException * @throws IOException
*/ */
...@@ -997,10 +1012,10 @@ public class ProjectInfoToPDF { ...@@ -997,10 +1012,10 @@ public class ProjectInfoToPDF {
// 读取PDF文件内容 // 读取PDF文件内容
byte[] pdfBytes = readPdfToBytes(pdfPath); byte[] pdfBytes = readPdfToBytes(pdfPath);
// 创建PdfReader // 创建PdfReader
reader = new PdfReader(pdfBytes); reader = new PdfReader(pdfBytes);
// 获取PDF页数 // 获取PDF页数
int totalPages = reader.getNumberOfPages(); int totalPages = reader.getNumberOfPages();
...@@ -1021,21 +1036,32 @@ public class ProjectInfoToPDF { ...@@ -1021,21 +1036,32 @@ public class ProjectInfoToPDF {
/** /**
* 加载项目组成员简历 * 加载项目组成员简历
* @param document PDF文档 *
* @param document PDF文档
* @param MemberList 成员列表 * @param MemberList 成员列表
* @param writer PDF写入器 * @param writer PDF写入器
*/ */
private static void LoadProjectMember(Document document, List<ComProjectMembersDTO> MemberList, PdfWriter writer) throws DocumentException, IOException { private static void LoadProjectMember(Document document, List<ComProjectMembersDTO> MemberList, PdfWriter writer) throws DocumentException, IOException {
// 遍历每个成员的简历 // 遍历每个成员的简历
for (ComProjectMembersDTO member : MemberList) { for (ComProjectMembersDTO member : MemberList) {
if (Objects.nonNull(member.getFileId())) { if (Objects.nonNull(member.getFileId())) {
InsertPdfContent(document, "", System.getProperty("user.dir") + member.getConvertUrl(), writer); if (Objects.nonNull(member.getDownloadUrl())) {
String fileExtName = member.getDownloadUrl().substring(member.getDownloadUrl().lastIndexOf(".") + 1);
if (fileExtName.toLowerCase().equals("pdf")) {
InsertPdfContent(document, "", System.getProperty("user.dir") + member.getDownloadUrl(), writer);
} else {
if (null != member.getConvertUrl() && !member.getConvertUrl().trim().isEmpty()) {
InsertPdfContent(document, "", System.getProperty("user.dir") + member.getConvertUrl(), writer);
}
}
}
} }
} }
} }
/** /**
* 读取PDF文件并返回字节数组 * 读取PDF文件并返回字节数组
*
* @param pdfPath PDF文件路径 * @param pdfPath PDF文件路径
* @return 字节数组 * @return 字节数组
*/ */
...@@ -1044,7 +1070,7 @@ public class ProjectInfoToPDF { ...@@ -1044,7 +1070,7 @@ public class ProjectInfoToPDF {
if (!file.exists()) { if (!file.exists()) {
throw new FileNotFoundException("PDF文件不存在: " + pdfPath); throw new FileNotFoundException("PDF文件不存在: " + pdfPath);
} }
try (FileInputStream fis = new FileInputStream(file)) { try (FileInputStream fis = new FileInputStream(file)) {
ByteArrayOutputStream bos = new ByteArrayOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024]; byte[] buffer = new byte[1024];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment