PPTX 到图像的转换不适用于 windows 服务器 2012 生产
PPTX to Image conversion doesn't work on windows server 2012 production
我们需要将上传的 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 上时,我收到以下错误:
这个错误看起来像一些访问权限问题,当我用谷歌搜索时,我发现了几个我试过但没有成功的解决方案,这里是其中的一些:
在服务器上安装 office - 在服务器上安装 office 没有任何意义:( 我安装了但仍然遇到同样的问题。
在服务器上安装 office Interop 程序集 - 我找不到用于 windows 服务器 2012 的程序集,我在此处找到的程序集 https://www.microsoft.com/en-us/download/details.aspx?id=3508 不支持 2012 以及何时我安装了没用
也试过这个解决方案
我们无法切换到 Aspose、Spire 等付费解决方案
非常感谢对此线程的任何帮助。
谢谢。
这是适用于所有服务器的缩小范围的解决方案,经过 7 个月的成熟研究,我发布了这个解决方案。
- 已在每台服务器上安装 Office 并激活产品
- 在 C:\Windows\SysWOW64\config\systemprofile\Desktop 创建了文件夹 'Desktop'(64 位 OS)
- 在 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<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();
对于运行以上代码,您需要在您的项目中添加对互操作库的引用。
希望这可以帮助您节省时间。
我们需要将上传的 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 上时,我收到以下错误:
在服务器上安装 office - 在服务器上安装 office 没有任何意义:( 我安装了但仍然遇到同样的问题。
在服务器上安装 office Interop 程序集 - 我找不到用于 windows 服务器 2012 的程序集,我在此处找到的程序集 https://www.microsoft.com/en-us/download/details.aspx?id=3508 不支持 2012 以及何时我安装了没用
也试过这个解决方案
我们无法切换到 Aspose、Spire 等付费解决方案
非常感谢对此线程的任何帮助。 谢谢。
这是适用于所有服务器的缩小范围的解决方案,经过 7 个月的成熟研究,我发布了这个解决方案。
- 已在每台服务器上安装 Office 并激活产品
- 在 C:\Windows\SysWOW64\config\systemprofile\Desktop 创建了文件夹 'Desktop'(64 位 OS)
- 在 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<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();
对于运行以上代码,您需要在您的项目中添加对互操作库的引用。
希望这可以帮助您节省时间。