我试图使用apachepoi在每个页面中查找和替换不同页眉部分的文本,但是只得到空数据,但是docx也有不同的页眉部分和页脚
package com.concretepage;
import java.io.FileInputStream;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFFooter;
import org.apache.poi.xwpf.usermodel.XWPFHeader;
public class ReadDOCXHeaderFooter {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("D:/docx/read-test.docx");
XWPFDocument xdoc=new XWPFDocument(OPCPackage.open(fis));
XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(xdoc);
//read header
for(int i=0;i<90;i++)
{
XWPFHeader header = policy.getHeader(i);
List<XWPFRun> runs = header.getRuns();
if (runs != null) {
for (XWPFRun r : runs) {
String text = r.getText(0);
if (text != null && text.contains("$$key$$")) {
text = text.replace("$$key$$", "ABCD");//your content
r.setText(text, 0);
}
}
System.out.println(header.getText());
//read footer
XWPFFooter footer = policy.getFooter(i);
System.out.println(footer.getText());
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
1.docx标题部分的屏幕截图。
2.docx标题另一部分的屏幕截图。
3.docx标题另一部分的屏幕截图。
4.屏幕截图
2条答案
按热度按时间gz5pxeao1#
在一个
*.docx
文档,它包含多个节,每个节从一个段落开始,该段落设置了节属性。为了从节属性中获取页眉和页脚,有一个公共的xwpfheaderfooterpolicy(xwpfdocument doc,org.openxmlformats.schemas.wordprocessingml.x2006.main.ctsectpr)构造函数。在文档的正文中仅设置最后一节的节属性。
因此,下面的代码应该从文档的所有部分中获取所有页眉和页脚。
ig9co6j12#
这个功能应该可以完成这项工作