文档章节

java使用在线编辑器生成PDF

aaron81
 aaron81
发布于 2012/07/13 16:33
字数 341
阅读 757
收藏 5
    最近要做通过在线编辑器生成PDF文件的功能。在参考了网上的资料后,结合项目的实际需要做了些修改,现把做完的功能记录下来。需要的jar包: core-renderer.jar 和 iText-2.0.8.jar

java代码如下:

/**
	 * 使用在线编辑器生成PDF
	 * @param htmlCode  编辑器内容
	 * @param pdfPath	PDF文件保存路径
	 */

	public static void html2Pdf(String htmlCode, String pdfPath) {
		 try {
			 
			 String realPath = ServletActionContext.getRequest().getSession().
				getServletContext().getRealPath("");
			 String fontPath = realPath + "\\resource\\font\\simsun.ttc";
			 String projectName = realPath.substring(realPath.lastIndexOf("\\") + 1);
			 
			 /**
			  * 替换编辑器中上传图片的路径, 用于解决用户上传图片的相对路径问题     
			  * 替换前:src="/xxx/resource/manual/
			  * 替换后:src="xxx/resource/manual/
			  */
			 String oldChar = "/" + projectName + "/resource/manual/";
			 String newChar = projectName + "/resource/manual/";
			 htmlCode = htmlCode.replace(oldChar, newChar);
				
			 OutputStream os = new FileOutputStream(pdfPath);     
			 ITextRenderer renderer = new ITextRenderer();     
			 StringBuffer html = new StringBuffer();
			 // DOCTYPE 必需写否则类似于这样的字符( )解析会出现错误
			 html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
			 html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">")
				 .append("<head>")
				 .append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />")
				 .append("<style type=\"text/css\" >body {font-family: SimSun;}</style>")
				 .append("</head>").append("<body>");
			 html.append(htmlCode);
			 html.append("</body></html>");  
			 renderer.setDocumentFromString(html.toString());
			 // 解决中文支持问题     
			 ITextFontResolver fontResolver = renderer.getFontResolver();     
			 fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);     
			 realPath = realPath.replace(projectName, ""); // 去掉项目名
			 realPath = realPath.replace("\\", "/");
			 // 解决图片的相对路径问题  ,图片路径必须以file开头
			 renderer.getSharedContext().setBaseURL("file:/" + realPath); 
			 renderer.layout();     
			 renderer.createPDF(os);     
			 os.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

© 著作权归作者所有

共有 人打赏支持
aaron81
粉丝 2
博文 3
码字总数 543
作品 0
中山
程序员
私信 提问
使用UML创建模块库——第一部分(三)

MyEclipse 在线购买低至75折!火爆开抢>> 【MyEclipse最新版下载】 UML1建模文件存储在建模库中,建模可用于生成Java代码,或者可以从代码中生成模型。本教程将向您展示如何执行与建模资源库...

Miss_Hello_World
08/02
0
0
OpenJWeb2.0快速开发平台-内容管理部分

OpenJWeb网站内容管理系统是基于Java语言开发的以大型门户网站为目标客户的产品。本产品的典型案例为中华人民共和国文化部外联局主办的文化传通网。网站访问地址为: http://www.culturalink...

迷途d书童
2012/03/09
85
0
Java之生成Pdf并对Pdf内容操作

虽说网上有很多可以在线导出Pdf或者word或者转成png等格式的工具,但是我觉得还是得了解知道是怎么实现的。一来,在线免费转换工具,是有容量限制的,达到一定的容量时,是不能成功导出的;二...

youcongtech
09/18
0
0
那些提升开发人员工作效率的在线工具

点击上方“程序员小灰”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,...

bjweimengshu
04/18
0
0
Java 程序员最喜欢的 11 款免费 IDE 编辑器

Java开发人员需要花费大量的时间埋头于Java代码中,使用各种不同的IDE(Intergrated Development Environment)来开发Java代码,所以下面我将为大家介绍11个不同的IDE,这些IDE提供了多种功能...

oschina
2016/05/24
16.2K
42

没有更多内容

加载失败,请刷新页面

加载更多

设计模式“6”大原则!

面向对象设计原则 概述 对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要...

Java干货分享
21分钟前
1
0
mybatis学习(1)

JDBC连接方式: 1.底层没有使用连接池,操作数据库需要频繁的创建和关闭连接,消耗资源。 2.写原生的JDBC代码在JAVA中,一旦需要修改SQL的话(比如表增加字段),JAVA需要整体重新编译,不利...

杨健-YJ
今天
4
0
怎么组织文档

可以从以下几个方面考虑组织文档: ☐ 各种分支的界面截图和对应的类及文件 ☐ 框架或类图 ☐ 流程图 ☐ 时序图 ☐ 注意事项

-___-
今天
4
0
分布式之数据库和缓存双写一致性方案解析

引言 为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更...

别打我会飞
今天
19
0
我的oracle11G,12c OCM之路

ocm认证感悟 ---------------------- 距离拿到ocm证书已经过了1年的时间,当初拿到证书的心情到现在还记得。其实在每个DBA心里都有一个成为强者的梦想,需要被认可,我也一样。我干过开发,做...

hnairdb
今天
7
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部