Docx4j开发手册-3|Docx4j的段落级别信息

3.1、获取段落

1
2
3
4
5
6
7
8
9
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File("D:/xxx.docx"));
List<Object> content = wordMLPackage.getMainDocumentPart().getContent();
for (Object o : content) {
if (o instanceof P){
P p = (P) o;
// 获取段落文本
TextUtils.getText(p);
}
}

3.2、段落信息

上述的对象P就是段落对象,对象P包括的属性有pPr、context等

image-20231206102928801

  • pPr:包括了段落的样式信息
  • context:包括了本段落的文本样式信息

3.3、段落样式信息

BooleanDefaultTrue对象由new ObjectFactory().createBooleanDefaultTrue()创建

创建方式参考了Doxc4j插件的代码生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
PPr pPr = p.getPPr();
// 保持与下一段在同一页
BooleanDefaultTrue keepNext = pPr.getKeepNext();
// 保持行在一起
// 将整个段落的文本行放在同一页上,以避免将文本行分割到不同的页面上。
BooleanDefaultTrue keepLines = pPr.getKeepLines();
// 在段落之前插入分页符
// 这个属性用于控制是否在当前段落之前插入一个分页符,将当前段落移到下一页。
BooleanDefaultTrue pageBreakBefore = pPr.getPageBreakBefore();
// 孤行控制
// 允许第一行/最后一行显示在单独的页面上
BooleanDefaultTrue widowControl = pPr.getWidowControl();
// 禁止显示段落的行号
// 免除当前段落的行号,不仅禁止显示编号,而且从行号计算中删除这些行。
BooleanDefaultTrue suppressLineNumbers = pPr.getSuppressLineNumbers();
// 取消段落的断字
// 是否应从使用者对此文档应用的任何断字中免除当前段落
BooleanDefaultTrue suppressAutoHyphens = pPr.getSuppressAutoHyphens();
// 对每行第一个字符和最后一个字符使用东亚版式规则
// 此元素指定东亚版式和换行规则是否应用于此段落中的文本,以确定哪些字符可以每行的开头和结尾。
// 仅适用于此段落中的简体中文、繁体中文和日语文本
BooleanDefaultTrue kinsoku = pPr.getKinsoku();
// 允许在字符级别换行
// 将单词跨两行 (断,或者通过将单词移到以下行 (在单词级别) 中断来中断超过一行的文本范围
BooleanDefaultTrue wordWrap = pPr.getWordWrap();
// 允许标点符号扩展过去的文本范围
// 当超过这些范围的字符是标点字符时,应允许此段落中的文本将一个字符扩展到任何缩进/边距所应用的范围之外。
BooleanDefaultTrue overflowPunct = pPr.getOverflowPunct();
// 在行开头压缩标点符号
// 在标点符号显示为行中的第一个字符时是否应压缩标点符号,从而允许相应地在行中移动后续字符。
BooleanDefaultTrue topLinePunct = pPr.getTopLinePunct();
// 自动调整拉丁语和东亚文本的间距
BooleanDefaultTrue autoSpaceDE = pPr.getAutoSpaceDE();
// 自动调整东亚文本和数字的间距
BooleanDefaultTrue autoSpaceDN = pPr.getAutoSpaceDN();
// 从右到左段落布局
BooleanDefaultTrue bidi = pPr.getBidi();
// 使用文档网格时自动调整右缩进
BooleanDefaultTrue adjustRightInd = pPr.getAdjustRightInd();
// 将文档网格设置用于Inter-Line段落间距
BooleanDefaultTrue snapToGrid = pPr.getSnapToGrid();
// 间距忽略上方和下方时使用相同样式
BooleanDefaultTrue contextualSpacing = pPr.getContextualSpacing();
// 使用左/右缩进作为内部/外部缩进
// 指定了:则内部页面边缘是奇数编号页的结束页边缘,偶数编号页的起始页边缘。
// 省略了:由先前在样式层次结构 (的任何级别设置确定,即) 上一个设置保持不变。
BooleanDefaultTrue mirrorIndents = pPr.getMirrorIndents();
// 防止文本框架重叠
// 是否允许在显示时与另一个文本框架相交的文本框架与其他文本框架的内容重叠。
BooleanDefaultTrue suppressOverlap = pPr.getSuppressOverlap();
//
BooleanDefaultTrue collapsed = pPr.getCollapsed();

章节信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// 章节信息
SectPr sectPr = pPr.getSectPr();
// 从右到左分区布局
BooleanDefaultTrue bidi = sectPr.getBidi();
// 列定义
CTColumns cols = sectPr.getCols();
// 文档网格
CTDocGrid docGrid = sectPr.getDocGrid();
// 节范围的尾注属性
CTEdnProps endnotePr = sectPr.getEndnotePr();
// 标头引用、页脚参考
List<CTRel> egHdrFtrReferences = sectPr.getEGHdrFtrReferences();
// 节宽脚注属性
CTFtnProps footnotePr = sectPr.getFootnotePr();
// 仅允许编辑窗体字段
BooleanDefaultTrue formProt = sectPr.getFormProt();
// 行编号设置
CTLineNumber lnNumType = sectPr.getLnNumType();
// (取消文档) 中的尾注
BooleanDefaultTrue noEndnote = sectPr.getNoEndnote();
// 纸张源信息
CTPaperSource paperSrc = sectPr.getPaperSrc();
// 页面边框
SectPr.PgBorders pgBorders = sectPr.getPgBorders();
// 页边距
SectPr.PgMar pgMar = sectPr.getPgMar();
// 页码设置
CTPageNumber pgNumType = sectPr.getPgNumType();
// 页面大小
SectPr.PgSz pgSz = sectPr.getPgSz();
// 打印机设置数据
CTRel printerSettings = sectPr.getPrinterSettings();
// Page右侧的 Gutter
BooleanDefaultTrue rtlGutter = sectPr.getRtlGutter();
// 节属性的修订信息
CTSectPrChange sectPrChange = sectPr.getSectPrChange();
// 文本流方向
TextDirection textDirection = sectPr.getTextDirection();
// 不同的首页页眉和页脚
BooleanDefaultTrue titlePg = sectPr.getTitlePg();
// Section Type
SectPr.Type type = sectPr.getType();
// (page) 上的垂直文本对齐方式
CTVerticalJc vAlign = sectPr.getVAlign();

节属性的修订信息

1
2
3
4
5
6
7
8
9
10
// 节属性的修订信息
CTPPrChange pPrChange = pPr.getPPrChange();
//
PPrBase pPr = pPrChange.getPPr();
// 作者。表示架构中的以下属性:w:author
String author = pPrChange.getAuthor();
// 日期。表示架构中的以下属性:w:date
XMLGregorianCalendar date = pPrChange.getDate();
// 注释标识符。表示架构中的以下属性:w:id
BigInteger id = pPrChange.getId();

引用的段落样式

1
2
3
4
// 引用段落样式
PPrBase.PStyle pStyle = pPr.getPStyle();
//
String val = pStyle.getVal();

文本框架属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 文本框架属性
CTFramePr framePr = pPr.getFramePr();
// 首字下沉图文框。表示架构中的以下属性:w:dropCap
STDropCap dropCap = framePr.getDropCap();
// 在 Line 中放置 Cap 垂直高度。表示架构中的以下属性:w:line
BigInteger lines = framePr.getLines();
// Frame Width。表示架构中的以下属性:w:w
BigInteger w = framePr.getW();
// Frame Height。表示架构中的以下属性:w:h
BigInteger h = framePr.getH();
// 垂直帧填充。表示架构中的以下属性:w:vSpace
BigInteger vSpace = framePr.getVSpace();
// 水平帧填充。表示架构中的以下属性:w:hSpace
BigInteger hSpace = framePr.getHSpace();
// 围绕 Frame 的文本环绕。表示架构中的以下属性:w:wrap
STWrap wrap = framePr.getWrap();
// 框架水平定位底座.表示架构中的以下属性:w:hAnchor
STHAnchor hAnchor = framePr.getHAnchor();
// 框架垂直定位底座.表示架构中的以下属性:w:vAnchor
STVAnchor vAnchor = framePr.getVAnchor();
// 绝对水平位置。表示架构中的以下属性:w:x
BigInteger x = framePr.getX();
// 相对水平位置。表示架构中的以下属性:w:xAlign
STXAlign xAlign = framePr.getXAlign();
// 绝对垂直位置。表示架构中的以下属性:w:y
BigInteger y = framePr.getY();
// 相对垂直位置。表示架构中的以下属性:w:yAlign
STYAlign yAlign = framePr.getYAlign();
// 帧高度类型。表示架构中的以下属性:w:hRule
STHeightRule hRule = framePr.getHRule();

编号属性

1
2
3
4
5
6
7
8
9
10
// 编号定义实例引用
PPrBase.NumPr numPr = pPr.getNumPr();
// 编号级别引用。 表示架构中的以下元素标记:w:ilvl
PPrBase.NumPr.Ilvl ilvl = numPr.getIlvl();
// 编号定义实例引用。 表示架构中的以下元素标记:w:numId
PPrBase.NumPr.NumId numId = numPr.getNumId();
// 上一个段落编号属性。 表示架构中的以下元素标记:w:numberingChange
CTTrackChangeNumbering numberingChange = numPr.getNumberingChange();
// 插入的编号属性。 表示架构中的以下元素标记:w:ins
CTTrackChange ins = numPr.getIns();

段落边框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 段落边框
PPrBase.PBdr pBdr = pPr.getPBdr();
// 对页) 之间的条形 (段落边框
CTBorder bar = pBdr.getBar();
// 相同段落之间的 (段落边框)
CTBorder between = pBdr.getBetween();
// 左 (左段落边框)
CTBorder left = pBdr.getLeft();
// 右 (右段落边框)
CTBorder right = pBdr.getRight();
// 顶部 (段落边框上方相同段落)
CTBorder top = pBdr.getTop();
// 下 (段落边框下方相同段落)
CTBorder bottom = pBdr.getBottom();

段落底纹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 段落底纹
CTShd shd = pPr.getShd();
// 着色模式。表示架构中的以下属性:w:val
STShd val = shd.getVal();
// 底纹图案颜色。表示架构中的以下属性:w:color
String color = shd.getColor();
// 底纹图案主题颜色。表示架构中的以下属性:w:themeColor
STThemeColor themeColor = shd.getThemeColor();
// 底纹图案主题颜色淡化。表示架构中的以下属性:w:themeTint
String themeTint = shd.getThemeTint();
// 底纹背景主题颜色阴影。表示架构中的以下属性:w:themeFillShade
String themeShade = shd.getThemeShade();
// 底纹背景色。表示架构中的以下属性:w:fill
String fill = shd.getFill();
// 底纹背景主题颜色。表示架构中的以下属性:w:themeFill
STThemeColor themeFill = shd.getThemeFill();
// 底纹背景主题颜色淡色。表示架构中的以下属性:w:themeFillTint
String themeFillTint = shd.getThemeFillTint();
// 底纹图案主题颜色阴影。表示架构中的以下属性:w:themeShade
String themeFillShade = shd.getThemeFillShade();

自定义制表位集

1
2
3
4
// 自定义制表位集
Tabs tabs = pPr.getTabs();
// 选项卡 (自定义制表位)
List<CTTabStop> tab = tabs.getTab();

行距和段落上方/下段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 行距和段落上方/下段
PPrBase.Spacing spacing = pPr.getSpacing();
// 段落中的行间距。表示架构中的以下属性:w:line
BigInteger line = spacing.getLine();
// 行之间的间距类型。表示架构中的以下属性:w:lineRule
STLineSpacingRule lineRule = spacing.getLineRule();
// 段落下方的间距(以磅单位为单位)。
BigInteger spacingAfter = spacing.getAfter();
// 段落上方的间距(以磅单位为单位)。
BigInteger spacingBefore = spacing.getBefore();
// 段落下方的间距(以行单位为单位)。表示架构中的以下属性:w:afterLines
BigInteger afterLines = spacing.getAfterLines();
// 段落上方的间距(以行单位为单位)。表示架构中的以下属性:w:beforeLines
BigInteger beforeLines = spacing.getBeforeLines();

段落缩进

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 段落缩进
PPrBase.Ind ind = pPr.getInd();
// 左缩进。表示架构中的以下属性:w:left
BigInteger left = ind.getLeft();
// 字符单位中的左缩进。表示架构中的以下属性:w:leftChars
BigInteger leftChars = ind.getLeftChars();
// 右缩进。表示架构中的以下属性:w:right
BigInteger right = ind.getRight();
// 字符单位中的右缩进。表示架构中的以下属性:w:rightChars
BigInteger rightChars = ind.getRightChars();
// 从第一行中删除的缩进。表示架构中的以下属性:w:hanging
BigInteger hanging = ind.getHanging();
// 从字符单位的第一行中删除的缩进。表示架构中的以下属性:w:hangingChars
BigInteger hangingChars = ind.getHangingChars();
// 其他第一行缩进。表示架构中的以下属性:w:firstLine
BigInteger firstLine = ind.getFirstLine();
// 字符单位中的其他首行缩进。表示架构中的以下属性:w:firstLineChars
BigInteger firstLineChars = ind.getFirstLineChars();

段落对齐方式

1
2
3
4
// 段落对齐方式
Jc jc = pPr.getJc();
// 对齐方式枚举
JcEnumeration val = jc.getVal();

段落文本流方向

1
2
3
4
// 段落文本流方向
TextDirection textDirection = pPr.getTextDirection();
// 流方向枚举。从下到上,从左到右
String val = textDirection.getVal();

文本框紧密环绕

1
2
3
4
// 文本框紧密环绕
CTTextboxTightWrap textboxTightWrap = pPr.getTextboxTightWrap();
// 枚举,要紧换到段落范围的线条。表示架构中的以下属性:w:val
STTextboxTightWrap val3 = textboxTightWrap.getVal();

关联的大纲级别

1
2
3
4
// 关联的大纲级别
PPrBase.OutlineLvl outlineLvl = pPr.getOutlineLvl();
// 0 到 9
BigInteger val = outlineLvl.getVal();

关联的 HTML div ID

1
2
3
4
// 关联的 HTML div ID
PPrBase.DivId divId = pPr.getDivId();
//
BigInteger val = divId.getVal();

段落条件格式

1
2
3
4
// 段落条件格式
CTCnf cnfStyle = pPr.getCnfStyle();
//
String val = cnfStyle.getVal();

3.4、P对象其他属性

属性 说明
rsidDel (节删除修订 ID) 指定从文档中删除此节的节标记时用于跟踪 编辑会话 的唯一标识符。此文档中所有具有相等值的 rsid* 属性(如果存在)应指示这些区域在同一编辑会话期间已修改。创建者可以选择递增修订保存 ID 值,以指示后续编辑会话 (保存操作) 之间的编辑,以指示执行的保存顺序。此属性的可能值由 ST_LongHexNumber 简单类型 (§17.18.50) 定义。
rsidR (节添加修订 ID) 指定在将此节的节标记添加到文档时用于跟踪 编辑会话 的唯一标识符。此文档中所有具有相等值的 rsid* 属性(如果存在)应指示这些区域在同一编辑会话期间已修改。创建者可以选择递增修订保存 ID 值,以指示后续编辑会话 (保存操作) 之间的编辑,以指示执行的保存顺序。此属性的可能值由 ST_LongHexNumber 简单类型 (§17.18.50) 定义。
rsidRPr (物理节标记字符修订 ID) 指定上次格式化表示此节标记的物理字符时用于跟踪编辑会话的唯一标识符。此文档中所有具有相等值的 rsid* 属性(如果存在)应指示这些区域在同一编辑会话期间已修改。创建者可以选择递增修订保存 ID 值,以指示后续编辑会话 (保存操作) 之间的编辑,以指示执行的保存顺序。此属性的可能值由 ST_LongHexNumber 简单类型 (§17.18.50) 定义。
rsidSect (节属性 修订 ID) 指定上次格式化表示此节标记的物理字符时用于跟踪编辑会话的唯一标识符。此文档中所有具有相等值的 rsid* 属性(如果存在)应指示这些区域在同一编辑会话期间已修改。创建者可以选择递增修订保存 ID 值,以指示后续编辑会话 (保存操作) 之间的编辑,以指示执行的保存顺序。此属性的可能值由 ST_LongHexNumber 简单类型 (§17.18.50) 定义。