HTML页面实现可编辑,保存,并生成PDF,完成签章。

原本是应该用pageOffice实现在线打开word的编辑,保存,转换成PDF,并完成签章,由于公司预算不够,pageOffice组件不能购买,所以只能另想他法。
需要编辑的word文档的模板是固定的,数量也不多,但对格式要求比较严格,所以决定将模板全部做成HTML页面,用iText组件将HTML转换成PDF。
需要导入的jar包:
在这里插入图片描述
首先需要将模板做成类似于下面这样的页面,横线上的数据是可以动态填充,编辑的,填充数据可以使用Freemarker
在这里插入图片描述
使页面可编辑可以使用Html的contenteditable=“true”在这里插入图片描述
由于页面是可以动态编辑的,所以我们需要获得编辑后的页面的源码

var outerHTML = document.documentElement.outerHTML;

这里要注意,页面中的所有标签都是需要闭合的,如果不闭合的话iText组件在转换过程中会报错,页面中的字体需要是宋体,因为iText的转换需要有字体文件的支持,所以你同时需要在项目中或者服务器上准备一个字体文件
在这里插入图片描述
body {
margin: 20px;
font-family:SimSun;
}
下面是后台接收到页面源码后的处理

@RequestMapping("acceptPage")
	@ResponseBody
	public Map acceptPage(HttpServletRequest request) throws Exception {
		Map map=new HashMap();
		String text = request.getParameter("text");
		//使用jsoup来对html源码进行解析,能够校验格式的完整性,并生成一个新的Document
		org.jsoup.nodes.Document parse = Jsoup.parse(text);
		Elements meta = parse.getElementsByTag("meta");
		String html = parse.html();
		for (Element link : meta) {//手动为一些标签添加闭合
			String s = link.outerHtml();
			String s1=s.replace("/>",">");
			html=html.replace(s,s1+"</meta>");
		}
		Elements link1 = parse.getElementsByTag("link");
		for (Element link : link1) {
			String s = link.outerHtml();
			String s1=s.replace("/>",">");
			html=html.replace(s,s1+"</link>");

		}
		html=html.replaceAll("&nbsp;","");
		try {
			String outputFile="E:\\test.pdf";
			OutputStream os = new FileOutputStream(outputFile);
			//中文宋体文件路径
			String fontPath=StringUtil.trimSufffix(fontUrl, File.separator)+File.separator+"simsun.ttc";
			//String fontPath= "C:\\simsun.ttc";
			ITextRenderer render = new ITextRenderer();
			ITextFontResolver fontResolver = render.getFontResolver();
			fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
			render.setDocumentFromString(html);
			render.layout();
			render.createPDF(os);
			os.close();
		} catch (Exception e) {
			e.printStackTrace();
			map.put("state",1);
			map.put("msg","文件转换失败!请联系管理员!");
			return map;
		}
	}

后面是对生成PDF文件进行签章的操作,就不再说了
在这里插入图片描述
这是最终生成的PDF,样式是没有问题的,也实现了可编辑,保存的功能。

猜你喜欢

转载自blog.csdn.net/weixin_44364953/article/details/85605777
今日推荐