テンプレート内のいくつかの文字列パターンを置き換え、Apache POI を使用して出力 docx ファイルを生成する Java コードを開発しました。ヘッダーと段落のパターンを置き換えるのは簡単でしたが、テキスト ボックス内を置き換えようとすると問題が発生しました。Apache POI を使用して docx のテキスト ボックスのテキストを置き換えるで Axel Ritcher が提供するコードを使用していますが、実行のたびにいくつかの空白が削除されるという問題があります。
例えば:
cp -r basedir destination
なる:
cp-r basedir destination
この置換を行うコードの部分は次のとおりです (関数のパラメーターは次のとおりです。doc_buffer は XWPFDocument であり、パターンと置換は両方とも文字列です)。
for (XWPFParagraph paragraph : doc_buffer.getParagraphs()) {
XmlCursor cursor = paragraph.getCTP().newCursor();
cursor.selectPath(
"declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' .//*/w:txbxContent/w:p/w:r");
List<XmlObject> ctrsintxtbx = new ArrayList<XmlObject>();
while (cursor.hasNextSelection()) {
cursor.toNextSelection();
XmlObject obj = cursor.getObject();
ctrsintxtbx.add(obj);
}
for (XmlObject obj : ctrsintxtbx) {
CTR ctr = CTR.Factory.parse(obj.toString());
XWPFRun bufferrun = new XWPFRun(ctr, (IRunBody) paragraph);
String text = bufferrun.getText(0);
if ((text != null) && (text.contains(pattern))) {
text = text.replaceAll(pattern, replacement);
bufferrun.setText(text, 0);
}
obj.set(bufferrun.getCTR());
}
}
追加情報が必要な場合は、お知らせください。
前もって感謝します!