使用 Apache POI 的 xwpfd 在 table 的单元格中插入图像
Insert image in a table's cell using Apache POI's xwpfd
我正在开发一个需要将结果以 table 格式写入 .docx
的程序。我需要从某些 table 单元格的文件夹中写入图像,但我一直无法弄清楚该怎么做。我看到的解决方法是在文档中插入图片
Student student = new Student ();
XWPFDocument Document = new XWPFDocument ();
XWPFTable table = document.createTable(20,2);
XWPFTableRow rows =null;
XWPFTableCell cell = null;
for (int i=0; i<20; i++) {
rows = table.getRow(i)
student = studentList.get(i);
//first column
cell = rows.getCell(0);
//add image to this cell. The path to the image can be gotten from student.getImagePath and the image itself in BufferedImage can be gotten from student.getImage
//second column
cell = rows.getCell(1);
cell.setText(student.getDetails);
}
我能够解决这个问题。以下是工作代码:
Student student = new Student ();
String [] details = {"Detail1: ", "Detail2: ", "Detail3: ", "Detail4: ", "Detail5: "};
FileInputStream fis;
String imageName;
int index;
File file;
XWPFDocument document = new XWPFDocument(); //create table
XWPFTable table;
XWPFParagraph paragraph;
XWPFRun run;
XWPFTableRow rows = null;
XWPFTableCell cell = null;
//Write Hall Name at the top of the word document
paragraph = document.createParagraph();
run = paragraph.createRun();
run.setUnderline(UnderlinePatterns.WORDS);
run.setText("Hall Name: " + hallName);
run.addBreak();
table = document.createTable(rw, cl);
table.getCTTbl().getTblPr().unsetTblBorders();
for (int i=0; i<rw; i++) {
rows = table.getRow(i);
student = studentList.get(i);
//First column
cell = rows.getCell(0);
paragraph = cell.addParagraph();
run = paragraph.createRun();
if (student.getImagePath() == null) {
run.setText("Image Unavailable");
}
else {
fis = new FileInputStream(student.getImagePath());
index = student.getImagePath().lastIndexOf('\') + 1;
imageName = student.getImagePath().substring(index);
run.addPicture(fis, XWPFDocument.PICTURE_TYPE_JPEG, imageName, Units.toEMU(100), Units.toEMU(100));
}
//Second column
cell = rows.getCell(1);
paragraph = cell.addParagraph();
run = paragraph.createRun();
run.setText(details[0] + student.getRegNumber());
run.addBreak();
run.setText(details[1] + student.getName());
run.addBreak();
run.setText(details[2] + student.getExamNumber());
run.addBreak();
run.setText(details[3] + student.getTableNumber());
run.addBreak();
run.setText(details[4] + student.getLevel());
}
我正在开发一个需要将结果以 table 格式写入 .docx
的程序。我需要从某些 table 单元格的文件夹中写入图像,但我一直无法弄清楚该怎么做。我看到的解决方法是在文档中插入图片
Student student = new Student ();
XWPFDocument Document = new XWPFDocument ();
XWPFTable table = document.createTable(20,2);
XWPFTableRow rows =null;
XWPFTableCell cell = null;
for (int i=0; i<20; i++) {
rows = table.getRow(i)
student = studentList.get(i);
//first column
cell = rows.getCell(0);
//add image to this cell. The path to the image can be gotten from student.getImagePath and the image itself in BufferedImage can be gotten from student.getImage
//second column
cell = rows.getCell(1);
cell.setText(student.getDetails);
}
我能够解决这个问题。以下是工作代码:
Student student = new Student ();
String [] details = {"Detail1: ", "Detail2: ", "Detail3: ", "Detail4: ", "Detail5: "};
FileInputStream fis;
String imageName;
int index;
File file;
XWPFDocument document = new XWPFDocument(); //create table
XWPFTable table;
XWPFParagraph paragraph;
XWPFRun run;
XWPFTableRow rows = null;
XWPFTableCell cell = null;
//Write Hall Name at the top of the word document
paragraph = document.createParagraph();
run = paragraph.createRun();
run.setUnderline(UnderlinePatterns.WORDS);
run.setText("Hall Name: " + hallName);
run.addBreak();
table = document.createTable(rw, cl);
table.getCTTbl().getTblPr().unsetTblBorders();
for (int i=0; i<rw; i++) {
rows = table.getRow(i);
student = studentList.get(i);
//First column
cell = rows.getCell(0);
paragraph = cell.addParagraph();
run = paragraph.createRun();
if (student.getImagePath() == null) {
run.setText("Image Unavailable");
}
else {
fis = new FileInputStream(student.getImagePath());
index = student.getImagePath().lastIndexOf('\') + 1;
imageName = student.getImagePath().substring(index);
run.addPicture(fis, XWPFDocument.PICTURE_TYPE_JPEG, imageName, Units.toEMU(100), Units.toEMU(100));
}
//Second column
cell = rows.getCell(1);
paragraph = cell.addParagraph();
run = paragraph.createRun();
run.setText(details[0] + student.getRegNumber());
run.addBreak();
run.setText(details[1] + student.getName());
run.addBreak();
run.setText(details[2] + student.getExamNumber());
run.addBreak();
run.setText(details[3] + student.getTableNumber());
run.addBreak();
run.setText(details[4] + student.getLevel());
}