使用C#将PPT和PDF转换为XPS或PNG
本文关键字:XPS PNG 转换 PDF PPT 使用 | 更新日期: 2023-09-27 18:22:46
我无法将PPT转换为XPS或将PNG转换为PDF文件。
解决此问题的两种方法是:
第一种方法:使用COM组件Microsoft。例如
:Microsoft.Office.Interop.Pointpoint、Microsoft.Office.Core、。
我的代码:
private static void PPT2XPS()
{
Microsoft.Office.Interop.PowerPoint.Application powerpoint;
Microsoft.Office.Interop.PowerPoint.Presentation presentation;
Microsoft.Office.Interop.PowerPoint.Presentations presentations;
powerpoint = new Microsoft.Office.Interop.PowerPoint.Application();
presentations = powerpoint.Presentations;
presentation = presentations.Open(@"d:'test.ppt", MsoTriState.msoFalse, MsoTriState.msoTrue, MsoTriState.msoTrue);
Microsoft.Office.Interop.PowerPoint.Slides slides = presentation.Slides;
for (int i = 1; i <= slides.Count; i++)
{
Microsoft.Office.Interop.PowerPoint.Slide slide = slides[i];
String slideName = slide.Name;
releaseCOM(slide);
slide.Export(@"d:'test'" + i.ToString() + ".xps", "");
}
}
private static void releaseCOM(object o)
{
try
{
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(o);
}
catch { }
finally
{
o = null;
}
}
第二种方式:将文件发送到
带进程的"Microsoft XPS Document Writer"打印机。
我的代码:
Process P = new Process();
ProcessStartInfo psInfo = new ProcessStartInfo();
psInfo.FileName = @"C:'Program Files'Adobe'Reader 9.0'Reader'AcroRd32.exe";
string option = @"/t";
string xps = "Microsoft XPS Document Writer";
string targetFile = Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar +
Path.GetFileNameWithoutExtension(filename) + @".xps";
string Myargs = String.Format("{0} '"{1}'" '"{2}'" {0} '"{3}'"", option, filename, xps, targetFile);
psInfo.CreateNoWindow = true;
psInfo.Arguments = Myargs;
psInfo.UseShellExecute = false;
psInfo.ErrorDialog = false;
P.StartInfo = psInfo;
P.Start();
P.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
第三种方法:使用API Windows并发送二进制文件。这是这种方式的示例:
http://support.microsoft.com/kb/322091
我的问题:
第一种方法:COM对象已与其底层RCW分离,不能使用
第二种方法:无法隐藏窗口并关闭窗口
第三种方法:无法创建XPS文件。di。OutPutFile创建不正确的[坏?]文件。
所有者此答案:Emmanuel N
你可以这样做,也可以这样做。您也可以使用2007 Microsoft Office加载项:Microsoft另存为PDF或XPS,如
您的第一个方向似乎是正确的,但我不理解您的一些代码。
1) 你为什么叫releaseCOM?当然,你会得到你所描述的COM异常,因为你在一行中释放了COM对象,然后试图访问它的方法。将releaseCOM调用放入循环中。
2) 您使用两个参数调用slide.Export
,即文件名和一个空字符串。第二个参数应该是图形过滤器的名称,而不是空字符串。尝试将".xps"作为第二个参数传递。
3) 如果您不需要将每张幻灯片放在其单独的文件中,则可以调用presentation.ExportAsFixedFormat("filename", Microsoft.Office.Interop.PowerPoint.PpFixedFormatType.ppFixedFormatTypeXPS)