前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有将Word文档转换PDF的服务了,用起来还是不错的。

  下面,我们就来看看这个服务,如何将一个Word文档库批量转换成PDF文件,或者,将单一Word文档转换为PDF文档。

一、             效果展示

新建测试Word文档,如下图:

新建文档库inputList作为word存放库,上传测试文档,如下图:

新建文档库outputList,作为输出PDF库,里面没有文件,如下图:

执行文件转换程序,执行后outputList文档库,如下图:

发现outputList还是没有文件,因为该服务是TimerJob的计时器任务,所以需要定时执行,去管理中心,找到该计划任务,立即运行,如下图:

再一次刷新outputList文档库,如下图:

下载一个PDF文件到本地,PDF阅读器打开,如下图:

二、             操作步骤

1、  新建项目,添加引用Microsoft.Office.Word.Server.dll,如下图:

位置如下:

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.Office.Word.Server\v4.0_15.0.0.0__71e9bce111e9429c\Microsoft.Office.Word.Server.dll

2、  引用类库

using Microsoft.Office.Word.Server;

using Microsoft.Office.Word.Server.Conversions;

主要用于转换操作的是Microsoft.Office.Word.Server.Conversions,详细请参考附后的msdn文档。

3、  编写添加核心代码之文档库批量转换

 //创建一个转换job
ConversionJob myJob = newConversionJob("Word Automation Services"); //设置转换job的UserToken、转换格式
myJob.UserToken = site.UserToken;
myJob.Settings.OutputFormat = SaveFormat.PDF;
myJob.Settings.OutputSaveBehavior = SaveBehavior.AppendIfPossible; //获取转出、转入文档库
SPList inputLibrary = web.Lists["inputlist"];
SPList outputLibrary = web.Lists["outputlist"]; //设置并执行转换job
myJob.AddLibrary(inputLibrary, outputLibrary);
myJob.Start();

4、  编写核心代码之单一文件转换

 //创建一个异步转换
SyncConverter sc = newSyncConverter("Word Automation Services"); //设置转换UserToken、转换类型等
sc.UserToken = site.UserToken;
sc.Settings.UpdateFields = true;
sc.Settings.OutputFormat = SaveFormat.PDF; //读取需要转换的文件
SPFolder docs = web.Folders[siteURL +
"/Word_Transfer"];
SPFile file = docs.Files[siteURL +
"/Word_Transfer/SharePoint2013Word转换PDF服务测试文档.docx"]; //生成保存转换后文档的文件流
Stream fStream = file.OpenBinaryStream();
SPFileStream stream = newSPFileStream(web, 0x1000); //启动异步转换
ConversionItemInfo info = sc.Convert(fStream, stream); //转换后文档添加到文档库
SPFile newFile = docs.Files.Add(
"SharePoint2013Word转换PDF服务测试文档.pdf",
stream,
true);

5、  单一文件转换效果图,如下图:

三、             Word Automation Services介绍

1、  简单介绍

  Word Automation Services 是一项新的 SharePoint Server 2010 技术,它允许以无人参与的方式从服务器端转换 Microsoft Word 支持的文档。简言之,Word Automation Services 采用 Word 客户端应用程序的“另存为…”功能并为服务器复制该功能。

  通过 Word Automation Services,以前需要您运行 Word 客户端应用程序的任务现在可以无人参与模式自动运行,并且比以前的解决方案更可靠、伸缩性更强。

  以上是msdn上,关于Word Automation Services的说明,msdn很清楚的说到,这个服务的本质是采用Word客户端另存为的功能,所以,打开和另存的格式,和word2013客户端基本一致。

2、  Word Automation Services体系结构

  如上图,可以看到Word Automation Services服务的原理,通过对象模型将操作进入队列管理器,排队等候计时器作业(TimerJob)定时执行,然后调用Word文件转换服务引擎,将转换后的文件存入SharePoint内容数据库。

  特别的是,这个服务并不需要在服务器端,安装Office Word各种版本,即可完成操作,并且支持SharePoint2010和SharePoint2013版本。

3、  Word Automation Services三个基本概念

  Word Automation Services 包含三个基本概念,即转换、转换作业和文档队列。转换是一个过程,在此过程中,Word Automation Services 会接收一个具有给定格式的文件,然后以不同的格式将该文件输出。例如,服务可以将 Word 2010 文档 (.docx) 转换为 PDF 文档。

所有转换都通过以下步骤进行:

Ø  创建一个转换作业。

Ø  提供该作业的设置(例如,所需的输出文件格式)。

Ø  向该作业添加一个或多个文件。

Ø  将该作业提交到文档队列。

  所有转换操作都基于转换作业 的创建或使用。转换作业将描述要转换的文件和要对这些文件执行的操作。每个文件都将构成一个转换项,并且每个转换项都将映射到一个转换作业。一个转换作业可包含多个转换项。

文档队列 是一个“先进先出”队列,Word Automation Services 使用它根据为转换作业设置的计划来启动转换。

4、  支持打开的文档格式

Ø  打开 XML 文件格式文档(.docx, .docm, .dotx, .dotm)。

Ø  Word 97-2003 文档(.doc, .dot)。

Ø  RTF 格式文件 (.rtf)。

Ø  单个文件网页(.mht, .mhtml)。

Ø  Word 2003 XML 文档 (.xml)。

Ø  Word XML 文档 (.xml)。

5、  保存 Word 可以保存的文档类型,除去支持以上支持打开的类型,还包括一下两种:

Ø  可移植文档格式 (PDF) 文件。

Ø  XML 纸张规范 (XPS) 文件。

四、             完整代码

1、文档库批量转换代码

using (SPSite site = new SPSite(siteURL))
{
using (SPWeb web = site.OpenWeb())
{
ConversionJob myJob = new ConversionJob("Word Automation Services"); myJob.UserToken = site.UserToken;
myJob.Settings.OutputFormat = SaveFormat.PDF;
myJob.Settings.OutputSaveBehavior = SaveBehavior.AppendIfPossible; SPList inputLibrary = web.Lists["inputlist"];
SPList outputLibrary = web.Lists["outputlist"]; myJob.AddLibrary(inputLibrary, outputLibrary);
myJob.Start();
}
}

2、文档单独转换代码

using (SPSite site = new SPSite(siteURL))
{
using (SPWeb web = site.OpenWeb())
{
SyncConverter sc = new SyncConverter("Word Automation Services"); sc.UserToken = site.UserToken;
sc.Settings.UpdateFields = true;
sc.Settings.OutputFormat = SaveFormat.PDF; SPFolder docs = web.Folders[siteURL +
"/Word_Transfer"];
SPFile file = docs.Files[siteURL +
"/Word_Transfer/SharePoint2013Word转换PDF服务测试文档.docx"]; Stream fStream = file.OpenBinaryStream();
SPFileStream stream = new SPFileStream(web, 0x1000);
ConversionItemInfo info = sc.Convert(fStream, stream); SPFile newFile = docs.Files.Add(
"SharePoint2013Word转换PDF服务测试文档.pdf",
stream,
true);
}
}

参考文献

Word Automation Services

http://msdn.microsoft.com/zh-cn/library/ee558278(v=office.14).aspx

SharePoint 2013 Word 转换PDF服务介绍及示例的更多相关文章

  1. SharePoint Word 转换PDF服务介绍及示例

    前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有 ...

  2. SharePoint 2013 中自定义WCF服务

    在使用SharePoint2013的时候,如果其他客户端 API 的组合不足,可以通过自定义 Web 服务扩展 SharePoint.默认情况下,SharePoint 2013 不仅支持创建自定义 A ...

  3. SharePoint 2013 配置启用搜索服务

    原文:SharePoint 2013 配置启用搜索服务 1.安装完毕SharePoint 2013,新建网站集,点击搜索,出现如下错误(因为没配置,别激动). 2.尝试启动服务器场中的服务之Share ...

  4. SharePoint 2013 术语和术语集介绍

    托管元数据是一个集中管理的术语的分层集合,我们可以定义术语和术语集,然后将其用作 SharePoint Server 2013 中项目的属性.简单的说,术语是一个可与 SharePoint Serve ...

  5. SharePoint 2013配置启用搜索服务

    1.安装完毕SharePoint 2013,新建网站集,点击搜索,出现如下错误(因为没配置,别激动). 2.尝试启动服务器场中的服务之SharePoint Server Search,提示新建搜索应用 ...

  6. openoffice excel word 转换pdf 支持本地调用和远程调用

    OpenOffice.org 是一套跨平台的办公室软件套件,能在Windows.Linux.MacOS X (X11)和 Solaris 等操作系统上执行.它与各个主要的办公室软件套件兼容.OpenO ...

  7. SharePoint 2013: Workflow Manager Backend 服务意外地终止

    一.环境:SharePoint 2013 + Workflow Manager 1.0 二.错误描述: Workflow Manager Backend 服务意外地终止,这种情况已经出现了 42106 ...

  8. SharePoint 2013 启用 查看PDF功能

    SharePoint 2013 默认不能直接Online (注:此Online非OWA概念,而是可以实现直接调用客户端软件实现对文档的编辑,保存之后同步上传)打开PDF(SharePoint 2013 ...

  9. Sharepoint 2013 启用搜做服务

    参考文件: http://www.cnblogs.com/jianyus/archive/2013/02/04/2891801.html 1. 创建好网站集,进入网站内容,点击搜素,会出现如下错误:( ...

随机推荐

  1. 如何变相的绕过QQ邮箱订阅的繁琐核审

    先看看正常流程:http://open.mail.qq.com/ 点击“接入订阅”==>申请接入==>登录一下 选择接入完全免费 大概流程就是这样: 下面我们说说快速接入的方法: 1.登录 ...

  2. 使用HTML5里的classList操作CSS类

    在HTML5 API里,页面DOM里的每个节点上都有一个classList对象,程序员可以使用里面的方法新增.删除.修改节点上的CSS类.使用classList,程序员还可以用它来判断某个节点是否被赋 ...

  3. 如何在文章/随笔中添加可运行的js代码

    <script type="text/javascript"> alert("你知道我是怎么弹出的吗?"); </script> 看大神 ...

  4. Web APi之认证(Authentication)两种实现方式后续【三】(十五)

    前言 之前一直在找工作中,过程也是令人着实的心塞,最后还是稳定了下来,博客也停止更新快一个月了,学如逆水行舟,不进则退,之前学的东西没怎么用,也忘记了一点,不过至少由于是切身研究,本质以及原理上的脉络 ...

  5. JQuery EasyUI datagrid 复杂表头处理

    下面是我项目中和网上收集的EasyUI的表头处理的,合适的拿去用吧. 例子1: $('#day_health').datagrid({                 url: "sqb_b ...

  6. C#中构造函数的作用

    C#中构造函数的作用 共同点: 都是实例化对象,初始化数据的 默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有, ...

  7. 深入instanceof

    本文转自这里 规范中 instanceof 运算符定义 11.8.6 The instanceof operator The production RelationalExpression: Rela ...

  8. 1Z0-053 争议题目解析707

    1Z0-053 争议题目解析707 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 707.Because of a logical corruption in the EMPLOY ...

  9. SSH整合时执行hibernate查询报错:java.lang.ClassCastException: com.ch.hibernate.Department_$$_javassist_0 cannot be cast to javassist.util.proxy

    今天在整合ssh三个框架时,有一个功能,是查询所有员工信息,且员工表和部门表是多对一的映射关系,代码能正常运行到查询得到一个List集合,但在页面展示的时候,就报异常了, java.lang.Clas ...

  10. struts2学习笔记--总结获取servletAPI的几种方式

    struts2的Action放弃了request,response等ServletAPI,使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用ser ...