Java 读取 Excel 文件内容, 根据 pdf 模板动态生成对应的 pdf 文件
1. 下载 adobe acrobat
https://www.cr173.com/soft/11135.html
2. 编辑 pdf 模板
- 1用 acrobat 打开 pdf
- 编辑模板
- 添加表单元素保存模板 “moban-1.pdf”
3. Java 动态生成 pdf
- pom 依赖
<!-- pdf 依赖--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!--POI解析--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency>
- 实体类对象(属性命名方式,请大家不要模仿(不规范))
import lombok.Data;
import lombok.experimental.Accessors;@SuppressWarnings("all")
@Data
@Accessors(chain = true)
public class ObjSoure {//0private String name;//1private String num;//2private String bisaiName;//3private String desc;//4private String shengfen;//5private String kaodian;//6private String jibie;//7private String zubie;//8private String diyichengji;//9private String diyibaifenbi;//10private String dierchengji;//11private String dierbaifenbi;//12private String zongchenji;//13private String quanguobaifenbi;//14private String shengbaifenbi;//15private String gongbuchengji;
}
- 读取 excel 文件中的数据(下图为 Excel 数据样例,方法中有好多没有做 校验,后期再补充)
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.ResourceUtils;import java.io.*;
import java.util.ArrayList;
import java.util.List;/*** @Description 读取Excel文件* @Author yanghanwei* @Mail yanghanwei@geotmt.com* @Date 2020/1/5 20:58* @Version v1**/
public class ReadExcel {XSSFWorkbook wb = null;public void init (){try {//excel模板路径File cfgFile = ResourceUtils.getFile("E:/总分-4发布成绩.xlsx");InputStream in = new FileInputStream(cfgFile);//读取excel模板wb = new XSSFWorkbook(in);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 读取 Excel 中的数据* @return*/public List<ObjSoure> read() {List<ObjSoure> list = new ArrayList<ObjSoure>();init ();//获取sheet表格,及读取单元格内容XSSFSheet sheet = null;try{sheet = wb.getSheetAt(0);int lastRowNum = sheet.getLastRowNum();System.out.println(lastRowNum);for (int i = 1; i<= lastRowNum; i++) {ObjSoure objSoure = new ObjSoure();// Excel 中一共有16 列,暂时写死了for (int j = 0; j< 16; j++) {String cellValue ="";if(null != sheet.getRow(i).getCell(j)){sheet.getRow(i).getCell(j).setCellType(CellType.STRING);cellValue = sheet.getRow(i).getCell(j).getStringCellValue();linkObj(objSoure, j, cellValue);}}System.out.println("================ 第"+i+"行完成==============");System.out.println(objSoure);list.add(objSoure);}}catch (Exception e){e.printStackTrace();}return list;}/*** 根据 excel 文件的顺序给对象赋值* @param obj* @param j* @param val*/private void linkObj(ObjSoure obj, int j, String val) {switch (j) {case 0:obj.setName(val);break;case 1:obj.setNum(val);break;case 2:obj.setBisaiName(val);break;case 3:obj.setDesc(val);break;case 4:obj.setShengfen(val);break;case 5:obj.setKaodian(val);break;case 6:obj.setJibie(val);break;case 7:obj.setZubie(val);break;case 8:obj.setDiyichengji(val);break;case 9:obj.setDiyibaifenbi(tranNum(val));break;case 10:obj.setDierchengji(val);break;case 11:obj.setDierbaifenbi(tranNum(val));break;case 12:obj.setZongchenji(val);break;case 13:obj.setQuanguobaifenbi(tranNum(val));break;case 14:obj.setShengbaifenbi(tranNum(val));break;case 15:obj.setGongbuchengji(val);break;default:break;}}/*** 百分数的特殊处理* @param val* @return*/private String tranNum(String val){Double b = Double.valueOf(val)* 100;return b.intValue() + "%";}public static void main(String[] args) {new ReadExcel().read();}
}
- 基于模板,动态的填充 pdf 模板并生成 新的pdf 文件
public static void fillTemplate() {List<ObjSoure> read = new ReadExcel().read();
// List<ObjSoure> read = new ArrayList<>();
// read.add(new ObjSoure().setName("张三").setZongchenji("800").setQuanguobaifenbi("20%").setShengbaifenbi("30%").setShengfen("shanxi"));System.out.println(read);// 模板路径String templatePath = "E:/moban-1.pdf";if(null != read && !read.isEmpty()){for(int a = 0; a < read.size(); a++){ObjSoure obj = read.get(a);// 生成的新文件路径String newPDFPath = "E:/学生成绩/" + obj.getName().trim() + "-"+ obj.getShengfen().trim() + ".pdf";PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {out = new FileOutputStream(newPDFPath);// 输出流reader = new PdfReader(templatePath);// 读取pdf模板bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();String[] str = { obj.getName(),obj.getNum(), obj.getBisaiName(), obj.getDesc(), obj.getShengfen(), obj.getKaodian(), obj.getJibie(), obj.getZubie(),obj.getDiyichengji(), obj.getDiyibaifenbi(), obj.getDierchengji(), obj.getDierbaifenbi(),obj.getZongchenji(), obj.getQuanguobaifenbi(),obj.getShengbaifenbi(), obj.getGongbuchengji()};int i = 0;java.util.Iterator<String> it = form.getFields().keySet().iterator();while (it.hasNext()) {String name = it.next().toString();System.out.println(name + "============" + str[Integer.parseInt(name)]);form.setField(name, str[Integer.parseInt(name)]);}stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为truestamper.close();Document doc = new Document();PdfCopy copy = new PdfCopy(doc, out);doc.open();PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);copy.addPage(importPage);doc.close();} catch (IOException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();}}}}
- 启动 main(测试)
public static void main(String[] args) {fillTemplate();}
- 生成的 PDF 文件展示
Java 读取 Excel 文件内容, 根据 pdf 模板动态生成对应的 pdf 文件相关推荐
- 【Java进阶营】java 读取 excel 表格内容
一.添加依赖 org.apache.poi poi 3.8 org.apache.poi poi-ooxml 3.8 二.工具类 根据文件后缀判断 2003 || 2007 || 2010 格式. i ...
- java 读取 Excel表格内容
读写Excel,这么重要且普遍的问题,伟大的apache,早就为我们封装好了jar包,供我们使用了.无需我们再造轮子. 第一步:添加jar包依赖 <!--读取 excel 的所需jar包--&g ...
- demo1—java读取Excel文件到数据库、java制作准考证
文章目录 读取Excel数据到数据库 由模板制作准考证(word文档处理) 总结 读取Excel数据到数据库 项目用到的jar包: <!-- https://mvnrepository.com/ ...
- java读取excel数据_Java读取Excel内容(转)
借助于apathe的poi.jar,由于上传文件不支持.jar所以请下载后将文件改为.jar,在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可 本例使用java来读取exc ...
- java 读取 excel poi_java poi怎么获取excel单元格的内容?
展开全部 package edu.sjtu.erplab.poi; import java.io.InputStream&ch=ww.xqy.chain" target=" ...
- Java读取Excel内容
借助于apathe的poi.jar,由于上传文件不支持.jar所以请下载后将文件改为.jar,在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可 本例使用java来读取exc ...
- java读取excel某个单元格的值_java poi怎么获取excel单元格的内容
展开全部 package edu.sjtu.erplab.poi; import java.io.InputStream&ch=ww.xqy.chain" target=" ...
- java读取excel数据的方法是_java怎么读取excel文件里的数据
展开全部 下面是一个简单的读取例子,如果报"java.io.IOException: Invalid header signature; read 4503608217567241, exp ...
- java读取Excel内容添加到list集合里面去
java读取Excel内容添加到list集合里面去 package com.changan.contract.newsign.utils;import com.changan.contract.xqh ...
最新文章
- php think命令用不了,自定义 PHP think 命令无法在命令类文件里面使用 Db 类
- 单片机 多机通讯c语言,单片机多机串口通信.doc
- Coursera公开课笔记: 斯坦福大学机器学习第七课“正则化(Regularization)”
- linux 内核日志等级,Linux系统中日志级别详情
- [NOTE] SQL与sqlmap
- Retina时代的前端视觉优化
- .NET内存管理五大基础知识
- php计算器等号没反应,为什么按等号没有反应?
- 011235813用java写出来_【JAVA】关于在运行后控制台显示的一些功能问题,请吧友帮我解答...
- 【概率论】3-4:二维分布(Bivariate Distribution)
- C# DateTime的ToString()方法的使用
- 计算机学报应用研究,组推荐系统及其应用研究-计算机学报.PDF
- 绿色全要素生产率数据(2004-2017年)
- python爬虫 提取豆瓣Top250电影信息
- Shiro自定义Ream
- 计算机地图制图的优势,计算机地图制图
- 公司福利直接影响员工的身心健康
- Android开发 ConstraintLayout布局的详解
- 计算机一级vlookup函数的使用方法,Vlookup函数的使用方法 Vlookup函数的操作实例...
- 华南理工大学电气考研经验贴
热门文章
- 【PS-1】关于图层
- Vivo/Oppo手机安装app时自动输入密码以及点击安装
- apply函数的使用
- 基于Vue+SpringCloudAlibaba微服务电商项目实战-构建会员服务-011:基于Vue快速整合会员服务接口
- xshell连接服务器输入密码提示“ssh服务器拒绝了密码,请再试一次”的解决办法
- appinventor 2热成像 热力图组件定制extension插件,安卓APP开发
- 马尔代夫满月岛游记 邂逅海洋天堂
- python中numpy的dtype
- lvs,dhcp,dns,lnmp,lamp,zabbix,nagios,hadoop,openstack,rsync等工作原理
- 开通微信公众号:talk8谈吧