首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在任意位置插入Word文本框- Apache POI

在任意位置插入Word文本框- Apache POI
EN

Stack Overflow用户
提问于 2019-12-03 20:24:02
回答 1查看 292关注 0票数 0

很好,有人可以在word文档的最下面以浮动的方式插入一个文本框,并附上一张图片,谢谢你的帮助

EN

Stack Overflow用户

发布于 2019-12-03 22:05:23

到目前为止,使用apache poi的高级XWPF类还不支持这一点。但*.docx只是一个目录结构中包含XML文件的ZIP归档文件。因此,我们可以使用Word创建我们想要的内容,然后在生成的*.docx ZIP归档中查看/word/document.xml。然后,我们可以尝试使用低级ooxml-schema类重新生成该XML

下面的示例需要FAQ中提到的所有模式ooxml-schemas-1.4.jar的完整jar。它使用apache poi 4.1.1进行了测试。

该示例将文本框定位在页面的右下角。但并不是所有的打印机都能无缝打印。因此,更好的选择是使用mso-position-*-relative:margin而不是mso-position-*-relative:page。页边距决定了右下角的位置。

代码语言:javascript
复制
import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTxbxContent;

import com.microsoft.schemas.vml.CTGroup;
import com.microsoft.schemas.vml.CTRect;
import com.microsoft.schemas.office.word.STWrapType;

import org.w3c.dom.Node;

public class CreateWordTextBox {

 public static void main(String[] args) throws Exception {

  String textBoxWidth = "200pt";
  String textBoxHeight = "200pt";

  XWPFDocument doc= new XWPFDocument();

  XWPFParagraph paragraph = doc.createParagraph();
  XWPFRun run=paragraph.createRun();  
  run.setText("The Body text: ");

  CTGroup ctGroup = CTGroup.Factory.newInstance();

  CTRect ctRect = ctGroup.addNewRect();
  ctRect.addNewWrap().setType(STWrapType.SQUARE);
  ctRect.setStyle("position:absolute"
   + ";width:" + textBoxWidth 
   + ";height:" + textBoxHeight
   + ";mso-position-horizontal:right"
   + ";mso-position-horizontal-relative:page"
   //+ ";mso-position-horizontal-relative:margin"
   + ";mso-position-vertical:bottom"
   + ";mso-position-vertical-relative:page"
   //+ ";mso-position-vertical-relative:margin"
  );

  CTTxbxContent ctTxbxContent = ctRect.addNewTextbox().addNewTxbxContent();
  ctTxbxContent.addNewP().addNewR().addNewT().setStringValue("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.");

  Node ctGroupNode = ctGroup.getDomNode(); 
  CTPicture ctPicture = CTPicture.Factory.parse(ctGroupNode);
  run=paragraph.createRun();  
  CTR cTR = run.getCTR();
  cTR.addNewPict();
  cTR.setPictArray(0, ctPicture);

  paragraph = doc.createParagraph();

  FileOutputStream out = new FileOutputStream("WordTextBox.docx");
  doc.write(out);
  out.close();

 }
}
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59157076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档