使用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创建不正确的[坏?]文件。

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

所有者此答案: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)