栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA生成pdf文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA生成pdf文件

文章目录
  • 一、简介
  • 二、实操
  • 三、原理解析
    • 1.是什么?
      • 1.1.关键技术
    • 2.怎么做?为什么?
    • 3.参考

一、简介

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.怎么做?为什么?

相关依赖


    com.itextpdf
    itextpdf
    5.5.13.2


    com.itextpdf.tool
    xmlworker
    5.5.13.2


    org.springframework.boot
    spring-boot-starter-freemarker
    2.1.1.RELEASE


    org.freemarker
    freemarker
    2.3.28


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




    
    Title
    


标题

副标题

当前时间: ${date_time}
日期:${date}

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 {
    
    public static String getTemplateContent(String templateDirectory, String templateName, Map 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 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 {
    
    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;
    }
    
    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 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文件_xhga的博客-CSDN博客_java pdf
什么是 FreeMarker? - FreeMarker 中文官方参考手册 (foofun.cn)
iText官方教程_番薯(Koali)的博客-CSDN博客_itext官方文档
XMLWorkerHelper (root 5.5.9-SNAPSHOT API) (itextpdf.com)

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016661.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号