SharePoint 2013 Word 转换PDF服务介绍及示例
前言:在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服务介绍及示例的更多相关文章
- SharePoint Word 转换PDF服务介绍及示例
前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有 ...
- SharePoint 2013 中自定义WCF服务
在使用SharePoint2013的时候,如果其他客户端 API 的组合不足,可以通过自定义 Web 服务扩展 SharePoint.默认情况下,SharePoint 2013 不仅支持创建自定义 A ...
- SharePoint 2013 配置启用搜索服务
原文:SharePoint 2013 配置启用搜索服务 1.安装完毕SharePoint 2013,新建网站集,点击搜索,出现如下错误(因为没配置,别激动). 2.尝试启动服务器场中的服务之Share ...
- SharePoint 2013 术语和术语集介绍
托管元数据是一个集中管理的术语的分层集合,我们可以定义术语和术语集,然后将其用作 SharePoint Server 2013 中项目的属性.简单的说,术语是一个可与 SharePoint Serve ...
- SharePoint 2013配置启用搜索服务
1.安装完毕SharePoint 2013,新建网站集,点击搜索,出现如下错误(因为没配置,别激动). 2.尝试启动服务器场中的服务之SharePoint Server Search,提示新建搜索应用 ...
- openoffice excel word 转换pdf 支持本地调用和远程调用
OpenOffice.org 是一套跨平台的办公室软件套件,能在Windows.Linux.MacOS X (X11)和 Solaris 等操作系统上执行.它与各个主要的办公室软件套件兼容.OpenO ...
- SharePoint 2013: Workflow Manager Backend 服务意外地终止
一.环境:SharePoint 2013 + Workflow Manager 1.0 二.错误描述: Workflow Manager Backend 服务意外地终止,这种情况已经出现了 42106 ...
- SharePoint 2013 启用 查看PDF功能
SharePoint 2013 默认不能直接Online (注:此Online非OWA概念,而是可以实现直接调用客户端软件实现对文档的编辑,保存之后同步上传)打开PDF(SharePoint 2013 ...
- Sharepoint 2013 启用搜做服务
参考文件: http://www.cnblogs.com/jianyus/archive/2013/02/04/2891801.html 1. 创建好网站集,进入网站内容,点击搜素,会出现如下错误:( ...
随机推荐
- Android混淆代码
Android代码混淆是必须的,java层代码如果不做混淆等于把源代码送人了.那如何做混淆呢? 之前一般都是提到采用proguard.cfg,但使用新版本ADT后没有这个文件了,取而代之的是progu ...
- [转]浏览器退出之后php还会继续执行么?
原文链接:http://www.cnblogs.com/yjf512/p/5362025.html 前提:这里说的是典型的lnmp结构,nginx+php-fpm的模式 如果我有个php程序执行地非常 ...
- 学用MVC4做网站六后台管理:6.1管理员(续)
接6.1 首先在~/Areas/Admin/Models文件夹添加管理员模型Administrator.cs using System.ComponentModel.DataAnnotations; ...
- JAVA基础代码分享--DVD管理
问题描述 为某音像店开发一个迷你DVD管理器,最多可存6张DVD,实现碟片的管理. 管理器具备的功能主要有: 1.查看DVD信息. 菜单选择查看功能,展示DVD的信息. 2.新增DVD信息 选择新增功 ...
- SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率
应网友的要求,抽了点时间写了这个Demo,希望对2.2版想升级到3.0的朋友或正在使用3.0的朋友有所帮助.大家在使用Demo过程中如果发现什么问题或有什么建议,可以直接将Bug提交给我或告诉我,我会 ...
- C#:根据银行卡卡号判断银行名称
原文地址:android 根据银行卡卡号判断银行 原文是 java ,现在将它翻译成 C# ,并对代码重新编排整理,博主是一个今年刚出来的应届毕业生,不足之处请多多包涵. 根据银行卡号判断所属银行,依 ...
- Linux随笔之——./configure、make、make install(转)
原文连接:http://www.linuxidc.com/Linux/2011-02/32211.htm 这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. ./con ...
- MySQL分区总结
MySQL支持RANGE,LIST,HASH和KEY四种分区.其中,每个分区又都有一种特殊的类型.对于RANGE分区,有RANGE COLUMNS分区.对于LIST分区,有LIST COLUMNS分区 ...
- 浅析Openflow
这应该算是我在博客园的第一篇技术性的文章. OH,不,这不是一篇技术性的文章,只是一篇很好玩的浅显分析接触到的技术的文章.只是个人的理解,并没有任何的代码和执行的操作.初次带来的,是从08年开始火起来 ...
- Hibernate之HQL查询的一些例子
Hibernate配备了一种非常强大的查询语言,就是HQL(hibernate query language),HQL看上去很像sql,但只是语法结构上相似,HQL是一种面向对象的查询,他可以理解继承 ...