java使用在线编辑器生成PDF


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();
		} 
	}

转载于:https://my.oschina.net/u/554982/blog/66891

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值