天天看點

c# word轉PDF

這裡主要提供一種将word文檔轉成PDF文檔的實作;

具體實作看c# 代碼:要引入Microsoft.Office.Interop.Word;版本12.0.0.0

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

using Microsoft.Office.Interop.Word;
//Office 命名空間
namespace OfficeToPdf
{
    //excel 類
    class WordConverter
    {
        //構造函數
        public WordConverter()
        { }

        /// <summary>
        /// 轉換word 成PDF文檔
        /// </summary>
        /// <param name="_lstrInputFile">原檔案路徑</param>
        /// <param name="_lstrOutFile">pdf檔案輸出路徑</param>
        /// <returns>true 成功</returns>
        public bool ConverterToPdf(string _lstrInputFile, string _lstrOutFile)
        {
            Microsoft.Office.Interop.Word.Application lobjWordApp = null;
            Document objDoc = null;
            object lobjMissing = System.Reflection.Missing.Value;
            object lobjSaveChanges = null;
           
            try
            {
                Object lobjFileName = (Object)_lstrInputFile;
                objDoc = lobjWordApp.Documents.Open(ref lobjFileName, ref lobjMissing, ref lobjMissing,
                    ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing,
                    ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing);
                objDoc.Activate();

                Object lobjOutPutFileName = (Object)_lstrOutFile;
                object lobjFileFormat = WdSaveFormat.wdFormatPDF; //儲存格式為PDF

                objDoc.SaveAs(ref lobjOutPutFileName,ref lobjFileFormat, ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing,
                    ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing, ref lobjMissing,
                    ref lobjMissing, ref lobjMissing, ref lobjMissing);

                lobjSaveChanges = WdSaveOptions.wdDoNotSaveChanges;

                ((_Document)objDoc).Close(ref lobjSaveChanges, ref lobjMissing, ref lobjMissing);
                objDoc = null;
                ((_Application)lobjWordApp).Quit(ref lobjSaveChanges, ref lobjMissing, ref lobjMissing);
                lobjWordApp = null;
               
            }
            catch (Exception ex)
            {
                //其他日志操作;
                return false;
            }
            finally
            {
                if (objDoc != null)
                {
                    ((_Document)objDoc).Close(ref lobjSaveChanges, ref lobjMissing, ref lobjMissing);
                    Marshal.ReleaseComObject(objDoc);
                    objDoc = null;

                }
                if (lobjWordApp != null)
                {
                    ((_Application)lobjWordApp).Quit(ref lobjSaveChanges, ref lobjMissing, ref lobjMissing);
                    Marshal.ReleaseComObject(lobjWordApp);
                    lobjWordApp = null;
                }
               
                //主動激活垃圾回收器,主要是避免超大批量轉文檔時,記憶體占用過多,而垃圾回收器并不是時刻都在運作!
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            return true;
        }
    }
}

           

繼續閱讀