使用Apache POI的xwpfd将图像插入表格的单元格中

时间:2015-10-07 07:11:57

标签: java apache-poi xwpf

我正在开发一个程序,需要以表格格式将结果写入.docx。我需要从一些表格单元格中的文件夹中写入图像,我一直无法弄清楚该怎么做。我见过的解决方案是将图像插入文档中。

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);
}

1 个答案:

答案 0 :(得分:2)

我能够解决它。以下是工作代码:

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());
}