java使用在线编辑器生成PDF

    最近要作经过在线编辑器生成PDF文件的功能。在参考了网上的资料后,结合项目的实际须要作了些修改,现把作完的功能记录下来。须要的jar包: core-renderer.jar 和 iText-2.0.8.jar

java代码以下:css

/**
	 * 使用在线编辑器生成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();
		} 
	}
相关文章
相关标签/搜索