【问题标题】:how create TextBox in a cell of table in document .docx using apache poi如何使用 apache poi 在文档 .docx 中的表格单元格中创建 TextBox
【发布时间】:2019-03-31 15:03:53
【问题描述】:

我用过 Javafx 和

我使用 apache poi 创建了一个表:

 XWPFDocument document = new XWPFDocument();
 XWPFParagraph paragraph = document.createParagraph();
 XWPFTable table = document.createTable(4, 3);

并创建如下段落的段落:

XWPFParagraph p1 = table.getRow(0).getCell(2).getParagraphs().get(0);
XWPFRun r1 = p1.createRun();
r1.setText(category_number.getText() + category.toString());

现在,我想在一行的一个单元格中创建一个文本框,但不知道如何将单元格和行寻址到文本框并设置文本和对齐文本框。

请帮帮我):

【问题讨论】:

  • 看起来与 javafx 无关 - 怎么样?
  • setText 输入是 javafx 的一个组件

标签: java textbox apache-poi


【解决方案1】:

*.docx 中的文本框是文档内容中的一个形状。 XWPF 中尚未实现创建形状。但可以使用底层的ooxml-schemas 类来完成。

例子:

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.CTShape;

import org.w3c.dom.Node;

public class CreateWordTextBoxInTable {

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

  XWPFDocument document= new XWPFDocument();

  XWPFParagraph paragraph = document.createParagraph();
  XWPFRun run = paragraph.createRun();  
  run.setText("The table:");

  XWPFTable table = document.createTable(4, 3);

  // table header row
  for (int c = 0; c < 3; c++ ) {
   paragraph = table.getRow(0).getCell(c).getParagraphArray(0);
   if (paragraph == null) paragraph = table.getRow(0).getCell(c).addParagraph();
   run = paragraph.createRun(); 
   run.setText("Column " + (c+1));
  }

  // get run in cell for text box
  XWPFTableCell cell = table.getRow(1).getCell(1);
  paragraph = cell.getParagraphArray(0);
  if (paragraph == null) paragraph = cell.addParagraph();
  run = paragraph.createRun();  

  // create inline text box in run
  // first crfeate group shape
  CTGroup ctGroup = CTGroup.Factory.newInstance();

  // now add shape to group shape
  CTShape ctShape = ctGroup.addNewShape();
  ctShape.setStyle("width:100pt;height:36pt");
  // add text box content to shape
  CTTxbxContent ctTxbxContent = ctShape.addNewTextbox().addNewTxbxContent();
  XWPFParagraph textboxparagraph = new XWPFParagraph(ctTxbxContent.addNewP(), (IBody)cell);
  textboxparagraph.setAlignment(ParagraphAlignment.CENTER);
  XWPFRun textboxrun = textboxparagraph.createRun();
  textboxrun.setText("The TextBox content...");
  textboxrun.setFontSize(10);

  // add group shape as picture to the run
  Node ctGroupNode = ctGroup.getDomNode(); 
  CTPicture ctPicture = CTPicture.Factory.parse(ctGroupNode);
  CTR cTR = run.getCTR();
  cTR.addNewPict();
  cTR.setPictArray(0, ctPicture);

  FileOutputStream out = new FileOutputStream("test.docx"); 
  document.write(out);
  out.close();

 }
}

此代码使用apache poi 4.0.1 进行了测试,并且需要在类路径中使用ooxml-schemas-1.4.jar

【讨论】:

  • 非常感谢,我的问题已经解决了,你的技术太棒了,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 2010-11-10
  • 2016-10-02
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多