您的位置:首页 > 其它

[SharePoint 2010]使用Word Automation Service将Word转换为PDF

2010-12-10 03:10 567 查看
最近的一个项目中遇到一个超级恶心的需求,用户要求从列表项自动的生成PDF文件,这个需求可以说是把小弟我折磨的死去活来。其实生成PDF这种需求很常见,个人觉得让用户先创建一份Word文档,然后再从Word转换为PDF是最好也是最方便的方式,因为在Word中用户可以非常方便的调整文档的格式,而用代码生成PDF的话对于格式的控制是很麻烦的,且非常的不灵活,而且Word也是支持直接保存为PDF格式的,只需点击一下就可以了,但往往最终用户不愿意采用这种手动的方式,客户就是希望能够实现一切都是自动化的。好了,废话不多说了,下面为大家介绍一下在SharePoint 2010中如何使用Word Automation Service来实现自动的将Word转换为PDF。

Word Automation Service是SP 2010中新加入的一个服务应用程序,它的作用就是帮助我们将保存在SharePoint 文档库中的Word文档转换为其它格式的文件。它所支持的文件格式可以在SharePoint管理中心里的管理服务应用程序中点击Word Automation Service服务,进入Word Automation Services设置页面查看。不难看出基本上Word 2010所支持的文件格式Word Automation Service也支持。



Word Automation Service支持的目标文件格式为:.docx, .docm, .dotx, .dotm, .doc, .dot, .rtf, .mht, .mhtml, .xml (Word xml), PDF, XPS

下面我将通过一个例子来为大家展示如何利用Word Automation Service将一份Word格式的文档转换为PDF格式的文档。

首先打开VS 2010创建一个空白的SharePoint项目。需要注意的是要使用Word Automation Service的话,我们就不能使用沙箱解决方案,而只能使用场解决方案。

在Word Automation Service API中微软为我们提供了三种将Word文档转换为PDF 文档的方法,它们分别是:

AddFile()

AddFolder()

AddLibrary()

下面的例子中我会使用AddLibrary()方法来将一个文档库中所有的文档都转换为PDF文件。

项目创建好后,首先要做的就是添加Microsoft.Office.Word.Server的引用,这个dll可以在<path>\14\ISAPI\Microsoft.Office.Word.Server.dll中找到。



项目创建好后就可以编写代码了。哦,写代码前别忘了添加下面两个命名空间。


第一步就是要获得WordServiceApplicationProxy对象,需要注意的是我们可以使用SPServiceContext .Current.GetDefaultProxy()方法动态的获得一个默认的Word Automation Service代理对象,而不需要将该服务代理的对象写死在代码中。

第二步就是实例化一个ConversionJob对象。

var m_ wordAutomationProxy = (WordServiceApplicationProxy ) SPServiceContext .Current.GetDefaultProxy(typeof (WordServiceApplicationProxy ));

var m_conversionJob = new ConversionJob (wordAutomationProxy);


接下来我们要做的 就是为这个 ConversionJob对象指定一个用户 凭据,以及 一个 名称和最终要转换成的格式。


最后就是调用ConversionJob对象的AddLibrary ()方法,这个方法需要两个参数,分别是源文档库对象和目标文档库对象。

下面是完整的代码:

protected void ConvertBtn_Click(object sender, EventArgs e)
{
try
{
//源文档库
SPList m_wordList = SPContext.Current.Web.Lists["Word文档库"];

//目标文档库
SPList m_pdfList = SPContext.Current.Web.Lists["PDF文档库"];

var m_wordAutomationService = (WordServiceApplicationProxy)SPServiceContext.Current.GetDefaultProxy(typeof(WordServiceApplicationProxy));
var m_conversionJob = new ConversionJob(m_wordAutomationService);

m_conversionJob.UserToken = SPContext.Current.Web.CurrentUser.UserToken;
m_conversionJob.Name = "WordToPdf.ConversionJon";
m_conversionJob.Settings.OutputFormat = SaveFormat.PDF;

m_conversionJob.AddLibrary(m_wordList, m_pdfList);
m_conversionJob.Start();

}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}


当运行上面这段代码后会创建一个ConvertsionJob,它会附加到Word Conversion Timer Job中,当这个Timer Job运行后,我所指定的文档库中的所有Word文件都将被转换为PDF文件并保存到PDF库中,最后让我们一起来看看最终的效果如何。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: