【修改】 docx4j 方法修改BUG:方法参数缺失

This commit is contained in:
dlaren
2025-08-04 13:56:51 +08:00
parent 16308cbf5e
commit 933d0a0c34
2 changed files with 43 additions and 64 deletions

View File

@@ -16,9 +16,7 @@ import org.docx4j.model.structure.SectionWrapper;
import org.docx4j.dml.wordprocessingDrawing.Anchor;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.HeaderPart;
import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart;
import org.docx4j.openpackaging.parts.WordprocessingML.StyleDefinitionsPart;
import org.docx4j.openpackaging.parts.WordprocessingML.*;
import org.docx4j.w14.CTWordContentPart;
import org.docx4j.wml.*;
import org.springframework.web.multipart.MultipartFile;
@@ -77,6 +75,10 @@ public class DocxMaster {
NumberingDefinitionsPart ndp = wordMLPackage.getMainDocumentPart().getNumberingDefinitionsPart();
// 2-3、节对象
List<SectionWrapper> sections = wordMLPackage.getDocumentModel().getSections();
// 2-3、Web 设置
WebSettingsPart webSettingsPart = wordMLPackage.getMainDocumentPart().getWebSettingsPart();
// 2-4、文档设置
DocumentSettingsPart settingsPart = wordMLPackage.getMainDocumentPart().getDocumentSettingsPart();
wordMLPackage.getHeaderFooterPolicy().getDefaultFooter();
for (WpsDocxInfoVo wpsDocxInfoVo : wpsDocxInfoVos) {
// 参数实例化
@@ -90,9 +92,7 @@ public class DocxMaster {
String examName = wpsDocxInfoVo.getExamName();
// 考点代码
String examCode = wpsDocxInfoVo.getExamCode();
// 方式方法
String method = wpsDocxInfoVo.getMethod();
String docxFunction = firstName + "#" + indexParm + "#" + function + "#" + examName + "#" + examCode + "#" + method;
String docxFunction = firstName + "@" + indexParm + "@" + function + "@" + examName + "@" + examCode;
// 创建一个索引ID跟参数中index进行匹配
int index = 0;
for (Object obj : paragraphs) {
@@ -108,32 +108,11 @@ public class DocxMaster {
// 目标对象
Paragraphs paragraphsFunction = new Paragraphs();
// 获取参数中类型的定义
String[] methods = method.split("@");
List<Class<?>> classList = new ArrayList<>();
for (String met : methods) {
if (met.equals("P")) {
classList.add(P.class);
}
if (met.equals("StyleDefinitionsPart")) {
classList.add(StyleDefinitionsPart.class);
}
if (met.equals("NumberingDefinitionsPart")) {
classList.add(NumberingDefinitionsPart.class);
}
if (met.equals("SectionWrapper")) {
classList.add(SectionWrapper.class);
}
if (met.equals("WordprocessingMLPackage")) {
classList.add(WordprocessingMLPackage.class);
}
}
// 参数类型列表(按方法声明顺序)
// Class<?>[] paramTypes = classList.toArray(new Class<?>[0]);
Class<?>[] paramTypes = {P.class, WordprocessingMLPackage.class};
Class<?>[] paramTypes = {P.class, StyleDefinitionsPart.class, WordprocessingMLPackage.class, NumberingDefinitionsPart.class};
// 带参数的方法调用示例
Method methodWithArgs = paragraphsFunction.getClass().getMethod(function, paramTypes);
// 实际参数值
Object[] arguments = {paragraph, stylePart};
Object[] arguments = {paragraph, stylePart, wordMLPackage, ndp};
String value = (String) methodWithArgs.invoke(obj, arguments);
judgementWordsVOS = setJudgementWord(judgementWordsVOS, docxFunction + "@" + value, firstName + examName + value);
}

View File

@@ -19,7 +19,7 @@ public class Paragraphs {
* @param stylePart
* @return
*/
public static String getParagraphAlignment(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphAlignment(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
// 先查段落自身
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getJc() != null && pPr.getJc().getVal() != null) {
@@ -38,7 +38,7 @@ public class Paragraphs {
}
// 段落-大纲级别
public static String getParagraphOutlineLvl(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphOutlineLvl(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
// 先查询自身段落数据
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getOutlineLvl() != null && pPr.getOutlineLvl().getVal() != null) {
@@ -55,7 +55,7 @@ public class Paragraphs {
return "正文";
}
/// 段落格式(缩进) 左缩进 磅
public static String getParagraphIndLeft(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphIndLeft(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
PPrBase.Ind ind = pPr.getInd();
if (ind != null) {
@@ -76,7 +76,7 @@ public class Paragraphs {
return "";
}
/// 段落格式(缩进) 右缩进 磅
public static String getParagraphIndRight(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphIndRight(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
PPrBase.Ind ind = pPr.getInd();
if (ind != null) {
@@ -97,7 +97,7 @@ public class Paragraphs {
return "";
}
/// 段落格式(缩进) 首行缩进 磅
public static String getParagraphIndFirstLine(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphIndFirstLine(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
PPrBase.Ind ind = pPr.getInd();
if (ind != null) {
@@ -118,7 +118,7 @@ public class Paragraphs {
return "";
}
/// 段落格式(缩进) 悬挂缩进 磅
public static String getParagraphIndHanging(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphIndHanging(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
PPrBase.Ind ind = pPr.getInd();
if (ind != null) {
@@ -140,7 +140,7 @@ public class Paragraphs {
}
/// 段落格式(间距) 段前行
public static String getParagraphSpacingBeforeLines(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphSpacingBeforeLines(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getSpacing() != null) {
return pPr.getSpacing().getBeforeLines().toString();
@@ -156,7 +156,7 @@ public class Paragraphs {
return "";
}
/// 段落格式(间距) 段前磅
public static String getParagraphSpacingBefore(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphSpacingBefore(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getSpacing() != null) {
return pPr.getSpacing().getBefore().toString();
@@ -172,7 +172,7 @@ public class Paragraphs {
return "";
}
/// 段落格式(间距) 段后磅
public static String getParagraphSpacingAfter(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphSpacingAfter(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getSpacing() != null) {
return pPr.getSpacing().getAfter().toString();
@@ -189,7 +189,7 @@ public class Paragraphs {
}
/// 段落格式(间距) 段后行
public static String getParagraphSpacingAfterLines(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphSpacingAfterLines(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getSpacing() != null) {
return pPr.getSpacing().getAfterLines().toString();
@@ -206,7 +206,7 @@ public class Paragraphs {
}
/// 段落格式(间距) 间距
public static String getParagraphSpacingLine(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphSpacingLine(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getSpacing() != null) {
return pPr.getSpacing().getLine().toString();
@@ -223,7 +223,7 @@ public class Paragraphs {
}
/// 段落格式(间距) 间距值
public static String getParagraphSpacingLines(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphSpacingLines(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getSpacing() != null) {
return pPr.getSpacing().getLine().toString();
@@ -240,7 +240,7 @@ public class Paragraphs {
}
/// 段落 编号列表 存在
public static String getParagraphListIsTrue(P paragraph, NumberingDefinitionsPart ndp) {
public static String getParagraphListIsTrue(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getNumPr() != null && pPr.getNumPr().getNumId() != null) {
return "存在";
@@ -249,7 +249,7 @@ public class Paragraphs {
}
}
/// 段落 编号列表 列表级别
public static String getParagraphListIlvl(P paragraph, NumberingDefinitionsPart ndp) {
public static String getParagraphListIlvl(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getNumPr() != null && pPr.getNumPr().getNumId() != null) {
PPrBase.NumPr numPr = pPr.getNumPr();
@@ -260,7 +260,7 @@ public class Paragraphs {
}
}
/// 段落 编号列表 编号样式
public static String getParagraphListAbstractNumId(P paragraph, NumberingDefinitionsPart ndp) {
public static String getParagraphListAbstractNumId(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getNumPr() != null && pPr.getNumPr().getNumId() != null) {
PPrBase.NumPr numPr = pPr.getNumPr();
@@ -290,7 +290,7 @@ public class Paragraphs {
return "未知";
}
/// 段落 编号列表 编号格式
public static String getParagraphListLvlText(P paragraph, NumberingDefinitionsPart ndp) {
public static String getParagraphListLvlText(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getNumPr() != null && pPr.getNumPr().getNumId() != null) {
PPrBase.NumPr numPr = pPr.getNumPr();
@@ -320,7 +320,7 @@ public class Paragraphs {
return "未知";
}
/// 段落 编号列表 项目符号
public static String getParagraphListLvlFuHao(P paragraph, NumberingDefinitionsPart ndp) {
public static String getParagraphListLvlFuHao(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getNumPr() != null && pPr.getNumPr().getNumId() != null) {
PPrBase.NumPr numPr = pPr.getNumPr();
@@ -349,7 +349,7 @@ public class Paragraphs {
return "未知";
}
/// 段落 编号列表 列表类型
public static String getParagraphListLvlType(P paragraph, NumberingDefinitionsPart ndp) {
public static String getParagraphListLvlType(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getNumPr() != null && pPr.getNumPr().getNumId() != null) {
PPrBase.NumPr numPr = pPr.getNumPr();
@@ -383,7 +383,7 @@ public class Paragraphs {
}
// 段落边框 样式
public static String getParagraphBorderStyle(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphBorderStyle(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
// 先查询自身段落数据
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getPBdr() != null) {
@@ -409,7 +409,7 @@ public class Paragraphs {
}
// 段落边框 - 颜色
public static String getParagraphBorderColor(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphBorderColor(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
// 先查询自身段落数据
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getPBdr() != null) {
@@ -435,7 +435,7 @@ public class Paragraphs {
}
// 段落边框 - 宽度
public static String getParagraphBorderSize(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphBorderSize(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
// 先查询自身段落数据
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getPBdr() != null) {
@@ -461,7 +461,7 @@ public class Paragraphs {
}
// 段落底纹 - 填充颜色
public static String getParagraphShdFillColor(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphShdFillColor(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
// 先查询自身段落数据
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getShd() != null) {
@@ -472,7 +472,7 @@ public class Paragraphs {
}
// 段落底纹 - 图案样式
public static String getParagraphShdStyle(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphShdStyle(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
// 先查询自身段落数据
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getShd() != null) {
@@ -483,7 +483,7 @@ public class Paragraphs {
}
// 段落底纹 - 图案颜色
public static String getParagraphShdStyleColor(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphShdStyleColor(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
// 先查询自身段落数据
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getShd() != null) {
@@ -494,7 +494,7 @@ public class Paragraphs {
}
// 首字下沉 - 是否存在
public static String getParagraphDropCapIsTrue(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphDropCapIsTrue(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getFramePr() != null) {
return "";
@@ -505,7 +505,7 @@ public class Paragraphs {
// 首字下沉 - 首字位置
public static String getParagraphDropCapLocation(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphDropCapLocation(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getFramePr() != null) {
CTFramePr framePr = pPr.getFramePr();
@@ -517,7 +517,7 @@ public class Paragraphs {
}
// 首字下沉 - 行数
public static String getParagraphDropCapLine(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphDropCapLine(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getFramePr() != null) {
CTFramePr framePr = pPr.getFramePr();
@@ -529,7 +529,7 @@ public class Paragraphs {
}
// 首字下沉 - 距正文
public static String getParagraphDropCapHSpace(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphDropCapHSpace(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getFramePr() != null) {
CTFramePr framePr = pPr.getFramePr();
@@ -541,7 +541,7 @@ public class Paragraphs {
}
// 首字下沉 - 字体
public static String getParagraphDropCapFont(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphDropCapFont(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr != null && pPr.getFramePr() != null) {
// 获取首字字体
@@ -577,7 +577,7 @@ public class Paragraphs {
// return "未知";
// }
public static String getParagraphCols(P paragraph, WordprocessingMLPackage wordMLPackage) {
public static String getParagraphCols(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
// 1. 首先检查段落自身的节属性
if (paragraph.getPPr() != null && paragraph.getPPr().getSectPr() != null) {
CTColumns cols = paragraph.getPPr().getSectPr().getCols();
@@ -643,7 +643,7 @@ public class Paragraphs {
}
// 分栏 - 分隔线
public static String getParagraphColIsSep(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphColIsSep(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
SectPr sectPr = null;
sectPr = pPr.getSectPr();
@@ -668,7 +668,7 @@ public class Paragraphs {
}
// 分栏 - 各栏间距
public static String getParagraphColSpace(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphColSpace(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
SectPr sectPr = null;
sectPr = pPr.getSectPr();
@@ -700,7 +700,7 @@ public class Paragraphs {
return "未知";
}
// 分栏 - 各栏宽度
public static String getParagraphColW(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphColW(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
SectPr sectPr = null;
sectPr = pPr.getSectPr();
@@ -733,7 +733,7 @@ public class Paragraphs {
}
// 分栏 - 栏宽相等
public static String getParagraphColEqualWidth(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphColEqualWidth(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
SectPr sectPr = null;
sectPr = pPr.getSectPr();
@@ -756,7 +756,7 @@ public class Paragraphs {
}
// 中文版式 - 双行合一
public static String getParagraphCNBidi(P paragraph, StyleDefinitionsPart stylePart) {
public static String getParagraphCNBidi(P paragraph, StyleDefinitionsPart stylePart, WordprocessingMLPackage wordMLPackage, NumberingDefinitionsPart ndp) {
PPr pPr = paragraph.getPPr();
if (pPr.getTextAlignment() != null) {
PPrBase.TextAlignment textAlignment = pPr.getTextAlignment();