zoukankan      html  css  js  c++  java
  • 【源码】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文档会一直处于被该线程占用的情况。

     
  • 相关阅读:
    NBUT 1120 Reimu's Teleport (线段树)
    NBUT 1119 Patchouli's Books (STL应用)
    NBUT 1118 Marisa's Affair (排序统计,水)
    NBUT 1117 Kotiya's Incantation(字符输入处理)
    NBUT 1115 Cirno's Trick (水)
    NBUT 1114 Alice's Puppets(排序统计,水)
    188 Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV
    187 Repeated DNA Sequences 重复的DNA序列
    179 Largest Number 把数组排成最大的数
    174 Dungeon Game 地下城游戏
  • 原文地址:https://www.cnblogs.com/BoYu045535/p/3138265.html
Copyright © 2011-2022 走看看