PPTX到图像转换在Windows Server 2012生产中不起作用

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

Application pptApplication = new Application(); Microsoft.Office.Interop.PowerPoint.Presentation pptPresentation = pptApplication.Presentations.Open2007(filePath, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse); List files = new List(); 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上时,我收到以下错误:

在此处输入图像描述 这个错误看起来像是一些访问权限问题,当我用Google搜索时,我找到了几个我没试过的解决方案,这里有一些:

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

  2. 在服务器上安装Office Interop Assemblies – 我找不到Windows server 2012的这个程序集,我在这里找到的那​​个https://www.microsoft.com/en-us/download/details.aspx?id=3508不受支持对于2012年和我安装它不起作用。

  3. 试过这个解决方案https://stackoverflow.com/a/30117146

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

任何有关此主题的帮助都非常感谢。 谢谢。

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

  1. 安装Office并在每台服务器上激活产品
  2. 在C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop(64位操作系统)创建了一个文件夹’Desktop’ 在此处输入图像描述
  3. 在IIS中,将ApplicationPool标识从“ApplicationPoolIdentity”更改为“LocalSystem”。 在此处输入图像描述

就是这样,我能够将幻灯片转换成图像。

源代码

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

 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 files = new List(); 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的引用。 在此处输入图像描述

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