工程地址: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. 【洛谷 2330】繁忙的都市
  2. jQuery年月日(生日)选择器
  3. 前端学习(2679):安装mysql_front
  4. 那个悲伤的朋友,去了一趟菜场竟然活过来了
  5. ruby打印_Ruby程序打印一个数字的乘法表
  6. 目标检测网络中的 bottom-up 和 top-down理解
  7. 计算机网络 chapter3数据链路层
  8. YouSwap将于5月10日15:00新增CATE流动性挖矿
  9. SAP License:玩转SAP中的凭证冲销
  10. bcb quickrep保存为 图片_不容错过的SCI图片处理和组图方法
  11. Ubuntu下载Linux源码 编译Linux源码
  12. net-java-php-python-新华眼镜ERP系统计算机毕业设计程序
  13. 重庆大学计算机学院专硕分析,重庆大学电子信息(专硕)专业考研难度分析-专业排名-难度大小...
  14. Altium Designer20 PCB规则设置
  15. layim之绑定未读消息数量
  16. C++小游戏(2):打飞机
  17. 我想知道怎么提升csgo枪法
  18. 键盘上F1~F12各个功能键的作用
  19. 贴片电容的X5R X7R是什么意思
  20. 云客网:企业网站SEO优化方案实例

热门文章

  1. 基于宜搭的《T恤尺码收集》应用搭建最佳实践
  2. 输入一个大于3的整数n,判定它是否为素数。例题5.9
  3. 利用幂级数性质解级数求和问题
  4. 同时删除多个 PDF 文档前几页
  5. 现在开始学程序还不晚吧
  6. QT 选择文件,另存为文件组件
  7. o在计算机进制中,计算机里的0和1,二进制
  8. 九、Unity编辑器开发之Gizmos
  9. POJ3889Fractal Streets 递归+ 坐标变换
  10. B 站上有哪些很好的学习资源?