{"id":536,"date":"2008-08-02T10:18:26","date_gmt":"2008-08-02T09:18:26","guid":{"rendered":"http:\/\/minibrain.wordpress.com\/2008\/08\/02\/tutorial-itextsharp-einfhrung\/"},"modified":"2008-08-02T10:18:26","modified_gmt":"2008-08-02T09:18:26","slug":"tutorial-itextsharp-einfhrung","status":"publish","type":"post","link":"https:\/\/abramowitsch.de\/blog\/?p=536","title":{"rendered":"Tutorial iTextSharp: Einf\u00fchrung"},"content":{"rendered":"<p>iTextSharp ist eine Open Source Bibliothek zum Erstellen und Bearbeiten von PDF-Dateien. Die Java-Bibliothek iText wurde auf .NET (C#) portiert und wird synchron mit dem .NET-Pendant weiterentwickelt.  <\/p>\n<p>Ziel der Entwicklung war Entwicklern eine Bibliothek in die Hand zu geben, mit der sie ihre eigenen Anwendungen um PDF-Funktionalit\u00e4ten erweitern konnten. In diesem Tutorial soll darum gehen, einzelne Funktionalit\u00e4ten von iTextSharp anhand von Beispielen vorzustellen. <\/p>\n<p><strong>Bezugsm\u00f6glichkeiten<\/strong> <\/p>\n<p>iText: <a href=\"http:\/\/www.lowagie.com\/iText\">http:\/\/www.lowagie.com\/iText<\/a> <\/p>\n<p>iTextSharp: <a href=\"http:\/\/sourceforge.net\/projects\/itextsharp\/\">http:\/\/sourceforge.net\/projects\/itextsharp\/<\/a> <\/p>\n<h2>Tipp: Code-Dokumentation mit Doxygen erzeugen<\/h2>\n<\/p>\n<p>Ich habe mich immer gefragt, warum ich denn bei IntelliSense keine Hilfe zu sehen bekomme. Ist der Code schlecht oder gar nicht dokumentiert? Nein! Der Autor hat darauf verzichtet, Kommentare im .NET-Format zu verfassen, stattdessen hat er auf das Doxygen-Format zur\u00fcckgegriffen. <\/p>\n<p>Somit werden keine Kommentare in die Metadaten exportiert und IntelliSense kann diese nicht auslesen. Daher ist jeder gut beraten, sich die Dokumentation kurz selbst zu erzeugen. Dazu l\u00e4dt man einfach das letzte Doxygen Release von <a href=\"http:\/\/www.stack.nl\/~dimitri\/doxygen\/\">http:\/\/www.stack.nl\/~dimitri\/doxygen\/<\/a> herunter. <\/p>\n<h2>Erstellen von PDF-Dokumenten<\/h2>\n<h3>Das Document-Objekt<\/h3>\n<\/p>\n<p>Das Document-Objekt stellt die Basis aller Dokument-Typen der iTextSharp-Bibliothek dar. Das Document-Objekt besitzt drei \u00f6ffentliche Konstruktoren: <\/p>\n<p>public Document() <\/p>\n<p>public Document(Rectangle pageSize) <\/p>\n<p>public Document(Rectangle pageSize, int marginLeft,int marginRight, <\/p>\n<p>int marginTop, int marginBottom) <\/p>\n<h3>Definition der Seitengr\u00f6\u00dfe<\/h3>\n<\/p>\n<p>Der parameterlose Konstruktor von Document verwendet als Default-Einstellung die Seitengr\u00f6\u00dfe A4, w\u00e4hrend die anderen beiden Konstruktoren eine Angabe der Seitengr\u00f6\u00dfe erwarten. Bei deren Definition kann auf die Klasse PageSize zur\u00fcckgegriffen werden. PageSize besitzt \u00f6ffentliche Felder, die die Auswahl von Seitengr\u00f6\u00dfen vereinfacht. M\u00f6gliche Werte sind: A0 \u2026 A10, B0 \u2026 B10, HALFLETTER, LETTER, EXECUTIVE, LEGAL, NOTE, POSTCARD und einige mehr. <\/p>\n<h3>Definition des Seitenformats<\/h3>\n<\/p>\n<p>Neben der eigentlichen Gr\u00f6\u00dfe des PDF-Dokuments kann man auch dessen Ausrichtung, also Hochformat oder Querformat festlegen. Die Standard-Einstellung ist dabei Hochformat. Um eine Seite im Querformat anzulegen, ruft man einfach die Methode \u201erotate()\u201c auf dem von PageSize zur\u00fcckgegebenen Wert auf. Ein PDF-Dokument im Querformat der Gr\u00f6\u00dfe A4 w\u00fcrde wie folgt definiert werden: <\/p>\n<p>Document doc = new Document(PageSize.A4.Rotate()); <\/p>\n<h3>Definition der Seitenr\u00e4nder<\/h3>\n<\/p>\n<p>Der dritte Konstruktor von Document bietet zudem noch die M\u00f6glichkeit, die Gr\u00f6\u00dfe von Seitenr\u00e4ndern zu definieren. Die Angabe der Gr\u00f6\u00dfe erfolgt in der Einheit \u201ePoint\u201c (Punkte). Die Umrechnung von \u201ePoint\u201c in \u201eZentimeter\u201c ist etwas umst\u00e4ndlich, da die 72 Points genau ein Zoll darstellt. Ein Zoll wiederum besteht aus 2,54cm. Seitenr\u00e4nder von jeweils 2cm entsprechen also 56,693Points und werden wie folgt berechnet: <\/p>\n<p>Ein PDF-Dokument der Seitengr\u00f6\u00dfe A4 mit jeweils 2cm Seitenr\u00e4ndern w\u00fcrde so erstellt werden: <\/p>\n<p><font face=\"cour\" size=\"2\">Document doc = new Document(PageSize.A4.Rotate(), 28, 28, 28, 28);<\/font> <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" style=\"border-right:0;border-top:0;border-left:0;border-bottom:0;\" height=\"85\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2008\/08\/image.png\" width=\"293\"\/>  <\/p>\n<h3>\u00d6ffnen und Schlie\u00dfen des Documents<\/h3>\n<\/p>\n<p>Document besitzt zwei wesentliche Funktionen, die zum Erstellen des PDF-Dokuments notwendig sind: Open() und Close(): <\/p>\n<p><b>Open() \/ IsOpen()<br \/><\/b>Um ein Dokument zu bearbeiten bzw. mit Inhalten zu bef\u00fcllen, muss es ge\u00f6ffnet werden. Dazu ruft man die Methode Open() auf dem Document-Objekt auf. \u00dcber die Methode IsOpen() kann man abfragen, ob das Dokument bereits mit Open() ge\u00f6ffnet wurde.<br \/>Hinweis: Nachdem Open() aufgerufen wurde, kann man weder Meta-Daten noch PDF-Header-Informationen bearbeiten! <\/p>\n<p><b>Close()<br \/><\/b>Sobald alle Inhalte dem Dokument hinzugef\u00fcgt wurden, muss das Dokument geschlossen werden, damit es korrekt (auf die Festplatte) geschrieben werden kann. Nach dem Aufruf von Close() kann nichts mehr hinzugef\u00fcgt werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>iTextSharp ist eine Open Source Bibliothek zum Erstellen und Bearbeiten von PDF-Dateien. Die Java-Bibliothek iText wurde auf .NET (C#) portiert und wird synchron mit dem .NET-Pendant weiterentwickelt. Ziel der Entwicklung war Entwicklern eine Bibliothek in die Hand zu geben, mit der sie ihre eigenen Anwendungen um PDF-Funktionalit\u00e4ten erweitern konnten. In diesem Tutorial soll darum gehen, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[57],"class_list":["post-536","post","type-post","status-publish","format-standard","hentry","category-net","tag-itextsharp"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Ug90-8E","_links":{"self":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/536","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=536"}],"version-history":[{"count":0,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/536\/revisions"}],"wp:attachment":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=536"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}