gpt4 book ai didi

java - 如何使用 apache poi 在文档 .docx 中的表格单元格中创建文本框

转载 作者:行者123 更新时间:2023-12-02 10:03:52 30 4
gpt4 key购买 nike

我使用了 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());

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

请帮助我):

最佳答案

*.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

关于java - 如何使用 apache poi 在文档 .docx 中的表格单元格中创建文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55442251/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com