抓取网页生成电子书(需要编辑的word文档的模板全部做成HTML页面,需要导入的jar包)
优采云 发布时间: 2022-01-28 03:06抓取网页生成电子书(需要编辑的word文档的模板全部做成HTML页面,需要导入的jar包)
本来应该用pageOffice在线编辑、保存、转成PDF、完成签名。因为公司预算不够,无法购买pageOffice组件,只能想其他办法。
需要编辑的word文档的模板是固定的,数量不大,但是格式要求比较严格,所以我决定把所有的模板都做成HTML页面,用iText组件来转换将 HTML 转换为 PDF。
需要导入的jar包:
首先,需要将模板制作成类似如下的页面。水平线上的数据可以动态填充和编辑。 Freemarker可以用来填充数据。
要使页面可编辑,您可以使用 Html 的 contenteditable="true"
因为页面可以动态编辑,所以我们需要获取编辑页面的源代码
var outerHTML = document.documentElement.outerHTML;
这里需要注意的是页面中的所有标签都需要关闭。如果没有关闭,iText组件在转换过程中会报错。页面中的字体需要是Arial,因为iText的转换需要字体文件的支持。所以你还需要在项目中或者服务器上准备好字体文件
身体{
边距:20px;
字体系列: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+"");
}
Elements link1 = parse.getElementsByTag("link");
for (Element link : link1) {
String s = link.outerHtml();
String s1=s.replace("/>",">");
html=html.replace(s,s1+"");
}
html=html.replaceAll(" ","");
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,样式没问题,还实现了编辑保存功能。