硬核!Java 实现数据动态插入,生成 PDF,2024新鲜出炉阿里巴巴面试真题

这篇博客详细介绍了如何使用Java实现数据动态插入到PDF模板中,通过Adobe Acrobat DC配置数据源,然后提供代码示例展示如何读取PDF表单、设置字体、填充数据并导出。此外,还提到了Java实现Excel生成和数据插入的相关内容。

3)这时需要用到一个叫:Adobe Acrobat DC的软件(可以白嫖7天_),具体操作如下:

用Adobe Acrobat DC打开我们刚才改过名字的PDF文件,点击右下角的“更多工具”按钮

到下面这个页面再点击“准备表单”按钮

4)接下来就需要详细的配置你的数据源了

数据源即:你代码中实体类中对应的数据(注意字段一定要一一对应),配置完毕就可以保存进行下面的代码编写工作了。

2、代码的编写(假定我们实体类什么的都已经编写完成、数据通过前端传入获取、模板位置在E盘根目录下名字为:车辆维修审批单.pdf)
导入jar包:

com.itextpdf

itextpdf

5.5.13

实现生成PDF、数据插入、导出

@RegisterToSMP(serviceDisplay = “预览页面PDF下载”)

@RequestMapping(value = “/DM/gwclwxsq/qygl/exportPDF$m=query.service”,method =RequestMethod.POST)

public String exportPdf(@RequestBody GwclwxsqBean gwclwxsqBean , HttpServletResponse response) throws UnsupportedEncodingException {

// 1.指定解析器

System.setProperty(“javax.xml.parsers.DocumentBuilderFactory”,

“com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl”);

String filename=“车辆维修审批单.pdf”;

String path=“e:/”;

response.setContentType(“application/pdf”);

response.setHeader(“Content-Disposition”, “attachment;fileName=”

+ URLEncoder.encode(filename, “UTF-8”));

OutputStream os = null;

PdfStamper ps = null;

PdfReader reader = null;

try {

os = response.getOutputStream();

// 2 读入pdf表单

reader = new PdfReader(path+ “/”+filename);

// 3 根据表单生成一个新的pdf

ps = new PdfStamper(reader, os);

// 4 获取pdf表单

AcroFields form = ps.getAcroFields();

// 5给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示

BaseFont bf = BaseFont.createFont(“C:/WINDOWS/Fonts/SIMSUN.TTC,1”,

BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

form.addSubstitutionFont(bf);

// 6查询数据================================================

Map<String, String> data = new HashMap<String, String>();

data.put(“commitTime”, gwclwxsqBean.getCommitTime());

data.put(“driver”, gwclwxsqBean.getDriver());

data.put(“carId”, gwclwxsqBean.getCarId());

data.put(“carType”, gwclwxsqBean.getCarType());

data.put(“repairAddress”, gwclwxsqBean.getRepairAddress());

data.put(“repairCost”,gwclwxsqBean.getRepairCost());

data.put(“project”, gwclwxsqBean.getProject());

data.put(“fwbzzxfzrYj”, gwclwxsqBean.getFwbzzxfzrYj());

data.put(“fgldspYj”, gwclwxsqBean.getFgldspYj());

data.put(“remarks”, gwclwxsqBean.getRemarks());

// 7遍历data 给pdf表单表格赋值

for (String key : data.keySet()) {

form.setField(key,data.get(key).toString());

}

ps.setFormFlattening(true);

log.info(“PDF导出成功****”);

} catch (Exception e) {          log.error(“PDF导出失败****”);

e.printStackTrace();

} finally {

try {

ps.close();

reader.close();

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

return null;

}

3、测试

二、Java实现Excel生成和数据插入、导出

这个比较简单,直接上代码(假定你的实体类、查询什么的都已经写好)注意:实体类一个是你自己的数据实体类还有一个是你导出时表格中对应的实体类

我们以一个真实的公司业务来举个例子(一个统计疫情登记人员信息的Excel导出功能)。

另外,利用注解 + 反射优雅的实现通用 Excel 导入导出(通用版附源码):

利用注解 + 反射优雅的实现通用 Excel 导入导出(通用版附源码)

https://blog.yoodb.com/yoodb/article/detail/1734

1)表头对应实体类ExportYqfkdj.java:

import lombok.Data;

/**

* description:

* @author: zhouhong

* @version: V1.0.0

* @date: 2021年1月14日 下午3:05:54

*/

@Data

public class ExportYqfkdj {

/**

* 序号

*/

private Integer xuhao;

/**

* 姓名

*/

private String xingming;

/**

* 证件号码

*/

private String zjhm;

/**

* 联系电话

*/

private String lxdh;

/**

* 申请人工作单位

*/

private String sqrGzdw;

/**

* 是否接触过疑似病例

*/

private String sfjcgysbl;

/**

* 当前是否与居家隔离人员同住

*/

private String sfyjjglrytz;

/**

* 当前状态

*/

private String dqzt;

/**

* 当前健康状态

*/

private String dqjkzt;

/**

* 当前体温

*/

private String dqtw;

/**

* 当前所在地址

*/

private String dqszdz;

/**

* 当前居住地址

*/

private String dqjzdz;

/**

* 提交时间

* */

private String tjsj;

}

2)Service层

/**

* 导出

* @param yqfkdjBean

* @author zhouhong

* @return

* @throws Exception

*/

@Transactional(rollbackFor = { Exception.class })

public DataResult exporYqfkdj(YqfkdjBean yqfkdjBean) throws Exception {

DataResult result = new DataResult();

List list = new ArrayList();

try {

/* 查询导出信息 */

result = getYqfkMhCXQuery(yqfkdjBean);

SimpleDateFormat df = new SimpleDateFormat(“yyyyMMddhhmmssSSS”);

for (int i = 0; i < result.getTotalcount(); i++) {

ExportYqfkdj dmKhfwdcDtjlZxDto = new ExportYqfkdj();

dmKhfwdcDtjlZxDto = ObjectUtil.parsePojo(result.getResults().get(i), ExportYqfkdj.class);

dmKhfwdcDtjlZxDto.setXuhao(i + 1);

list.add(dmKhfwdcDtjlZxDto);

}

String filepath = “D:/疫情防控信息” + df.format(new Date()) + “.xlsx”;

if (System.getProperty(YqfkdjUtils.Wjdz.NAME).toLowerCase().startsWith(YqfkdjUtils.Wjdz.LI)

|| System.getProperty(YqfkdjUtils.Wjdz.NAME).toLowerCase().startsWith(YqfkdjUtils.Wjdz.LIN)) {

filepath = “/home/Tomcat/temp/” + df.format(new Date()) + “.xlsx”;

}

EasyExcel.write(filepath, ExportYqfkdj.class).head(head()).sheet().doWrite(list);

result.setResults(list);

result.setSuccess(true);

result.setMsg(filepath);

} catch (Exception e) {

result.setSuccess(false);

result.setMsg(YqfkdjUtils.Cytx.DCSB);

e.printStackTrace();

throw e;

}

return result;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

N-1712039821476)]

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

[外链图片转存中…(img-j1Jpb9q6-1712039821476)]

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

[外链图片转存中…(img-WooFxB4K-1712039821476)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值