POI生成word文本、表格、图片内容

3 篇文章 0 订阅

一、文本

1、自定义段落
1)添加文本内容,设置文本样式
	/**
	 * 添加文本内容
	 * @param doc
	 */
	public void createContentText(XWPFDocument doc) {
        // 创建段落对象
        XWPFParagraph paraX = doc.createParagraph();
        docUtils.setParagraphStyle1(paraX);
        XWPFRun runX = paraX.createRun();
        //制表符
        runX.addTab();
        for(int i=0;i<100;i++) {
            // 正文内容
            runX.setText("正文");
            //回车
            if(i == 10) runX.addCarriageReturn();
            //字体颜色
            runX.setColor("533771");
            //字体
            runX.setFontFamily("宋体");
            //字体大小
            runX.setFontSize(12);
            //删除线
//            runX.setStrikeThrough(true);
            //双删除线
//            runX.setDoubleStrikethrough(true);
            //阴影
//            runX.setShadow(true);
            //下划线
//            runX.setUnderline(UnderlinePatterns.SINGLE);
            //加粗
//            runX.setBold(true);
            //斜体
//            runX.setItalic(true);
            //设置背景颜色
            setContentBackColor(runX);
        }
	}
2)设置背景颜色
/**
     * 设置文本背景颜色
     * @param run
     */
    public void setContentBackColor(XWPFRun run) {
    	CTRPr rpr = run.getCTR().getRPr();
    	if(rpr == null) rpr = run.getCTR().addNewRPr();
    	CTShd shd = rpr.isSetShd() ? rpr.getShd() : rpr.addNewShd();
    	shd.setVal(STShd.Enum.forInt(38));
    	shd.setColor("FFFF00");
    }
3)结果展示

在这里插入图片描述

二、表格

1、自定义表格
1) 创建表格
/**
	 * 插入表格
	 * @param doc
	 */
	public void createTable(XWPFDocument doc) {
		//创建表格对象(4行3列)
		XWPFTable table = doc.createTable(4, 3);
		//设置表头
		String[] names = {"序号", "名称", "备注"};
		setRowContent(table, names, 0);
		//设置行数据
		String[] data1 = {"1", "小红", ""};
		setRowContent(table, data1, 1);
		String[] data2 = {"2", "小蓝", ""};
		setRowContent(table, data2, 2);
		String[] data3 = {"3", "小黑", ""};
		setRowContent(table, data3, 3);
		//样式
		setTableStyle(table);
	}
2)设置单元格数据
/**
	 * 设置单元格数据
	 * @param table
	 * @param strs
	 * @param rowIndex
	 */
	public void setRowContent(XWPFTable table, String[] strs, int rowIndex) {
		//获取行对象
		XWPFTableRow row = table.getRow(rowIndex);
		if(row == null) row = table.createRow();
		//单元格对象
		XWPFTableCell cell = null;
		for (int i = 0; i < strs.length; i++) {
			cell = row.getCell(i);
			cell.setText(strs[i]);
			setCellStytle(cell);
		}
	}
3)设置单元格样式
public void setCellStytle(XWPFTableCell cell) {
		CTTc cttc = cell.getCTTc();
		CTPPr pr = cttc.getPList().get(0).addNewPPr();
		//水平居中
		pr.addNewJc().setVal(STJc.CENTER);
		//垂直居中
		cell.setVerticalAlignment(XWPFVertAlign.CENTER);
		//单元格底纹
    	CTShd shd = pr.isSetShd() ? pr.getShd() : pr.addNewShd();
    	shd.setVal(STShd.CLEAR);
    	shd.setColor("auto");
    	shd.setFill("FF0000");
    	
    	CTParaRPr rpr = pr.addNewRPr();
    	CTFonts fonts = rpr.addNewRFonts();
    	fonts.setAscii("宋体");
        CTHpsMeasure size = CTHpsMeasure.Factory.newInstance();
        size.setVal(new BigInteger(String.valueOf(28)));
        rpr.setSz(size);
        rpr.setSzCs(size);	//字体大小
	}
4)设置表格样式
public void setTableStyle(XWPFTable table) {
		//边框
		setTableBorder(table);
		CTTbl ttbl = table.getCTTbl();
		CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();
		//表格在word中的对齐方式
		CTJc jc = tblPr.addNewJc();
		jc.setVal(STJc.Enum.forString("center"));
		//首选宽度
		CTTblWidth w = tblPr.getTblW() == null ? tblPr.addNewTblW() : tblPr.getTblW();
		w.setType(STTblWidth.DXA);
		w.setW(new BigInteger("5000"));
	}
5)设置边框样式
public void setTableBorder(XWPFTable table) {
		//表格边框
		CTTblBorders borders = table.getCTTbl().getTblPr().addNewTblBorders();
		//顶部
		CTBorder top = borders.addNewTop();
		//虚线
		top.setVal(STBorder.Enum.forString("dashed"));
		//宽度
		top.setSz(new BigInteger("1"));
		//颜色
		top.setColor("0000FF");
		//底部
		CTBorder bottom = borders.addNewBottom();
		//直线
		bottom.setVal(STBorder.Enum.forString("single"));
		//宽度
		bottom.setSz(new BigInteger("2"));
		//颜色
		bottom.setColor("FF0000");
		//左边
		CTBorder left = borders.addNewLeft();
		//双线
		left.setVal(STBorder.Enum.forString("double"));
		//宽度
		left.setSz(new BigInteger("1"));
		//颜色
		left.setColor("666666");
		//右边
		CTBorder right = borders.addNewRight();
		//双线
		right.setVal(STBorder.Enum.forString("wave"));
		//宽度
		right.setSz(new BigInteger("1"));
		//颜色
		right.setColor("00FF00");

		//内部水平线
		CTBorder h = borders.addNewInsideH();
		//双线
		h.setVal(STBorder.Enum.forString("single"));
		//宽度
		h.setSz(new BigInteger("3"));
		//颜色
		h.setColor("666666");
		//内部垂直线
		CTBorder v = borders.addNewInsideV();
		//双线
		v.setVal(STBorder.Enum.forString("single"));
		//宽度
		v.setSz(new BigInteger("2"));
		//颜色
		v.setColor("00FFFF");
	}
6)结果展示

在这里插入图片描述

2、使用模板
1)创建模板

创建一个word文件,如format.docx

在这里插入图片描述

2) 复制模板文件
3)往表格添加数据

	
	public void useTempTable(XWPFDocument doc) {
		int a = 0;
		//获取模板表格
		for (XWPFTable table : doc.getTables()) {
			//获取列
			for (int i = 0; i < table.getNumberOfRows(); i++) {
				XWPFTableRow row = table.getRow(i);
				for (XWPFTableCell cell : row.getTableCells()) {
					//设置值
					cell.setText(""+a);
					a++;
				}
			}
		}
	}
4)结果展示

在这里插入图片描述

3、添加图片
public void createPicture(XWPFDocument doc, String picPath) throws InvalidFormatException, IOException {
        // 创建段落对象
        XWPFParagraph paraX = doc.createParagraph();
        XWPFRun run = paraX.createRun();
        FileInputStream is = new FileInputStream(picPath);
        int picType = -1;
        //判断图片类型
        String suffix = picPath.substring(picPath.lastIndexOf(".")+1);
        if(suffix.equals("png")) picType = XWPFDocument.PICTURE_TYPE_PNG;
        else if(suffix.equals("jpg")) picType = XWPFDocument.PICTURE_TYPE_JPEG;
        run.addPicture(is, picType, picPath, Units.toEMU(100), Units.toEMU(100));
        is.close();
	}
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值