使用freemarker和itext把html转pdf
1.把html转pdf,首先必须要解决中文显示问题,CSS样式问题以及可能的JS问题,先上例子,自己去体会。
2.先去下载simsun.ttc字体;
2.demo.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF8"/>
- <title>Title</title>
- <style>
- .color {
- color: green;
- }
- .pos {
- position: absolute;
- left: 200px;
- top: 5px;
- width: 200px;
- fontsize: 10px;
- }
- </style>
- </head>
- <body style="font-family: SimSun">
- <img src="logo.png" width="600px" />
- <div class="color pos">
- hello,${name};
- </div>
- </body>
- </html>
3.java实现转换代码
- package com.ra.truck.createpdf;
- import com.itextpdf.text.pdf.BaseFont;
- import com.lowagie.text.*;
- import com.lowagie.text.Font;
- import com.lowagie.text.Rectangle;
- import com.lowagie.text.pdf.PdfWriter;
- import freemarker.template.Configuration;
- import freemarker.template.Template;
- import org.xhtmlrenderer.pdf.ITextFontResolver;
- import org.xhtmlrenderer.pdf.ITextRenderer;
- import java.awt.*;
- import java.io.*;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * @Auther: lanhao
- * @Date: 2018/8/7 11:46
- * @Description:
- */
- public class JavaToPdfHtmlFreeMarkerFS {
- private static final String DEST ="../HelloWorld_CN_HTML_FREEMARKER_FS_index.pdf";
- private static final String HTML = "demo.html";
- private static final String FONT = "simsun.ttc";private static final String LOGO_PATH ="file:/"+PathUtil.getCurrentPath()+"/"+"demo448"+".png";
- private static Configuration freemarkerCfg=null;
- static {
- freemarkerCfg =new Configuration();
- //freemarker的模板目录
- try {
- freemarkerCfg.setDirectoryForTemplateLoading(new File(PathUtil.getCurrentPath()));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args){
- String os=System.getProperty("os.name");
- System.out.println(os);
- Map<String,Object> data = new HashMap<>();
- data.put("name","lan浩");
- String content =freeMarkerRender(data,HTML);
- createPdf(content,DEST);
- }
- /**
- * freemarker渲染html
- */
- public static String freeMarkerRender(Map<String, Object> data,String htmlTmp) {
- Writer out = new StringWriter();
- try {
- // 获取模板,并设置编码方式
- Template template = freemarkerCfg.getTemplate(htmlTmp);
- template.setEncoding("UTF8");
- // 合并数据模型与模板
- template.process(data, out); //将合并后的数据和模板写入到流中,这里使用的字符流
- out.flush();
- return out.toString();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- out.close();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- return null;
- }
- private static void createPdf(String content,String dest) {
- try {
- ITextRenderer render = new ITextRenderer();
- //解决中文不显式问题
- ITextFontResolver fontResolver = render.getFontResolver();
- fontResolver.addFont(FONT,BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
- // 解析html生成pdf
- render.setDocumentFromString(content);
- //解决图片相对路径的问题
- render.getSharedContext().setBaseURL(LOGO_PATH);
- render.layout();
- render.createPDF(new FileOutputStream(dest));
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
注:引用的文件全部放在项目的resource根目录下
使用freemarker和itext把html转pdf的更多相关文章
- iText框架(生成pdf文档)
1.创建一个itext的简单示例 a.导包(pom.xml文件) <dependencies> <dependency> <groupId>com.lowagie& ...
- 用itext合并多个pdf文件【转】【补】
java代码 package c; import java.io.FileOutputStream; import java.io.IOException; import java.util.Arra ...
- Java使用IText(VM模版)导出PDF
Java使用IText(VM模版)导出PDF: public String createPDF(ProjectManageBase projectManageBase) { Map map = new ...
- wkhtmltopdf+itext实现html生成pdf文件的打印下载(适用于linux及windows)
目中遇到个根据html转Java的功能,在java中我们itext可以快速的实现pdf打印下载的功能,在itext中我们一般有以下三中方式实现 配置pdf模板,通过Adobe Acrobat 来设置域 ...
- 【转】Java通过IText导出word和pdf
原帖地址:http://blog.csdn.net/zwx19921215/article/details/34439851 最近做的项目中需要用到把Highcharts图表导出word和pdf的功能 ...
- 利用itext将html转为pdf
亲测代码没有问题,需要注意细节已经标注:需要jar包:iText-2.0.8.jar:core-renderer-R8.jar: core-renderer-R8.jar下载地址:http://cen ...
- itext转html为pdf遇到的问题
记录一下使用itext将html文件转为pdf文件遇到的一些问题 1.中文不显示 原因:itext默认不支持中文 解决方法:引入中文字体 需要注意的是在java代码中设置好中文字体后,还需要在html ...
- Java使用IText(VM模版)导出PDF,IText导出word(二)
===============action=========================== //退款导出word public void exportWordTk() throws IOE ...
- 在spring boot 中使用itext和itextrender生成pdf文件
转载请注明出处 https://www.cnblogs.com/majianming/p/9539376.html 项目中需要对订单生成pdf文件,在第一版本其实已经有了比较满意的pdf文档,但是还是 ...
随机推荐
- 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)
一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...
- 嵌入式开发之zynqMp ---Zynq UltraScale+ MPSoC 图像编码板zcu102
1.1 xilinx zynqMp 架构 1.1.1 16nm 级别工艺 Zynq UltraScale+ MPSoC架构 Xilinx新一代Zynq针对控制.图像和网络应用推出了差异化的产品系,这 ...
- Datagrip连接SQLServer Connecting DataGrip to MS SQL Server
Connecting DataGrip to MS SQL Server Posted on June 21, 2016 by Maksim Sobolevskiy Some specific nee ...
- 【中间件安全】WebSphere安全加固规范
1. 适用情况 适用于使用WebSphere进行部署的Web网站. 2. 技能要求 熟悉WebSphere安装部署,熟悉WebSphere常见漏洞利用方式,并能针对站点使用WebSphere进行安全加 ...
- Elasticsearch Java API的基本使用
说明 在明确了ES的基本概念和使用方法后,我们来学习如何使用ES的Java API. 本文假设你已经对ES的基本概念已经有了一个比较全面的认识. 客户端 你可以用Java客户端做很多事情: 执行标准的 ...
- JS 详解对象的继承
在学习这篇博文前,请先移步我的另外一篇博文:JS 一张图理解prototype.proto和constructor的关系,先弄清楚“原型链”,这样对于理解继承会非常有效. 注意:博文中提到的“属性”, ...
- 【消灭代办】第5周 - null拷贝,input自适应,进度条加载,颜色随机值
2018.12.10 代办一:javascript中js怎么拷贝null的值 null属于简单类型的数值,直接进行拷贝即可: 2018.12.11 代办二:怎么让input自适应宽度? 这样是写下代办 ...
- Ubuntu系统安装nginx
1.首先查看linux系统 cat /proc/version Linux version 4.9.59-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (cr ...
- hibernate09--连接查询
创建实体类 package cn.bdqn.bean; import java.util.ArrayList; import java.util.Date; import java.util.List ...
- 为 git设置代理
普通设置 git config --global http.proxy 'socks5://127.0.0.1:1080'git config --global https.proxy 'socks5 ...