文章目錄
使用 C# 將 Word 檔(.docx .doc) 轉換為 PDF
同事想要將 user 上傳的 word 檔轉換為 pdf,降低內容被篡改的機會,記憶中 word 轉存成 PDF 功能的程式碼並不多,但印象模糊,於是趁這個機會順手紀錄一下,方便日後參考
本文使用的程式碼僅適合 已安裝
Word 的環境
Word 轉存為 PDF
不確定從哪一版 Word 開始(印象中從 2007 就有),只要透過另存新檔的方式就可以將 Word 轉存為 PDF
Word 轉 PDF 程式
安裝
Microsoft.Office.Interop.Word
NuGet 套件引用
Microsoft.Office.Interop.Word
using Microsoft.Office.Interop.Word;
程式碼
// docx 檔案位置 string sourcedocx = @"C:\sample.docx"; // PDF 儲存位置 string targetpdf = @"C:\output.pdf"; //建立 word application instance Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application(); //開啟 word 檔案 var wordDocument = appWord.Documents.Open(sourcedocx); //匯出為 pdf wordDocument.ExportAsFixedFormat(targetpdf, dExportFormat.wdExportFormatPDF); //關閉 word 檔 wordDocument.Close(); //結束 word appWord.Quit();
完整程式碼
using Microsoft.Office.Interop.Word; namespace Word2PDF { class Program { static void Main(string[] args) { // word 檔案位置 string sourcedocx = @"C:\sample.docx"; // PDF 儲存位置 string targetpdf = @"C:\output.pdf"; //建立 word application instance Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application(); //開啟 word 檔案 var wordDocument = appWord.Documents.Open(sourcedocx); //匯出為 pdf wordDocument.ExportAsFixedFormat(targetpdf, WdExportFormat.wdExportFormatPDF); //關閉 word 檔 wordDocument.Close(); //結束 word appWord.Quit(); } } }
出現多個 Word 背景執行作業 or 檔案使用中
錯誤畫面
問題原因:
- Word 背景執行 instance:未關閉 Word 元件
- Word 檔案使用中:Word 元件未關閉 Word 檔
解決方式
//關閉 word 檔 wordDocument.Close(); //結束 word appWord.Quit();
心得
經個人非正式測試 .doc
與 .docx
皆可正常使用,程式碼也非常簡短,只是嚴重缺點就是需要安裝 Word(印象中以前可以只安裝轉發套件,但此次測試發現無法使用,難道又是我記錯了嗎XD),這樣一來活生生的就需要在 AP server 上安裝 office,再加上授權問題,可能不是每個團隊都適合這麼做
當然市面上有很多方便的套件可以做到 Word 轉 PDF 的功能,只是身為一個不想手動轉檔的偷懶工程師,要說服公司買套件或是自費購買安裝在公司 server 都不是件容易的事,所以擇日再來分享一下個人的免套件免安裝 office 做法
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。