poi 表格XWPFParagraph 创建多个XWPFRun

public void appResultBookMark(String bookMarkName) {
        PoiWordUtil poiWordUtil = new PoiWordUtil();
        ReportUtil reportUtil = new ReportUtil();
        XWPFParagraph par;
        XWPFRun run;
        //创建表头  并返回表格
        XmlCursor cursor = this._para.getCTP().newCursor();
        par = this._para.getDocument().insertNewParagraph(cursor);
        XWPFTable table = reportUtil.appResultTHead(par);  //表头
        
        //更新下一行
        for (int i = 0; i < 5; i++) {
            XWPFTableRow row = table.createRow();
            cursor = this._para.getCTP().newCursor();
            reportUtil.unitTestCellFonts(row.getCell(0), ""+i, 8300/4, "FFFFFF", true,ParagraphAlignment.CENTER,STJc.CENTER,"仿宋","4",12);
            reportUtil.unitTestCellFonts(row.getCell(1), ""+i, 8300/4, "FFFFFF", false,ParagraphAlignment.CENTER,STJc.CENTER,"仿宋","4",12);
            reportUtil.unitTestCellFonts(row.getCell(2), ""+i, 8300/4, "FFFFFF", true,ParagraphAlignment.CENTER,STJc.CENTER,"仿宋","4",12);
            reportUtil.unitTestCellFonts(row.getCell(3), ""+i, 8300/4, "FFFFFF", false,ParagraphAlignment.CENTER,STJc.CENTER,"仿宋","4",12);
        }

 

 

 

/**************************************************/

//自定义字体
        public void unitTestCellFonts(XWPFTableCell cell,String content,int width,String bgColor,boolean bold,ParagraphAlignment paragraphAlignment,STJc.Enum stjc,
                String fontFamily,String fontInteger,int fontSize) {
//            CTP ctp = CTP.Factory.newInstance();
            CTTc cttc = cell.getCTTc();
            CTTcPr ctPr = cell.getCTTc().addNewTcPr();
            CTShd ctshd = cell.getCTTc().addNewTcPr().addNewShd();
            
            XWPFParagraph par = new XWPFParagraph(CTP.Factory.newInstance(), cell);
            XWPFRun run = par.createRun();
            //run.setCharacterSpacing(twips); 间距
            run.setText(content);
            run.setBold(false);
            run.setFontFamily(fontFamily);//字体
            run.setFontSize(fontSize);
            par.addRun(run);
            //par.setSpacingBetween(0.9,LineSpacingRule.EXACT);  //字符缩放
            par.setAlignment(paragraphAlignment);
            par.setStyle("ab");
            ctshd.setFill(bgColor);
            cell.setParagraph(par);
            XWPFRun run2 = par.createRun();
            run2.setText("Run2222222222");
            run2.setFontFamily("仿宋");
            run2.setBold(true);
            run2.setFontSize(26);
            par.addRun(run2);
            cell.setParagraph(par);
            XWPFRun run3 = par.createRun();
            run3.setText("Run2222222222");
            par.addRun(run3);
            run.setText(content);
            cell.setParagraph(par);
            if(width!=0){
                ctPr.addNewTcW().setW(BigInteger.valueOf(width));
                
                BigInteger bi1 = new BigInteger(fontInteger);

                CTTcBorders CTTcBorders = ctPr.getTcBorders() == null ? ctPr.addNewTcBorders() : ctPr.getTcBorders();
                
                Node node = CTTcBorders.getDomNode();
//                node.setTextContent("<w:tblBorders><w:top w:val=\"single\" w:sz=\"4\" wx:bdrwidth=\"10\" w:space=\"0\" w:color=\"auto\"/>\r\n" + 
//                        "<w:left w:val=\"single\" w:sz=\"4\" wx:bdrwidth=\"10\" w:space=\"0\" w:color=\"auto\"/>\r\n" + 
//                        "<w:bottom w:val=\"single\" w:sz=\"4\" wx:bdrwidth=\"10\" w:space=\"0\" w:color=\"auto\"/>\r\n" + 
//                        "<w:right w:val=\"single\" w:sz=\"4\" wx:bdrwidth=\"10\" w:space=\"0\" w:color=\"auto\"/></w:tblBorders>");
                
                
                CTBorder ctb1 = CTTcBorders.getBottom() == null?CTTcBorders.addNewBottom():CTTcBorders.getBottom();
                CTBorder ctb2 = CTTcBorders.getLeft() == null?CTTcBorders.addNewLeft():CTTcBorders.getLeft();
                CTBorder ctb3 = CTTcBorders.getRight() == null?CTTcBorders.addNewRight():CTTcBorders.getRight();
                CTBorder ctb4 = CTTcBorders.getTop() == null?CTTcBorders.addNewTop():CTTcBorders.getTop();
                ctb1.setSz(bi1);
                ctb2.setSz(bi1);
                ctb3.setSz(bi1);
                ctb4.setSz(bi1);
                ctb1.setVal(STBorder.Enum.forString("single")); 
                ctb2.setVal(STBorder.Enum.forString("single")); 
                ctb3.setVal(STBorder.Enum.forString("single")); 
                ctb4.setVal(STBorder.Enum.forString("single"));
            }
            ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);
            cttc.getPArray(0).addNewPPr().addNewJc().setVal(stjc);
            
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Apache POI库来实现向docx表格中填充多个图片,并使用Java自带的ImageIO库来进行图片的压缩。 首先,需要使用POI创建一个空白的docx文档,并在其中添加一个表格。然后,可以使用POI库提供的XWPFRun类的addPicture方法来向单元格中添加图片,同时指定图片的大小和格式。 接下来,可以使用ImageIO库来读取原始图片,并使用Java提供的Image类进行缩放。使用ImageIO库的write方法将缩放后的图片写入到临时文件中,最后再使用POI库的addPicture方法将缩放后的图片插入到单元格中。 以下是代码示例: ``` import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.InputStream; import java.util.List; import javax.imageio.ImageIO; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.IOUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; public class InsertImagesToDocxTable { public static void main(String[] args) throws Exception { // 创建docx文档和表格 XWPFDocument doc = new XWPFDocument(); XWPFTable table = doc.createTable(); // 添加表头行 XWPFTableRow headerRow = table.getRow(0); headerRow.createCell().setText("Image"); headerRow.createCell().setText("Description"); // 添加多个图片 for (int i = 1; i <= 3; i++) { XWPFTableRow row = table.createRow(); XWPFTableCell cell = row.getCell(0); // 加载原始图片 String imageName = "image" + i + ".jpg"; InputStream imageStream = InsertImagesToDocxTable.class.getResourceAsStream(imageName); BufferedImage originalImage = ImageIO.read(imageStream); // 缩放图片 int maxWidth = 200; // 最大宽度为200像素 double scale = (double) maxWidth / originalImage.getWidth(); int height = (int) (originalImage.getHeight() * scale); Image scaledImage = originalImage.getScaledInstance(maxWidth, height, Image.SCALE_SMOOTH); // 将缩放后的图片写入临时文件 File tempFile = File.createTempFile("image", ".jpg"); ImageIO.write(toBufferedImage(scaledImage), "jpg", tempFile); // 向单元格中添加图片 XWPFParagraph paragraph = cell.addParagraph(); XWPFRun run = paragraph.createRun(); run.addPicture(tempFile, XWPFDocument.PICTURE_TYPE_JPEG, imageName, maxWidth, height); // 添加描述 row.getCell(1).setText("Description " + i); // 删除临时文件 tempFile.delete(); } // 输出docx文档 doc.write(System.out); doc.close(); } private static BufferedImage toBufferedImage(Image image) { if (image instanceof BufferedImage) { return (BufferedImage) image; } BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); bufferedImage.getGraphics().drawImage(image, 0, 0, null); return bufferedImage; } } ``` 其中,toBufferedImage方法用于将Image对象转换为BufferedImage对象。需要注意的是,这里使用了Java自带的ImageIO库来进行图片的缩放和写入文件,因此不需要使用第三方库进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值