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

使用 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.xdnf.cn/news/541189.html

相关文章:

  • 微软开放代理网络愿景
  • JVM 性能问题排查实战10连击
  • 微软宣布的五大重要事项|AI日报0520
  • mac上安装 Rust 开发环境
  • macOS 效率工具对比分析:Raycast、Alfred、uTools、Spotlight
  • 日志根因分析:Elastic Observability 的异常检测与日志分类功能
  • 游戏引擎学习第298天:改进排序键 - 第1部分
  • 从零开始创建React项目及制作页面
  • Android 绘制折线图
  • Java期末总复习 编程题(偏基础)
  • OSI 网络七层模型中的物理层、数据链路层、网络层
  • 利用basee64特性 -- BYUCTF 2025 JWTF
  • 数据库(二):ORM技术
  • 大模型(3)——RAG(Retrieval-Augmented Generation,检索增强生成)
  • 【SPIN】PROMELA数据与程序结构详解(SPIN学习系列--7)
  • 【大模型】SpringBoot 整合Spring AI 对接主流大模型平台实战详解
  • 【神经网络与深度学习】激活函数的可微可导
  • 频率非周期性失稳
  • Elasticsearch面试题带答案
  • 第 84 场周赛:翻转图像、字符串中的查找与替换、图像重叠、树中距离之和
  • 算法-数对的使用
  • 【八股战神篇】Java多线程高频面试题(JUC)
  • 2025.05.19【Connectedscatter】连接散点图详解
  • (C语言篇)处理字符串的四个基础函数
  • ARP 原理总结
  • 无刷直流水泵构成及工作原理详解--【其利天下技术】
  • 【回溯法】0-1背包问题 C/C++(附代码)
  • 【C++模板与泛型编程】实例化
  • lovart design 设计类agent的系统提示词解读
  • python调用pip模块,使用pip_install脚本,在IDE中运行自动记录安装包到requirements文件的代码示例