Peter Monadjemi | ActiveTraining

Slides:



Advertisements
Ähnliche Präsentationen
Vortrag Code-Dokumentation
Advertisements

Modellgetriebene Softwareentwicklung
OpenLDAP.
WML – Wireless Markup Language Vortrag von Eduard Jakel.
SQL Server 2005.NET Integration Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
Seminar Internetdienste Web 2.0 und Rich Internet Applications (RIA) JavaFX Rainer Scholz.
Literaturverwaltung und Wissensorganisation
Zurück zur ersten Seite n Style Sheets sind im Prinzip Formatvorlagen für HTML-Dokumente n Über Style Sheets lassen sich zentrale Layout-Vorgaben für eine.
Daten Anzeigen und Ausdrucken Zu Zeigende Daten (z.B. Studentenplan) Daten in XML müssen geparst und in PDF- Format umgewandelt werden. Dazu iTEXT Bibliothek.
HTML - Einführung Richard Göbel.
FH-Hof Einbindung von JavaScript Anweisungen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
XINDICE The Apache XML Project Name: Jacqueline Langhorst
XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.
XML-Schema HKI Proseminar Wintersemester 2010/11 Dozentin: Frau Kurz von Jan Kohl und Christian Lütticke.
Eine Einführung in OpenOffice. Was? Freies Office-Paket mit offenem Quellcode Erste funktionierende Version im Oktober 2001 veröffentlicht Basiert auf.
Document Object Model (DOM)
XForms Von Matthias Keck.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
Speicherung von XML- Dokumenten als Large Objects.
Einführung XML XML Einführung Andreas Leicht.
Das Build-Tool ANT ETIS SS05. ETIS SS05 - Nadine FröhlichANT 2 Gliederung Motivation Build - Datei –Allgemeiner Aufbau –Project –Target –Task –Properties.
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
1 Grundlagen und Anwendung der Extensible Markup Language (XML ) Peter Buxmann Institut für Wirtschaftsinformatik Johann Wolfgang Goethe-Universität Frankfurt.
Anwendungen entwickeln für Office 2007
Was versteht man unter XML Schema?
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Citavi im Prozess der wissenschaftlichen Arbeit
MS Excel, Open-/LibreOffice Calc Die Menüs I Office-Logo (Excel2007) bzw. Datei (andere): die Standard-Datei- und Druckoperationen; bei MS Excel hier auch.
Und das geht natürlich auch: Berichte
Wir bauen uns eine Webapplikation!
Einführung in die Programmiersprache Java
Silverlight Eine Einführung. Agenda 1.Was ist Silverlight? 2.Die Silverlight Philosophie 3.Vorstellung des Szenarios 4.Einführendes Beispiel 5.Konzepte.
Clustered Neuronal Network A C#.NET project for Compute Cluster Server 2003.
Best Practices in der Datenbank-programmierung
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Kostenlose Alternative zu Microsoft Office
SQL Server 2005 CLR-Integration
Projektarbeit PHP 5.3 / MySQL & Content Management Systems
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Java für Fortgeschrittene
Spricht Ihre Anwendung schon Open XML?
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 5 Folie 2 ADO.NET s.a:
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 9 Folie 2 ADO.NET (1) Klassen für Zugriffe.
Tutorium zur LV Online Research Ein Computerprogramm tut, was Du schreibst, nicht was Du willst.
XML-Serverpages Vortrag im Rahmen des Seminars XML-Technologien Tobias Faessler.
Marko Dragicevic Thomas Bergauer 27.Mai 2008
Wohlgeformtheit und Gültigkeit Grundlagen der Datenmodellierung Anke Jackschina.
Ausgabe vom Seite 1, XML Eine Einführung XML - Eine Einführung.
Oliver Spritzendorfer Thomas Fekete
Von Isabelle Spörl und Simon Schausberger
3. Juni 2003Moritz Petersen Minimales Markup und Templates zur Erstellung von strukturierten Texten Ein Zwischenbericht zur Diplomarbeit.
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
SQLite und XML in PHP 5.
CMS Content-Management-Systeme (CMS), dienen der Verwaltung und Pflege von Dokumenten und Inhalten in Inter- und Intranetanwendungen. Den Entwickler oder.
CSS Cascading Style Sheets
12. Juli 2006Autor: Walter Leuenberger Computeria Urdorf Treff vom 12. Juli 2006 Outlook und Outlook Express nicht nur zum en.
Web und Mobile Apps Programmieren Marco Jakob Kurzvortrag OSS an Schulen
TypoScript.
Open Source und Open Office Referenten: Anja Stadler & Fabian Gebauer.
Text Encoding Initiative Universität zu Köln Daten- und Metadatenstandards Seminarleitung: Patrick Sahle Seminarleitung: Patrick Sahle Referentin: Anna.
Was ist ein HTML-Dokument? - Ein WWW-Dokument, das mit anderen Dokumenten verknüpft ist. - Es kann beinhalten: Text, Bilder, Geräusche, Videos, Animationen,
 Präsentation transkript:

Peter Monadjemi | ActiveTraining Office-Dokumente mit dem OpenXML SDK erstellen

Die Themen Wie war das noch einmal mit OpenXML? Notwendigkeit für eine moderne „Office-Automatisierung“ Das Open XML SDK 2.0 im Überblick Beispiel für den Umgang mit Word-Dokumenten Kurzer Ausflug zum Thema PDF

Wie war das noch einmal mit OpenXML? OpenXML – Von Microsoft initiierter XML-Standard für Office-Dokumente ECMA 376 ISO-Standard 29500 Wird auch von OpenOffice/LibreOffice unterstützt Alles weitere unter http://de.wikipedia.org/wiki/Office_Open_XML

Die Rolle des Containers OpenXML beschreibt nur die Struktur des Dokumentinhalts Der Aufbau der Datei (Container) wird durch die Open Packaging Convention (OPC) beschrieben Docx-, Xlsx-, Potx-Dateien usw. sind Zip-Archive, deren Aufbau durch die OPC beschrieben wird

Ein „Röntgenblick“ in eine Docx-Datei Dokumentinhaltsordner OpenXML-Dateien Dokumenteigenschaften

Es gibt verschiedene OpenXML-Format WordprocessingML Relativ geradlinig, Dokumente mit einer einfachen Struktur lassen sich auch einfach erstellen SpreadsheetML Teilweise relativ komplex (vor allem, wenn es um Diagramme geht) PresentationML Viele Feinheiten, die man nur über den Document-Reflector entschlüsseln kann

Notwendigkeit für eine moderne „Office-Automatisierung“ Office kann in Server-Umgebungen offziell nicht installiert werden Ein Webanwendung kann damit Word-Dokumente nicht über OLE-Automatisierung erstellen OLE-Automatisierung ist generell langsam Moderne Office-Automatisierung bedeutet, Office-Dokumente ohne die Office-Anwendung erstellen und bearbeiten zu können

Das Open XML SDK 2.0 Eine umfangreiche Assembly (DocumentFormat.OpenXml.dll), deren Klassen die Struktur eines OpenXML-Dokuments abbilden 3680 Klassen (!) Erlaubt einen komfortablen und performanten Zugriff (z.B. per LINQ) auf die Struktur und den Inhalt eines OpenXML-Dokuments Separater Download unter www.microsoft.com/downloads Gut dokumentiert, viele Beispiele, Einarbeitung im Allgemeinen keine allzu große Herausforderung

Das Open XML SDK auf anderen Plattformen Läuft nicht unter Silverlight (die Dokumente müssen direkt angesprochen werden Es gibt keine Portierung auf Mono, aber es gibt eine einfache Java-API - http://poi.apache.org/, die auch Compound Documents verarbeiten kann (Binärformat)

Die wichtigsten Namespaces DocumentFormat.OpenXml DocumentFormat.OpenXml.Packaging DocumentFormat.OpenXml.Wordprocessing DocumentFormat.OpenXml.Spreadsheet DocumentFormat.OpenXml.Presentation

Was geht/was geht nicht? Dokumente erstellen, auslesen und aktualisieren Kein „Dokumentrendering" möglich Man benötigt eine kommerzielle Komponente kaum möglich oder Office-Viewer Keine PDF-Unterstützung iTextSharp oder kommerzielle Komponente

Reverse Engineering von Microsoft Office-Dokumenten OpenXmlSdkTool.exe ist "genial" Reflektiert die Struktur eines OpenXML-Dokuments in OpenXML und C# C#-Code kann 1:1 übernommen werden Unentbehrlich, wenn man die Struktur eines OpenXML-Dokuments verstehen will, um neue Dokumente zu erstellen

System.IO.Package im Vergleich Package pack = Package.Open(DocName, FileMode.Create, FileAccess.ReadWrite); Uri PackageUri = new Uri(@"/word/document.xml", UriKind.Relative); string contentType = @"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"; PackagePart part = pack.CreatePart(PackageUri, contentType); StreamWriter streamPart = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write)); string WL = @"<?xml version='1.0' encoding='UTF-8'?> <w:document xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'> <w:body> <w:p> <w:r> <w:rPr> <w:b /> <w:color w:val='FF0000'/> </w:rPr> <w:t>Hallo, Basta! - es ist jetzt " + DateTime.Now.ToShortTimeString() + @"</w:t> </w:r> </w:p> </w:body> </w:document>"; streamPart.Write(WL); // ist nicht zwingend erforderlich streamPart.Flush(); streamPart.Close(); string relType = @"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; pack.CreateRelationship(PackageUri, TargetMode.Internal, relType, "rId1"); // ist nicht zwingend erforderlich pack.Flush(); pack.Close();

Document.OpenXml im Vergleich using (WordprocessingDocument wdDoc = WordprocessingDocument.Create(DocName, DocumentFormat.OpenXml.WordprocessingDocumentType.Document)) { MainDocumentPart mainPart= wdDoc.AddMainDocumentPart(); mainPart.Document = new Document(new Body()); mainPart.Document.Body.Elements<Paragraph>(); mainPart.Document.Body.Append(new Paragraph( new Run( new RunProperties { FontSize = new FontSize { Val="20pt"}, Color = new Color { Val="Red"}}, new Text { Text="Hallo, Basta - es ist jetzt " + DateTime.Now.ToShortTimeString() }))); wdDoc.Close(); }

Ein Auszug aus dem Word-Dokumentmodell Paragraph ParagraphProperties Run RunProperties Text Text-Attribut

Zugriff auf eine Docx-Datei – Dokument öffnen using (WordprocessingDocument wdDoc = WordprocessingDocument.Open(ofd.FileName, false)) { MainDocumentPart mainPart = wdDoc.MainDocumentPart; Body body = mainPart.Document.Body; IEnumerable<Paragraph> Paras = from p in body.Elements<Paragraph>() select p; foreach (Paragraph p in Paras) { ParaListBox.Items.Add(p.InnerText); } } Abfrage über LINQ Typisierter Zugriff

Zugriff auf eine Docx-Datei – Text auslesen // Alle Absätze holen IEnumerable<Paragraph> AlleParas = wdDoc.MainDocumentPart.Document.Body.Elements<Paragraph>(); foreach (Paragraph p in AlleParas) { IEnumerable<Text> AlleTextElemente = p.Descendants<Text>(); foreach (Text t in AlleTextElemente) DocText += t.Text; }

Die Klassenstruktur eines Absatzes Paragraph p = new Paragraph( new Run( new RunProperties { FontSize = new FontSize { Val="20pt"}, Color = new Color { Val="Red"}}, new Text { Text="Hallo, Basta" }))); Eigenschaften eines Run-Elements Immer ein String-Typ

LINQ-Abfragen gegen OpenXML Mit LINQ wird das Lokalisieren bestimmter Dokumentelemente sehr einfach und vor allem „natürlich“ ' Auflisten aller U3-Überschriften var U3Pars = from p in paras where p.Descendants<ParagraphStyleId>().Count() > 0 && p.Descendants<ParagraphStyleId>(). ElementAtOrDefault(0).Val == "berschrift3" select p;

Eine Docx neu anlegen (1) using(WordprocessingDocument wdDoc = WordprocessingDocument.Create(docPfad, WordprocessingDocumentType.Document)) { MainDocumentPart mainPart = wdDoc.AddMainDocumentPart(); mainPart.Document = new Document( new Body()); mainPart.Document.Body.Append(new Paragraph ( new Run (new Text { Text="Hallo, Word!" }))); }

Eine Docx neu anlegen (2) using (WordprocessingDocument wdDoc = WordprocessingDocument.Create(docPfad, WordprocessingDocumentType.Document)) { MainDocumentPart mainPart = wdDoc.AddMainDocumentPart(); mainPart.Document = new Document( new Body()); // Text soll in 20pt Schrift rot und fett angezeigt werden mainPart.Document.Body.Append(new Paragraph( new Run(new RunProperties { Color = new Color { Val = "Red" }, Bold = new Bold { Val = new OnOffValue { Value =true } }, // FontSize per Default 1/72 inch FontSize = new FontSize { Val = "20pt" }, }, new Text { Text = "Hallo, Word!" }))); } Für jedes Detail gibt es eine Klasse

Dokumentbearbeitung in der Praxis (1) Zugriff auf die Textmarken eines Word-Dokuments Eine große Anzahl vorhandener Dokumente soll geändert werden Musterdokument enthält Textmarken Ein Inhalt (z.B. aus Datenbank) wird in die Textmarken des Dokuments eingetragen

Dokumentbearbeitung in der Praxis (2) Dank LINQ wird das Ändern von Textmarken sehr einfach Beispiel: Die Textmarke mit dem Namen „RechnungNr“ erhält neuen Wert Run BookmarkRun = (from bm in mainPart.Document.Body.Descendants<BookmarkStart>() where bm.Name == "RechnungNr" select bm).First().NextSibling<Run>(); // Rechnungs-Nr in Textmarke eintragen BookmarkRun.Elements<Text>().ElementAt(0).Text = i.ToString();

PDF-Dokumente erstellen Mit dem OpenXML SDK nicht möglich iTextSharp ist eine gute Alternative Open Source Portierung von iText, 100% C# Download unter http://sourceforge.net/projects/itextsharp Das Buch iText in Action von Bruno Lowagie (Manning) bietet sehr guten Einstieg

Ein Hallo, Welt mit iTextSharp PDFText.Document pdfDoc = new PDFText.Document(); using (IO.FileStream Fs = new IO.FileStream(PDFPfad, IO.FileMode.Create)) { PDF.PdfWriter pdfWriter = PDF.PdfWriter.GetInstance(pdfDoc, Fs); // Versionsnummer ist natürlich optional pdfWriter.SetPdfVersion(PDF.PdfWriter.PDF_VERSION_1_5); pdfDoc.Open(); pdfDoc.AddAuthor("Pemo"); // erste Zeile mit größerer Schrift PDFText.Font fontPara = new PDFText.Font(PDFText.Font.FontFamily.HELVETICA, (float)20, 0, PDFText.BaseColor.RED); pdfDoc.Add(new PDFText.Paragraph(PDFTextTextBox.GetLineText(0), fontPara)); for (int Zeile = 1; Zeile < PDFTextTextBox.LineCount; Zeile++) pdfDoc.Add(new PDFText.Paragraph(PDFTextTextBox.GetLineText(Zeile))); pdfDoc.Close();

Volltextsuche mit Lucene .NET Portierung aus der Java-Welt Sehr gute Performance Leichte Programmierung Dokumente müssen im Text-Format vorliegen Bzw. es wird generell nur Text indiziert Für PDF-Dateien wird ein "Helfer" benötigt (z.B. Aspose PDF.Kit) Buchtipp: Lucene in Action (Manning)

Zusammenfassung OpenXML SDK 2.0 ist der Schlüssel zur Office-Dokumentautomatisierung Sehr gute Performance, sehr gutes Objektmodell, optimal für Server-Anwendungen „Reverse engineering" vorhandener Dokumente mit OpenXmlSdkTool.exe Für das Rendering werden im Allgemeinen kommerzielle Komponenten (z.B. Tx Text Control) benötigt)

Ressourcen http://openxmldeveloper.org http://blogs.msdn.com/b/officedevdocs/ (neu) Code-Snippets für VS 2010 Hilfedatei aus dem Open XML SDK Open XML Hands on Lab (noch auf Version 1.0 bezogen) Die Beispiele zu diesem Vortrag Verschiedene Webcasts von Jens Häupel http://blogs.msdn.com/b/jensha/

Vielen Dank! Noch Fragen? Bitte den Bewertungsbogen ausfüllen pm@activetraining.de Bitte den Bewertungsbogen ausfüllen