`
zqb666kkk
  • 浏览: 733416 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

请您先登录,才能继续操作

freemarker+ITextRenderer 生成html转pdf

阅读更多
网上已经有比较多的例子 写这个 但是很多都是简单的 demo,而且有很多隐藏的问题
或者是零散的 对某些问题的解决方案

本人再次写一个完整的demo  无bug 可用

我是在spring mvc中应用的

String basePath = request.getSession().getServletContext()
				.getRealPath("/");
		/* 创建配置 */
		Configuration cfg = new Configuration();
		/* 指定模板存放的路径 */
		cfg.setDirectoryForTemplateLoading(new File(basePath + "/WEB-INF/ftl"));
		cfg.setDefaultEncoding("UTF-8");
		// cfg.setObjectWrapper(new DefaultObjectWrapper());

		/* 从上面指定的模板目录中加载对应的模板文件 */
		// contractTemplate
		Template temp = cfg.getTemplate("contractTemplate.ftl");

		/* 创建数据模型 */
		Map root = new HashMap();
		root.put("user", "Big Joe");
		// Map latest = new HashMap();
		// root.put("latestProduct", latest);
		// latest.put("name", "green mouse");

		/* 将生成的内容写入hello .html中 */

		String file1 = basePath + "html/contractTemplate.html";
		File file = new File(file1);
		if (!file.exists())
			file.createNewFile();
		// Writer out = new FileWriter(file);
		Writer out = new BufferedWriter(new OutputStreamWriter(
				new FileOutputStream(file), "utf-8"));
		// Writer out = new OutputStreamWriter(System.out);
		temp.process(root, out);
		out.flush();

		String url = new File(file1).toURI().toURL().toString();
		String outputFile = basePath + "html/contractTemplate.pdf";
		OutputStream os = new FileOutputStream(outputFile);

		ITextRenderer renderer = new ITextRenderer();
		// PDFEncryption pdfEncryption = new
		// PDFEncryption(null,null,PdfWriter.ALLOW_PRINTING);
		// renderer.setPDFEncryption(pdfEncryption); //只有打印权限的
		renderer.setDocument(url);

		// 解决中文问题
		ITextFontResolver fontResolver = renderer.getFontResolver();
		try {
			fontResolver.addFont(basePath + "/ui/fonts/simsun.ttc",
					BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		renderer.layout();
		try {
			renderer.createPDF(os);
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("转换成功!");
		os.close();



模版中在table 加样式 style="margin-top: 60px;table-layout:fixed; word-break:break-strict;"

这是为了避免 在pdf中显示不全 
我的 功能是 通过生成的html生成合同 pdf

最终效果图:


模版文件 就是 ftl文件 你 用html怎么显示就可以生成什么样的pdf

里面可以包含样式  图片


尽量用table布局 这样不会出现 显示到pdf显示不全的 问题


另外 附上freemark、模板文件头部关键 代码主要是处理 中文问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
  <head>
    <title>要生成的合同文件</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style mce_bogus="1" type="text/css">
body {font-family: SimSun; background:none;margin-left: auto;margin-right: auto;}
body,html,div,p{ font-size:14px; margin:0px; padding:0px;}


</style>
.....
<div class="table_block">
<table width="680" border="0" cellspacing="1" cellpadding="1" bgcolor="#CCCCCC"  style="table-layout:fixed; word-break:break-strict;">
....




另外有关中文换行 问题 有网友问我 后 我发现 解决途径必须需要修改源码 修改后源码包我已经传到 了 附件上core-renderer-R8-0604.jar
有什么疑问可以加我 qq :6637152交流


另外很多网友问我要项目demo 和相关文件
我这个功能是集成在公司项目里的 原先不方便放出来,现在我已经单独抽出一个开源项目供网友参考代码,https://git.oschina.net/zqb/usk.git

网友可以把项目导入eclipse或者myeclipse搜索上面提到的相关代码找到相关功能
  • 大小: 74 KB
5
8
分享到:
评论
28 楼 xiaoliuf4565 2018-12-10  
用过之后中文可以换行,但是现在编程了英文和数字不换行了
脑壳痛
27 楼 A741841403 2018-07-02  
Error:(275, 29) java: 无法访问com.lowagie.text.DocumentException
  找不到com.lowagie.text.DocumentException的类文件
这样引入<dependency>
            <groupId>org.xhtmlrenderer</groupId>
            <artifactId>core-renderer</artifactId>
            <version>R8</version>
            <scope>system</scope>
            <systemPath>${basedir}/src/main/resources/lib/core-renderer-R8-0604-.jar</systemPath>
        </dependency>和itext,总是会报上面的错误,这是什么原因
26 楼 A741841403 2018-07-02  
楼主你好,我想问下,如何在maven中使用你的jar包呢
25 楼 A741841403 2018-07-01  
楼主,您知道 @page WordSection1
{size:595.3pt 841.9pt;
margin:36.0pt 36.0pt 36.0pt 36.0pt;
layout-grid:15.6pt;}
div.WordSection1
{page:WordSection1;}的定义了这么个page后,生成的pdf,第一页是空白的,为什么吗?我把这段去掉,第一页就不是空白了。
24 楼 qq250782929 2017-08-08  
楼主 我想问下我是那个中文不换行的问题,你上面那个jar包 我下载下来是乱码 是怎么回事呢
23 楼 jiajiao_5413 2017-04-27  
大神在不,我这边生成完html转成PDF时中文直接没有了:
不知道啥问题,请楼主帮忙解答下 :
HTML:
<html> 
  <head> 
  <title>${title}</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  <style> 
     table {  
             width:100%;border:green dotted ;border-width:2 0 0 2  
     }  

代码:
try {
/* 创建配 置 */
Configuration cfg = new Configuration();
/* 指定模板存放的路径 */

cfg.setDirectoryForTemplateLoading(new File(
"D:/work/workspace_yuanshi/xclis/src/makePDF/"));
cfg.setDefaultEncoding("UTF-8");
// cfg.setObjectWrapper(new DefaultObjectWrapper());

/* 从上面指定的模板目录中加载对应的模板文件 */
// contractTemplate
Template temp = cfg.getTemplate("11.ftl");

/* 创建数据模型 */
Map<String, Object> root = new HashMap<String, Object>();
List<String[]> userList = new ArrayList<String[]>();
String[] a = { "AAAA", "14", "1" };
userList.add(a);
// 增加变量名称
root.put("message", "hello world");
root.put("name", "java小强");
root.put("title", "hello");
root.put("userList", userList);
/* 将生成的内容写入hello .html中 */

String file1 = "D:\\test.html";
File file = new File(file1);
if (!file.exists())
file.createNewFile();
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file), "utf-8"));
temp.process(root, out);
out.flush();

String url = new File(file1).toURI().toURL().toString();
String outputFile = "D:\\sample.pdf";
OutputStream os = new FileOutputStream(outputFile);

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);

// 解决中文问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(
"D:/work/workspace_yuanshi/xclis/src/makePDF/simsun.ttc",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

renderer.layout();
renderer.createPDF(os);
System.out.println("转换成功!");
os.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
22 楼 技术xx 2017-03-21  
做了好多个模板后客户要求加页码,这种方式导出pdf网上没找到解决方案啊 ,大神可否解决
21 楼 medlying 2016-05-16  
那生成的html文件里面有js的话js会执行吗?我生成的html文件的js代码在转pdf的时候都在报错
20 楼 chensz0001 2015-12-15  
您好,怎么设置PSF为A4横向
19 楼 zqb666kkk 2014-11-12  
meiwf520 写道
这哪里慢,楼主说下谢谢

???
18 楼 meiwf520 2014-11-11  
这哪里慢,楼主说下谢谢
17 楼 zqb666kkk 2014-10-20  
a329242533 写道
想问一下 问什么freemaker不识别标签呢  有数据标签的地方总会报  元素内容必须由格式正确的字符数据或标记组成。
普通标签会直接显示 &{XXXX}   我这是哪里出问题了 请大神指教一下    

freemarker有专门的 读取后台值的标签 你不要用其他jstl的标签
16 楼 a329242533 2014-10-19  
想问一下 问什么freemaker不识别标签呢  有数据标签的地方总会报  元素内容必须由格式正确的字符数据或标记组成。
普通标签会直接显示 &{XXXX}   我这是哪里出问题了 请大神指教一下    
15 楼 zqb666kkk 2014-09-28  
IT_JV 写道
楼主,这里都使用到哪些jar包,可否贴出来,谢谢!

还有一个freemark的jar包你网上搜下很多的
14 楼 IT_JV 2014-09-27  
楼主,这里都使用到哪些jar包,可否贴出来,谢谢!
13 楼 animo_itey 2014-08-08  
  合同已经搞定 ...
其中还遇到一个头疼的问题 ,就是 一行过长的话 ,不会自动换行~
不过解决了!
12 楼 zqb666kkk 2014-07-25  
animo_itey 写道
 
合同又来了...
能提供个demo么...
光是代码 还有很多封装阿 .

我抽空 整理写一个  到时候会放到博客里
11 楼 animo_itey 2014-07-25  
 
合同又来了...
能提供个demo么...
光是代码 还有很多封装阿 .
10 楼 zqb666kkk 2014-06-12  
SilentlyWalking 写道
你好,为什么我生成的pdf都不显示中文呢?
就是这样,中文好像都被抛弃了:

8. Free sale

(1) (2)
(3) Free sale18:00

(4) Free saleFree sale

页面上是否中了中文字体 设置
是否后台做了中文字体设置
9 楼 SilentlyWalking 2014-06-12  
你好,为什么我生成的pdf都不显示中文呢?
就是这样,中文好像都被抛弃了:

8. Free sale

(1) (2)
(3) Free sale18:00

(4) Free saleFree sale

相关推荐

    freemarker+html生成pdf.zip

    `Freemarker`是一个强大的模板引擎,通常用于动态生成HTML、XML等文本格式,而将`Freemarker`与HTML模板结合生成PDF,可以充分利用HTML的易编辑性和富文本特性,为用户提供高质量的文档输出。下面我们将深入探讨如何...

    SpringBoot集成Freemarker+FlyingSaucer实现pdf在线预览.pdf

    然后,创建一个 PdfUtils 工具类,用于生成PDF文档。 四、PDF工具类编写 PdfUtils工具类主要用于生成PDF文档。该类中包含了生成HTML模板、将HTML模板转换为PDF文档的方法。方法上有完整的注释,思路是利用模板引擎...

    基于itext7+freemarker模板导出pdf

    在IT领域,生成PDF文档是常见的需求,尤其在报表、合同和文档自动化中。本教程将探讨如何使用iText7和FreeMarker库结合,来创建一个基于模板的PDF生成流程,确保中文支持和图片的正常显示。 首先,iText7是一款强大...

    PDF生产方案 maven + freemarker + flyingSoaser 实现 附代码

    标题中的“PDF生产方案 maven + freemarker + flyingSaucer 实现”是指使用Java技术栈,结合Maven构建工具、FreeMarker模板引擎以及FlyingSaucer库来生成PDF文档的一种方法。这个方案通常用于将HTML内容转换为高质量...

    Java中使用 FreeMarker 生成pdf盖章合同文件

    FreeMarker是一个强大的模板引擎,常用于生成HTML、XML等动态内容,但也可以结合其他库来生成PDF。本篇文章将深入探讨如何在Java中使用FreeMarker生成带有盖章的PDF合同文件。 首先,让我们了解FreeMarker的基本...

    core-renderer.jar

    解决FreeMarker+ITextRenderer 生成pdf,单元格不换行问题,亲测有效。

    html转pdf,ITEXT转HTML为PDF解决中文不换行问题

    1、core-renderer.jar该jar包修改过中文不换行问题 ... String css = ""; css +="&lt;style&gt;"; css +="table{"; css +=" border-collapse: collapse;... System.out.println("html:"+html); return html; }

    Flying-Saucer使用HTML或者FTL(Freemarker模板)生成PDF

    Flying-Saucer通过html生成pdf。。。项目中已经附带了jar包,放到项目中就可以运行了。亲测了,解决了中文不显示或者样式的问题,感觉蛮实用的。网上找了很久和下载其他资源用了好多积分,如果有需要的就下载吧!!...

    springboot使用itext生成pdf并保存到本地

    在IT行业中,生成PDF文档是常见的需求,尤其是在Web应用程序中,比如Spring Boot项目。本教程将探讨如何利用iText库在Spring Boot应用中从HTML页面生成PDF,并进行一系列的定制化操作,如添加页眉、页码、水印、目录...

    flying-saucer-pdf-9.0.9转pdf相关包

    在IT行业中,转换HTML到PDF是一项常见的需求,用于创建电子报告、手册和其他可打印文档。`flying-saucer`是一个流行的...同时,结合FreeMarker和iText,可以实现更复杂的功能,如动态生成PDF报告,满足各种定制化需求。

    flying-saucer-core+flying-saucer-pdf-itext5.jar

    在使用Freemarker模板引擎生成PDF时,我们通常会遇到中文字符无法正常换行的困扰。这是因为Freemarker生成的是HTML,而直接将HTML转换为PDF时,可能会出现字符编码或排版上的问题。flying-saucer-core与flying-...

    flying-saucer生成pdf

    然后,创建一个服务类,使用Java ITextRenderer进行转换操作,接收HTML字符串或文件,生成PDF并返回或保存到服务器。 5. **Freemarker模板引擎**: Freemarker是一个强大的模板引擎,常用于动态生成HTML。结合...

    iText+Flying Saucer生成pdf文档所需要的jar包

    在IT行业中,生成PDF文档是常见的需求,尤其在报表、发票、合同等场景下。...在实际项目中,根据具体需求,还可以结合其他工具或库,比如使用Thymeleaf或FreeMarker模板引擎生成HTML,进一步提升生成PDF的效率和质量。

    Java实现Html转PDF

    在Java开发中,将HTML...总结来说,Java实现HTML转PDF的关键在于正确配置FreeMarker和iTextPDF,以及处理HTML中的图片资源。通过上述步骤,你能够创建一个功能完善的工具类,用于将HTML模板转换为具有图片的PDF文档。

    java生成pdf文件Demo

    在Java编程环境中,生成PDF文件是一项常见的需求,特别是在报表、文档或者发票的自动化处理中。本Demo主要展示了如何通过生成HTML然后将其转换为PDF的方式来实现这一功能。下面将详细讲解这个过程涉及的关键知识点。...

    java生成pdf需要的包(支持中文,表格换行亲测)

    这里提到的“java生成pdf需要的包(支持中文,表格换行亲测)”是一个解决方案,它整合了几个关键的库:FreeMarker、Flying Saucer和iText。 1. **FreeMarker**: FreeMarker是一个基于模板的Java模板引擎,常用于...

    java生成各种pdf模板

    在Java开发中,生成PDF模板是一项常见的需求,尤其在企业级应用中,如报表、发票、合同等都需要高质量的PDF文档。PDF(Portable Document Format)是一种标准格式,它能够跨平台保持一致的显示效果,因此在数据输出...

    java动态导出PDF文件(含jar包)

    综上所述,这个项目展示了如何结合Java、flying-saucer、iText和Freemarker等工具,动态地从HTML生成PDF文件,同时处理了图片的大小和定位问题,以满足多语言和美观的需求。在实际开发中,这种技术可以广泛应用于...

    flyingsaucer-R8.zip

    《使用Flyingsaucer与iText生成PDF:技术解析与实践指南》 在现代的IT行业中,HTML到PDF的转换已经成为一种常见的需求,无论是为了打印、归档还是提供离线阅读,这种转换都能极大地提高效率。Flyingsaucer和iText...

Global site tag (gtag.js) - Google Analytics