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、架构设计等,在线随时刷题!

特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注

文章有帮助的话,点在看,转发吧!