当前位置: 首页 > 知识库问答 >
问题:

Word、docx4j和content控件文本格式设置

马沛
2023-03-14
private void replaceTextValue(WordprocessingMLPackage template, String name, String placeholder ) throws Exception{     


    List<Object> texts = getAllSdtElementFromObject(template.getMainDocumentPart());

    for (Object text : texts) {         

        SdtElement textElement = (SdtElement) text; // SdtElement is an Interface, not a Class

        List<Object> cList = textElement.getSdtContent().getContent();

        SdtPr pr = textElement.getSdtPr();
        List<Object> al = pr.getRPrOrAliasOrLock();

        for (Object alias : al) {   // go through all SdtPr objects

            if ( alias.getClass().toString().contains("org.docx4j.wml.Tag")) {

                String CTagVal = ((org.docx4j.wml.Tag) alias).getVal();

                if (CTagVal.equalsIgnoreCase(placeholder))  {

                ClassFinder finder = new ClassFinder(Text.class); 
                new TraversalUtil(cList, finder);

                // taken from the TraveseFind example
                // https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/TraverseFind.java
                for (Object o : finder.results) {
                    Object o2 = XmlUtils.unwrap(o);
                    if (o2 instanceof org.docx4j.wml.Text) {
                    org.docx4j.wml.Text txt = (org.docx4j.wml.Text)o2;
                    txt.setValue(name);
                    } else {
                    System.out.println( XmlUtils.marshaltoString(o, true, true));
                    }
                    }

                }

        }           

    }
}
}

以下是内容控件的XML

<w:sdt>
<w:sdtPr>
<w:alias w:val="Aufgabengebiet"/>
<w:id w:val="-996718060"/>
<w:placeholder>
<w:docPart w:val="DefaultPlaceholder_1082065158"/>
</w:placeholder>
<w:showingPlcHdr/>
<w:text/>
</w:sdtPr>
<w:sdtContent>
<w:p w:rsidRDefault="00A858B9" w:rsidR="00066661" w:rsidP="00A858B9">
<w:r w:rsidRPr="00FD7E66">
<w:rPr>
<w:rStyle w:val="Platzhaltertext"/>
</w:rPr>
<w:t>Klicken Sie hier, um Text einzugeben.</w:t>
</w:r>
</w:p>
</w:sdtContent>
</w:sdt>

共有1个答案

云育
2023-03-14

可以使用run(rPr)格式化来格式化纯文本内容控件;参见http://webapp.docx4java.org/onlinedemo/ecma376/wordml/rpr_5.html

例如,Word发出:

    <w:sdt>
  <w:sdtPr>
    <w:rPr>
      <w:rStyle w:val="IntenseEmphasis"/>
    </w:rPr>
    <w:id w:val="-2141179504"/>
    <w:placeholder>
      <w:docPart w:val="DefaultPlaceholder_1082065158"/>
    </w:placeholder>
    <w:text/>
  </w:sdtPr>
  <w:sdtContent>
    <w:p >
      <w:pPr>
        <w:rPr>
          <w:rStyle w:val="IntenseEmphasis"/>
        </w:rPr>
      </w:pPr>
      <w:r w:rsidRPr="00B61E2E">
        <w:rPr>
          <w:rStyle w:val="IntenseEmphasis"/>
        </w:rPr>
        <w:t>Klicken Sie hier, um Text einzugeben.</w:t>
      </w:r>
    </w:p>
  </w:sdtContent>
</w:sdt>

富文本控件的内容还可以包括pPr格式(在给定上下文允许包含的任何P上)。

 类似资料:
  • 我有一个与XPages-docx4j类似的问题,用文本替换书签,但我想保留样式。我的书签不在文本上(因为它是由Google Docs创建的docx),我想保留书签后面的文本,以便将其包含在书签中并保持其样式。例如: 我找到了删除书签后文本的解决方案,我找到了在书签内添加文本的解决方法,但我无法保留样式。 我不是以英语为母语的人,所以如果我不清楚,请毫不犹豫地问我。

  • 有什么方法可以指定在编组时对此实例使用不同的命名空间吗?

  • 我试图在MS Word文档中用docx4j设置/取消设置复选框值。 使用本文中的代码:docx4j检查我从文档中收到的这个元素的XML后面的复选框: 如何取消设置此复选框的值? 谢谢!

  • 了解如何在实时视图、代码视图中添加文本和设置其格式,或通过从 PSD 文件中提取文本和关联的属性来达到目的。 向文档添加文本 要向 Dreamweaver 文档添加文本,可直接在“文档”窗口中键入文本,也可剪切并粘贴文本。还可从其他文档导入文本。 当您将文本粘贴到 Dreamweaver 文档中时,可以使用“粘贴”或“选择性粘贴”命令。“选择性粘贴”命令允许您以不同的方式指定所粘贴文本的格式。例如

  • 下面的示例将展示在将HTML String解析为Document对象之后使用方法来设置,预置或附加文本到dom元素。 语法 (Syntax) Document document = Jsoup.parse(html); Element div = document.getElementById("sampleDiv"); div.text("This is a sample conten

  • 有没有办法将文件附加到MS Word文档中?我的意思与您将MS Excel文件拖放到MS Word中的方式相同。它显示MS Excel图标和文件名,双击打开附件。 我的情况来自以前的html文件,我导入使用XHTMLImporter.convert.现在超文本标记语言引用附件下载几个地方,并希望将这些文件附加到适当的MS Word文档。