使用 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 的通用后端控制器代码:

cs 复制代码
[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/macOS
    var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);

    // 7. 设置 LibreOffice 执行路径
    // Windows 下可以是 "C:\\Program Files\\LibreOffice\\program\\soffice.exe"
    // Linux/macOS 下一般就是 "soffice",前提是已加入 PATH
    var 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,  // 捕获 stdout
            RedirectStandardError = true,   // 捕获 stderr
            UseShellExecute = 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";

✅ 总结

项目 Windows Linux(容器)
LibreOffice 安装路径 C:\Program Files\LibreOffice apt install libreoffice
中文支持 系统字体已集成 安装 fonts-noto-cjk
调用方式 soffice.exe soffice
路径注意事项 路径中避免中文空格 必须避免中文
性能 快速 第一次启动稍慢,可预热处理
相关推荐
xushichang123_9 小时前
如何观看 2026 亚马逊云科技中国峰会全场主题演讲与技术分论坛内容?
大数据·人工智能
Suxing99 小时前
C语言基础分享:从“租房”到“拆迁”,C语言动态内存管理
java·数据结构·算法
减瓦9 小时前
别让 Java 版本选择变成生产事故
java
ikun_文9 小时前
Java集合框架Collection拓展进阶
java·java ee
Java尧哥学AI9 小时前
35岁Java程序员学AI Day2:从装环境到写第一行Python,踩了3个坑
python
SomeB1oody9 小时前
【RustyML入门】3.8. 正则化与归一化层
开发语言·后端·机器学习·rust·教程
天疆说9 小时前
04 稳定性与性能调优实录:OOM 崩溃、并发槽位、前缀缓存与 DSpark 调参
linux·运维·缓存
星卯教育tony9 小时前
NOI Linux 2.0 服务器多用户网页桌面部署方案(腾讯云轻量Ubuntu20.04专属版 CSP复赛比赛环境搭建免安装虚拟机 )
linux·服务器·腾讯云
__zRainy__9 小时前
Node系列 · Node基础:全局变量与全局对象
开发语言·前端·javascript
码匠许师傅9 小时前
【C++ 面试真题】聊聊 C++ 的虚函数和多态
java·c++·面试