手机商城网站如何,模板手机网站建设价格明细表,艺术字体,二次开发有没有前途朋友们#xff0c;报告好消息#xff01;我的小程序用户数量已经涨到16个了#xff01;没错#xff0c;真没拉朋友圈亲戚好友来撑场子#xff0c;全靠实力#xff08;和一点点运气#xff09;吸引了16位陌生小伙伴光临#xff01;这波进步#xff0c;连我自己都感动了…朋友们报告好消息我的小程序用户数量已经涨到16个了没错真·没拉朋友圈亲戚好友来撑场子全靠实力和一点点运气吸引了16位陌生小伙伴光临这波进步连我自己都感动了 有兴趣的朋友可以搜索体验一下接下来的日子我会每天更新营运状况告诉大家这小程序到底能不能带来“流量变现”奇迹还是最后成了我自己的社交实验田。同时我还会不断更新小程序功能努力让这16位尊贵用户用得开心不开心也别走啊求你们了。今天涨了几个用户广告收益能不能多买一杯奶茶这些热乎乎的“战绩”通通告诉你们
我承诺每天更新营运状况实话实说流量主是发家致富的捷径还是“赚够奶茶钱就谢天谢地”小程序功能也会不断优化升级毕竟要让这16位小伙伴用得爽才有希望吸引更多用户加入。
接下来的开发计划已经排满了档期不仅要优化现有功能还打算增加更多实用性强、能留住用户的新功能比如文档转换啊、在线工具类的小工具要知道16个用户那可是我未来的“财富基石”必须得服务到位
文档转化用了什么技术主角就是大名鼎鼎的 docx4j这玩意儿就是处理文档的“瑞士军刀”专门帮你在各种文档格式之间左手倒右手效率杠杠的
docx4j 的核心能力在于它能够高效解析和生成 .docx 文件无需安装 Microsoft Office也不依赖 COM 组件。通过 XML 和 JAXB 技术docx4j 将文档的结构和内容转换为可操作的对象开发者可以轻松修改、删除或添加文档内容比如表格、段落、图片等。
除了基本的文档处理功能docx4j 的强大之处还在于其转换能力。例如docx 转 PDF 是一个备受青睐的功能。借助 docx4j 的 PDF 导出模块它能够快速将 Word 文档渲染成高质量的 PDF 文件广泛应用于合同生成、报告输出等场景。此外它还能通过插件支持其他格式的转换扩展性非常强。
对于开发者来说docx4j 提供了友好的 API 接口和灵活的功能模块。无论是简单的文档读取还是复杂的内容操作它都能轻松驾驭。其社区活跃文档齐全为开发者的二次开发和快速实现功能提供了极大的便利。
依赖如下 dependencygroupIdorg.docx4j/groupIdartifactIddocx4j/artifactIdversion6.1.1/versionexclusionsexclusiongroupIdorg.slf4j/groupIdartifactIdslf4j-reload4j/artifactId/exclusion/exclusions/dependencydependencygroupIdorg.docx4j/groupIdartifactIddocx4j-export-fo/artifactIdversion8.1.1/versionexclusionsexclusiongroupIdorg.slf4j/groupIdartifactIdslf4j-reload4j/artifactId/exclusion/exclusions/dependency
关键代码实现类
private byte[] convertWordToPdf(String filePath) throws Exception {FileOutputStream fileOutputStream null;ByteArrayOutputStream byteArrayOutputStream new ByteArrayOutputStream();try {// 获取当前时间戳String timestamp new SimpleDateFormat(yyyyMMddHHmmss).format(new Date());// 获取文件名去掉路径和扩展名File file new File(filePath);String fileName file.getName().replaceAll(\\.docx$, );// 创建带时间戳的pdf路径文件保存到fileDir目录下String pdfPath fileDir fileName _ timestamp .pdf;// 进行文件转换fileOutputStream new FileOutputStream(new File(pdfPath));WordprocessingMLPackage mlPackage WordprocessingMLPackage.load(file);setFontMapper(mlPackage);Docx4J.toPDF(mlPackage, fileOutputStream);System.out.println(PDF转换成功文件保存为 pdfPath);// 读取生成的PDF文件内容并返回字节数组try (InputStream pdfInputStream new FileInputStream(pdfPath)) {byte[] buffer new byte[1024];int bytesRead;while ((bytesRead pdfInputStream.read(buffer)) ! -1) {byteArrayOutputStream.write(buffer, 0, bytesRead);}}return byteArrayOutputStream.toByteArray();} catch (Exception e) {e.printStackTrace();System.out.println(转换失败);throw new UnsupportedOperationException(Word 转 PDF 的功能尚未实现: filePath);} finally {IOUtils.closeQuietly(fileOutputStream);try {byteArrayOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}private static void setFontMapper(WordprocessingMLPackage mlPackage) throws Exception {Mapper fontMapper new IdentityPlusMapper();fontMapper.put(隶书, PhysicalFonts.get(LiSu));fontMapper.put(宋体, PhysicalFonts.get(SimSun));fontMapper.put(微软雅黑, PhysicalFonts.get(Microsoft Yahei));fontMapper.put(黑体, PhysicalFonts.get(SimHei));fontMapper.put(楷体, PhysicalFonts.get(KaiTi));fontMapper.put(新宋体, PhysicalFonts.get(NSimSun));fontMapper.put(华文行楷, PhysicalFonts.get(STXingkai));fontMapper.put(华文仿宋, PhysicalFonts.get(STFangsong));fontMapper.put(宋体扩展, PhysicalFonts.get(simsun-extB));fontMapper.put(仿宋, PhysicalFonts.get(FangSong));fontMapper.put(仿宋_GB2312, PhysicalFonts.get(FangSong_GB2312));fontMapper.put(幼圆, PhysicalFonts.get(YouYuan));fontMapper.put(华文宋体, PhysicalFonts.get(STSong));fontMapper.put(华文中宋, PhysicalFonts.get(STZhongsong));mlPackage.setFontMapper(fontMapper);}