欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)根據(jù)pdf模板生成文件并插入文字,選項(xiàng),簽名和公章

 更新時(shí)間:2024年11月03日 13:36:13   作者:小七蒙恩  
這篇文章主要為大家詳細(xì)介紹了java如何實(shí)現(xiàn)根據(jù)pdf模板生成文件并插入文字,選項(xiàng),簽名和公章,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

成果

使用word,制作一個(gè)模板

使用pdf編輯器,生成pdf模板

我這里使用福昕pdf編輯器,其他pdf編輯器(如Adobe Acrobat)也可以用但是大多要錢。

1.從做好的word導(dǎo)入來(lái)創(chuàng)建pdf

2.插入文字域

右鍵文字域,填入字段與屬性

3.插入選項(xiàng)域

導(dǎo)出值不要忘記填寫,與代碼對(duì)應(yīng)上。

導(dǎo)出值不要忘記填寫,與代碼對(duì)應(yīng)上。

4.插入圖片域,預(yù)插入簽名和公章

注意:外觀這里的邊框和填充都選無(wú)色,否則圖片會(huì)被填充色蓋??;

注意:選項(xiàng)這里我們選擇只顯示標(biāo)簽。

5.模板做好了,我們進(jìn)行保存

java 實(shí)現(xiàn)

引入依賴

		<!-- pdf -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.5.13.2</version>
		</dependency>
		<!--中文字體-->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>
		<!--html xml 轉(zhuǎn)為pdf-->
		<dependency>
			<groupId>com.itextpdf.tool</groupId>
			<artifactId>xmlworker</artifactId>
			<version>5.5.11</version>
		</dependency>

代碼實(shí)現(xiàn)

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) {
        //測(cè)試執(zhí)行
        FillTemplate(
                "C:\\test\\申請(qǐng)表.pdf",
                "C:\\test\\新申請(qǐng)表.pdf",
                "杜小七",
                "遼寧大連",
                "跑步",
                "Yes",
                "Yes",
                "Yes",
                "C:\\test\\電子簽名.png",
                "C:\\test\\公章.png"
        );
    }

    /**
     * 根據(jù)模板生成pdf
     * @param sourcesPath 原文件路徑
     * @param targetPath  生成文件路徑
     * @param name     參數(shù)
     * @param address  參數(shù)
     * @param hobby    參數(shù)
     * @param select_1  選項(xiàng)
     * @param select_2  選項(xiàng)
     * @param select_3  選項(xiàng)
     * @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
            ){

        //設(shè)置參數(shù)
        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);
        // 填充創(chuàng)建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));
            // 取出報(bào)表模板中的所有字段
            AcroFields form = stamp.getAcroFields();
            System.out.println(form.getFields().keySet());


            //設(shè)置宋體
            BaseFont song =BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            if (jsonObject != null) {
                for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
                    String key = entry.getKey();
                    String value = entry.getValue().toString();
                    //保存選項(xiàng)
                    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);
            // 獲取操作的頁(yè)面
            PdfContentByte under = stamper.getOverContent(pageNo);
            // 根據(jù)域的大小縮放圖片
            image.scaleToFit(signRect.getWidth(), signRect.getHeight());
            // 添加圖片
            image.setAbsolutePosition(x, y);
            under.addImage(image);
        }catch (Exception e){
            return false;
        }
        return true;
    }
}

執(zhí)行測(cè)試

以上就是java實(shí)現(xiàn)根據(jù)pdf模板生成文件并插入文字,選項(xiàng),簽名和公章的詳細(xì)內(nèi)容,更多關(guān)于java pdf模板生成文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java如何獲取字符串單詞個(gè)數(shù)

    Java如何獲取字符串單詞個(gè)數(shù)

    這篇文章主要介紹了Java如何獲取字符串單詞個(gè)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 200行Java代碼如何實(shí)現(xiàn)依賴注入框架詳解

    200行Java代碼如何實(shí)現(xiàn)依賴注入框架詳解

    依賴注入對(duì)大家來(lái)說(shuō)應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于利用200行Java代碼如何實(shí)現(xiàn)依賴注入框架的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • springboot CompletableFuture并行計(jì)算及使用方法

    springboot CompletableFuture并行計(jì)算及使用方法

    CompletableFuture基于 Future 和 CompletionStage 接口,利用線程池、回調(diào)函數(shù)、異常處理、組合操作等機(jī)制,提供了強(qiáng)大而靈活的異步編程功能,這篇文章主要介紹了springboot CompletableFuture并行計(jì)算及使用方法,需要的朋友可以參考下
    2024-05-05
  • SpringBoot實(shí)現(xiàn)阿里云短信接口對(duì)接的示例代碼

    SpringBoot實(shí)現(xiàn)阿里云短信接口對(duì)接的示例代碼

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)阿里云短信接口對(duì)接的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證

    SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證

    本文主要介紹了SpringBoot使用Sa-Token實(shí)現(xiàn)權(quán)限認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java復(fù)合語(yǔ)句的使用方法詳解

    Java復(fù)合語(yǔ)句的使用方法詳解

    這篇文章主要介紹了Java編程中復(fù)合語(yǔ)句,結(jié)合相關(guān)的具體實(shí)例介紹了其用法,需要的朋友可以參考下
    2017-09-09
  • 詳解javaweb中jstl如何循環(huán)List中的Map數(shù)據(jù)

    詳解javaweb中jstl如何循環(huán)List中的Map數(shù)據(jù)

    這篇文章主要介紹了詳解javaweb中jstl如何循環(huán)List中的Map數(shù)據(jù)的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • SpringQuartz集群支持JDBC存儲(chǔ)與分布式執(zhí)行的最佳實(shí)踐

    SpringQuartz集群支持JDBC存儲(chǔ)與分布式執(zhí)行的最佳實(shí)踐

    SpringQuartz集群通過(guò)JDBC存儲(chǔ)和分布式執(zhí)行機(jī)制,有效解決了單點(diǎn)故障和擴(kuò)展性問(wèn)題,本文將詳細(xì)介紹SpringQuartz集群支持的實(shí)現(xiàn)原理、配置方法和最佳實(shí)踐,助力開發(fā)者構(gòu)建穩(wěn)定可靠的分布式調(diào)度系統(tǒng),感興趣的朋友一起看看吧
    2025-04-04
  • Java運(yùn)行Python腳本的幾種方式小結(jié)

    Java運(yùn)行Python腳本的幾種方式小結(jié)

    在跨語(yǔ)言編程中,有時(shí)候我們需要在 Java 應(yīng)用程序中執(zhí)行 Python 腳本,這可能是為了利用 Python 豐富的庫(kù)生態(tài)系統(tǒng),或者是為了在已有 Java 系統(tǒng)中集成一些 Python 特有的功能,本文給大家介紹了實(shí)現(xiàn)這幾種目標(biāo)的方法,需要的朋友可以參考下
    2024-12-12
  • java通過(guò)DelayQueue實(shí)現(xiàn)延時(shí)任務(wù)

    java通過(guò)DelayQueue實(shí)現(xiàn)延時(shí)任務(wù)

    本文主要介紹了java通過(guò)DelayQueue實(shí)現(xiàn)延時(shí)任務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論