昨天有一朋友让我帮忙找一款Word转PDF的软件,今天自己捣鼓出点成果封装个Helper供大家使用~

开源地址:https://github.com/dunitian/WordConvertPDF

软件下载:https://github.com/dunitian/WordConvertPDF/tree/master/Bin

封装了一个Helper类,供大家调用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Word;
using System.IO; namespace WordConvertPDF
{
public static class WordToPDFHelper
{
/// <summary>
/// Word转换成PDF(单个文件转换推荐使用)
/// </summary>
/// <param name="inputPath">载入完整路径</param>
/// <param name="outputPath">保存完整路径</param>
/// <param name="startPage">初始页码(默认为第一页[0])</param>
/// <param name="endPage">结束页码(默认为最后一页)</param>
public static bool WordToPDF(string inputPath, string outputPath, int startPage = 0, int endPage = 0)
{
bool b = true; #region 初始化
//初始化一个application
Application wordApplication = new Application();
//初始化一个document
Document wordDocument = null;
#endregion #region 参数设置~~我去累死宝宝了~~(所谓的参数都是根据这个方法来的:ExportAsFixedFormat)
//word路径
object wordPath = Path.GetFullPath(inputPath); //输出路径
string pdfPath = Path.GetFullPath(outputPath); //导出格式为PDF
WdExportFormat wdExportFormat = WdExportFormat.wdExportFormatPDF; //导出大文件
WdExportOptimizeFor wdExportOptimizeFor = WdExportOptimizeFor.wdExportOptimizeForPrint; //导出整个文档
WdExportRange wdExportRange = WdExportRange.wdExportAllDocument; //开始页码
int startIndex = startPage; //结束页码
int endIndex = endPage; //导出不带标记的文档(这个可以改)
WdExportItem wdExportItem = WdExportItem.wdExportDocumentContent; //包含word属性
bool includeDocProps = true; //导出书签
WdExportCreateBookmarks paramCreateBookmarks = WdExportCreateBookmarks.wdExportCreateWordBookmarks; //默认值
object paramMissing = Type.Missing; #endregion #region 转换
try
{
//打开word
wordDocument = wordApplication.Documents.Open(ref wordPath, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing);
//转换成指定格式
if (wordDocument != null)
{
wordDocument.ExportAsFixedFormat(pdfPath, wdExportFormat, false, wdExportOptimizeFor, wdExportRange, startIndex, endIndex, wdExportItem, includeDocProps, true, paramCreateBookmarks, true, true, false, ref paramMissing);
}
}
catch (Exception ex)
{
b = false;
}
finally
{
//关闭
if (wordDocument != null)
{
wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);
wordDocument = null;
} //退出
if (wordApplication != null)
{
wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
wordApplication = null;
}
} return b;
#endregion
} /// <summary>
/// Word转换成PDF(批量文件转换推荐使用)
/// </summary>
/// <param name="inputPath">文件完整路径</param>
/// <param name="outputPath">保存路径</param>
public static int WordsToPDFs(string[] inputPaths, string outputPath)
{
int count = 0; #region 初始化
//初始化一个application
Application wordApplication = new Application();
//初始化一个document
Document wordDocument = null;
#endregion //默认值
object paramMissing = Type.Missing; for (int i = 0; i < inputPaths.Length; i++)
{
#region 参数设置~~我去累死宝宝了~~(所谓的参数都是根据这个方法来的:ExportAsFixedFormat)
//word路径
object wordPath = Path.GetFullPath(inputPaths[i]); //获取文件名
string outputName = Path.GetFileNameWithoutExtension(inputPaths[i]); //输出路径
string pdfPath = Path.GetFullPath(outputPath + @"\" + outputName + ".pdf"); //导出格式为PDF
WdExportFormat wdExportFormat = WdExportFormat.wdExportFormatPDF; //导出大文件
WdExportOptimizeFor wdExportOptimizeFor = WdExportOptimizeFor.wdExportOptimizeForPrint; //导出整个文档
WdExportRange wdExportRange = WdExportRange.wdExportAllDocument; //开始页码
int startIndex = 0; //结束页码
int endIndex = 0; //导出不带标记的文档(这个可以改)
WdExportItem wdExportItem = WdExportItem.wdExportDocumentContent; //包含word属性
bool includeDocProps = true; //导出书签
WdExportCreateBookmarks paramCreateBookmarks = WdExportCreateBookmarks.wdExportCreateWordBookmarks; #endregion #region 转换
try
{
//打开word
wordDocument = wordApplication.Documents.Open(ref wordPath, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing);
//转换成指定格式
if (wordDocument != null)
{
wordDocument.ExportAsFixedFormat(pdfPath, wdExportFormat, false, wdExportOptimizeFor, wdExportRange, startIndex, endIndex, wdExportItem, includeDocProps, true, paramCreateBookmarks, true, true, false, ref paramMissing);
}
count++;
}
catch (Exception ex)
{
}
finally
{
//关闭
if (wordDocument != null)
{
wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);
wordDocument = null;
}
}
} //退出
if (wordApplication != null)
{
wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
wordApplication = null;
}
return count;
#endregion
} #region 其他
/// <summary>
/// Word转换成PDF(带日记)
/// </summary>
/// <param name="inputPath">载入完整路径</param>
/// <param name="outputPath">保存完整路径</param>
/// <param name="log">转换日记</param>
/// <param name="startPage">初始页码(默认为第一页[0])</param>
/// <param name="endPage">结束页码(默认为最后一页)</param>
public static void WordToPDFCreateLog(string inputPath, string outputPath, out string log, int startPage = 0, int endPage = 0)
{
log = "success"; #region 初始化
//初始化一个application
Application wordApplication = new Application();
//初始化一个document
Document wordDocument = null;
#endregion #region 参数设置~~我去累死宝宝了~~
//word路径
object wordPath = Path.GetFullPath(inputPath); //输出路径
string pdfPath = Path.GetFullPath(outputPath); //导出格式为PDF
WdExportFormat wdExportFormat = WdExportFormat.wdExportFormatPDF; //导出大文件
WdExportOptimizeFor wdExportOptimizeFor = WdExportOptimizeFor.wdExportOptimizeForPrint; //导出整个文档
WdExportRange wdExportRange = WdExportRange.wdExportAllDocument; //开始页码
int startIndex = startPage; //结束页码
int endIndex = endPage; //导出不带标记的文档(这个可以改)
WdExportItem wdExportItem = WdExportItem.wdExportDocumentContent; //包含word属性
bool includeDocProps = true; //导出书签
WdExportCreateBookmarks paramCreateBookmarks = WdExportCreateBookmarks.wdExportCreateWordBookmarks; //默认值
object paramMissing = Type.Missing; #endregion #region 转换
try
{
//打开word
wordDocument = wordApplication.Documents.Open(ref wordPath, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing);
//转换成指定格式
if (wordDocument != null)
{
wordDocument.ExportAsFixedFormat(pdfPath, wdExportFormat, false, wdExportOptimizeFor, wdExportRange, startIndex, endIndex, wdExportItem, includeDocProps, true, paramCreateBookmarks, true, true, false, ref paramMissing);
}
}
catch (Exception ex)
{
if (ex != null) { log = ex.ToString(); }
}
finally
{
//关闭
if (wordDocument != null)
{
wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);
wordDocument = null;
} //退出
if (wordApplication != null)
{
wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
wordApplication = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
#endregion
}
#endregion
}
}

  

【源码】Word转PDF V1.0.1 小软件,供新手参考的更多相关文章

  1. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  2. [笔记] Ubuntu 18.04源码编译安装OpenCV 4.0流程

    标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 CUDA:10.0 c ...

  3. Android音乐播放器源码(歌词.均衡器.收藏.qq5.0菜单.通知)

    一款Android音乐播放器源码,基本功能都实现了 qq5.0菜单(歌词.均衡器.收藏.qq5.0菜单.通知) 只有向右滑动出现,菜单键和指定按钮都还没有添加. 源码下载:http://code.66 ...

  4. springmvc工作原理以及源码分析(基于spring3.1.0)

    springmvc是一个基于spring的web框架.本篇文章对它的工作原理以及源码进行深入分析. 一.springmvc请求处理流程 二.springmvc的工作机制 三.springmvc核心源码 ...

  5. CentOS 6.4 64位 源码编译hadoop 2.2.0

    搭建环境:Centos 6.4 64bit 1.安装JDK 参考这里2.安装mavenmaven官方下载地址,可以选择源码编码安装,这里就直接下载编译好的wget http://mirror.bit. ...

  6. 源码编译安装 PHP5.5.0,解决curl_exec访问HTTPS返回502错误的问题(修改PATH路径)

    最近碰到一个奇怪的问题, PHP使用 curl_exec 访问 HTTPS 网页时, 返回502错误, 访问HTTP网页时没有问题,  用   echo   phpinfo() ;  查看, 支持op ...

  7. Android -- 从源码带你从EventBus2.0飚到EventBus3.0(一)

    1,最近看了不少的面试题,不管是百度.网易.阿里的面试题,都会问到EventBus源码和RxJava源码,而自己只是在项目中使用过,却没有去用心的了解它底层是怎么实现的,所以今天就和大家一起来学习学习 ...

  8. 源码阅读之mongoengine(0)

    最近工作上用到了mongodb,之前只是草草了解了一下.对于NoSQL的了解也不是太多.所以想趁机多学习一下. 工作的项目直接用了pymongo来操作直接操作mongodb.对于用惯了Djongo O ...

  9. 【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); $.fn = { ready: function(callback){ // don ...

随机推荐

  1. Codeforces CF#628 Education 8 A. Tennis Tournament

    A. Tennis Tournament time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. Chrome一直提示“adobe flash player 因过期而遭阻止” ,如何解决?

    完全不用安装最新版的 Chrome,只需要将 Flash 组件安装一下最新版即可. 并且这里需要的不是网上随处可见的 NPAPI 版本,而是冷门的 PPAPI 版本. 请收藏好这个链接,是某位大牛从 ...

  3. python基础04 运算

    数学运算 print 2+2  #加法 print 1.3-4 #剪法 print 3*5 #乘法 print 4.5/1.5 #除法 print 3**2   #乘方 print 10%3   #求 ...

  4. [RxJava^Android]项目经验分享 --- RxLifecycle功能实现分析(一)

      最近在研究RxJava自定义操作符的实现原理,发现成型的项目案例较少.突然想起在项目中应用的RxLifecycle是使用自定义操作符,便拿来研究了一下.分析之前,跟大家了解一些相关操作符和RxLi ...

  5. React-Native需要css和布局-20160902

    import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, } from 'reac ...

  6. 不使用return false阻止event默认行为

    当我们点击一个a标签时,如果这个标签的href指向了另一个地址,那么浏览器会默认跳转到此地址.在页面中,有时我们需要触发点击事件,但是又不想触发默认行为,就需要阻止event的默认行为了. 常规做法 ...

  7. HashMap实现缓存(二)

    package com.cache; import java.util.*; //Description: 管理缓存 //可扩展的功能:当chche到内存溢出时必须清除掉最早期的一些缓存对象,这就要求 ...

  8. Win8.1开机黑屏一段时间才能登录

    最近发现开机后有一段时间黑屏过后才能进人登录界面,并且时间越来越长,网上查询了很多方法都没有效果,只能自己找了. 网上有一种方法提到用msconfig诊断判断或者安全启动来查看是否有黑屏,于是试了一下 ...

  9. 控制 Android 程序使用的内存

    如何控制应用程序使用的内存? 1. 记得关闭启动的服务 当服务中的任务完成后,要记得停止该服务.可以考虑使用 IntentService,因为 IntentService 在完成任务后会自动停止. 2 ...

  10. Kafka设计解析(四)- Kafka Consumer设计解析

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/08/09/KafkaColumn4 摘要 本文主要介绍了Kafka High Level Con ...