最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成itextpdf實現(xiàn)根據(jù)模板動態(tài)生成PDF

 更新時間:2024年03月28日 10:32:46   作者:二進(jìn)制詩人  
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何集成itextpdf實現(xiàn)根據(jù)模板動態(tài)生成PDF,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下

需求說明

根據(jù)合同模板,將動態(tài)的合同標(biāo)簽,合同方以及合同簽約時間等動態(tài)的生成PDF,供用戶下載打印。

前期準(zhǔn)備

安裝 Adobe Acrobat DC

鏈接:https://pan.baidu.com/s/1T8wTCkxn0YcHjxZQ8G6WeQ

提取碼:j6b9

Spring Boot 集成

添加依賴

        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.9</version>
            <scope>compile</scope>
        </dependency>
        <!--中文問題解決-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>       

構(gòu)建工具類

public class PDFUtils {
    private static final Logger log = LoggerFactory.getLogger(PDFUtils.class);

    /**
     * 根據(jù)pdf模板輸出流
     * @param templateFileName 模板文件名
     * @param resultMap 包含文件字段名和值的map
     * @return 生成的文件字節(jié)流
     */
    public static ByteArrayOutputStream createPdfStream(String templateFileName,
                                                        Map<String, String> resultMap){

        ByteArrayOutputStream ba = new ByteArrayOutputStream();
        PdfStamper stamp =null;
        PdfReader reader = null;
        try {


            reader = new PdfReader(templateFileName);
            stamp = new PdfStamper(reader, ba);

            //使用字體
            BaseFont bf = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            /* 獲取模版中的字段 */
            AcroFields form = stamp.getAcroFields();

            //填充表單
            if (resultMap != null) {
                for (Map.Entry<String, String> entry : resultMap.entrySet()) {

                    form.setFieldProperty(entry.getKey(), "textfont", bf, null);
                    form.setField(entry.getKey(), entry.getValue()!=null?entry.getValue():"");
                }
            }
            //不能編輯
            stamp.setFormFlattening(true);

        } catch (IOException e) {
            log.error("文檔構(gòu)建I/O異常",e);
        } catch (DocumentException e) {
            log.error("文檔構(gòu)建異常",e);
        }
        finally {
            if(stamp!=null){
                try {
                    stamp.close();
                } catch (DocumentException e) {
                    log.error("流關(guān)閉錯誤",e);
                } catch (IOException e) {
                    log.error("流關(guān)閉錯誤",e);
                }
            }
            if(reader!=null){
                reader.close();
            }
        }
        return ba;
    }
}

構(gòu)建MultipartFile

方便之后上傳OSS返回url

public UploadFileModel createUrl(String filePath, ByteArrayOutputStream byteArrayOutputStream) throws URISyntaxException {
        try{

            byte[] pdfBytes = byteArrayOutputStream.toByteArray();
            MultipartFile multipartFile = new MockMultipartFile(
                    "file",
                    filePath,
                    "application/pdf",
                    pdfBytes
            );

            return uploadFileUtil.upload(multipartFile);
        } catch (Exception e) {
            log.error("創(chuàng)建Url時出錯:" + e.getMessage());
        }
        return null;
    }

編輯PDF模板

Java代碼設(shè)置對應(yīng)form的key-value

pdf模板放在springboot 項目目錄resources/static 目錄下

 public String createContract(CreateContractRequest request) {
        HashMap<String, String> map = new HashMap<>();
        map.put("companyName",request.getCompanyName());
        map.put("phone",request.getPhone());
        UploadFileModel url = null;
        ByteArrayOutputStream pdfStream = PDFUtils.createPdfStream(UserApplication.class.getResource("/").getPath() + "static/contract.pdf", map);
        try {
            url = createUrl("合同.pdf", pdfStream);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
        return url.getUrl();
    }

到此這篇關(guān)于SpringBoot集成itextpdf實現(xiàn)根據(jù)模板動態(tài)生成PDF的文章就介紹到這了,更多相關(guān)SpringBoot itextpdf生成PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java圖形化界面實現(xiàn)簡單混合運算計算器的示例代碼

    java圖形化界面實現(xiàn)簡單混合運算計算器的示例代碼

    這篇文章主要介紹了java圖形化界面實現(xiàn)簡單混合運算計算器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Springboot各版本與Java JDK的對應(yīng)版本梳理

    Springboot各版本與Java JDK的對應(yīng)版本梳理

    本文介紹了SpringBoot各版本支持的JavaJDK版本,SpringBoot2.5.x支持JDK8、11、17,2.4.x支持JDK8、11、15等,商用JDK如OracleJDK、IBMJDK、AzulZuluEnterprise等包含額外功能,適用于企業(yè)級應(yīng)用
    2026-04-04
  • Java中wait與sleep的區(qū)別講解(wait有參及無參區(qū)別)

    Java中wait與sleep的區(qū)別講解(wait有參及無參區(qū)別)

    這篇文章主要介紹了Java中wait與sleep的講解(wait有參及無參區(qū)別),通過代碼介紹了wait()?與wait(?long?timeout?)?區(qū)別,wait(0)?與?sleep(0)區(qū)別,需要的朋友可以參考下
    2022-04-04
  • Java調(diào)用計算機(jī)攝像頭拍照實現(xiàn)過程解析

    Java調(diào)用計算機(jī)攝像頭拍照實現(xiàn)過程解析

    這篇文章主要介紹了Java調(diào)用計算機(jī)攝像頭拍照實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實現(xiàn)方式

    SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實現(xiàn)方式

    SpringBoot支持多種配置文件位置和格式,其中application.properties和application.yml是默認(rèn)加載的文件,配置文件可以根據(jù)環(huán)境通過spring.profiles.active屬性進(jìn)行區(qū)分,命令行參數(shù)具有最高優(yōu)先級,可覆蓋其他所有配置
    2024-09-09
  • SpringAop @Around執(zhí)行兩次的原因及解決

    SpringAop @Around執(zhí)行兩次的原因及解決

    這篇文章主要介紹了SpringAop @Around執(zhí)行兩次的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java 阻塞隊列詳解及簡單使用

    Java 阻塞隊列詳解及簡單使用

    這篇文章主要介紹了Java 阻塞隊列詳解及簡單使用的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java 8 動態(tài)類型語言Lambda表達(dá)式實現(xiàn)原理解析

    Java 8 動態(tài)類型語言Lambda表達(dá)式實現(xiàn)原理解析

    Java 8支持動態(tài)語言,看到了很酷的Lambda表達(dá)式,對一直以靜態(tài)類型語言自居的Java,讓人看到了Java虛擬機(jī)可以支持動態(tài)語言的目標(biāo)。接下來通過本文給大家介紹Java 8 動態(tài)類型語言Lambda表達(dá)式實現(xiàn)原理分析,需要的朋友可以參考下
    2017-02-02
  • Java調(diào)用opencv實現(xiàn)圖片矯正功能

    Java調(diào)用opencv實現(xiàn)圖片矯正功能

    這篇文章主要為大家詳細(xì)介紹了Java如何調(diào)用opencv實現(xiàn)圖片矯正功能,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • Java實現(xiàn)24點小游戲

    Java實現(xiàn)24點小游戲

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)24點小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

和平区| 黑河市| 华蓥市| 黄梅县| 凉城县| 苍山县| 孝感市| 宁远县| 醴陵市| 九江县| 瓦房店市| 宜阳县| 永丰县| 信宜市| 佛山市| 青海省| 柏乡县| 九台市| 区。| 广昌县| 甘泉县| 菏泽市| 米脂县| 博爱县| 盐边县| 科尔| 林甸县| 会昌县| 衡阳市| 阿坝县| 车险| 安图县| 张北县| 通榆县| 汶上县| 五大连池市| 桐庐县| 临漳县| 雷波县| 太原市| 金门县|