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

网站路径优化怎么做电商网站需求分析

网站路径优化怎么做,电商网站需求分析,浙江建设信息网,wordpress 不能改邮箱背景: 之前做过一些pdf导出, 客户提了一个特别急的需求, 要求根据一个模版跟一个csv的数据源, 批量生成PDF, 因为之前用过FOP, 知道调整样式需要特别长的时间, 这个需求又特别急, 所…

背景:

之前做过一些pdf导出, 客户提了一个特别急的需求, 要求根据一个模版跟一个csv的数据源, 批量生成PDF, 因为之前用过FOP, 知道调整样式需要特别长的时间, 这个需求又特别急, 所以寻找了一个其他的方案。

优点:

生成快捷,代码简单, 样式依赖模版,所见即所得

缺点:

模版难以调整

思路:

既然已经放弃FOP,那么就直接从模版生成新的word文档, 并且将word文档直接导出

第一版思路:

<dependency><groupId>org.docx4j</groupId><artifactId>docx4j-core</artifactId><version>8.3.9</version></dependency> <!-- :contentReference[oaicite:0]{index=0} --><!-- 内置 MOXy JAXB 实现 --><dependency><groupId>org.docx4j</groupId><artifactId>docx4j-JAXB-MOXy</artifactId><version>8.3.9</version></dependency> <!-- :contentReference[oaicite:1]{index=1} --><!--    &lt;!&ndash; FO 导出,用于生成 XSL-FO &ndash;&gt;--><dependency><groupId>org.docx4j</groupId><artifactId>docx4j-export-fo</artifactId><version>8.3.9</version></dependency> <!-- :contentReference[oaicite:2]{index=2} -->public static void main(String[] args) throws Exception {// 1. 加载模板InputStream tpl = Word2PDF.class.getResourceAsStream("/template.docx");if (tpl == null) {throw new RuntimeException("未找到模板 template.docx");}//这部分非必须, 是为了多次导出,不重复读模版byte[] template = tpl.readAllBytes();// 2. 准备多条替换数据List<Map<String,String>> dataList = new ArrayList<>();Map<String,String> maps = new HashMap<>();maps.put("firstName","Alice");maps.put("context","测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测");maps.put("lastName","Wang");maps.put("date","2025-05-20");dataList.add(maps);maps = new HashMap<>();maps.put("firstName","Bob");maps.put("lastName","Li");maps.put("date","2025-05-21");dataList.add(maps);maps = new HashMap<>();maps.put("firstName","Carol");maps.put("lastName","Zhang");maps.put("date","2025-05-22");dataList.add(maps);// 3. 循环生成for (Map<String,String> row : dataList) {// 3.1 重新加载模板WordprocessingMLPackage pkg;try (InputStream tplStream = new ByteArrayInputStream(template)) {pkg = WordprocessingMLPackage.load(tplStream);}// 3.2 执行替换 (${key})MainDocumentPart mdp = pkg.getMainDocumentPart();mdp.variableReplace(row);// 替换 ${firstName}、${lastName}、${date} :contentReference[oaicite:2]{index=2}// 3.3 保存为 DOCXString name = row.get("firstName");String docxPath = "/Users/Documents/" + name + ".docx";pkg.save(new File(docxPath));try(OutputStream os = new FileOutputStream("/Users/Documents/" + name + ".pdf"))  {Docx4J.toPDF(pkg, os);}}}

这种方式全部依赖docx4j的jar包,进行导出。 

缺点, 当模版有复杂模型,比如侧边栏时这种方式是无法导出的, 在网上找到的解决方案也是无效的。可能是因为JDK版本的升级。

版本2:

上面代码的逻辑一样,额外使用了documents4j的jar

<dependency><groupId>org.docx4j</groupId><artifactId>docx4j-core</artifactId><version>8.3.9</version></dependency> <!-- :contentReference[oaicite:0]{index=0} --><!-- 内置 MOXy JAXB 实现 --><dependency><groupId>org.docx4j</groupId><artifactId>docx4j-JAXB-MOXy</artifactId><version>8.3.9</version></dependency> <!-- :contentReference[oaicite:1]{index=1} --><!--    &lt;!&ndash; FO 导出,用于生成 XSL-FO &ndash;&gt;--><dependency><groupId>org.docx4j</groupId><artifactId>docx4j-export-fo</artifactId><version>8.3.9</version></dependency> <!-- :contentReference[oaicite:2]{index=2} -->//转化为PDF的代码使用//声明转换器,可重用
IConverter converter = LocalConverter.builder().baseFolder(new File(targetPath)).workerPool(5,15,30, TimeUnit.SECONDS).processTimeout (60, TimeUnit.SECONDS).build();
//声明 转换, 最后一步有schedule excute 两种写法, excute是直接生成,结果是boolean,是单条生成的,这种是为了批量运行
Future<Boolean> future = converter.convert(word).as(DocumentType.MS_WORD).to(new File(wordName + ".pdf")).as(DocumentType.PDF).schedule();//对应 schedule的运行
future.get();

这种方式可以达成所见即所得。

PS:

之前提出了模版难以修改,是因为模版中要使用${替换名称}的方式, 但是word有时会自动截断一个字符串, 导致实际上变成了${替 换名称  }的样式, 需要多改几次试下,连续输入试一下。

有一种比较简单的方式,就是将word文件的后缀名改成zip ,然后拿出document.xml 可以在这个里面直接改,名称改回后记得打开看是否报错, 如果报错,另存一下,就可以去掉报错。


文章转载自:

http://MBGsSD4A.ppwdh.cn
http://ZSrqyOoy.ppwdh.cn
http://V67gS5FK.ppwdh.cn
http://VChUhdR8.ppwdh.cn
http://utEH51Wd.ppwdh.cn
http://wPoxNm02.ppwdh.cn
http://67XWdRid.ppwdh.cn
http://j0VFPVNH.ppwdh.cn
http://q0v2JVqf.ppwdh.cn
http://1VaDlurl.ppwdh.cn
http://d0UzxOoN.ppwdh.cn
http://AWEW5go5.ppwdh.cn
http://YxqpfWRn.ppwdh.cn
http://nbQchaZ7.ppwdh.cn
http://JTqaX6hn.ppwdh.cn
http://waQaJOh8.ppwdh.cn
http://1JlC67Uq.ppwdh.cn
http://zL0pe5k4.ppwdh.cn
http://4u1eRhjz.ppwdh.cn
http://YLQex1a5.ppwdh.cn
http://p6KAz0AS.ppwdh.cn
http://eUQRKcmD.ppwdh.cn
http://WD04SN2i.ppwdh.cn
http://n6tkZ5SM.ppwdh.cn
http://GIjUMJBR.ppwdh.cn
http://YZ8UmTBa.ppwdh.cn
http://6lpJ6MSd.ppwdh.cn
http://U3ffarow.ppwdh.cn
http://FTQ9Km0L.ppwdh.cn
http://BH0mcHWO.ppwdh.cn
http://www.dtcms.com/wzjs/675343.html

相关文章:

  • 上海软件培训网站建设营销型网站收费
  • 网站编辑招聘企业网站的优势
  • 网易梦幻西游手游官方网站下载杂志制作 wordpress主题
  • 企业网站管理后台腾讯小程序官网首页
  • 进入微信官方网站注册搭建什么网站最赚钱
  • 屏蔽右键网站获取网站访问量
  • 佛山网站营销检验是否安装wordpress
  • 80后陈某做盗版视频网站宁波租房网
  • 建立自己的影视网站网页视频下载不了
  • 设计师如何注册个人网站微信上浏览自己做的网站
  • 营销型企业网站源码商店网站制作
  • wordpress 排行榜网站 主题外贸相关岗位人才招聘启事
  • 网站建设的多少钱wordpress 添加页面
  • 网站建设用到的工具im聊天软件开发
  • 园林专业设计学习网站网络行业做什么挣钱
  • 金堂企业网站建设海淀区网站搭建
  • 那个网站做排列五头比较准天津做网站外包公司
  • 基于无网站网络营销的问题微信公众号内置手机网站
  • 重庆中小企业建站价格seo外包服务专家
  • html模板网站推荐网络设计是干什么工作的
  • dede小说网站模板下载江门网站seo优化
  • 建设网站的功能定位是什么一键生成logo免费在线网页
  • 陕西建设网网站集群网页设计软件vscode
  • 什么是网站空间信息win7在iis中新建一个网站
  • 营销型网站的功能沧州市青县建设局网站
  • 做i网站seo百度发包工具
  • 长沙企业网站开发微联讯点云南搜索引擎优化
  • 网站开发 一个页面多少钱公司网站建设须知
  • 东莞网站建设设计做网站时的尺寸
  • 一些做系统的网站wordpress开发的网站有哪些