当前位置: 首页 > news >正文

中国建设银行对公网站wordpress付费阅读插件

中国建设银行对公网站,wordpress付费阅读插件,永州网站建设哪里有,三亚房地产网站制作Java根据word 模板#xff0c;生成自定义内容的word 文件 背景1 使用技术2 实现方法依赖啊 3 问题4 背景 主要是项目中需要定制化一个word#xff0c;也就是有一部分是固定的#xff0c;就是有一个底子#xff0c;框架#xff0c;里面的内容是需要填充的。然后填充的内容… Java根据word 模板生成自定义内容的word 文件 背景1 使用技术2 实现方法依赖啊 3 问题4 背景 主要是项目中需要定制化一个word也就是有一部分是固定的就是有一个底子框架里面的内容是需要填充的。然后填充的内容很多包括文本框、图片、文本、前端传过来的富文本、表格的设计。 然后网上找了很多资料没有一个比较详细的文档就决定自己写一份。   在我看来比较复杂的是 1. 整个文本框的模版如何填充占位符2. 图片的填充如何控制长和宽如何使用base64填充3. 前端传过来的富文本或者单纯的富文本如何优化格式比如表格信息的丢失上面是文本还有文本框下面是表格和图片 1 使用技术 我这里最后采用的是EasyPoi 填充word模版。 实际使用的是JAVA poi-tl-ext 富文本转word。 使用PictureRenderData来控制生成图片的大小和base64。 2 实现方法 依赖 首先是依赖在我看来核心的是 dependencygroupIdio.github.draco1023/groupIdartifactIdpoi-tl-ext/artifactIdversion0.4.15/version/dependencypoi-tl-ext已经包含了poipoi-tl等jar包所以无需重复导入poi-tl文档链接poi-tl-ext github链接 其他的网上还是蛮多的这个主要就是渲染HTML的HTML的代码或者富文本都可以渲染的。 啊 我最开始用的是EasyPoi的方法进行导入的也就是网上比较常见的下面这样的方法进行填充word模版如果你只比较简单的数据那使用EasyPoi就够了。 XWPFDocument doc1 WordExportUtil.exportWord07(templatePath, params).create;但是我涉及到了富文本的转换就是我要把富文本渲染成docx支持的格式所以我换了种方法。 doc XWPFTemplate.compile(fileInputStream, configure).render(params).getXWPFDocument();实际上还是获取模版然后读取占位符然后 核心代码如下 // html渲染插件HtmlRenderPolicy htmlRenderPolicy new HtmlRenderPolicy();// 第一个案例Configure configure Configure.builder()// 注册html解析插件.bind(content, htmlRenderPolicy)// .bind(content2, htmlRenderPolicy).build();// 映射数据MapMapString, Object data new HashMap();data.put(content, content2Html(你的HTML代码));// 读取模板文件并渲染数据XWPFTemplate template XWPFTemplate.compile(getResourceInputStream(/html2wordtemplate.docx), configure).render(data);// 写入文件template.writeToFile(demo4.docx);template.close();我这里是在静态资源里的模版你也可以读取自己的其他目录下的文件主要是只要是InputStream就都可以。 3 问题 其实到上面最简单的已经结束了后面主要是我遇到的设计到HTML富文本中涉及一些跟表格有关的问题最开始的时候就比如最开的时候前端给我的富文本代码如下 p styletext-indent: 28pt;br/p table stylewidth: auto;tbodytrtd colSpan1 rowSpan2 width226活动名称/tdtd colSpan1 rowSpan2 width160计划举办数/tdtd colSpan2 rowSpan1 width329实际举办数/tdtd colSpan1 rowSpan1 width161延期数/td/trtrtd colSpan1 rowSpan1 width152已成功举办数/tdtd colSpan1 rowSpan1 width177筹备完成待举办/tdtd colSpan1 rowSpan1 width161延期/td/trtrtd colSpan1 rowSpan1 width226适配开发/tdtd colSpan1 rowSpan1 width16054/tdtd colSpan1 rowSpan1 width15246/tdtd colSpan1 rowSpan1 width1778/tdtd colSpan1 rowSpan1 width1610/td/trtrtd colSpan1 rowSpan1 width226边缘缓存系统/tdtd colSpan1 rowSpan1 width16024/tdtd colSpan1 rowSpan1 width15211/tdtd colSpan1 rowSpan1 width17713/tdtd colSpan1 rowSpan1 width1610/td/tr他的表格宽度是内联在td标签中的这个在HtmlRenderPolicy里面实际上渲染后会出现两个问题。 width属性会丢失转换后的结果就是等分的。前端传给我的没有边界线没有表格的框线。 没有边框 表格等分 针对于这个等分的情况解决办法就是 把原始的html格式转变成css进行处理   其实我做了很多一方面是 原始的html格式转变成css为 table和 td 标签添加边框 到这其实已经结束了但是我的需求涉及到HTML-----WORD-----HTML发送邮件。 3. 所以我多做了一步处理就是给 table标签添加了一个width: 100%;样式 /*** 处理 HTML转换 td 的宽度为 CSS 样式并为 table 和 td 标签添加边框* param html 原始 HTML 字符串* return 修改后的 HTML 字符串*/public static String convertTdWidthAndAddBorders(String html) {// 解析 HTMLDocument doc Jsoup.parse(html);// 获取所有的 tr 标签Elements trs doc.select(tr);// 遍历每个 tr 标签for (Element tr : trs) {Elements tds tr.select(td);// 计算当前行所有 td 的宽度总和只针对数值宽度int totalWidth 0;for (Element td : tds) {String widthValue td.attr(width);// 累加数值格式的宽度if (!widthValue.isEmpty() !widthValue.contains(%)) {totalWidth Integer.parseInt(widthValue);}}// 如果该行有宽度总和继续处理for (Element td : tds) {String widthValue td.attr(width);String existingStyle td.attr(style); // 获取现有的 style 属性String borderStyle border: 1px solid #CCC;; // 四周边框样式//String borderStyle border-right: 1px solid #CCC; border-bottom: 1px solid #CCC;; // 边框样式// 处理百分比格式的宽度if (!widthValue.isEmpty() widthValue.contains(%)) {// 如果已有 style合并宽度和边框样式td.removeAttr(width);td.attr(style, mergeStyles(existingStyle, width: widthValue ;, borderStyle));}// 处理数值格式的宽度else if (!widthValue.isEmpty()) {int width Integer.parseInt(widthValue);if (totalWidth 0) {// 计算百分比double percentWidth (double) width / totalWidth * 100;// 如果已有 style合并宽度和边框样式td.removeAttr(width);td.attr(style, mergeStyles(existingStyle, String.format(width: %.2f%%;, percentWidth), borderStyle));}} else {// 直接添加边框样式如果没有宽度td.attr(style, mergeStyles(existingStyle, , borderStyle));}}}// 将 table 标签添加边框样式Elements tables doc.select(table);for (Element table : tables) {String existingStyle table.attr(style); // 获取现有的 style 属性//String tableBorderStyle border-top: 1px solid #CCC; border-left: 1px solid #CCC;; // 表格边框样式String tableBorderStyle border: 1px solid #CCC;;table.attr(style, mergeStyles(existingStyle, width: 100%;, tableBorderStyle));}// 返回修改后的 HTMLreturn doc.toString();}/*** 合并多个 style 属性* param existingStyle 原有的 style 属性* param newStyle 新的 style 属性* param additionalStyle 其他样式如边框* return 合并后的 style 字符串*/private static String mergeStyles(String existingStyle, String newStyle, String additionalStyle) {StringBuilder mergedStyle new StringBuilder();if (existingStyle ! null !existingStyle.trim().isEmpty()) {mergedStyle.append(existingStyle.trim());if (!existingStyle.trim().endsWith(;)) {mergedStyle.append(; );}}if (!newStyle.isEmpty()) {mergedStyle.append(newStyle.trim());if (!newStyle.trim().endsWith(;)) {mergedStyle.append(; );}}if (!additionalStyle.isEmpty()) {mergedStyle.append(additionalStyle.trim());if (!additionalStyle.trim().endsWith(;)) {mergedStyle.append(; );}}return mergedStyle.toString().trim();} 转换的结果如下 trtd colspan1 rowspan1 stylewidth: 34.76%;border: 1px solid #CCC;节点下线流程/tdtd colspan1 rowspan1 stylewidth: 16.95%;border: 1px solid #CCC;3/tdtd colspan1 rowspan1 stylewidth: 16.59%;border: 1px solid #CCC;-3/tdtd colspan1 rowspan1 stylewidth: 16.22%;border: 1px solid #CCC;54.12%/tdtd colspan1 rowspan1 stylewidth: 15.49%;border: 1px solid #CCC;-0.17pp/td/trtrtd colspan1 rowspan1 stylewidth: 34.76%;border: 1px solid #CCC;节点上线流程/tdtd colspan1 rowspan1 stylewidth: 16.95%;border: 1px solid #CCC;8/tdtd colspan1 rowspan1 stylewidth: 16.59%;border: 1px solid #CCC;-5/tdtd colspan1 rowspan1 stylewidth: 16.22%;border: 1px solid #CCC;36.91%/tdtd colspan1 rowspan1 stylewidth: 15.49%;border: 1px solid #CCC;14.02pp/td/tr会把原始的内联转换成css的然后就能成功转换并且成功显示标签了。 4
http://www.zqtcl.cn/news/172570/

相关文章:

  • 为企业设计网站微信开放平台的发展前景
  • 苏州高端做网站软件开发流程图例子
  • 开发区网站建设公司wordpress中文官网
  • 购物网站项目经验搭建网站流程
  • 网站建设企业蛋糕怎么做网站里导出没有水印的图
  • 享设计网做兼职设计师怎么样何鹏seo
  • 淘宝联盟网站推广位怎么做网站建设小知识
  • 徐州有办网站的地方吗企业做网站多少钱
  • 地铁公司招聘信息网站通江县网站建设
  • 家具网站 模板上海虹口建设局官方网站
  • 网站建站建设哪家好wordpress全站静态
  • 旅游网站建设策划seo顾问多少钱
  • 个人网站注册平台要多少钱彩票网站开发 违法
  • 贵州城乡住房和建设厅网站易企秀网站开发语言
  • 返利网站做鹊桥推广免费的舆情网站入口在哪
  • 网站商城怎么做wordpress图片采集插件
  • 做美团网站代码swoole+wordpress
  • 百度免费资源网站搭建发卡网站要多少钱
  • ip网站怎么做酷家乐手机版
  • cnzz统计代码如何添加到网站上去照片网站源码
  • 我的世界电影怎么做的视频网站网页布局实训心得体会
  • 网站建设公司内部情况凡客诚品陈年
  • 浙江建设职业技术学院迎新网站商务网站建设体会
  • 做网站的目的与意义做家教去什么网站
  • 相城网站建设为什么网站建设价格不一
  • 网站icp备案手续我做的网站平台百度搜不到
  • 本溪网站设计公司ps转页面wordpress插件
  • 怎么做短链接网站搜索引擎优化的各种方法
  • 自己做网站怎么挣钱微网站建站系统源码
  • 湖北省网站备案最快几天网站建设存在的具体问题