使用 LibreOffice 实现各种文档格式转换(支持任何开发语言调用 和 Linux + Windows 环境)[全网首发,保姆级教程,建议收藏]

以下能帮助你可以使用任何开发语言,在任何平台都能使用 LibreOffice 实现 Word、Excel、PPT 等文档的自动转换,目前展示在 ASP.NET Core 中为 PDF的实战案例,其他的文档格式转换逻辑同理。


📦 1. 安装 LibreOffice

🐧 Linux(Docker 或 Ubuntu)中安装 LibreOffice

Dockerfile 或本机终端中运行:

sudo apt-get update
sudo apt-get install -y libreoffice fonts-noto-cjk

或者 Dockerfile 示例:

RUN apt-get update && \apt-get install -y libreoffice fonts-noto-cjk && \apt-get clean && \rm -rf /var/lib/apt/lists/*

🧩 Windows 安装 LibreOffice

  1. 下载 LibreOffice Windows 安装包

  2. 安装路径一般为:

    C:\Program Files\LibreOffice\program\soffice.exe
    
  3. 将 LibreOffice 加入系统环境变量

    • 打开“系统环境变量”

    • C:\Program Files\LibreOffice\program 添加到系统 PATH 中


⚙️ 2. 在 ASP.NET Core 中实现文档转 PDF

以下是一个兼容 Windows + Linux 的通用后端控制器代码:

[HttpPost("convert-to-pdf")]
public async Task<IActionResult> ConvertToPdf(IFormFile file)
{// 1. 检查是否上传了文件if (file == null || file.Length == 0)return BadRequest("No file uploaded.");// 2. 创建临时文件夹(系统临时目录下的 /docconvert)var tempDir = Path.Combine(Path.GetTempPath(), "docconvert");Directory.CreateDirectory(tempDir); // 确保文件夹存在// 3. 构造输入文件路径(带唯一 ID)var inputPath = Path.Combine(tempDir, Guid.NewGuid() + Path.GetExtension(file.FileName));// 4. 构造输出文件路径(同名但改为 .pdf)var outputPath = Path.ChangeExtension(inputPath, ".pdf");// 5. 保存上传的文件到临时路径await using (var stream = new FileStream(inputPath, FileMode.Create))await file.CopyToAsync(stream);// 6. 判断当前系统平台:Windows 或 Linux/macOSvar isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);// 7. 设置 LibreOffice 执行路径// Windows 下可以是 "C:\\Program Files\\LibreOffice\\program\\soffice.exe"// Linux/macOS 下一般就是 "soffice",前提是已加入 PATHvar sofficePath = isWindows ? "soffice.exe" : "soffice";// 8. 构建命令行参数:无头模式、转换为 pdf、指定输出目录var args = $"--headless --convert-to pdf \"{inputPath}\" --outdir \"{tempDir}\"";// 9. 创建进程配置var process = new Process{StartInfo = new ProcessStartInfo{FileName = sofficePath,         // 可执行文件路径Arguments = args,               // 命令参数RedirectStandardOutput = true,  // 捕获 stdoutRedirectStandardError = true,   // 捕获 stderrUseShellExecute = false,        // 必须为 false 以重定向输出CreateNoWindow = true           // 不显示命令行窗口}};// 10. 启动转换进程process.Start();// 11. 可选:捕获转换日志(用于调试)string output = await process.StandardOutput.ReadToEndAsync();string error = await process.StandardError.ReadToEndAsync();// 12. 等待 LibreOffice 完成转换await process.WaitForExitAsync();// 13. 检查输出 PDF 是否生成成功if (!System.IO.File.Exists(outputPath))return StatusCode(500, $"PDF conversion failed. Error: {error}");// 14. 读取生成的 PDF 并返回给客户端var fileBytes = await System.IO.File.ReadAllBytesAsync(outputPath);return File(fileBytes, "application/pdf", Path.GetFileName(outputPath));
}

🧪 测试方法

你可以使用 Postman 或 Swagger 上传 Word、Excel、PPT、CSV、TXT 文件,接口会自动返回 PDF 文件。


📁 支持的输入格式

输入格式支持
.doc, .docx✅ Word 转 PDF
.xls, .xlsx✅ Excel 转 PDF
.ppt, .pptx✅ PPT 转 PDF
.odt, .ods, .odp✅ Libre 格式也支持
.csv, .html, .txt✅ 简单格式也支持

📌 注意事项

  • 中文乱码问题:Linux 下请安装 fonts-noto-cjk,Windows 安装系统字体即可。

  • 路径中不建议含中文(尤其是 Linux 容器),否则 soffice 可能失败。

  • soffice.exe 路径问题

    • Windows 如果没加入 PATH,可写完整路径:

      var sofficePath = @"C:\Program Files\LibreOffice\program\soffice.exe";
      

✅ 总结

项目WindowsLinux(容器)
LibreOffice 安装路径C:\Program Files\LibreOfficeapt install libreoffice
中文支持系统字体已集成安装 fonts-noto-cjk
调用方式soffice.exesoffice
路径注意事项路径中避免中文空格必须避免中文
性能快速第一次启动稍慢,可预热处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWS stop/start 使实例存储lost + 注意点

先看一下官方的说明: EC2有一个特性,当执行stop/start操作(注意,这个并不是重启/reboot,而是先停止/stop,再启动/start)时,该EC2会迁移到其它的底层硬件上。 对于实例存储来说,由于实例存储是由其所在的底层硬件来提供的,此时相当于分配到了一块全新的空的磁盘。 但是从…

跨域问题详解

目录 一、什么是跨域问题&#xff1f; 二、跨域问题出现的原因 三、跨域的解决方案 四、结语 在 Web 开发的世界里&#xff0c;当我们尝试通过 AJAX 等技术获取不同源的资源时&#xff0c;常常会遇到 “跨域问题”。这不仅是前端开发者频繁遭遇的技术障碍&#xff0c;也是保…

VSCode 插件 GitLens 破解方法

文章目录 1. 安装指定版本2. 修改插件文件3. 重启 VSCode 1. 安装指定版本 在 VSCode 中打开扩展&#xff08;Ctrl Shift X&#xff09;&#xff0c;搜索 GitLens&#xff0c;右键点击 安装特定版本&#xff0c;在弹出的窗口中选择 17.0.2&#xff0c;然后等待安装完成。 2…

JavaScript的三大核心组成:ECMAScript、DOM与BOM

JavaScript的三大核心组成&#xff1a;ECMAScript、DOM与BOM 在前端开发领域&#xff0c;JavaScript是构建动态网页和交互式应用的核心语言。然而&#xff0c;许多人对JavaScript的组成缺乏清晰的认识。实际上&#xff0c;JavaScript并非单一的语言规范&#xff0c;而是由三个…

JC/T 2490-2019 石灰基单层装饰砂浆检测

石灰基单层装饰砂浆是指由石灰等无机胶凝材料、级配砂、外加剂或无机颜料制成的具有装饰功能的干粉饰面材料。 JC/T 2490-2019石灰基单层装饰砂浆检测项目&#xff1a; 测试项目 测试方法 外观 JC/T 2490 干密度 JC/T 2490 凝结时间 JGJ/T 70 抗折强度 GB/T 17671 抗…

用算法实现 用统计的方式实现 用自然语言处理的方法实现 用大模型实现 专利精益化统计分析

我们可以从算法、统计、自然语言处理&#xff08;NLP&#xff09;和大型语言模型&#xff08;LLM&#xff09;这四个方面&#xff0c;探讨如何实现对专利社区、作者重要性以及共同作者贡献度的分析。 1. 如何体现专利的社区 (社群效应) &#x1f916; 用算法实现 网络分析算法…

深入浅出IIC协议 - 从总线原理到FPGA实战开发 -- 第五篇:多主仲裁与错误恢复

第五篇&#xff1a;多主仲裁与错误恢复 副标题 &#xff1a;从总线冲突到故障自愈——构建高可靠I2C系统的终极指南 1. 多主仲裁机制 1.1 仲裁原理与硬件实现 仲裁流程图解 &#xff1a; 仲裁失败处理 &#xff1a; 立即切换为从机模式 监测总线空闲后重试&#xff08;随机…

146. LRU Cache

题目描述 146. LRU Cache 哈希表双向链表 详见代码和注释&#xff1a; class LRUCache { private:int capacity_{0};int size_{0};struct Node{int key{0};int val{0};Node* pre{nullptr};Node* next{nullptr};Node(int k,int v,Node* pr,Node* nex):key(k),val(v),pre(pr),…

docker network 自定义网络配置与管理指南

Docker 自定义网络配置与管理指南 1. 网络基础概念 Docker 网络是容器间通信和与外部世界交互的基础。通过自定义网络&#xff0c;可以实现容器间的隔离、静态 IP 分配和服务发现。 关键术语&#xff1a; 子网(Subnet)&#xff1a;IP 地址的逻辑分组&#xff0c;例如 172.1…

linux strace调式定位系统问题

strace 的基本功能 strace 的主要功能包括&#xff1a; 跟踪系统调用&#xff1a;显示进程执行时调用的系统函数及其参数和返回值。监控信号&#xff1a;记录进程接收到的信号。性能分析&#xff1a;统计系统调用的执行时间和次数。调试支持&#xff1a;帮助定位程序崩溃、性…

告别手抖困扰:全方位健康护理指南

手抖&#xff0c;医学上称为震颤&#xff0c;是常见的身体症状&#xff0c;可能由多种原因引发&#xff0c;了解其成因并采取科学护理措施&#xff0c;对改善症状、维护健康至关重要。 生理性手抖往往因情绪激动、过度劳累、大量饮用咖啡或酒精等引起&#xff0c;这种手抖通常较…

华为2025年校招笔试真题手撕教程(一)

一、题目 输入&#xff1a; 第一行为记录的版本迭代关系个数N&#xff0c;范围是[1&#xff0c;100000]; 第二行到第N1行&#xff1a;每行包含两个字符串&#xff0c;第一个字符串为当前版本&#xff0c;第二个字符串为前序版本&#xff0c;用空格隔开。字符串包含字符个数为…

Qt 的多线程

Qt 中的多线程主要用于处理耗时操作&#xff0c;避免阻塞主线程&#xff08;UI 线程&#xff09;&#xff0c;从而提高程序的响应性和运行效率。以下是 Qt 多线程的相关技术总结&#xff1a; 常见的多线程实现方式 继承 QThread 类 &#xff1a;最基础的实现方式&#xff0c;具…

基于ITcpServer/IHttpServer框架的HTTP服务器

https://www.cnblogs.com/MuZhangyong/p/16839231.html 在基于ITcpServer/IHttpServer框架的HTTP服务器实现中,OnBody方法主要用于接收HTTP请求体数据,而触发HTTP响应通常是在OnMessageComplete方法中完成。以下是完整的响应触发机制说明: sequenceDiagramClient->>…

Windows 下 Qt 项目配置 FFmpeg 简明指南

一、作用 在qt项目中配置ffmpeg库 二、步骤 1、直接使用已经编译好的ffmpeg库文件&#xff0c;分为win32版本和win64版本&#xff1b; 2、win32版本下载地址&#xff1a;https://github.com/sudo-nautilus/FFmpeg-Builds-Win32/releases/tag/latest 3、win64版本下载地址&a…

Attu下载 Mac版与Win版

通过Git地址下载 Mac 版选择对于的架构进行安装 其中遇到了安装不成功&#xff0c;文件损坏等问题 一般是两种情况导致 1.安装版本不对 2.系统权限限制 https://www.cnblogs.com/similar/p/11280162.html打开terminal执行以下命令 sudo spctl --master-disable安装包Git下载地…

SpringBoot3集成Oauth2.1——5资源地址配置

配置问题说明 如下所示&#xff0c;代码配置了两个&#xff0c;过滤器&#xff0c;一个是资源保护&#xff0c;一个是不保护。 /** Description: 配置需要保护的资源* author: 胡涛* mail: hutao_2017aliyun.com* date: 2025年5月23日 下午2:28:20*/BeanOrder(2)public Securi…

Python urllib.parse 模块中的 urljoin 方法

Python urllib.parse 模块中的 urljoin 方法 urljoin 是 Python 标准库中 urllib.parse 模块的一个方法&#xff0c;用于将基础 URL 和相对路径拼接成完整的 URL。它会根据传入的基础 URL 自动处理协议、域名以及路径的部分匹配逻辑。 以下是关于该方法的具体说明和示例&…

AI大模型和SpringAI简介

一、Spring AI 简介 SpringAI整合了全球&#xff08;主要是国外&#xff09;的大多数大模型&#xff0c;而且对于大模型开发的三种技术架构都有比较好的封装和支持&#xff0c;开发起来非常方便。 不同的模型能够接收的输入类型、输出类型不一定相同。SpringAI根据模型的输入…

在TIA 博途中下载程序时找不到对应的网卡怎么办?

1. 检查物理连接 确认网线已正确连接PLC和PC&#xff0c;接口指示灯正常。 尝试更换网线或交换机端口&#xff0c;排除硬件故障。 2. 确认网卡驱动已安装 设备管理器检查&#xff1a; 右键点击“此电脑” → “管理” → “设备管理器”。 展开“网络适配器”&#xff0c;确…