Feedback

C# - Export Office Dokument nach PDF / XPS

Veröffentlicht von am 7/20/2010
(0 Bewertungen)
Zeigt wie man mit > Office 2007 Datei als DPF oder XPS speichert. Dieses Snippet beschreibt das Beispiel anhand von Excel. Evtl. ist ein Office Addin notwendig, ist bei Microsoft frei verfügbar.
// Ort der Exceldatei
string QuelleExcelDatei = @"C:\ExcelDatei.xls";
// Speichertort der PDF Datei
string ZielPdfDatei = @"C:\Export.pdf";

// Leere Datentyp für die Com Schnittstelle
object m = Type.Missing;

// Instanz der Excel Anwendunng erstellen
Microsoft.Office.Interop.Excel.ApplicationClass app = new Microsoft.Office.Interop.Excel.ApplicationClass();
      
// Instand der Exceldatei
Microsoft.Office.Interop.Excel.Workbook workbook = app.Workbooks.Open(QuelleExcelDatei, m, m, m, m, m, m, m, m, m, m, m, m, m, m);

// Export in das Zielformat und Position
workbook.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, ZielPdfDatei, m, m, m, m, m, m, m);

// Die Exceldatei und Anwendung schließen
workbook.Close(m, m, m);
app.Quit();

// Die Com Objekte freigeben
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(app);

// Die Speichert freigeben
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();

4 Kommentare zum Snippet

timmi schrieb am 7/20/2010:
Das Add-In das du (denke ich) meinst und benötigt wird nennt sich Primary Interop Assemblies (PIA).

Möchte man diese Funktionalität automatisiert auf einem Server betreiben, so muss Office auf dem Server installiert sein, was ich als sehr unschön empfinde.

Trotzdem gut zu wissen DAS es möglich ist und WIE es möglich ist, vielen Dank für diesen Snippet. :)
RoSi schrieb am 7/20/2010:
Aus eigener leidvoller Erfahrung (es war jemand nicht davon abzubringen, Excel auf dem Server einzusetzen) empfehle ich, das FinalReleaseComObject anders zu verwenden:


ReleaseComObj(workbook);
ReleaseComObj(app);

private static void ReleaseComObj(object o){
try{
int i;
do{
i = System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
} while(i>0);
}
catch{}
finally{
o = null;
}
}


Ohne die do-while-Schleife blieben manche Instanzen im Taskmanager erhalten und wurden nicht komplett beendet.
RoSi schrieb am 7/20/2010:
@timmi: ich glaube er meint die Möglichkeit, generell unter Office 2007 PDFs zu speichern. Das ging in der Tat nur, wenn er ein Add-In installiert:
http://www.microsoft.com/downloads/details.aspx?familyid=f1fc413c-6d89-4f15-991b-63b07ba5f2e5&displaylang=de
timmi schrieb am 7/20/2010:
@RoSi: Fährt man fleißig Updates ist das mittlerweile eigentlich nicht mehr nötig, deswegen schrieb er auch "evtl.". ;-)
 

Logge dich ein, um hier zu kommentieren!