中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA如何生成pdf文件

發布時間:2022-11-14 09:52:14 來源:億速云 閱讀:169 作者:iii 欄目:開發技術

這篇“JAVA如何生成pdf文件”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“JAVA如何生成pdf文件”文章吧。

    一、簡介

    PDF文件格式可以將文字、字型、格式、顏色及獨立于設備和分辨率的圖形圖像等封裝在一個文件中。

    二、實操

    生成pdf文件成功,但是文字對不上。當修改”GetHtmlContent“部分的編碼之后,再次執行生成PDF文件即可完成正確的實現。

    JAVA如何生成pdf文件

    Edit Configurations

    JAVA如何生成pdf文件

    三、原理解析

    從這幾點深入剖析和總結這個小項目:

    1.是什么?

    該項目實現了解析一個模板html文件,將其轉為pdf文件并輸出到相應的目錄中。

    1.1.關鍵技術

    freemarker,FreeMarker是模板引擎,一個Java類庫。
    itextpdf,iText是一種生成PDF報表的Java類庫,可以將Xml,Html文件轉化為PDF文件。
    類 XMLWorkerHelper,(用于解析 XHTML/CSS 或 XML 流到 PDF 的幫助器類)。

    2.怎么做?為什么?

    相關依賴

    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.13.2</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf.tool</groupId>
        <artifactId>xmlworker</artifactId>
        <version>5.5.13.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.28</version>
    </dependency>

    模板文件:generationpdf.html,所在目錄為src/main/resources/templates/generationpdf.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8"/>
        <title>Title</title>
        <style>
            body{font-family:SimSun;}
            .title{align-content: center;text-align: center;}
            .signature{float:right }
        </style>
    </head>
    <body>
    <div>
        <h2 class="title">標題</h2>
        <h5 class="title">副標題</h5>
        <span>當前時間: ${date_time} </span>
        <div class="signature">日期:${date}</div>
    </div>
    </body>
    </html>

    GetHtmlContent.java:獲取模板內容

    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import java.io.*;
    import java.net.URL;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.HashMap;
    import java.util.Map;
    
    public class GetHtmlContent {
        /**
         * 獲取模板內容
         * @param templateDirectory 模板文件夾
         * @param templateName      模板文件名
         * @param paramMap          模板參數
         * @return
         * @throws Exception
         */
        public static String getTemplateContent(String templateDirectory, String templateName, Map<String, Object> paramMap) throws Exception {
            Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);//不兼容配置
            try {
                configuration.setDirectoryForTemplateLoading(new File(templateDirectory));//加載模板
            } catch (Exception e) {
                System.out.println("-- exception --");
            }
    
            Writer out = new StringWriter();
            Template template = configuration.getTemplate(templateName,"UTF-8");//緩存
            template.process(paramMap, out);
            out.flush();
            out.close();
            return out.toString();
        }
        public static void main(String[] args) throws Exception {
            Map<String, Object> paramMap = new HashMap<>();
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            paramMap.put("date_time", dateTimeFormatter.format(LocalDateTime.now()));
            paramMap.put("date", dateTimeFormatter.format(LocalDateTime.now()).substring(0, 10));
            ClassLoader classLoader = GetHtmlContent.class.getClassLoader();
            URL resource = classLoader.getResource("templates");
            String templateDirectory  =resource.toURI().getPath();
    
            String templateContent = GetHtmlContent.getTemplateContent(templateDirectory, "generationpdf.html", paramMap);
            System.out.println(templateContent);
        }
    
    }

    生成pdf文件,將date_time和date存儲到HashMap中,然后將數據輸出到pdf中

    import com.itextpdf.text.Document;
    import com.itextpdf.text.pdf.PdfWriter;
    import com.itextpdf.tool.xml.XMLWorkerHelper;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.FileOutputStream;
    import java.nio.charset.Charset;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.HashMap;
    import java.util.Map;
    
    
    public class GeneratePDF {
        /**
         * HTML 轉 PDF
         * @param content html內容
         * @param outPath           輸出pdf路徑
         * @return 是否創建成功
         */
        public static boolean html2Pdf(String content, String outPath) {
            try {
                Document document = new Document(); //創建一個標準的A4紙文檔
                PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outPath));//書寫器與ducument文檔關聯
                document.open();//打開文檔
                XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                        new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"));
                document.close();//關閉文檔
            } catch (Exception e) {
                System.out.println("生成模板內容失敗"+e.fillInStackTrace());
                return false;
            }
            return true;
        }
        /**
         * HTML 轉 PDF
         * @param content html內容
         * @return PDF字節數組
         */
        public static byte[] html2Pdf(String content) {
            ByteArrayOutputStream outputStream = null;
            try {
                Document document = new Document();
                outputStream = new ByteArrayOutputStream();
                PdfWriter writer = PdfWriter.getInstance(document, outputStream);
                document.open();
                XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                        new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"));
                document.close();
            } catch (Exception e) {
                System.out.println("------生成pdf失敗-------");
            }
            return outputStream.toByteArray();
        }
        public static void main(String[] args) throws Exception {
            Map<String, Object> paramMap = new HashMap<>();
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            paramMap.put("date_time", dateTimeFormatter.format(LocalDateTime.now()));
            paramMap.put("date", dateTimeFormatter.format(LocalDateTime.now()).substring(0, 10));
            String outPath = "D:\\A.pdf";
            String templateDirectory = "src/main/resources/templates";
            String templateContent = GetHtmlContent.getTemplateContent(templateDirectory, "generationpdf.html", paramMap);
            GeneratePDF.html2Pdf(templateContent, outPath);
    
        }
    }

    以上就是關于“JAVA如何生成pdf文件”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    天津市| 九龙城区| 古田县| 浦县| 永安市| 芷江| 昌乐县| 陆良县| 双流县| 通江县| 烟台市| 应城市| 蒙自县| 彭阳县| 岑巩县| 孝昌县| 石阡县| 衡南县| 宣汉县| 清流县| 锦州市| 黄平县| 南木林县| 缙云县| 南和县| 上虞市| 东乡族自治县| 手游| 曲阜市| 合江县| 阜新市| 上林县| 夏河县| 资源县| 昭觉县| 乌兰县| 汾西县| 含山县| 三原县| 名山县| 金塔县|