文章目錄
用 C# 將 PowerPoint 檔(.pptx .ppt) 轉換為 PDF
之前筆記 使用 C# 將 Word 檔(.docx .doc) 轉換為 PDF 紀錄到該如何使用 Word 內建 API 將 Word 轉存為 PDF,後來有網友問到 Excel 及 PowerPoint 轉存的狀況,為了不要給出錯誤的答案,當然要實際測試看看比較準囉,其中 Excel 轉存 PDF 程式碼已紀錄在 使用 C# 將 Excel 檔(.xlsx .xls) 轉換為 PDF,接著就是來看看 C# 在處理 PowerPoint 轉 PDF 有什麼不同吧
使用 C# 將 PowerPoint 轉為 PDF
安裝 NuGet 套件
Microsoft.Office.Interop.PowerPoint
引用
Microsoft.Office.Interop.PowerPoint
using Microsoft.Office.Interop.PowerPoint;
程式碼
// pptx 檔案位置 string sourcepptx = @"D:\Downloads\Docker.pptx"; // PDF 儲存位置 string targetpdf = @"D:\Downloads\Docker.pdf"; //建立 PowerPoint application instance Microsoft.Office.Interop.PowerPoint.Application appPPT = new Microsoft.Office.Interop.PowerPoint.Application(); //開啟 PowerPoint 檔案 var pptSlide = appPPT.Presentations.Open(sourcepptx); //匯出為 pdf pptSlide.ExportAsFixedFormat(targetpdf, PpFixedFormatType.ppFixedFormatTypePDF); //關閉 PowerPoint 檔 pptSlide.Close(); //結束 PowerPoint appPPT.Quit();
完整程式碼
using Microsoft.Office.Interop.PowerPoint; namespace pptx2pdf { class Program { static void Main(string[] args) { // pptx 檔案位置 string sourcepptx = @"D:\Downloads\Docker.pptx"; // PDF 儲存位置 string targetpdf = @"D:\Downloads\Docker.pdf"; //建立 PowerPoint application instance Microsoft.Office.Interop.PowerPoint.Application appPPT = new Microsoft.Office.Interop.PowerPoint.Application(); //開啟 PowerPoint 檔案 var pptSlide = appPPT.Presentations.Open(sourcepptx); //匯出為 pdf pptSlide.ExportAsFixedFormat(targetpdf, PpFixedFormatType.ppFixedFormatTypePDF); //關閉 PowerPoint 檔 pptSlide.Close(); //結束 PowerPoint appPPT.Quit(); } } }
出現 MsoTriState
沒有加入參考錯誤
錯誤訊息
The type 'MsoTriState' is defined in an assembly that is not referenced. You must add a reference to assembly 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'.
錯誤截圖
加入
office.dll
參考DLL 位置
C:\Windows\assembly\GAC_MSIL\office\15.0.0.0__71e9bce111e9429c
心得
前文有提到 Word 、 Excel 、PowerPoint 的程式碼略有不同,不同內容如下
namespace 不同
word
Microsoft.Office.Interop.Word
excel
Microsoft.Office.Interop.Excel
powerpoint
Microsoft.Office.Interop.PowerPoint
開檔 api 不同
word 使用
Documents
appWord.Documents.Open(sourcedocx);
excel 使用
Workbooks
appExcel.Workbooks.Open(sourcexlsx);
powerpoint 使用
Presentations
appPPT.Presentations.Open(sourcepptx);
export function 參數不同
word
- 先指定 pdf 儲存路徑
再使用
dExportFormat.wdExportFormatPDF
wordDocument.ExportAsFixedFormat(targetpdf, dExportFormat.wdExportFormatPDF);
excel
- 先指定匯出格式
XlFixedFormatType.xlTypePDF
再指定 pdf 儲存路徑
xlsxDocument.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, targetpdf);
- 先指定匯出格式
powerpoint
- 先指 pdf 儲存路徑
再指定匯出格式
PpFixedFormatType.ppFixedFormatTypePDF
pptSlide.ExportAsFixedFormat(targetpdf, PpFixedFormatType.ppFixedFormatTypePDF);
- 測試下來,只有 PowerPoint 需要加入 office.dll 的參考
依我個人的實際測試下來, PowerPoint 跟 Word 都沒有跑版問題(可能我的測試 case 沒用到太特殊的物件),而 Excel 跑版狀況就滿嚴重的,可能是 Excel 的使用情境本來就容易出現橫向延伸的狀況
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-28
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。