WPS创建或打开的文件有可能解析有误
student.xslx文件如下:

student.docx文件内容如下:

程序运行结果如下:

源码示例:


pom.xml

<dependencies><!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version></dependency><!-- https://mvnrepository.com/artifact/net.sf.barcode4j/barcode4j --><dependency><groupId>net.sf.barcode4j</groupId><artifactId>barcode4j</artifactId><version>2.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.avalon.framework/avalon-framework-api --><dependency><groupId>org.apache.avalon.framework</groupId><artifactId>avalon-framework-api</artifactId><version>4.3.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.14</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.3</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.14</version></dependency><dependency><groupId>org.apache.xmlbeans</groupId><artifactId>xmlbeans</artifactId><version>2.6.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-examples</artifactId><version>3.14</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>org.apache.poi.xwpf.converter.pdf</artifactId><version>1.0.6</version></dependency>
</dependencies>
package com.torey.docxtext2;import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;import java.io.*;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @ClassName:DocxHelp* @Description:* @author: Torey*/
public class DocxHelp {public static Pattern pattern = Pattern.compile("\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);/**** @param templatePath 文件模板路径* @param newFilePath 生成新的文件路径* @param params 文字类key-value* @param picParams 图片类key-value*/public static void writeDocx(String newFilePath,String templatePath,Map<String,Object> params,Map<String,String> picParams) throws Exception {XWPFDocument docx = openDocx(templatePath);List<IBodyElement> ibes = docx.getBodyElements();for (IBodyElement ibe : ibes) {if (ibe.getElementType()==BodyElementType.TABLE) {replaceTable(ibe,params,docx);}if(ibe.getElementType()==BodyElementType.PARAGRAPH){XWPFParagraph para = (XWPFParagraph) ibe;List<XWPFRun> res = para.getRuns();String code=picParams.get("{barcode}");System.out.println("code="+code);for (XWPFRun re : res) {String runtext = re.text();Matcher matcher = matcher(runtext);if (matcher.find()) {for (String pickey : picParams.keySet()) {if (matcher.group().equals(pickey)) {// re.setText(picParams.get(pickey) + "", 0);// null会出错,空字符串行// re.setText(picParams.get(pickey)+"",0);re.setText("",0);//  System.out.println(re.getText(0));// re.setText("s");int format = 1;if (format != 0) {if (code.endsWith(".emf"))format = XWPFDocument.PICTURE_TYPE_EMF;else if (code.endsWith(".wmf"))format = XWPFDocument.PICTURE_TYPE_WMF;else if (code.endsWith(".pict"))format = XWPFDocument.PICTURE_TYPE_PICT;else if (code.endsWith(".jpeg") || code.endsWith(".jpg"))format = XWPFDocument.PICTURE_TYPE_JPEG;else if (code.endsWith(".png"))format = XWPFDocument.PICTURE_TYPE_PNG;else if (code.endsWith(".dib"))format = XWPFDocument.PICTURE_TYPE_DIB;else if (code.endsWith(".gif"))format = XWPFDocument.PICTURE_TYPE_GIF;else if (code.endsWith(".tiff"))format = XWPFDocument.PICTURE_TYPE_TIFF;else if (code.endsWith(".eps"))format = XWPFDocument.PICTURE_TYPE_EPS;else if (code.endsWith(".bmp"))format = XWPFDocument.PICTURE_TYPE_BMP;else if (code.endsWith(".wpg"))format = XWPFDocument.PICTURE_TYPE_WPG;elseSystem.err.println("Unsupported picture: " + code+ ". Expected emf|wmf|pict|jpeg|png|dib|gif|tiff|eps|bmp|wpg");re.addPicture(new FileInputStream(code), format, "",Units.toEMU(200), Units.toEMU(50));}}}}}}}writeDocx(docx,new FileOutputStream(newFilePath));//输出}public static XWPFDocument openDocx(String url) {InputStream in = null;try {in = new FileInputStream(url);XWPFDocument doc = new XWPFDocument(in);return doc;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (in != null) {try {in.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}return null;}public static void writeDocx(XWPFDocument outDoc, OutputStream out) {try {outDoc.write(out);out.flush();if (out != null) {try {out.close();} catch (IOException e) {e.printStackTrace();}}} catch (IOException e) {e.printStackTrace();}}private static Matcher matcher(String str) {Matcher matcher = pattern.matcher(str);return matcher;}/*** 替换表格内占位符* @param para 表格对象* @param params 文字替换map* @param indoc* @throws Exception*/public static void replaceTable(IBodyElement para ,Map<String, Object> params, XWPFDocument indoc)throws Exception {Matcher matcher;XWPFTable table;List<XWPFTableRow> rows;List<XWPFTableCell> cells;table = (XWPFTable) para;rows = table.getRows();for (XWPFTableRow row : rows) {cells = row.getTableCells();int cellsize = cells.size();int cellcount = 0;for(cellcount = 0; cellcount<cellsize;cellcount++){XWPFTableCell cell = cells.get(cellcount);String runtext = "";List<XWPFParagraph> ps = cell.getParagraphs();String text = cell.getText();System.out.println("text="+text);matcher = matcher(runtext);for (XWPFParagraph p : ps) {for(XWPFRun run : p.getRuns()){runtext = run.text();System.out.println("====111");System.out.println(runtext);matcher = matcher(runtext);if (matcher.find()) {if (params != null) {for (String pickey : params.keySet()) {if (matcher.group().equals(pickey)) {run.setText(params.get(pickey)+"",0);}}}}}}}}}
}
package com.torey.docxtext2;/*** @ClassName:Student* @Description:* @author: Torey*/
public class Student {private String name;private String set;private String barcode;private String barcodeImgPath;public String getBarcodeImgPath() {return barcodeImgPath;}public void setBarcodeImgPath(String barcodeImgPath) {this.barcodeImgPath = barcodeImgPath;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSet() {return set;}public void setSet(String set) {this.set = set;}public String getBarcode() {return barcode;}public void setBarcode(String barcode) {this.barcode = barcode;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", set='" + set + '\'' +", barcode='" + barcode + '\'' +'}';}
}
package com.torey.docxtext2;import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;
import fr.opensagres.xdocreport.itext.extension.font.IFontProvider;
import fr.opensagres.xdocreport.itext.extension.font.ITextFontRegistry;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;/*** @ClassName:Start* @Description:* @author: Torey*/
public class MainSta {/*** 读取student.xslx里面的数据,* 根据预设的student.docx模板,* 生成学生具体的信息文档,* 最后转化为pdf文档。* @param args*/public static void main(String[] args){try {startRun();System.out.println("程序运行完成");} catch (Exception e) {e.printStackTrace();}}public static void startRun() throws Exception{String url = Thread.currentThread().getContextClassLoader().getResource("docx").getPath();
//            //student.xlsx中的内容转换为StudentString studentXlsxPath=url+"/student.xlsx";Student student = getStudent(studentXlsxPath);String genUrl=url+"/barcode.png";//生成二维码文件generateFile(student.getBarcode(),genUrl);//将二维码文件路径赋值给studentstudent.setBarcodeImgPath(genUrl);String templateUrl=url+"/student.docx";String newFileUrl=url+"/newStudent.docx";//将数据写到newStudent.docx文件中setStudentDocx(student,newFileUrl,templateUrl );String newPdfUrl=url+"/student.pdf";//将newStudent.docx文件转换为student.pdfdocxToPdf(newFileUrl,newPdfUrl);System.out.println("student.pdf文件地址:"+newPdfUrl);System.out.println("newStudent.docx文件地址:"+newFileUrl);}/*** 将docx文件转换为pdf文件* @param docxPath docx目标文件* @param newPdfPath pdf新文件地址* @throws Exception*/private static void docxToPdf(String docxPath,String newPdfPath ) throws Exception {XWPFDocument doc = new XWPFDocument(new FileInputStream(docxPath));PdfOptions options = PdfOptions.create();options.fontProvider(new IFontProvider() {//设置中文字体@Overridepublic Font getFont(String familyName, String encoding, float size, int style, Color color) {try{BaseFont bfChinese = BaseFont.createFont("C:\\Windows\\Fonts\\STSONG.TTF",BaseFont.IDENTITY_H,BaseFont.EMBEDDED);Font fontChinese = new Font(bfChinese, size, style, color);if (null!= familyName) {fontChinese.setFamily(familyName);return fontChinese;}}catch (Exception ex){ex.printStackTrace();return ITextFontRegistry.getRegistry().getFont(familyName,encoding,size,style,color);}return null;}});PdfConverter.getInstance().convert(doc,new FileOutputStream(newPdfPath),options);
}/*** 将student.xlsx中的内容转换为Student* @param path 文件路径* @return* @throws Exception*/private static Student getStudent(String path) throws Exception {Student student = new Student();InputStream ExcelFileToRead = new FileInputStream(path);XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead);XSSFSheet sheet = wb.getSheetAt(0);XSSFRow row1 = sheet.getRow(0);student.setName(row1.getCell(0).getStringCellValue());student.setSet(row1.getCell(1).getStringCellValue());student.setBarcode(row1.getCell(2).getStringCellValue());System.out.println("studen的值为:"+student);return student;}/*** 将数据写入到student.docx文件中* @param student 数据* @param newFileUrl 产生的新文件地址* @param templateUrl 模板文件地址* @throws Exception*/private static void setStudentDocx(Student student, String newFileUrl, String templateUrl) throws Exception {Map<String,Object> params=new HashMap<>();params.put("{name}",student.getName());params.put("{sex}",student.getSet());Map<String,String> picParams=new HashMap<>();picParams.put("{barcode}",student.getBarcodeImgPath());DocxHelp.writeDocx(newFileUrl,templateUrl,params,picParams);}/*** 生成二维码文件* @param msg* @param path*/private static void generateFile(String msg, String path) {File file = new File(path);try{//Code39 EAN13 都是一维条形码的不同标注Code39Bean code39Bean = new Code39Bean();//EAN13Bean ean13Bean = new EAN13Bean();//dpi精度 像素精度final int dpi=150;//module宽度//bean.setModuleWidth(0.2)final double width=UnitConv.in2mm(2.0f/dpi);code39Bean.setWideFactor(3);code39Bean.setModuleWidth(width);code39Bean.doQuietZone(false);String formar="image/png";//输出到流BitmapCanvasProvider canvasProvider = new BitmapCanvasProvider(new FileOutputStream(file), formar, dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);//生成条形码code39Bean.generateBarcode(canvasProvider,msg);//结束绘制canvasProvider.finish();}catch (Exception ex){ex.printStackTrace();}}}

java读取xslx内容,内容转换成docx和pdf,包括图片相关推荐

  1. python 替换word内容 doc转换成docx

    python 替换word内容 doc转换成docx doc转换成docx 北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河 ...

  2. java读取json文件内容_java读取json文件内容详解

    之前给大家介绍了一下java读取txt文件内容,下面要给大家介绍的就是java读取json文件内容,一起来了解一下吧. 1.java读取json文件 下面是具体的思路: 首先是获取文件-获取文件内容- ...

  3. idea Java 读取rtf文件内容,解决中文乱码的问题。

    百度找了很多java读取rtf文件内容的案例,都不行,不是读不出来就是乱码,要么就是多了很多编码异常的字符. 最后成功解决,得益于大佬的源码贡献,如下链接: 转载于:http://blog.sina. ...

  4. Java读取文本文件的内容

    Java读取文本文件的内容 文本内容如下: 下面展示一些 内联代码片. package my; import java.io.File; import java.io.FileInputStream; ...

  5. java 读取 xml 配置文件内容

    java  读取 xml 配置文件内容 public static void main(String[] args) throws Exception {//创建读取的核心类SAXReader sax ...

  6. java 读取文件文本内容_Java读取文本文件

    java 读取文件文本内容 There are many ways to read a text file in java. Let's look at java read text file dif ...

  7. Java读取文件的内容到String字符串中

    Java读取文件的内容到String字符串中 将文件读取到String有很多方法可以在Java中将文件读取到String.在本教程中学习以下几种方法. 使用BufferedReader将文件读取到字符 ...

  8. Java实现从Excel文件转换成XML文件(一)

    实现思路:         直接从Excel文件装换成XML文件是可以实现的,这里我采用一个中间装换,也就是先实现excel文件内容放入实现设计好的access数据库文件中,然后再从access中读取 ...

  9. java xml转html_如何在Java中将XML文档转换成HTML文档.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp网页设计/UI 如何在Java中将XML文档转换成HTML文档. ...

最新文章

  1. 面了大厂的 Python 岗后,炸了!
  2. 蚌埠粮食经济技师学院计算机,安徽粮食经济技师学院2020年有哪些专业
  3. C++实践参考——OOP版电子词典
  4. Sklearn参数详解—聚类算法
  5. java long类型转string_JavaSE的学习——数据类型
  6. python通过tkinter和json界面库实现考研知识点统计
  7. linux数组操作 增删改查,linuxea:go数组与数组增删改查(19)
  8. fopen php 乱码,如何解决php fgets读取文件乱码的问题
  9. linux-vim设置环境
  10. singleton pattern的推荐实现
  11. 线性代数(1)—— 行列式
  12. 操作json进行分组再组
  13. 一公司C#编程规范v2.0(转)
  14. 数据库设计讲解和案例分析 | mysql 入门
  15. django ajax传递数组
  16. 【Alpha】阶段第二次Scrum Meeting
  17. admin_day2
  18. 屯特大学计算机排名,荷兰院校介绍篇——屯特大学(特文特大学)
  19. html+css+jquery,html+css+js(+JQuery)制作扑克牌图片切换效果
  20. VMware Workstation(虚拟机)v10.0.1 简体中文破解版

热门文章

  1. U盘插到电脑上无反应怎么办?
  2. linux用c进程并行,Linux下的C / C ++使用多线程
  3. 澎湃微PT32F003/F005
  4. 遇人不淑之逗比程序员
  5. 解决BMap is not defined?
  6. 老A:什么是抖音弹幕互动游戏,玩法以及如何参与
  7. 极化码:基于单项式码的极化码部分序(Partial Order)表示
  8. 机器学习中的方差与偏差
  9. 人力资源年终数据分析报告怎么写?这份攻略拿走不谢
  10. win2012故障转移mysql集群_Windows 2012 系统搭建高可用故障转移集群