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

简介: 原文 http://www.cnblogs.com/hans_gis/archive/2013/05/25/3098558.html 微软Office Word本身已经提供了另存为PDF文档功能,对于少量文档,手工使用该方式进行Word转换为PDF尚可,一旦需要处理大量的文档,可能就显得有些捉襟见肘了。

原文 http://www.cnblogs.com/hans_gis/archive/2013/05/25/3098558.html

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

源码奉上:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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文档会一直处于被该线程占用的情况。

 

 


作者:韩 锁
出处:http://www.cnblogs.com/hans_gis/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

目录
相关文章
|
1月前
|
前端开发 JavaScript 安全
C#一分钟浅谈:Blazor WebAssembly 开发
Blazor WebAssembly 是一个客户端框架,允许开发者使用C#和Razor语法构建Web应用。本文介绍了Blazor WebAssembly的基本概念、常见问题及解决方案,包括路由配置、数据绑定、异步操作、状态管理和性能优化等方面的内容,并分享了一些易错点及如何避免的方法。希望这些内容能帮助你在Blazor WebAssembly开发中少走弯路,提高开发效率。
99 51
|
1月前
|
开发框架 缓存 .NET
C# 一分钟浅谈:Blazor Server 端开发
Blazor Server 是基于 ASP.NET Core 的框架,允许使用 C# 和 Razor 语法构建交互式 Web 应用。本文介绍 Blazor Server 的基本概念、快速入门、常见问题及解决方案,帮助开发者快速上手。涵盖创建应用、基本组件、数据绑定、状态管理、跨组件通信、错误处理和性能优化等内容。
39 1
|
1月前
|
缓存 C# 开发者
C# 一分钟浅谈:Blazor Server 端开发
本文介绍了 Blazor Server,一种基于 .NET 的 Web 开发模型,允许使用 C# 和 Razor 语法构建交互式 Web 应用。文章从基础概念、创建应用、常见问题及解决方案、易错点及避免方法等方面详细讲解,帮助开发者快速上手并提高开发效率。
50 2
|
1月前
|
XML C# 开发工具
C# 删除Word文档中的段落
【11月更文挑战第3天】本文介绍了两种方法来操作 Word 文档:一是使用 `Microsoft.Office.Interop.Word` 库,适用于 Windows 环境下操作 Word 文档,需引用相应库并在代码中引入命名空间;二是使用 Open XML SDK,适用于处理 .docx 格式的文档,通过引用 `DocumentFormat.OpenXml` 库实现。文中提供了示例代码,展示了如何打开、删除段落并保存文档。
|
1月前
|
测试技术 Go C#
C#一分钟浅谈:ReSharper 插件增强开发效率
【10月更文挑战第25天】ReSharper 是 JetBrains 开发的一款 Visual Studio 插件,旨在提高 .NET 开发者的生产力。它通过代码分析、重构、导航等功能,帮助开发者避免常见错误,提升代码质量和开发效率。本文将通过具体代码案例,详细介绍 ReSharper 的常见功能及其应用。
42 1
|
1月前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
2月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
40 1
|
2月前
|
Java Apache Maven
将word文档转换成pdf文件方法
在Java中,将Word文档转换为PDF文件可采用多种方法:1) 使用Apache POI和iText库,适合处理基本转换需求;2) Aspose.Words for Java,提供更高级的功能和性能;3) 利用LibreOffice命令行工具,适用于需要开源解决方案的场景。每种方法都有其适用范围,可根据具体需求选择。
|
2月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
412 1
|
3天前
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
31 16