文档章节

java使用在线编辑器生成PDF

aaron81
 aaron81
发布于 2012/07/13 16:33
字数 341
阅读 756
收藏 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
Java之生成Pdf并对Pdf内容操作

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

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

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

bjweimengshu
04/18
0
0
Centos下安装类百度文库环境

使用php实现百度文库功能,网上搜索到的方案,实现doc转pdf,pdf转swf,然后显示出来。 这里简单的记录下,【doc转pdf,pdf转swf】两个功能的搭建流程。 doc转pdf 使用到下列程序(文件): Ap...

DragonFK
2013/02/20
0
1
eclipse常用Eclipse插件介绍

以下是我整理的自己开发过程中的常用Eclipse插件: (1) AmaterasUML 介绍:Eclipse的UML插件,支持UML活动图,class图,sequence图,usecase图等;支持与Java class/interface之间的相互导入...

刘卫东
2014/09/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Go interface{} to string

package mainimport "fmt"func main() {var a interface{}a = "dsadjaldaldad"var b stringb = a.(string) // 话说,用人话说的话,这叫什么操作?fmt.Println(a, b)}...

taadis
18分钟前
0
0
数据库防火墙

数据库防火墙顾名思义是一款数据(库)安全设备,从防火墙这个词可以看出,其主要作用是做来自于外部的危险隔离。换句话说,数据库防火墙应该在入侵在到达数据库之前将其阻断,至少需要在入侵...

突突突酱
27分钟前
1
0
RDBMS 关系型数据库与 NoSQL 全面比较

随着互联网的不断发展,各种类型的应用层出不穷,所以导致在这个云计算的时代,对技术提出了更多的需求,主要体现在下面这四个方面: 低延迟的读写速度:应用快速地反应能极大地提升用户的满...

PeakFang-BOK
36分钟前
1
0
徒弟做了一个Python的实战小项目——银行系统

国际惯例:实践是检验真理的唯一标准。 众所周知,在编程过程中理论知识再充实也需要通过项目的炼金石。下面给大家看一下我徒弟做的一个小项目实战要求,是做一个银行系统,就是我们去银行办...

无也Python
42分钟前
2
0
vue.js响应式原理解析与实现

从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染。之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新...

peakedness丶
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部