2012-02-07 116 views
1

我不能將PPT轉換爲XPS或PNG爲PDF文件。PPT和PDF到XPS或PNG與C#

解決此問題的兩種方法是:

第一種方法:使用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文檔作家」 打印機使用進程。

我的代碼:

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?]文件。

回答

1

你的第一個方向似乎是正確的,但我不明白你的一些代碼。

1)你爲什麼打電話給releaseCOM?當然,你會得到你所描述的COM異常,因爲你要在一行中釋放COM對象,然後試圖訪問它的方法。在您的循環中放下releaseCOM調用。

2)你打電話slide.Export有兩個參數,文件名和一個空字符串。第二個參數應該是圖形過濾器的名稱,而不是空字符串。嘗試傳遞「.xps」作爲第二個參數。

3)如果你不需要在它自己單獨的文件中的每個幻燈片可以調用presentation.ExportAsFixedFormat("filename", Microsoft.Office.Interop.PowerPoint.PpFixedFormatType.ppFixedFormatTypeXPS)