文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JAVA如何生成pdf文件

2023-07-04 14:00

关注

这篇“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 {        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 {        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<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文件”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯