我无法将PPT转换为XPS或PNG转换为PDF文件。
解决此问题的两种方法是:
第一种方式:使用COM组件Microsoft。例如
:Microsoft.Office.Interop.PowerPoint,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”打印机With Process。
我的代码:
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并发送二进制文件。 这是这样的样本:
我的问题:
第一种方式:无法使用已与其基础RCW分离的COM对象
第二种方式:无法隐藏窗口和关闭窗口
第三种方式:无法创建XPS文件。 di.OutPutFile创建生病[bad?]文件。
答案 0 :(得分:2)
所有者此答案:Emmanuel N
你可以这样或者这样做pdf / word。您也可以使用2007 Microsoft Office Add-in: Microsoft Save as PDF or XPS,就像这样
答案 1 :(得分:1)
你的第一个方向似乎是正确的,但我不理解你的一些代码。
1)你为什么打电话给releaseCOM?当然,你会得到你正在描述的COM异常,因为你在一行中释放COM对象,然后尝试访问它的方法。将releaseCOM调用放入循环中。
2)您使用两个参数(文件名和空字符串)调用slide.Export
。第二个参数应该是图形过滤器的名称,而不是空字符串。尝试传递“.xps”作为第二个参数。
3)如果您不需要在每个幻灯片的单独文件中,您可以拨打presentation.ExportAsFixedFormat("filename", Microsoft.Office.Interop.PowerPoint.PpFixedFormatType.ppFixedFormatTypeXPS)