有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java XWPFRun生成带空白的运行

我开发了一个Java代码,它替换模板中的一些字符串模式,然后使用ApachePOI生成一个输出docx文件。替换标题和段落中的模式很容易,但我在尝试替换内部文本框时遇到了一个问题。我正在使用Axel Ritcher在Replace text in text box of docx by using Apache POI中提供的代码,但问题是它在每次运行时都会修剪一些空白

例如:

cp -r basedir destination

变成:

cp-r basedir destination

负责执行此替换的代码部分如下(函数的参数为:doc_buffer是XWPFDocument,pattern和replacement都是字符串):

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());
        }
    }

如果您需要任何其他信息,请告诉我

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    不知何故,我设法找到了导致这种情况的原因。我会把它贴在这里,这样如果有人有同样的问题,他们可以看到我是如何解决的

    方法CTR。工厂示例中使用的parse需要字符串类型,但是如果检查XmlObject.Factory docs,则有许多parse函数需要使用不同类型的参数。所以我改变了这一行:

    CTR ctr = CTR.Factory.parse(obj.toString());
    

    指向接受XMLInputStream作为参数,然后为XmlObject创建新InputStream的方法:

    CTR ctr = CTR.Factory.parse(obj.newInputStream());