一个少妇满足三个老头在线观看,锕锕锕锕锕锕锕好痛视频,亚洲人成网站在线播放2019

<center id="pt2l2"></center>
<tr id="pt2l2"></tr>
  • <big id="pt2l2"></big>

        JAVA生成pdf文件的實操教程

        一、簡介

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

        二、實操

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

        Edit Configurations

        三、原理解析

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

        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>
            <h1 class="title">標題</h1>
            <h4 class="title">副標題</h4>
            <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);
        
            }
        }

        3.參考

        總結?

        到此這篇關于JAVA生成pdf文件的文章就介紹到這了,更多相關JAVA生成pdf文件內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

        若文章對您有幫助,幫忙點個贊!

        0
        0
        發布時間 2022-11-14 06:07:43
        0 條回復(回復會通過微信通知作者)
        點擊加載更多評論
        登錄 后再進行評論
        (微信掃碼即可登錄,無需注冊)
        一个少妇满足三个老头在线观看,锕锕锕锕锕锕锕好痛视频,亚洲人成网站在线播放2019