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

如何通过apache poi将背景图像添加到docx文档?

贺宏逸
2023-03-14

如何通过ApachePOI或其他java框架将背景图像添加到docx文档中。我想在这样的结果文档中有一些xml块,其中定义了背景

<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 wp14">
<w:background w:color="FFFFFF">
    <v:background id="_x0000_s1025" o:bwmode="white" o:targetscreensize="1024,768">
        <v:fill r:id="rId2" o:title="Alien 1" recolor="t" type="frame"/>
    </v:background>
</w:background>
<w:body>
      .....
</w:body></w:document>

共有2个答案

景鸿才
2023-03-14

使用docx4j的在线代码生成器:

方法一

import javax.xml.bind.JAXBElement;
import org.docx4j.vml.CTBackground;
import org.docx4j.vml.CTFill;
import org.docx4j.wml.CTBackground;


public class Foo { 
public CTBackground createBackground() {

org.docx4j.wml.ObjectFactory wmlObjectFactory = new org.docx4j.wml.ObjectFactory();

CTBackground background = wmlObjectFactory.createCTBackground(); 
    background.setColor( "FFFFFF"); 
org.docx4j.vml.ObjectFactory vmlObjectFactory = new org.docx4j.vml.ObjectFactory();
    // Create object for background (wrapped in JAXBElement) 
    CTBackground background2 = vmlObjectFactory.createCTBackground(); 
    JAXBElement<org.docx4j.vml.CTBackground> backgroundWrapped = vmlObjectFactory.createBackground(background2); 
    background.getAnyAndAny().add( backgroundWrapped); 
        background2.setTargetscreensize( "1024,768"); 
        background2.setVmlId( "_x0000_s1025"); 
        background2.setBwmode(org.docx4j.vml.officedrawing.STBWMode.WHITE);
        // Create object for fill
        CTFill fill = vmlObjectFactory.createCTFill(); 
        background2.setFill(fill); 
            fill.setTitle( "Alien 1"); 
            fill.setId( "rId5"); 
            fill.setType(org.docx4j.vml.STFillType.FRAME);
            fill.setRecolor(org.docx4j.vml.STTrueFalse.T);

return background;
}
}

方法2

    String openXML = "<w:background w:color=\"FFFFFF\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">
                + "<v:background id=\"_x0000_s1025\" o:bwmode=\"white\" o:targetscreensize=\"1024,768\">
                      + "<v:fill o:title=\"Alien 1\" r:id=\"rId5\" recolor=\"t\" type=\"frame\"/>"

                +"</v:background>"

          +"</w:background>";
CTBackground background = (CTBackground)XmlUtils.unmarshalString(openXML);
方光华
2023-03-14

假设您想在文档的根中添加一个背景元素,您需要执行以下操作:

XWPFDocument doc = new XWPFDocument(OPCPackage.open("test.docx"));
if (doc.getDocument().getBackground() == null) {
   doc.getDocument.addNewBackground();
};

CTBackground bkgnd = doc.getDocument().getBackground();
bkgnd.setColor("FFFFFF");

现在,要将新背景添加到背景列表中(位于不同的名称空间中),有点麻烦。我们会这样做:

String xml = 
  "<v:background id=\"_x0000_s1025\" o:bwmode=\"white\" o:targetscreensize=\"1024,768\">" +
  "<v:fill r:id=\"rId2\" o:title=\"Alien 1\" recolor=\"t\" type=\"frame\"/>" +
  "</v:background>";
bkgnd.set(XmlToken.Factory.parse(xml));

如果查看类似XWPFRun的内容,您将看到一个从不同名称空间添加xml的示例。这一切都在梦中。docx名称空间你可以用CT对象来完成这一切,但遗憾的是你的情况很复杂。。。

如果手动XML内容对您来说有点棘手,请尝试使用POI处理一个文件,其中包含Word添加的内容,并使用CTBackground对象。这可能会让您为内部v:backgroundxml计算出xmlbeans对象,这将提供一种更简单的方法。如果你让它工作,发送补丁给POI!

 类似资料:
  • 问题内容: 此处已触及该主题,但未提供有关如何创建3D图并在平面中以指定高度插入图像的指示。 因此,要提出一个简单且可复制的案例,假设我使用以下代码创建了一个3D图: 在视觉上,我们有: 在级别上,这里是避免重叠的视觉偏移, 我想插入一张图像, 表示曲线显示特定值的元素。 怎么做? 在此示例中,我并不关心元素与其值之间的完美匹配,因此请随时上传您喜欢的任何图像。另外,如果对匹配不满意,有没有办法让

  • 问题内容: 我有一个正在编写的CSS页面,我需要在一个类中应用背景图像,然后使用另一个类将一个局部透明的背景图像放在已经存在的背景图像之上。这只是一个简单的字眼,所以让我做一个示范。 在此示例中,第一个div应该具有背景图像1,第二个div应该具有背景图像1,但是滤镜图像位于其顶部,然后第三个div应该是图像2,第四个应该是图像2并且上面具有相同的滤镜。 但是,在此示例中,.backgroundF

  • 问题内容: 这可能吗?以下是我尝试过的方法,但它完全用黑色填充了圆圈。 问题答案: SVG元素的图像填充是通过SVG模式实现的。

  • 如何添加图像并将其设置为我的应用程序背景 我知道你把你想要的图片粘贴到了drawable文件夹中。这是代码本身的问题,还是我应该创建一个RelativeLayout?或者仅仅是提供的代码中的一行更改? 这是我的代码,没有任何改动。

  • 问题内容: 这可能吗?以下是我尝试过的方法,但它完全用黑色填充了圆圈。 问题答案: SVG元素的图像填充是通过SVG模式实现的。

  • 我正在尝试添加一个背景图像到标题在一个Squarespace网站我正在工作。我成功地使用了他们论坛中建议的以下代码: 然而,它只覆盖主导航区域,而不是整个头部区域。我希望它看起来像这样: 然而,在这个示例页面中,它看起来是这样的,我将代码添加到: https://matthew-kern-drzz.squarespace.com/paints-new 有人有解决办法吗? 干杯, M. 附注。我只是