java 导出word文件,支持导出表格和图片

 java导出word文件,包括导出图片和表格

如下图:

导出word所需maven依赖 

<!--   导出word所需maven依赖 -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.14</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.14</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml-schemas</artifactId>
			<version>3.14</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-scratchpad</artifactId>
			<version>3.14</version>
		</dependency>

直接上代码,里面都添加注释了,可读性还可以

package com.example.demo;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;

import java.io.*;
import java.math.BigInteger;
import java.util.List;

/**
 * 导出word带图片
 *
 * @program: demo
 * @author: xlk
 * @create: 2020-12-09 17:15
 */
public class OutWordAndImg {
    public static void main(String[] args) throws IOException, InvalidFormatException {
        XWPFDocument doc = new XWPFDocument();
        XWPFParagraph para;
        XWPFRun run;
        //创建表格
        // 行标签
        int rows = 4;
        //列标签
        int cols = 2;
        XWPFTable table = doc.createTable(rows, cols);
        table.setCellMargins(3, 5, 3, 5);
//        table.addNewCol();//添加新列
//        table.createRow();//添加新行
        String[] title1 = new String[]{"标题", "详情",}; // 数组长度要和 cols 长度一致
        // String[] title2 = new String[]{"调查目的"," ", };
        XWPFTableRow row;
        XWPFTableCell cell;
        CTTcPr cellPr;
        //遍历行   j  是行  y 是每一行的列
        for (int j = 0; j < rows; j++) {
            row = table.getRow(j);
            row.setHeight(1000);
            //第一行 标题栏
            for (int y = 0; y < title1.length; y++) {
                //创建单元格
                cell = row.getCell(y);
                //单元格属性
                cellPr = cell.getCTTc().addNewTcPr();
                //设置宽度
                cellPr.addNewTcW().setW(BigInteger.valueOf(4000));
                //垂直居中
                cellPr.addNewVAlign().setVal(STVerticalJc.CENTER);
                //第一个段落
                para = cell.getParagraphs().get(0);
                //设置对齐方式
                para.setAlignment(ParagraphAlignment.CENTER);
                //段落的对齐方式 1左 2中 3右 4往上 左 不可写0和负数
                para.setFontAlignment(2);
                //一个XWPFRun代表具有相同属性的一个区域:一段文本
                run = para.createRun();
                //设置字体
                run.setFontFamily("仿宋");
                //设置字体大小
                run.setFontSize(11);
                if (j == 0) {
                    //字体宽
//                    run.setBold(true);
                    run.setText(title1[y]);
                }
            }

            //第二行
            if (j == 1) {
                String imgPath = "C:\\Users\\admin-xu\\Desktop\\图片\\1.jpg";
                for (int y = 0; y < cols; y++) {
                    // 第一列添加图片
                    if (y == 0) {
                        cell = row.getCell(y);
                        cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
                        //通过文件流写入图片
                        List<XWPFParagraph> paragraphs = cell.getParagraphs();
                        XWPFParagraph newPara = paragraphs.get(0);
                        XWPFRun imageCellRunn = newPara.createRun();
                        File image = new File(imgPath);
                        if (!image.exists()) {
                            continue;
                        }
                        try (FileInputStream is = new FileInputStream(imgPath)) {
                            imageCellRunn.addPicture(is, XWPFDocument.PICTURE_TYPE_JPEG, image.getName(), Units.toEMU(180), Units.toEMU(180)); // 180*180 pixels
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    //第二列添加文字
                    if (y == 1) {
                        cell = row.getCell(y);
                        cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
                        cell.setText("    左边填充图片   ");
                    }
                    if (y == 2) {
                        cell = row.getCell(y);
                        cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
                    }
                }
            }
            //第 3 行
            if (j == 2) {
                String imgPath = "C:\\Users\\admin-xu\\Desktop\\图片\\2.jpg";
                for (int y = 0; y < cols; y++) {
                    // 第一列添加文字说明
                    if (y == 0) {
                        cell = row.getCell(0);
                        cellPr = cell.getCTTc().addNewTcPr();
                        cellPr.addNewTcW().setW(BigInteger.valueOf(4000));
                        para = cell.getParagraphs().get(0);
                        para.setAlignment(ParagraphAlignment.CENTER);
                        para.setFontAlignment(2);
                        run = para.createRun();
                        run.setFontFamily("仿宋");
                        run.setFontSize(13);
                        run.setText("左边填充图片");
                    }
                    //第二列添加图片
                    if (y == 1) {
                        cell = row.getCell(y);
                        cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
                        List<XWPFParagraph> paragraphs = cell.getParagraphs();
                        XWPFParagraph newPara = paragraphs.get(0);
                        XWPFRun imageCellRunn = newPara.createRun();
                        File image = new File(imgPath);
                        if (!image.exists()) {
                            continue;
                        }
                        try (FileInputStream is = new FileInputStream(imgPath)) {
                            imageCellRunn.addPicture(is, XWPFDocument.PICTURE_TYPE_JPEG, image.getName(), Units.toEMU(90), Units.toEMU(90)); // 90*90 pixels
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    } else {
                        cell = row.getCell(y);
                        cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
                    }
                }
            }

            //第 4 行
            if (j == 3) {
                for (int y = 0; y < cols; y++) {
                    // 第一列添加文字说明
                    if (y == 0) {
                        cell = row.getCell(0);
                        cellPr = cell.getCTTc().addNewTcPr();
                        cellPr.addNewTcW().setW(BigInteger.valueOf(4000));
                        para = cell.getParagraphs().get(0);
                        para.setAlignment(ParagraphAlignment.CENTER);
                        para.setFontAlignment(2);
                        run = para.createRun();
                        run.setFontFamily("仿宋");
                        run.setFontSize(13);
                        run.setText("我是标题");
                    }
                    //第二列 添加文字内容
                    if (y == 1) {
                        cell = row.getCell(y);
                        cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
                        cell.setText("我是文字内容");
                        /*cell.setText("(1)照片拍摄位置经纬度:");
                        cellPr = cell.getCTTc().addNewTcPr();
                        //设置宽度
                        cellPr.addNewTcW().setW(BigInteger.valueOf(2000));
                        //第一个段落
                        para = cell.getParagraphs().get(0);

                        //设置对齐方式
                        para.setAlignment(ParagraphAlignment.LEFT);
                        //居左
                        para.setFontAlignment(1);

                        run = para.createRun();
                        run.addBreak();
                        run.addBreak();
                        cell.setText("    经度:");
                        run = para.createRun();
                        run.addBreak();
                        run.addBreak();
                        cell.setText("    经度:");
                        run = para.createRun();
                        run.addBreak();
                        run.addBreak();
                        cell.setText("(2)照片拍摄时间:");*/
                    } else {
                        cell = row.getCell(y);
                        cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
                    }
                }
            }
        }
        // 写出文件
        OutputStream os = new FileOutputStream("E:\\outWord.doc");
        doc.write(os);
        if (os != null) {
            try {
                os.close();
                System.out.println("文件输出成功....");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值