这篇“JAVA如何生成pdf文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JAVA如何生成pdf文件”文章吧。
一、简介
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> <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文件”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。