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

md文件转word文档

需求

近日,有一个需求,需要将一串md文件格式的字符串转换成word文件并上传至miniio。

方案

尝试了一下网上的方案,好几种引入什么各种依赖的,demo都跑不起来或者生成的格式混乱,最后采用了pandoc方案实现该功能。

资源

可参考该博主链接,致谢。https://blog.csdn.net/Xiaoyuan_he/article/details/139154759

实现

如果开发中报错Cannot run program “pandoc”: CreateProcess error=2,是因为ProcessBuilder 中路径要传pandoc.exe所在的全路径

ProcessBuilder processBuilder = new ProcessBuilder("D:\\Program Files\\pandoc-3.2\\pandoc", "-i", inputPath, "-o", outputPath);

具体代码实现如下:

import lombok.extern.slf4j.Slf4j;import java.io.*;/*** PandocUtil** @author yxx*/
@Slf4j
public class PandocUtil {/*** 将Markdown文件转换为Word文件** @param inputPath  输入Markdown文件路径* @param outputPath 输出Word文件路径*/public static void convertMarkdownToWord(String inputPath, String outputPath) {ProcessBuilder processBuilder = new ProcessBuilder("D:\\Program Files\\pandoc-3.2\\pandoc", "-i", inputPath, "-o", outputPath);// 将错误输出和标准输出合并processBuilder.redirectErrorStream(true);try {Process process = processBuilder.start();BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line;while ((line = reader.readLine()) != null) {// 打印 pandoc 输出信息log.info(line);}// 等待进程结束int exitCode = process.waitFor();log.info("Exited with code  : {}", exitCode);} catch (IOException | InterruptedException e) {log.error("Error converting markdown to word : {}", e.getMessage());throw new RuntimeException(e);}}/*** 将文本内容写入Markdown文件** @param content  文本内容* @param filePath 文件路径*/public static void convertTextToMarkdownFile(String content, String filePath) {try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {writer.write(content);log.info("Markdown file created successfully at: {}", filePath);} catch (IOException e) {log.error("Failed to write markdown file: {}", e.getMessage());throw new RuntimeException(e);}}
}
    @PostMapping("/upload")public String uploadFile(@RequestBody MarkdownDTO dto) {dto.setContent("# AI智能项目需求文档\n" +"\n" +"## 1. 引言\n" +"\n" +"### 1.1 编写目的\n" +"本需求文档旨在对『AI智能项目』进行详细的需求分析和概要设计说明。通过明确系统功能模块划分、模块间接口设计、数据结构及模块结构等内容,为后续开发阶段提供清晰的技术指导。\n" +"\n" +"### 1.2 名词、术语定义\n" +"- **AI智能项目**:指通过人工智能技术实现特定业务目标的软件系统。\n" +"- **模块**:系统中具有独立功能的组成部分。\n" +"- **接口**:模块之间或系统与外部环境之间的交互方式。\n" +"- **数据结构**:数据在系统中的存储和组织形式。\n" +"\n" +"### 1.3 参考资料\n" +"- 《AI智能项目需求分析说明书》\n" +"- 《系统设计基础规范》\n" +"\n" +"---\n" +"\n" +"## 2. 项目概述\n" +"\n" +"### 2.1 项目目标\n" +"通过模块化设计和功能分解,实现一个高效、稳定且易于扩展的AI智能系统,满足业务需求并支持未来功能扩展。\n" +"\n" +"### 2.2 项目范围\n" +"本项目将覆盖以下主要功能:\n" +"1. 系统模块划分。\n" +"2. 模块间接口设计。\n" +"3. 数据结构设计。\n" +"4. 模块间信息传递机制。\n" +"\n" +"### 2.3 软件功能架构图\n" +"(此处可插入系统功能架构图)\n" +"\n" +"---\n" +"\n" +"## 3. 设计约束\n" +"\n" +"- 系统需具备良好的扩展性,以支持未来新增功能。\n" +"- 各模块间的接口设计需保持清晰和标准化。\n" +"- 数据结构设计需兼顾效率和存储成本。\n" +"\n" +"---\n" +"\n" +"## 4. 功能需求\n" +"\n" +"### 4.1 基础/公用功能\n" +"- 用户身份验证\n" +"- 日志记录\n" +"- 配置管理\n" +"\n" +"### 4.2 业务流程图\n" +"(此处可插入业务流程图)\n" +"\n" +"### 4.3 功能编号+功能名称\n" +"\n" +"#### 4.3.1 功能描述\n" +"本系统分为以下几个核心功能模块:\n" +"1. **数据处理模块**\n" +"   - [用户故事] 用户希望系统能够自动对输入数据进行预处理,以便后续分析。\n" +"   - [验收标准] 系统能够正确解析多种格式的数据,并输出标准化结果。\n" +"   \n" +"2. **模型训练模块**\n" +"   - [用户故事] 用户希望系统能够支持多种机器学习模型的训练和优化。\n" +"   - [验收标准] 系统能够成功加载训练数据并完成模型训练,同时提供训练过程的日志记录。\n" +"\n" +"3. **预测分析模块**\n" +"   - [用户故事] 用户希望系统能够根据训练好的模型进行实时预测。\n" +"   - [验收标准] 系统能够在接收输入后快速返回预测结果,延迟不超过500ms。\n" +"\n" +"4. **模块管理模块**\n" +"   - [用户故事] 用户希望系统能够方便地添加、删除或更新功能模块。\n" +"   - [验收标准] 系统支持动态加载模块,并能显示当前所有可用模块的状态。\n" +"\n" +"5. **日志监控模块**\n" +"   - [用户故事] 用户希望系统能够记录运行过程中的关键事件,便于问题排查。\n" +"   - [验收标准] 系统能够生成详细的日志文件,并支持按时间、模块名等条件查询。\n" +"\n" +"#### 4.3.2 功能需求\n" +"- 数据处理模块需支持常见文件格式(如CSV、JSON)的解析。\n" +"- 模型训练模块需支持主流机器学习框架(如TensorFlow、PyTorch)。\n" +"- 预测分析模块需支持高并发请求。\n" +"- 模块管理模块需提供友好的图形化界面。\n" +"- 日志监控模块需支持日志分级和导出功能。\n" +"\n" +"#### 4.3.3 前端页面需求\n" +"- 提供统一的操作界面,包含模块管理、数据上传、模型训练和预测结果展示等功能。\n" +"- 页面需响应式设计,适配不同设备。\n" +"\n" +"#### 4.3.4 其它说明\n" +"各模块的设计需遵循模块化原则,确保低耦合、高内聚。\n" +"\n" +"---\n" +"\n" +"## 5. 非功能性需求\n" +"\n" +"### 5.1 技术架构的约定和要求\n" +"- 使用微服务架构,支持分布式部署。\n" +"- 数据库采用关系型数据库(如MySQL)和非关系型数据库(如MongoDB)结合的方式。\n" +"\n" +"### 5.2 性能要求\n" +"- 系统整体响应时间不超过1秒。\n" +"- 支持每秒至少100个并发请求。\n" +"\n" +"### 5.3 安全性要求\n" +"- 数据传输需采用SSL加密。\n" +"- 用户权限管理需严格区分不同角色的访问权限。\n" +"\n" +"### 5.4 技术标准化要求\n" +"- 遵循RESTful API设计规范。\n" +"- 代码需符合团队内部编码规范。\n" +"\n" +"### 5.5 系统监控要求\n" +"- 实时监控系统资源使用情况(CPU、内存、磁盘等)。\n" +"- 提供告警机制,当资源使用率超过阈值时自动通知管理员。\n" +"\n" +"### 5.6 安全性保密性\n" +"- 敏感数据需加密存储。\n" +"- 定期进行安全审计,确保无安全隐患。\n" +"\n" +"### 5.7 可扩展性\n" +"- 系统需支持水平扩展,以应对未来增长的用户量和数据量。\n" +"\n" +"---\n" +"\n" +"## 6. 其它需求\n" +"- 提供详细的用户手册和技术文档。\n" +"- 定期对系统进行性能优化和安全升级。\n" +"\n" +"---\n" +"\n" +"## 7. 接口需求\n" +"- 各模块间通过RESTful API进行通信。\n" +"- 外部系统可通过开放的API接口调用系统功能。\n" +"\n" +"---\n" +"\n" +"## 8. 验收标准\n" +"- 系统功能完整,满足所有用户故事和验收标准。\n" +"- 性能测试结果达到非功能性需求指标。\n" +"- 安全测试未发现重大漏洞。\n" +"\n" +"---\n" +"\n" +"## 9. 附录\n" +"- 系统功能架构图\n" +"- 业务流程图\n" +"- 技术规范文档");String uuid = UUID.randomUUID().toString().replace("-", "");log.info("uuid: {}", uuid);String mdFileName = uuid + ".md";if (!new File(path).exists()) {new File(path).mkdirs();}String mdFilePath = path + "/" + mdFileName;String docxFileName = uuid + ".docx";String docxFilePath = path + "/" + docxFileName;PandocUtil.convertTextToMarkdownFile(dto.getContent(), mdFilePath);PandocUtil.convertMarkdownToWord(mdFilePath, docxFilePath);minIoUtil.uploadFile(minIoUtil.getBucketName(), docxFileName, docxFilePath);FileUtil.del(mdFilePath);FileUtil.del(docxFilePath);return docxFileName;}
http://www.xdnf.cn/news/1006291.html

相关文章:

  • 单元测试基本步骤
  • Spring MVC 常用请求处理注解总结
  • llm agent
  • OpenCV CUDA模块图像变形------对图像进行任意形式的重映射(Remapping)操作函数remap()
  • Spring Boot3批式访问Dify聊天助手接口
  • Vue 中 this.$emit(‘mount‘) 的妙用
  • 如何在 Discourse AI 中设置 Gemini API
  • 多串口卡使用
  • 软件测试BUG
  • 【小工具】-Doxygen01
  • slam--非线性优化
  • BEV和OCC学习-8:mmdet3d 3D分割demo测试
  • 如何利用单细胞转录组进行细胞图谱和疾病机制研究?
  • 爬虫实践:TOP250电影数据
  • 从数学到代码:一文详解埃拉托色尼筛法(埃式筛)
  • 阳台光伏防逆流电表革新者:安科瑞ADL200N-CT/D16-WF
  • ref 应用于对象类型的一个案例
  • CKA考试知识点分享(11)---CRD
  • JavaScript DOM 操作与事件处理全解析
  • BeanUtil.copyProperties()进行属性拷贝时如何忽略NULL值——CopyOptions配置详解
  • 高效管理Python环境:Miniforge、pyenv和Poetry深度对比与应用
  • 建筑业应用:机器人如何改变未来建筑业发展方向
  • 介绍一下 TCP方式程序的通讯,服务器机与客户机
  • 使用 DeepSeek 为 TDengine 创建专属知识库
  • 部署安装maven和mvnd
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | RandomChoicePicker(标签生成)
  • 西门子PLC读取梅安森风压传感器数据
  • 【2025】深度学习环境搭建记录
  • inet_addr()和inet_aton()函数详解
  • 【log4j2】将运行时变量注入日志、附性能对比与生产案例(动态日志实战)