gpt4 book ai didi

java - 如何使用 docx4j 阅读 word 文档并获取所有样式的部分内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:47:29 27 4
gpt4 key购买 nike

我正在使用 docx4j 来处理 word 文档格式。我有一个 word 文档,它被分成许多表。我想阅读所有表格,如果我找到一些关键字,那么我想将这些内容带到另一个具有所有格式的 word 文档中。我的word文档如下。

enter image description here

就像从上面一样,我想获取一些标题下面的内容。这里我的关键字是示例文本。因此,每当重复示例文本时,都需要将内容提取到新的 word 文档中。

我正在使用以下代码。

    MainDocumentPart mainDocumentPart = null;
WordprocessingMLPackage docxFile = WordprocessingMLPackage.load(new File(fileName));
mainDocumentPart = docxFile.getMainDocumentPart();

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

ClassFinder finder = new ClassFinder(Tbl.class);
new TraversalUtil(mainDocumentPart.getContent(), finder);
Tbl tbl = null;

int noTbls = 0;
int noRows = 0;
int noCells = 0;
int noParas = 0;
int noTexts = 0;

for (Object table : finder.results) {
noTbls++;
tbl = (Tbl) table;
// Get all the Rows in the table
List<Object> allRows = DocxUtility.getDocxUtility()
.getAllElementFromObject(tbl, Tr.class);
for (Object row : allRows) {
Tr tr = (Tr) row;
noRows++;
// Get all the Cells in the Row
List<Object> allCells = DocxUtility.getDocxUtility()
.getAllElementFromObject(tr, Tc.class);
toCell:
for (Object cell : allCells) {
Tc tc = (Tc) cell;
noCells++;
// Get all the Paragraph's in the Cell
List<Object> allParas = DocxUtility.getDocxUtility()
.getAllElementFromObject(tc, P.class);
for (Object para : allParas) {
P p = (P) para;
noParas++;
// Get all the Run's in the Paragraph
List<Object> allRuns = DocxUtility.getDocxUtility()
.getAllElementFromObject(p, R.class);


for (Object run : allRuns) {
R r = (R) run;

// Get the Text in the Run
List<Object> allText = DocxUtility.getDocxUtility()
.getAllElementFromObject(r, Text.class);
for (Object text : allText) {
noTexts++;
Text txt = (Text) text;
}
System.out.println("No of Text in Para No: " + noParas + "are: " + noTexts);
}

}
System.out.println("No of Paras in Cell No: " + noCells + "are: " + noParas);
}
System.out.println("No of Cells in Row No: " + noRows + "are: " + noCells);
}
System.out.println("No of Rows in Table No: " + noTbls + "are: " + noRows);

}
System.out.println("Total no of Tables: " + noTbls );

最佳答案

假设您的文本在单次运行中(即没有跨运行拆分),那么您可以通过 XPath 搜索它。或者您可以使用 TraversalUtil 手动遍历。有关详细信息,请参阅 docx4j 的入门指南。

所以找到你的东西非常容易。在一般情况下,复制它使用的格式及其中的任何 rels 是很复杂的。看我的帖子http://www.docx4java.org/blog/2010/11/merging-word-documents/有关所涉及问题的更多信息。

关于java - 如何使用 docx4j 阅读 word 文档并获取所有样式的部分内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24755952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com