我正在使用帶有 java 11 的 Apache poi 庫。我試圖在將新文本添加到 word 檔案的段落中之后查看軌道更改:
private void setSectionRun(XWPFParagraph paragraph){
// insert xml node
paragraph.getCTP().addNewIns().setAuthor("Kane");
XWPFRun newRun = paragraph.createRun();
newRun.setText(". Hello world");
paragraph.addRun(newRun);
}
我在 document.xml 中得到以下輸出。在這種情況下,軌道更改不起作用:
<w:ins w:author="Kane"/>
<w:r>
<w:t>. Hello world</w:t>
</w:r>
無論如何,如果我手動編輯檔案,我可以看到軌道更改并接受或拒絕插入,結果如下:
<w:ins w:id="0" w:author="Kane" w:date="2022-04-20T15:33:00Z">
<w:r w:rsidR="00B00A22">
<w:t>. Hello world</w:t>
</w:r>
</w:ins>
問題是當我使用 Apache poi 在段落中插入新文本時,我無法激活軌道更改。
另一方面,檢測到newRun.getCTR().getRPr().addNewRPrChange().setAuthor("Kane")
a 的格式更改,XWPFRun
我可以正確看到更改控制元件,但看不到段落級別的新文本插入。
有沒有辦法在新的文本插入上啟用軌道更改?
提前致謝。
uj5u.com熱心網友回復:
到目前為止,Apache POI 不支持跟蹤更改。
正如您在 XML 中看到的,您的代碼在w:ins
元素上方放置了一個空w:r
元素。但是 Microsoft Word 將w:r
元素與w:ins
元素包裝在一起。該w:r
元素是該元素的子w:ins
元素。
編碼的一種可能性是擁有一個XWPFInsRun
擴展的類XWPFRun
和一個XWPFInsRun
在XWPFParagraph
. 執行此操作具有通過選項XWPFRun
擴展的 所有選項CTRunTrackChange
- 例如作者和日期。
完整示例:
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
public class CreateWordInsRun {
static XWPFInsRun createInsRun(XWPFParagraph paragraph, String author, java.util.Calendar date) {
CTRunTrackChange trackChange = paragraph.getCTP().addNewIns();
trackChange.setAuthor(author);
trackChange.setDate(date);
trackChange.addNewR();
return new XWPFInsRun(
trackChange,
trackChange.getRArray(0),
paragraph
);
}
public static void main(String[] args) throws Exception {
XWPFDocument doc = new XWPFDocument();
XWPFParagraph paragraph = doc.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("Paragraph 1");
paragraph = doc.createParagraph();
XWPFInsRun insRun = createInsRun(paragraph, "Kane", new java.util.GregorianCalendar());
insRun.setText("Paragraph 2 inserted by Kane");
System.out.println(insRun.getAuthor());
System.out.println(insRun.getDate());
paragraph = doc.createParagraph();
run = paragraph.createRun();
run.setText("Paragraph 3");
FileOutputStream out = new FileOutputStream("./WordDocument.docx");
doc.write(out);
out.close();
doc.close();
}
static class XWPFInsRun extends XWPFRun {
private CTRunTrackChange trackChange;
public XWPFInsRun(CTRunTrackChange trackChange, CTR run, IRunBody p) {
super(run, p);
this.trackChange = trackChange;
}
public String getAuthor() {
return this.trackChange.getAuthor();
}
public void setAuthor(String author) {
this.trackChange.setAuthor(author);
}
public java.util.Calendar getDate() {
return this.trackChange.getDate();
}
public void setDate(java.util.Calendar date) {
this.trackChange.setDate(date);
}
//... further methods
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/461430.html
標籤:爪哇 春天 ms-word apache-poi