Browse Source

feat:巡视报告标题字体黑体 4号,标题段落首行缩进1字符

yanyuan
wangguangyuan 3 weeks ago
parent
commit
e8a501d488
1 changed files with 30 additions and 9 deletions
  1. +30
    -9
      inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/DonghuanReportExportController.java

+ 30
- 9
inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/DonghuanReportExportController.java View File

@ -93,8 +93,10 @@ public class DonghuanReportExportController extends BaseController {
/** 正文 12pt(半磅 24) */
private static final int SZ_BODY = 24;
/** 小标题 16pt(半磅 32) */
private static final int SZ_HEAD = 32;
/** 小标题 14pt(半磅 28) 四号 */
private static final int SZ_HEAD_FOURTH = 28;
/** 小标题 16pt(半磅 32)三号 */
private static final int SZ_HEAD_THIRD = 32;
/** 行高 atLeast(twips) */
private static final int ROW_H = 454;
/** 单元格左右边距(twips) */
@ -411,6 +413,19 @@ public class DonghuanReportExportController extends BaseController {
}
}
/**
* 设置段落首行缩进 1 字符
* w:firstLineChars=100Word/WPS 原生首行缩进1 字符随字号自动折算 1 个汉字宽
* 同时按段落字号halfPoints半磅回填 w:firstLinetwips = halfPoints × 10
* 兼容不识别 firstLineChars 的阅读器 LibreOffice
*/
private void setFirstLineIndentOneChar(XWPFParagraph p, int halfPoints) {
p.setIndentationFirstLine(halfPoints * 10);
CTPPr pPr = p.getCTP().isSetPPr() ? p.getCTP().getPPr() : p.getCTP().addNewPPr();
CTInd ind = pPr.isSetInd() ? pPr.getInd() : pPr.addNewInd();
ind.setFirstLineChars(BigInteger.valueOf(100));
}
/** 页面设置:A4 + 模板版心 + 文档网格(与模板 sectPr 一致) */
private void setupPage(XWPFDocument doc) {
CTBody body = doc.getDocument().getBody();
@ -471,7 +486,7 @@ public class DonghuanReportExportController extends BaseController {
addPara(doc, reportTitle, FONT_TITLE, 44, true, false, COLOR_DARK,
ParagraphAlignment.CENTER, 0, 100);
// 副标题
addPara(doc, "【巡检类型:动环智能巡检】", FONT_BODY, SZ_HEAD, false, false,
addPara(doc, "【巡检类型:动环智能巡检】", FONT_BODY, SZ_HEAD_THIRD, false, false,
COLOR_LIGHT, ParagraphAlignment.CENTER, 200, 100);
// 空行撑出版面与模板一致
@ -505,9 +520,10 @@ public class DonghuanReportExportController extends BaseController {
/** 一、巡检基本情况 */
private void buildSectionBasic(XWPFDocument doc, InspectionReport report) {
XWPFParagraph h = addPara(doc, "一、巡检基本情况", FONT_HEAD, SZ_HEAD, true, false,
XWPFParagraph h = addPara(doc, "一、巡检基本情况", FONT_HEAD, SZ_HEAD_FOURTH, true, false,
null, null, 160, 80);
setKeepNext(h);
setFirstLineIndentOneChar(h, SZ_HEAD_FOURTH); // 标题首行缩进 1 字符
XWPFTable t = addTable(doc, 7, 4, new int[]{1827, 2655, 1920, 2659}, 9061, false);
List<InspectionReportData> dataList = report.getReportDatalist();
@ -570,9 +586,10 @@ public class DonghuanReportExportController extends BaseController {
/** 二、巡检状态说明(静态文案,与模板一致) */
private void buildSectionStatus(XWPFDocument doc) {
XWPFParagraph h = addPara(doc, "二、巡检状态说明", FONT_HEAD, SZ_HEAD, true, false,
XWPFParagraph h = addPara(doc, "二、巡检状态说明", FONT_HEAD, SZ_HEAD_FOURTH, true, false,
null, null, 160, 80);
setKeepNext(h);
setFirstLineIndentOneChar(h, SZ_HEAD_FOURTH); // 标题首行缩进 1 字符
XWPFTable t = addTable(doc, 4, 3, new int[]{1831, 4115, 3114}, 9060, false);
String[][] rows = {
@ -600,9 +617,10 @@ public class DonghuanReportExportController extends BaseController {
/** 三、巡检结果概览:(一)巡检统计 + (二)缺陷汇总表 */
private void buildSectionOverview(XWPFDocument doc, InspectionReport report) {
XWPFParagraph h = addPara(doc, "三、巡检结果概览", FONT_HEAD, SZ_HEAD, true, false,
XWPFParagraph h = addPara(doc, "三、巡检结果概览", FONT_HEAD, SZ_HEAD_FOURTH, true, false,
null, null, 160, 80);
setKeepNext(h);
setFirstLineIndentOneChar(h, SZ_HEAD_FOURTH); // 标题首行缩进 1 字符
List<InspectionReportData> dataList = report.getReportDatalist() != null
? report.getReportDatalist() : Collections.emptyList();
@ -611,9 +629,10 @@ public class DonghuanReportExportController extends BaseController {
String statusNormal = messageUtils.get("正常");
// 巡检统计
XWPFParagraph h1 = addPara(doc, "(一)巡检统计", FONT_BODY, SZ_HEAD, true, false,
XWPFParagraph h1 = addPara(doc, "(一)巡检统计", FONT_BODY, SZ_HEAD_THIRD, true, false,
null, null, 80, 40);
setKeepNext(h1);
setFirstLineIndentOneChar(h1, SZ_HEAD_THIRD); // 标题首行缩进 1 字符
XWPFTable statTable = addTable(doc, 5, 2, new int[]{4296, 4713}, 9008, true);
setRow(statTable.getRow(0), ROW_H, false);
headerCell(statTable.getRow(0).getCell(0), "巡检状态", 4296);
@ -631,9 +650,10 @@ public class DonghuanReportExportController extends BaseController {
}
// 缺陷汇总表
XWPFParagraph h2 = addPara(doc, "(二)缺陷汇总表", FONT_BODY, SZ_HEAD, true, false,
XWPFParagraph h2 = addPara(doc, "(二)缺陷汇总表", FONT_BODY, SZ_HEAD_THIRD, true, false,
null, null, 80, 40);
setKeepNext(h2);
setFirstLineIndentOneChar(h2, SZ_HEAD_THIRD); // 标题首行缩进 1 字符
List<InspectionReportData> defectList = dataList.stream()
.filter(d -> statusDefect.equals(d.getPointStatus()))
.collect(Collectors.toList());
@ -677,9 +697,10 @@ public class DonghuanReportExportController extends BaseController {
/** 四、巡检详情:每个点位一张 8 行 × 4 列详情表 */
private void buildSectionDetail(XWPFDocument doc, InspectionReport report,
Map<String, Path> tempFileMap) {
XWPFParagraph h = addPara(doc, "四、巡检详情", FONT_HEAD, SZ_HEAD, true, false,
XWPFParagraph h = addPara(doc, "四、巡检详情", FONT_HEAD, SZ_HEAD_FOURTH, true, false,
null, null, 160, 80);
setKeepNext(h);
setFirstLineIndentOneChar(h, SZ_HEAD_FOURTH); // 标题首行缩进 1 字符
List<InspectionReportData> dataList = report.getReportDatalist() != null
? report.getReportDatalist().stream().filter(item -> messageUtils.get("缺陷").equals(item.getPointStatus())).collect(Collectors.toList()) : Collections.emptyList();


Loading…
Cancel
Save