前言:在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. OpenCASCADE BRepTools

    OpenCASCADE BRepTools eryar@163.com Abstract. OpenCASCADE BRepTools provides utilities for BRep data ...

  2. react+redux教程(一)connect、applyMiddleware、thunk、webpackHotMiddleware

    今天,我们通过解读官方示例代码(counter)的方式来学习react+redux. 例子 这个例子是官方的例子,计数器程序.前两个按钮是加减,第三个是如果当前数字是奇数则加一,第四个按钮是异步加一( ...

  3. 深入探讨:标签(Tag)的各种设计方案

    首先,标签(Tag)是什么? 我的理解:用来具体区分某一类内容的标识,和标签类似的一个概念是分类(Category),有一个示例可以很好的区分它们两个,比如人类分为:白种人.黄种人和黑种人(可以看作分 ...

  4. Mysql5.0没有nvarchar,national

    mysql采用utf-8编码,而传统的数据库采用unicode,一个汉字要用两个unicode的char,而在mysql中由于使用了utf-8,所以无论汉字还是字母,都是一个长度的char,所以就不用 ...

  5. C# 保护Excel文档

    C# 保护Excel文档 说到保护excel文档,我们首先想到的是密码保护的方式,但excel与word有点不一样,一般情况下,每个excel工作薄都或多或少地含有一定数量的工作表,因此保护excel ...

  6. 前端自动化构建工具gulp的使用总结

    前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...

  7. MySQL入门03-MySQL配置安全性、易用性

    一.设定管理员用户和密码 二.处理test库权限隐患 三.自定义脚本提升易用性 中间定义文件 启动MySQL服务 关闭MySQL服务 快捷登录MySQL 四.设置开机自动启动MySQL服务 Refer ...

  8. HuffmanTree的浅析和在C#中的算法实现

    无论是在我们的开发项目中,还是在我们的日常生活中,都会较多的涉及到文件压缩.谈到文件压缩,可能会有人想问文件压缩到底是怎么实现的,实现的原理是什么,对于开发人员来说,怎么实现这样一个压缩的功能. 接下 ...

  9. ManagementClass类解析和C#如何获取硬件的相关信息

    在.NET的项目中,有时候需要获取计算机的硬件的相关信息,在C#语言中需要利用ManagementClass这个类来进行相关操作. 现在先来介绍一下ManagementClass类,首先看一下类的继承 ...

  10. RichTextBox实现鼠标右键(剪切,复制,粘贴)功能

    private static void InitRichTextBoxContextMenu(RichTextBox textBox) { //创建剪切子菜单 var cutMenuItem = ne ...