使用C#将PPT和PDF转换为XPS或PNG

时间:2012-02-07 12:59:35

标签: c# powerpoint

我无法将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并发送二进制文件。 这是这样的样本:

  

http://support.microsoft.com/kb/322091

我的问题:

第一种方式:无法使用已与其基础RCW分离的COM对象

第二种方式:无法隐藏窗口和关闭窗口

第三种方式:无法创建XPS文件。 di.OutPutFile创建生病[bad?]文件。

2 个答案:

答案 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)