1

テンプレート内のいくつかの文字列パターンを置き換え、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());
        }
    }

追加情報が必要な場合は、お知らせください。

前もって感謝します!

4

1 に答える 1