• SharePoint 2013 Word 转换PDF服务介绍及示例


    转载自:http://www.cnblogs.com/jianyus/p/3345734.html

    前言:在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:WindowsMicrosoft.NETassemblyGAC_MSILMicrosoft.Office.Word.Serverv4.0_15.0.0.0__71e9bce111e9429cMicrosoft.Office.Word.Server.dll

    2、  引用类库

    using Microsoft.Office.Word.Server;

    using Microsoft.Office.Word.Server.Conversions;

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

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

     
     1 //创建一个转换job
     2 ConversionJob myJob = newConversionJob("Word Automation Services");
     3 
     4 //设置转换job的UserToken、转换格式
     5 myJob.UserToken = site.UserToken;
     6 myJob.Settings.OutputFormat = SaveFormat.PDF;
     7 myJob.Settings.OutputSaveBehavior = SaveBehavior.AppendIfPossible;
     8 
     9 //获取转出、转入文档库
    10 SPList inputLibrary = web.Lists["inputlist"];
    11 SPList outputLibrary = web.Lists["outputlist"];
    12 
    13 //设置并执行转换job
    14 myJob.AddLibrary(inputLibrary, outputLibrary);
    15 myJob.Start();
     

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

     
     1 //创建一个异步转换
     2 SyncConverter sc = newSyncConverter("Word Automation Services");
     3 
     4 //设置转换UserToken、转换类型等
     5 sc.UserToken = site.UserToken;
     6 sc.Settings.UpdateFields = true;
     7 sc.Settings.OutputFormat = SaveFormat.PDF;
     8 
     9 //读取需要转换的文件
    10 SPFolder docs = web.Folders[siteURL +
    11     "/Word_Transfer"];
    12 SPFile file = docs.Files[siteURL +
    13     "/Word_Transfer/SharePoint2013Word转换PDF服务测试文档.docx"];
    14 
    15 //生成保存转换后文档的文件流
    16 Stream fStream = file.OpenBinaryStream();
    17 SPFileStream stream = newSPFileStream(web, 0x1000);
    18 
    19 //启动异步转换
    20 ConversionItemInfo info = sc.Convert(fStream, stream);
    21 
    22 //转换后文档添加到文档库
    23 SPFile newFile = docs.Files.Add(
    24     "SharePoint2013Word转换PDF服务测试文档.pdf",
    25     stream,
    26     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();
    }
    }

     
    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);
    }
    }

     
    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

  • 相关阅读:
    Fedora13下真正能用的源(2015-5-16亲测)
    Shellcoding教程:介绍ASM(译)
    Shellcoding教程:介绍ASM
    ubuntu解决pppoeconf和network-manager冲突时,可能问题的解决方法
    vue_router-link传参
    js_window.postMessage往不同窗口里面发送数据
    iframe_iframe引入其它页面
    css_去掉默认样式
    vue_常用组件install
    js_正则表达式
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/3602335.html
Copyright © 2020-2023  润新知