脚注を含む docx ファイルがあります。脚注テキストに置き換えが必要なプレースホルダーがあります。ノードを抽出し、プレースホルダーが渡されなかったテキスト値を変更している間。何らかの理由で、脚注に記載されているテキストを取り上げていないと思います。
脚注のプレースホルダーを置き換える方法を教えてください。
私のケースでは@JasonPlutextの答えがうまくいかなかったので、うまくいったものを投稿しています
FootnotesPart fp = template.getMainDocumentPart().getFootnotesPart();
List<Object> texts = fp.getJAXBNodesViaXPath("//w:t", true);
for(Object obj : texts) {
Text text = (Text) ((JAXBElement) obj).getValue();
String textValue = text.getValue();
// do variable replacement
text.setValue(textValue);
}
しかし、Docx4J.toPDF(..); を使用してこれを pdf としてエクスポートするときに、まだ問題に直面しています。出力は脚注参照を取得しません。
アプローチ1
アンマーシャリングをまだ発生させていない場合は、より高速です。
FootnotesPart fp = wordMLPackage.getMainDocumentPart().getFootnotesPart();
fp.variableReplace(mappings);
アプローチ 2
FootnotesPart fp = wordMLPackage.getMainDocumentPart().getFootnotesPart();
// unmarshallFromTemplate requires string input
String xml = XmlUtils.marshaltoString(fp.getJaxbElement(), true);
// Do it...
Object obj = XmlUtils.unmarshallFromTemplate(xml, mappings);
// Inject result into docx
fp.setJaxbElement((CTFootnotes) obj);