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

最近的一个项目中遇到一个超级恶心的需求,用户要求从列表项自动的生成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中找到。

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

using  Microsoft.Office.Word.Server.Service;
using  Microsoft.Office.Word.Server.Conversions;

 

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

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

 

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

var m_conversionJob = new ConversionJob (wordAutomationProxy); 

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

m_conversionJob.UserToken = SPContext.Current.Web.CurrentUser.UserToken; 

m_conversionJob.Name = "WordToPdf.ConversionJon"; 

m_conversionJob.Settings.OutputFormat = SaveFormat.PDF; 

最后就是调用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库中,最后让我们一起来看看最终的效果如何。

posted on 2010-12-10 03:10  致良知  阅读(3318)  评论(6编辑  收藏  举报

导航