【源码】C#开发之Word批量转PDF

微软Office Word本身已经提供了另存为PDF文档功能,对于少量文档,手工使用该方式进行Word转换为PDF尚可,一旦需要处理大量的文档,可能就显得有些捉襟见肘了。不过对于已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF了。

源码奉上:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.IO;

using System.Text;

using System.Threading;

using Microsoft.Office.Interop.Word;



namespace Word2Pdf

{

    class Program

    {

        public static Microsoft.Office.Interop.Word.Document wordDocument { get; set; }



        static void Main(string[] args)

        {

            string strFolder_f = null;

            string strFolder_t = null;

            string strFlag = null;

            System.Console.WriteLine("请输入Word文档所在目录");

            strFolder_f = System.Console.ReadLine();

            if (strFolder_f.Substring(strFolder_f.Length - 1, 1) != "\\")

            {

                strFolder_f += "\\";

            }

            strFolder_t = strFolder_f + @"pdf\";

            System.Console.WriteLine("\n创建PDF文档,请确认!");

            System.Console.Write("y(yes) or n(no) ?  ");

            strFlag = System.Console.ReadLine();

            if (strFlag == "y")

            {

                System.Console.WriteLine("\n开始创建PDF文档...");

                CheckFolder(strFolder_t);

                string strPdfFile = null;

                DirectoryInfo TheFolder = new DirectoryInfo(strFolder_f);



                Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();

                object paramMissing = Type.Missing;



                foreach (FileInfo NextFile in TheFolder.GetFiles())

                {

                    strPdfFile = Path.ChangeExtension(strFolder_t + NextFile.Name, ".pdf");

                    wordDocument = appWord.Documents.Open(NextFile.FullName);

                    if (wordDocument != null)

                    {

                        wordDocument.ExportAsFixedFormat(strPdfFile, WdExportFormat.wdExportFormatPDF);

                        wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);

                        wordDocument = null;

                    }

                    System.Console.Write(".. ");

                }



                if (appWord != null)

                {

                    appWord.Quit(ref paramMissing, ref paramMissing, ref paramMissing);

                    appWord = null;

                }

            }



            //KillProcessByName("WINWORD");

            GC.Collect();

            GC.WaitForPendingFinalizers();



            System.Console.Write("\n处理完毕,输入任意键退出");

            System.Console.ReadKey();

        }



        static void CheckFolder(string strFolderPath)

        {

            if (Directory.Exists(strFolderPath))

            {

                Directory.Delete(strFolderPath, true);

                Directory.CreateDirectory(strFolderPath);

            }

            else

            {

                Directory.CreateDirectory(strFolderPath);

            }

        }



        static void KillProcessByName(string name)

        {

            Process[] ps = Process.GetProcessesByName(name);

            foreach (Process p in ps)

            {

                if (p.ProcessName == name)

                    p.Kill();

            }

        }

    }

}

需要注意的两个问题:①及时关闭代码中所打开的文档,见49行,否则会产生临时文件;②及时关闭“WINWORD”线程,否则所处理的Word文档会一直处于被该线程占用的情况。

 

 

你可能感兴趣的:(word)