工程地址:https://github.com/zheng-chang-wei/word

package com.example.demo1.poi;import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.File;
import java.io.FileOutputStream;public class PoiWord {public static void main(String[] args) {XWPFDocument doc = PoiUtil.createDocument();PoiUtil.addEmptyRow(doc);PoiUtil.createHeading1(doc, "1 样品简介");PoiUtil.createHeading2(doc, "1.1 概述");PoiUtil.createBody(doc, "asdfasdfsf啊但是发射点VS大哥飞洒地方撒旦飞洒地方嘎嘎发打撒大厦是个大帅哥夫人特温柔各方");PoiUtil.addImage(doc, "picture0.png", "图 1.1-1 ");PoiUtil.createHeading2(doc, "1.2 主要技术参数");PoiUtil.createBody(doc, "PICS 表格中用到的缩略语:");PoiUtil.createBody(doc, "m : 要求强制支持");PoiUtil.createBody(doc, "n/a : 此项不可用");PoiUtil.createBody(doc, "o : 可选支持");PoiUtil.createBody(doc, "c : 此项是有条件的");PoiUtil.createBody(doc, "d : 默认");PoiUtil.createBody(doc, "Y : 是");PoiUtil.createBody(doc, "N : 否");PoiUtil.createTable(doc, "表1.2-1 PISC标识");FileOutputStream out = null;try {out = new FileOutputStream(new File("e:\\word.doc"));doc.write(out);out.close();PoiUtil.createToc("e:\\word.doc");} catch (Exception e) {e.printStackTrace();}}
}
package com.example.demo1.poi;import com.example.demo1.jacob.WordManager;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlToken;
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import org.springframework.util.StringUtils;import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigInteger;public class PoiUtil {public static int headingCount = 0;public static int totalRows = 39;public static XWPFDocument createDocument() {XWPFDocument doc = new XWPFDocument();//添加标题addCustomHeadingStyle(doc, "Heading1", 1);addCustomHeadingStyle(doc, "Heading2", 2);return doc;}public static void createTitle(XWPFDocument doc, String title) {XWPFParagraph titleParagraph = doc.createParagraph();//设置段落居中titleParagraph.setAlignment(ParagraphAlignment.CENTER);XWPFRun titleParagraphRun = titleParagraph.createRun();titleParagraphRun.setText(title);titleParagraphRun.setColor("000000");titleParagraphRun.setFontSize(20);}public static XWPFParagraph createHeading(XWPFDocument doc, String title) {//段落XWPFParagraph paragraph = doc.createParagraph();XWPFRun run = paragraph.createRun();run.setText(title);
//        run.setColor("696969");run.setFontSize(18);run.setBold(true);//标题加粗return paragraph;}/*** 创建标题1** @param doc* @param title*/public static void createHeading1(XWPFDocument doc, String title) {XWPFParagraph paragraph = createHeading(doc, title);paragraph.setStyle("Heading1");headingCount++;}/*** 创建标题2** @param doc* @param title*/public static void createHeading2(XWPFDocument doc, String title) {XWPFParagraph paragraph = createHeading(doc, title);paragraph.setStyle("Heading2");headingCount++;}/*** 创建正文** @param doc* @param body*/public static void createBody(XWPFDocument doc, String body) {// 正文XWPFParagraph paragraphX = doc.createParagraph();XWPFRun runX = paragraphX.createRun();runX.setText(body);paragraphX.setIndentationFirstLine(440);//首行缩进:567==1厘米}public static void addImage(XWPFDocument doc, String imagePath, String description) {FileInputStream in = null;ByteArrayInputStream byteInputStream = null;try {in = new FileInputStream(imagePath);byte[] ba = new byte[in.available()];in.read(ba);byteInputStream = new ByteArrayInputStream(ba);XWPFParagraph picture = doc.createParagraph();picture.setAlignment(ParagraphAlignment.CENTER);//添加图片doc.addPictureData(byteInputStream, CustomXWPFDocument.PICTURE_TYPE_JPEG);createPicture(doc, 400, 400, picture);addDescription(doc, description);} catch (Exception e) {e.printStackTrace();} finally {if (byteInputStream != null) {try {byteInputStream.close();} catch (IOException e) {e.printStackTrace();}}if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}public static void createTable(XWPFDocument doc, String title) {addDescription(doc, title);XWPFTable table = doc.createTable(3, 3);//列宽自动分割CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();infoTableWidth.setType(STTblWidth.DXA);infoTableWidth.setW(BigInteger.valueOf(9072));setTableFonts(table.getRow(0).getCell(0), "编号");setTableFonts(table.getRow(0).getCell(1), "问题");setTableFonts(table.getRow(0).getCell(2), "应答");setTableFonts(table.getRow(1).getCell(0), "1");setTableFonts(table.getRow(1).getCell(1), "陈述日期");setTableFonts(table.getRow(1).getCell(2), "2017年02月17日");setTableFonts(table.getRow(2).getCell(0), "2");setTableFonts(table.getRow(2).getCell(1), "PICS序列号");setTableFonts(table.getRow(2).getCell(2), "121313132131");}// word跨列合并单元格public static void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) {for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {XWPFTableCell cell = table.getRow(row).getCell(cellIndex);if (cellIndex == fromCell) {// The first merged cell is set with RESTART merge valuecell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);} else {// Cells which join (merge) the first one, are set with CONTINUEcell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);}}}// word跨行并单元格public static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {XWPFTableCell cell = table.getRow(rowIndex).getCell(col);if (rowIndex == fromRow) {// The first merged cell is set with RESTART merge valuecell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);} else {// Cells which join (merge) the first one, are set with CONTINUEcell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);}}}/*** 设置表格中字体** @param cell* @param cellText*/private static void setTableFonts(XWPFTableCell cell, String cellText) {CTP ctp = CTP.Factory.newInstance();XWPFParagraph p = new XWPFParagraph(ctp, cell);p.setAlignment(ParagraphAlignment.CENTER);XWPFRun run = p.createRun();run.setText(cellText);CTRPr rpr = run.getCTR().isSetRPr() ? run.getCTR().getRPr() : run.getCTR().addNewRPr();CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts();fonts.setAscii("仿宋");fonts.setEastAsia("仿宋");fonts.setHAnsi("仿宋");cell.setParagraph(p);}/*** 添加描述信息** @param doc* @param description*/public static void addDescription(XWPFDocument doc, String description) {if (StringUtils.isEmpty(description)) {return;}XWPFParagraph title = doc.createParagraph();XWPFRun run = title.createRun();run.setText(description);run.setBold(true);title.setAlignment(ParagraphAlignment.CENTER);}public static void addEmptyRow(XWPFDocument doc) {for (int i = 0; i < totalRows - headingCount; i++) {doc.createParagraph();}}public static void main(String[] args) {try {} catch (Exception e) {e.printStackTrace();}}/*** 创建目录*/public static void createToc(String filePath) {WordManager wordManager = new WordManager(false);try {wordManager.openDocument(filePath);wordManager.insertToc();} catch (Exception e) {e.printStackTrace();} finally {wordManager.close();}}/*** @param width     宽* @param height    高* @param paragraph 段落*/private static void createPicture(XWPFDocument doc, int width, int height,XWPFParagraph paragraph) {int id = doc.getAllPictures().size() - 1;final int EMU = 9525;width *= EMU;height *= EMU;String blipId = doc.getAllPictures().get(id).getPackageRelationship().getId();CTInline inline = paragraph.createRun().getCTR().addNewDrawing().addNewInline();String picXml = ""+ "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"+ "   <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"+ "      <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"+ "         <pic:nvPicPr>" + "            <pic:cNvPr id=\""+ id+ "\" name=\"Generated\"/>"+ "            <pic:cNvPicPr/>"+ "         </pic:nvPicPr>"+ "         <pic:blipFill>"+ "            <a:blip r:embed=\""+ blipId+ "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"+ "            <a:stretch>"+ "               <a:fillRect/>"+ "            </a:stretch>"+ "         </pic:blipFill>"+ "         <pic:spPr>"+ "            <a:xfrm>"+ "               <a:off x=\"0\" y=\"0\"/>"+ "               <a:ext cx=\""+ width+ "\" cy=\""+ height+ "\"/>"+ "            </a:xfrm>"+ "            <a:prstGeom prst=\"rect\">"+ "               <a:avLst/>"+ "            </a:prstGeom>"+ "         </pic:spPr>"+ "      </pic:pic>"+ "   </a:graphicData>" + "</a:graphic>";inline.addNewGraphic().addNewGraphicData();XmlToken xmlToken = null;try {xmlToken = XmlToken.Factory.parse(picXml);} catch (XmlException xe) {xe.printStackTrace();}inline.set(xmlToken);inline.setDistT(0);inline.setDistB(0);inline.setDistL(0);inline.setDistR(0);CTPositiveSize2D extent = inline.addNewExtent();extent.setCx(width);extent.setCy(height);CTNonVisualDrawingProps docPr = inline.addNewDocPr();docPr.setId(id);docPr.setName("图片名称");docPr.setDescr("描述信息");}private static void addCustomHeadingStyle(XWPFDocument docxDocument, String strStyleId, int headingLevel) {CTStyle ctStyle = CTStyle.Factory.newInstance();ctStyle.setStyleId(strStyleId);CTString styleName = CTString.Factory.newInstance();styleName.setVal(strStyleId);ctStyle.setName(styleName);CTDecimalNumber indentNumber = CTDecimalNumber.Factory.newInstance();indentNumber.setVal(BigInteger.valueOf(headingLevel));// lower number > style is more prominent in the formats barctStyle.setUiPriority(indentNumber);CTOnOff onoffnull = CTOnOff.Factory.newInstance();ctStyle.setUnhideWhenUsed(onoffnull);// style shows up in the formats barctStyle.setQFormat(onoffnull);// style defines a heading of the given levelCTPPr ppr = CTPPr.Factory.newInstance();ppr.setOutlineLvl(indentNumber);ctStyle.setPPr(ppr);XWPFStyle style = new XWPFStyle(ctStyle);// is a null op if already definedXWPFStyles styles = docxDocument.createStyles();style.setType(STStyleType.PARAGRAPH);styles.addStyle(style);}
}

POI 写word,添加标题,表格,图片,自动生成目录,合并单元格相关推荐

  1. 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你

    在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 目录 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 1.文章中的标题较多,每个单独调整格式太费劲,这里我们用一 ...

  2. 在Excel表格中如何快速拆分合并单元格

    在Excel表格中如何快速拆分合并单元格 目录 在Excel表格中如何快速拆分合并单元格 1.例如:将销售人列中的合并单元格拆分还原 2.选中销售人姓名,点击[开始]选项卡中[合并居中] 3.再点击[ ...

  3. java通过poi生成excel表格(自适应列宽、合并单元格后的边框添加)

    具体java通过POI读写Excel的基本使用方法可参考: POI读写Excel的基本使用 1.项目导入依赖: <!--xls--> <dependency><group ...

  4. 【表格设置】HTML中合并单元格,对列组合应用样式,适应各浏览器的内容换行

    1.常用表格标签 普通    <table>           |           <tr>          |           |          <th ...

  5. Java实战—POI操作Excel文档、读取、写入、合并单元格

    一.POI项目简介 POI全称 Poor Obfuscation Implementation,利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:http: ...

  6. markdown表格在github/gitee中合并单元格

    markdown表格合并单元格只能是在.md文件中使用html   代码 github/gitee中的显示效果 横向合并 <table>   <tr>     <td&g ...

  7. poi读取Excel文档(.xls .xlsx)包含合并单元格

    例子: 结果: 开始:----------------------------------- 导入的poi <!-- https://mvnrepository.com/artifact/org ...

  8. 怎样在word转PDF的时候自动生成目录

    首先,确保你的word文档中已经包含自动生成的目录: 选择左上角的"文件": 另存为,设置好文件名,文件类型选择PDF: 选择"选项"按钮,在弹出的窗口中,勾选 ...

  9. python合并表格源代码_Excel电子表格如何合并单元格,Python编程实践,xlwt模块的应用...

    #我要学Python#前面内容,我们详细了解了使用Python来操作Excel文件的一般方法.其中读取并通过Python中PyQt5模块展示了Excel文件的内容,详细方法参见下面的博文: 电子表格处 ...

  10. element 表格 最后一行合计。 合并单元格方法

    效果是最表格最后一行,合并两列 arraySpanMethod({rowIndex,columnIndex}: any) {if (rowIndex === this.tableData.length ...

最新文章

  1. 上周回顾:微软与苹果比赛谁更“不安全”
  2. 来个例子,彻底弄懂什么是 EM 算法
  3. Swift初级入门【步步为营】
  4. who is the one who actually know the essential things in life?
  5. LAMP基于php模块实现个人博客搭建
  6. 如何不用BPM配置时间
  7. [转]深一层看Singleton
  8. 74LS139改3―8线译码器_3、5号线沿线楼盘6800起!另:为无缝衔接地铁 新增调整公交线路一览!...
  9. 英美安全机构称俄罗斯正在暴力攻击全球数百家组织机构
  10. 【iOS开发-60】案例学习:多组数据的tableView设置、添加右側组索引、多层数据模型设置以及valueForKeyPath...
  11. C语言之浅析网络包解析
  12. PHP getcwd() 函数
  13. 三维点云数据处理软件供技术原理说明_三维扫描数据处理技术_点云数据处理...
  14. Mac系统投屏到电视机的方法
  15. 计算机毕业设计(附源码)python银行服务评价系统
  16. node.js对接支付宝沙箱,看这篇足够
  17. Android面试题-解决字体适配
  18. 从一次“并发修改字段业务”引出多版本并发控制与InnoDB锁
  19. 鲲鹏 920 openEuler 操作系统 部署安装 Anaconda3 和 Jupyter Notebook
  20. Jmeter:使用代理录制安卓手机APP性能测试脚本

热门文章

  1. 头脑王者服务器维护,头脑王者服务器
  2. WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较
  3. winbugs Blackbox trap #060问题解决方法
  4. 数组方法中会更改原数组,不会更改原数组(详细)
  5. C++高频面试问题总结
  6. 一年Java开发经验面试招行总结
  7. html5网页制作实训日志,网页制作实训日志X.doc
  8. 微信公众号发布消息不消耗群发次数怎么实现
  9. 数据库系统实验4:SQL——SELECT查询操作
  10. mysql字段是问号_Mysql数据库中文字段显示问号怎么解决?