Java精选面试题 (微信小程序): 5000+ 道面试题和选择题, 真实面经 , 简历模版 ,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!成果制作模版 1.使用word,制作一个模板2.使用pdf编辑器,生成pdf模板。
我这里使用福昕pdf编辑器,其他pdf编辑器(如Adobe Acrobat)也可以用但是大多要钱。
1)从做好的word导入来创建pdf
2)插入文字域
右键文字域,填入字段与属性
3)插入选项域
导出值不要忘记填写,与代码对应上。
4)插入图片域,预插入签名和公章
推荐划水摸鱼地址: https://www.yoodb.com/slack-off/home.html
注意:外观这里的边框和填充都选无色,否则图片会被填充色盖住;
注意:选项这里我们选择只显示标签。5)模板做好了,我们进行保存。Java实现
1.引入依赖
com.itextpdf groupId>
itextpdf artifactId>
5.5.13.2 version> dependency>
com.itextpdf groupId>
itext-asian artifactId>
5.2.0 version> dependency>
com.itextpdf.tool groupId>
xmlworker artifactId>
5.5.11 version> dependency>
2.代码实现package com.tencent.qcloud.roomservice.webrtc.utils;
import com.alibaba.fastjson.JSONObject;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
/** * @author dume * @ClassName PdfTest * @description: pdf模板操作 * @date 2024年07月26日 * @version: 1.0 */
public class PdfTest {
public static void main(String[] args) {
//测试执行
FillTemplate(
"C:\\test\\申请表.pdf",
"C:\\test\\新申请表.pdf",
"杜小七",
"辽宁大连",
"跑步",
"Yes",
"Yes",
"Yes",
"C:\\test\\电子签名.png",
"C:\\test\\公章.png"
);
}
/** * 根据模板生成pdf * @param sourcesPath 原文件路径 * @param targetPath 生成文件路径 * @param name 参数 * @param address 参数 * @param hobby 参数 * @param select_1 选项 * @param select_2 选项 * @param select_3 选项 * @param signPath 签名图片路径 * @param gongzhangPath 公章图片路径 */
public static void FillTemplate( String sourcesPath, String targetPath, String name, String address, String hobby, String select_1, String select_2, String select_3, String signPath, String gongzhangPath ){
//设置参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("name",name);
jsonObject.put("address",address);
jsonObject.put("hobby",hobby);
jsonObject.put("select_1",select_1);
jsonObject.put("select_2",select_2);
jsonObject.put("select_3",select_3);
// 填充创建pdf
PdfReader reader = null;
PdfStamper stamp = null;
ByteArrayOutputStream baos =null;
try {
reader = new PdfReader( sourcesPath);
File deskFile = new File(targetPath);
stamp = new PdfStamper(reader, new FileOutputStream(deskFile));
// 取出报表模板中的所有字段
AcroFields form = stamp.getAcroFields();
System.out.println(form.getFields().keySet());
//设置宋体
BaseFont song =BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
if (jsonObject != null) {
for (Map.Entry
entry : jsonObject.entrySet()) { String key = entry.getKey(); String value = entry.getValue().toString(); //保存选项 if (key.startsWith( "select")) { form.setField(key, value, true); //保存文字 } else { form.setFieldProperty(key, "textfont", song, null); form.setField(key, value); } } } //插入签名 insertImage(form,stamp, "sign",signPath); //插入公章 insertImage(form,stamp, "gongzhang",gongzhangPath); //保存修改 stamp.setFormFlattening( true); } catch (Exception e){ e.printStackTrace(); } finally { if (stamp != null) { try{ stamp.close(); } catch (Exception e){ e.printStackTrace(); } } if (reader != null) { try{ reader.close(); } catch (Exception e){ e.printStackTrace(); } } if (baos != null) { try{ baos.close(); } catch (Exception e){ e.printStackTrace(); } } } } /** * pdf模板插入图片 * @param form * @param stamper * @param filedName * @param url * @return */ public static boolean insertImage(AcroFields form, PdfStamper stamper, String filedName, String url) { try { int pageNo = form.getFieldPositions(filedName).get( 0).page; Rectangle signRect = form.getFieldPositions(filedName).get( 0).position; float x = signRect.getLeft(); float y = signRect.getBottom(); Image image = Image.getInstance(url); // 获取操作的页面 PdfContentByte under = stamper.getOverContent(pageNo); // 根据域的大小缩放图片 image.scaleToFit(signRect.getWidth(), signRect.getHeight()); // 添加图片 image.setAbsolutePosition(x, y); under.addImage(image); } catch (Exception e){ return false; } return true; } }
3.执行测试作者:小七蒙恩 来源:https://blog.csdn.net/qq_38105536
公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!
最近有很多人问,有没有技术或摸鱼交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!在线摸鱼:https://www.yoodb.com/
Java精选面试题(微信小程序):3000+道面试题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题!
特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注。
文章有帮助的话,点在看,转发吧!
热门跟贴