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

转自:http://www.cnblogs.com/hans_gis/archive/2013/05/25/3098558.html

微软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)