使用 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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82069.shtml
英文地址,請注明出處:http://en.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;確…