PPTX到图片转换不适用于Windows Server 2012生产

时间:2016-03-17 11:45:11

标签: c# office-interop windows-server-2012-r2

我们要求将上传的PPT或PPTX文件转换为图像文件。我们在本地开发了以下(POC代码):

Application pptApplication = new Application();
Microsoft.Office.Interop.PowerPoint.Presentation pptPresentation = pptApplication.Presentations.Open2007(filePath, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
List<string> files = new List<string>();
for (int i = 1; i <= pptPresentation.Slides.Count; i++)
{
    pptPresentation.SaveCopyAs(serverPath + randomId, PpSaveAsFileType.ppSaveAsPNG, MsoTriState.msoTrue);
    files.Add(root + "Uploads/Slide" + i + ".PNG");
}
pptPresentation.Close();

现在,当此代码部署在Windows Server 2012 R2上时,我收到以下错误:

enter image description here 这个错误看起来像一些访问权限问题,当我用Google搜索时,我找到了几个我没试过的解决方案,其中一些是:

  1. 在服务器上安装办公室 - 没有任何意义在服务器上设置办公室:(我安装好了,但仍然遇到同样的问题。

  2. 在服务器上安装办公室互操作程序集 - 我无法找到适用于Windows Server 2012的此程序集,我在2012年找不到https://www.microsoft.com/en-us/download/details.aspx?id=3508这个程序集,当我安装它时没有#39}工作。

  3. 尝试了此解决方案https://stackoverflow.com/a/30117146以及

  4. 我们无法转换为Aspose,Spire等付费解决方案

  5. 对此主题的任何帮助都非常感谢。 感谢。

1 个答案:

答案 0 :(得分:0)

这是缩小的解决方案,适用于所有服务器,我在7个月的成熟研究后发布了此解决方案。

  1. 已安装Office并在每台服务器上激活产品
  2. 创建了一个文件夹&#39;桌面&#39;在C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop(64位操作系统) enter image description here
  3. 在IIS中,从ApplicationCoolIdentity&#39;更改了ApplicationPool标识。到#LocalSystem&#39;。 enter image description here
  4. 它和我能够将幻灯片转换成图像。

    源代码

    如果您对我使用的代码感兴趣:

    Application pptApplication = new Application();
    Microsoft.Office.Interop.PowerPoint.Presentation pptPresentation = pptApplication.Presentations.Open2007(Server.MapPath("~/tempslides/pptfilename.pptx"), MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
    List<string> files = new List<string>();
    for (int i = 1; i <= pptPresentation.Slides.Count; i++)
    {
        pptPresentation.SaveCopyAs(serverPath + randomId, PpSaveAsFileType.ppSaveAsPNG, MsoTriState.msoTrue);
        files.Add(Server.MapPath("~/tempslides") + "/slide" + i + ".PNG");
    }
    pptPresentation.Close();
    

    要运行上面的代码,您需要在项目中添加对interop lib的引用。 enter image description here

    希望这可以帮助您节省时间。