18
Okt
09

Festplatten sicher und einfach löschen

Dieses Wochenende war es mal wieder soweit – Entrümpelung der Wohnung. Auch mein alter Rechner wurde nicht geschont und muss ausgemustert werden.

Da ich keine Lust habe, dass irgendwer noch meine Daten lesen oder irgendwelche Kiddies mit Data Recovery Tools aus Spaß meine Dokumente wiederherstellen, musste eine sichere Lösung her.

Ein reines Windows-Programm kommt leider nicht in Frage, da ich die gesamte Platte sicher löschen möchte und nicht nur eine andere Partition.

Nachdem ich eine Knoppix DVD ausprobierte und scheiterte, habe ich ein anderes Tool ausprobiert: DBAN – Darik’s Boot and Nuke:

image

Das Tool unterstützt in der Version 1.0.7 folgende Löschmethoden:

  • dod – Löscht Daten nach dem DoD 5220.22-M Verfahren
  • dodshort – (Standard) Löscht Daten nach dem verkürzten DoD 5220.22-M Verfahren
  • ops – Löscht Daten nach dem RCMP TSSIT OPS-II Verfahren
  • gutmann – Löscht Daten nach der Gutmann-Methode
  • prng – Löscht Daten anhand der PRNG Stream Methode
  • quick – Einfache Methode, die einmal alle Daten überschreibt

image

Ich habe mich für die dod-Methode entschieden. Bei meiner 160GB Festplatte hat es 15h gebraucht, bis diese gelöscht wurde.

Das Tool startet problemlos von der CD und durchsucht den Rechner nach vorhandenen Festplatten automatisch. Anschließend wird das Ergebnis der Suche aufgelistet und man kann die Festplatten auswählen. Hier habe ich nochmal einen Screenshot, den ich in VMWare nachgestellt habe:

image

Über die Leertaste wird dann die VMware-Festplatte ausgewählt:

image

Mit F10 startet dann der Löschvorgang:

image

Hier gibts das Tool als ISO zum Download: http://www.dban.org/ (ca. 1MB)

Ich würde die Version 1.0.7 empfehlen. Die Version 2.0 blieb bei mir aus irgend einem Grund bei “PCIFS” nach Erkennung der USB-Geräte stehen.

10
Okt
09

Mein neuer Virenscanner: a-squared Anti-Malware

Vor ein paar Tagen habe ich einen neuen Virenscanner ausprobiert: A-SQUARED Anti-Malware. Nachdem ich jahrelang Avira Antivir vertraut habe, wollte ich mal etwas Neues probieren. In einigen Testberichten (1, 2 und 3) kam A-SQUARED Anti-Malware garnicht schlecht weg und so wollte ich ihm eine Chance geben.

A-SQUARED Anti-Malware setzt dabei auf zwei Scan-Engines. Eine davon ist die Ikarus-Scan-Engine (siehe http://www.ikarus.at/). Ein ähnliches Prinzip verfolgt auch das Produkt “Forefront Security” (http://www.microsoft.com/germany/forefront/default.mspx) von Microsoft, das allerdings mehr Scan-Engines lizenziert hat. Dafür kostet es allerdings auch mehr und ist vor allem für den Unternehmseinsatz gedacht.

Als ich das erste Mal davon gelesen habe, war mein Eindruck, dass das Scannen dann mindestens doppelt so langsam ist. Ich habe früher mal zwei Virenscanner gleichzeit auf einem System installiert. Das Ergebnis war dann ein nahezu unbedienbares System: On-Demand-Scanner 1 scannt die Datei von On-Demand-Scanner 2. On-Demand-Scanner 1 stellt fest, dass wieder ein Prozess auf die Datei zugreift und so weiter. Ergebnis: Die Scanner haben das System quasi mit sich selbst blockiert.

Security Center

Das Security Center vereinheitlicht die Bestandteile der Anti-Malware Suite:

image

Da wird der aktuelle Sicherheitsstatus angezeigt: sind alle Updates installiert, ist der OnExecution Scanner aktiv, ist der Surf Schutz aktiv usw.

Scanner

Über das Sicherheitscenter kann via “PC Scannen” der Scanner manuell gestartet werden:

image

Im Hintergrund ist der On Execution Scanner sowieso aktiv. Möchte man nun den ganzen Rechner nach möglichen Schädlingen scannen, nutzt man den Button “PC Scannen”.

Hier hat man nun die Auswahl zwischen “Schnelltest”, “Smart Scan”, “Detail Scan” und “Eigener Scan”. Auf einem recht frisch installierten System benötigt der “Detail Scan” ca. 30 Minuten.

image

Zum Prüfen des Scanners habe ich mich mal auf einen standardisierten Test verlassen und zwar den von EICAR:

image 

Dort wird unter der Adresse http://www.eicar.org/anti_virus_test_file.htm ein Test-Virus zum Download angeboten, der von jedem aktuellen Virenscanner erkannt werden MUSS!

Das Herunterladen der Dateien funktioniert ohne Intervention von A-SQUARED Anti-Malware. Das verwunderte mich etwas, da ich von Avira oder Norton Antivirus gewohnt war, dass der Scanner “On Access” arbeitet. Beim Herunterladen der Datei würde der Download direkt abgebrochen.

Bei A-SQUARED Anti-Malware wird erst beim Ausführen der Datei gescannt und dann erst der Virus erkannt:

image

Alternativ werden die Test-Viren auch beim Detail-Scan gefunden:

image

HiJackFree

Neben einem Virenscanner beinhaltet das Paket auch ein Tool zum Aufspüren von HiJackern, Spyware, Adware usw.: HiJackFree

08 - HiJackFree

Ich kannte bisher HiJackThis von Trend Micro:

image

HiJackFree ist eine durchaus ernstzunehmende Alternative. Bei HiJackThis öffnet sich das Online-Forum zu dem selektierten Eintrag über einen Doppelklick. In HiJackFree muss man etwas länger suchen, aber wird dann doch fündig:

image

Und dann öffnet sich auch der Browser mit den Detail-Informationen, die ich wirklich gelungen finde:

image

Fazit

Alles in allem bin ich mit A-SQUARED Anti-Malware sehr zufrieden. Das Update funktioniert tadellos im Hintergrund. Der Memory Footprint von ca. 25MB und die Prozessorauslastung ist für mich auf jeden Fall akzeptabel und stört nicht bei der Arbeit. Zudem ist die Oberfläche wirklich gelungen: ansprechend und einfach bedienbar. Ich kann euch nur empfehlen, ebenfalls das Tool mal auszuprobieren. Eine 30 Tage Testversion kann auf der Webseite des Herstellers Emsi Soft heruntergeladen werden:

http://www.emsisoft.de/de/software/antimalware/

Tipp: Normalerweise kostet die Lizenz 30€. Auf der Webseite von Winload habe ich ich es für 15€ gefunden: http://www.winload.de/download/105408/Sicherheit,Utilities/Antivirus/a-squared.Anti-Malware.4.5.0.1.html

26
Sep
09

Facebook Account wirklich löschen

Heute hab’ ich es getan – ich habe meinen Facebook Account endlich gelöscht. Meine bisherigen Anstrengungen haben nur dazu geführt, dass ich meinen Account deaktivieren konnte – jetzt endlich habe ich es geschafft – und Du kannst das auch ;-)

Das Löschen eines Facebook-Kontos ist garnicht so einfach wie man glaubt. In zahlreichen Foren beschwert man sich darüber, dass man es nur deaktivieren kann. Diese Erfahrung habe ich auch gesammelt:

image

Deaktivieren ist aber nicht löschen – und ich will meine Daten löschen!

Also habe ich einige Zeit damit verbracht, eine Lösung für mein Problem zu finden. Hier ist sie:

1. Einloggen

2. Folgenden Link anklicken: http://www.facebook.com/help/contact.php%3Fshow_form=delete_account 

Facebook löschen

Facebook löschen - Sicherheitsabfrage 

Facebook löschen - 14Tage Karenzzeit 

3. 14 Tage lang nicht wieder bei Facebook anmelden

4. Account endlich gelöscht :-)

12
Jul
09

.NET Open Space Süd 2009 in Blaustein

Ich war dabei – beim .NET Open Space Süd 2009 bei Artiso. Zuerst einmal möchte ich den Organisatoren Thomas und Alex (und natürlich den Sponsoren!) für das gelungene Event danken! DANKE! Es hat wirklich Spaß gemacht und ich habe jede Menge gelernt.

Das Konzept – einige kannten es bereits aus Leipzig oder von ALT.NET aus England – war für mich neu: Jeder hatte die Möglichkeit, Themen seines Interesses auf jeweils ein Zettelchen zu schreiben und mit den Teilnehmern zu diskutieren. Anfangs konnte ich mir nicht wirklich vorstellen, dass es funktioniert. Aber es tut es wirklich!

Nach einem Smalltalk bei einem Käffchen und einer Butterbrezel ging mein erste Session los: “SCRUM”. Dabei habe ich einen guten Überblick über die Technik bekommen und konnte mir das Pro und Kontra mit praxisrelevantem Hintergrund anhören. Nach einer Pause ging es weiter mit WCF. Die Nachmittagsrunde hat sich mit Inversion Of Control (IoC) und Dependency Injection (DI) beschäftigt. Der Albert hat sehr kompetent die Fragen der Interessierten beantwortet. Für mich war diese Technik relativ neu – ich hab sie zumindest noch nie in Action gesehen und konnte mir nicht wirklich was darunter vorstellen. (Auch wenn ich oft gehört hab: “Ja wie testet ihr denn?”)

Am zweiten Tag ging es los mit Testen von Anwendungen und der UI. Die kontroverse Diskussion war recht fruchtbar und ich habe einiges darüber gelernt, wie andere Entwickler und Organisationen mit dem Testen an sich umgehen. Danach ging es weiter mit Clean-Code-Development. Stefan Lieser hat einen kurzen Überblick über die Hintergründe und das Wertesystem gegeben – und mich überzeugt, auch ein Clean-Code-Developer zu werden ;-) .

Alles in Allem war es ein sehr gelungenes Event. Ich habe mich besonders gefreut, mal die Leutchen live und in Farbe zu sehen, deren Blogs ich regelmäßig lese :-)

Vielen vielen Dank nochmal für das coole Event. Das nächste Mal werde ich in Blaustein oder Ulm übernachten und die Party mitnehmen ;-)

Leider habe ich keine Kamera dabei gehabt, aber es wird bestimmt bald Bilder vom Event auf http://ulm.netopenspace.de/2009/ geben.

04
Jul
09

Apple Software Update …

Nach dem Start meines Rechners öffnete sich heute das Apple Software Update. Dabei möchte es gern ALLES installieren, was Apple grad vorrätig hat:

image

Neben einem Boot Camp-Update, Safari 4, diversen Versionen von iTunes und Quicktime sind AirPort-Dienstprogramme, sowie Konfigurationssoftware für das iPhone dabei. Wenn ich auf “16 Objekte installieren” klicke, wird tatsächlich der für mein System unnütze Krempel mitinstalliert. So ein Schwachsinn!

Ich selbst besitze nur einen iPod der 5. Generation. Damit ich überhaupt Lieder auf das Gerät übertragen kann, MUSS ich iTunes (ca. 100MB) installieren. Dass Apple nur “chique” kann, aber keine Funktion hat, habe ich schon bei meinem iPod bemerkt. Die Klangqualität ist miserabel, der Akku ist nicht auswechselbar und hält nicht mal 3h bei reiner Musik.

Wie man sieht, ist Software-Entwicklung auch nicht unbedingt Apples Stärke …

Vielleicht sollten sie sich auf Obsthandel spezialisieren. Da kann man nicht so viel falsch machen .. und ein passendes Logo haben sie ja auch schon ;-)

27
Jun
09

Windows 7 XP-Mode

Ich war gestern auf dem Microsoft TechDay zum Thema Windows 7 und Windows Server 2008 R2. Als eine Virtualisierungstechnologie wurde dabei der sogenannte “XP-Mode” unter Windows 7 vorgestellt. Dabei handelt es sich um Windows Virtual PC (ehemals Microsoft Virtual PC).

Damit wird es möglich, einzelne Programme unter einem anderen Betriebssystem (im Speziellen Windows XP SP3) auszuführen.

Installation

Schritt 1: Endbenutzer-Lizenzvertrag annehmen

image

Schritt 2: Kennwort für das Image eingeben. Optional kann festgelegt werden, ob das Kennwort für die Anmeldung gespeichert wird und eine automatische Anmeldung vorgenommen werden soll.

image

Schritt 3: Windows Updates einschalten

image

Schritt 4: Warten .. warten .. warten .. bis der virtuelle Computer gestartet ist.
(Bei mir hat es etwa 10min. gedauert)

image

image

image

Dann endlich startet der Rechner und meldet sich automatisch mit den in Schritt 2 angegebenen Credentials an:

image

image

Durch ein Schließen des Fensters wird der virtuelle Rechner in den Ruhezustand versetzt:

image

Nun findet man den Rechner im Profil des angemeldeten Benutzers wieder:

image

Verfügbar machen von virtuellen Anwendungen im Startmenü

Nachdem Anwendungen installiert wurden, sind diese nicht immer automatisch in Windows 7 verfügbar.

Anwendungen müssen für alle Benutzer verfügbar sein. Bei mir hat es auch mal geholfen, wenn ich das Programm ans das Startmenü anhefte:

image

Dann ist es auch unter Windows 7 verfügbar:

image

Ich habe mal testweise den FireFox unter dem virtuellen WindowsXP installiert. Es startet sich wie ein ganz normales Programm und fügt sich als Fenster in die anderen Windows 7 Fenster ein:

image

Leider funktionieren diese netten Vorschauen nicht mehr. Hier ein Screenshot:

image 

Wenn man die virtuelle Maschine gestartet hat, kann man die virtuelle Anwendung nicht starten. Stattdessen wird folgende Meldung:

image

Downloads

Mehr Informationen: http://www.microsoft.com/windows/virtual-pc/get-started.aspx
Download: http://www.microsoft.com/windows/virtual-pc/download.aspx

Windows Virtual PC ist etwa 4,6MB groß. Dieses Paket ist Voraussetzung für den virtuellen Modus.

Windows XP gibt es als Paket mit insgesamt 446MB.

21
Jun
09

Clone Detective für Visual Studio

Heute bin ich auf ein cooles Add-On für Visual Studio aufmerksam geworden: Der Clone Detective für Visual Studio.

image 

Als Engine hinter Clone Detective kommt ConQAT von der TU München zum Einsatz: http://conqat.cs.tum.edu/index.php/Download

Nach der Installation gibt es in der “Ansicht” –> “Weitere Fenster” neue Einträge:

  • Clone Explorer
  • Clone Intersections
  • Clone Results

image

Zur Demonstration der einzelnen Fenster habe ich mir mal die Freiheit genommen, den Quellcode von iTextSharp auf Code-Duplikate zu untersuchen.

Clone Explorer

Die Clone Explorer startet die Analyse des Quellcodes und zeigt in einer Übersicht das Resultat:

image

Die Resultate lassen sich nun noch speziell gruppieren (hier: nach duplizierten Codezeilen):

image

Ebenfalls unterstützt wird das Importieren und Exportieren des Clone-Berichts. Selbstverständlich lassen sich die Such-Optionen noch konfigurieren:

image

Für meinen Geschmack war das allerdings schon gut genug :-)

Code Intersections

Code Intersections stellen – wie der Name schon sagt- Überschneidungen im Code dar. Im folgenden Beispiel enthält die Datei BarcodeInter25.cs 15 Codeüberschneidungen mit der Dtei BarcodePostnet.cs:

image

Das Diagramm zeigt das Vorkommen der Überschneidung in der Datei. Mit der rechten Maustaste kann nun noch in den Ergebnissen gesucht werden und die betreffende Stelle über einen Doppelklick im Editor geöffnet werden.

Im Editor wird an der linken Seite eine lila Markierung dargestellt:

image

Diese zeigt die Stelle der Codeduplikate im Code an.

Clone Result

Das Fenster Clone Result zeigt das Code-Duplikat aus dem Editor nochmal an:

image

Fazit

Nicht jedes Duplikat ist auch wirklich ein Duplikat. Viele Fundstellen hingegen haben mir persönlich weitergeholfen, Redundanzen zu verringern und nochmals kritisch über meinen Code zu sehen.

Download

Das Programm kann auf CodePlex kostenlos (inkl. Source Code) heruntergeladen werden:

http://clonedetectivevs.codeplex.com/

Das Installer-Paket ist ca. 14MB groß.

Also Systemvoraussetzungen werden folgende genannt:

  • Visual Studio 2008 Standard oder besser
    (sorry, Visual Studio 2008 Express Editions unterstützen keine AddIns)
  • Java 1.5.0_01 oder neuer
    (ConQAT läuft unter Java)
23
Mai
09

Top 3 Entwickler-Tools

MSDN Deutschland veranstaltet eine Blog-Parade. Da will ich natürlich auch mitmachen. Allerdings habe auch ich mehr als 3 Lieblingstools zum Programmieren. Hier kommt nun die Top 3 meiner Entwickler-Tools:

Platz 1: Microsoft Visual Studio 2008
Visual Studio ist mein Top-Tool, weil ich mir ohne gar nicht vorstellen könnte, Software zu entwickeln :-)
Viele Tipps&Tricks findet man im Blog von Sara Ford: http://blogs.msdn.com/saraford/ Diese Tipps hat sie auch als Buch veröffentlicht (“251 Ways to Improve Your Productivity”).

Platz 2: JetBrains ReSharper
Früher, als ich noch mit Java entwickelte, war ich fasziniert von der Eclipse IDE. Tolle Refactoring-Funktionen, Quick-Fixes & Co. Der ReSharper bringt die lange vermissten Eclipse-Funktionen in Visual Studio. Muss man einfach haben!

Platz 3: JetBrains dotTrace
Unverzichtbares Tool (Profiler) zum Aufspüren von Performance-Engpässen. Klasse!

Da ich mit weitaus mehr Tools arbeite, möchte ich diese Liste nicht vorenthalten:

Platz 4: NUnit Framework
Framework zum Testen von .NET Anwendungen.

Platz 5: Ranorex
Ranorex ist ein Toolset zum automatisierten Testen von GUI-Applikationen. Es ist ein echt gelungenes Capture-And-Replay Tool.

Platz 6: vmware WorkStation
Zum Testen (und Debuggen!) des Projekts / der Anwendung auf unterschiedlichen Betriebssystemen. Echt Klasse!

Platz 7: JetBrains TeamCity
Sehr gelungener Build-Server für Continous Integration. Macht echt Spaß, damit zu arbeiten. Früher habe ich mit CruiseControl.NET gearbeitet. Die Konfiguration ist jedoch bei TeamCity viel schöner und einfacher.

Platz 8: Reflector
Muss man glaub ich nicht mehr erklären: Toller Disassembler und Assembly-Inspector mit zahlreichen Plugins.

Platz 9: Sparx Enterprise Architect
Design-Tool für UML-Diagramme & Co.

Platz 10: Notepad++
Schneller, komfortabler Editor. Sollte eigentlich jeder installiert haben :-)

Platz 11: WiX-Toolkit (Windows Installer XML)
Das erste OpenSource-Tool von Microsoft. Mittels XML-Definition werden MSI-Pakete inkl. Bootstrapper erzeugt. Hier gibt es ein sehr gutes Tutorial für den ersten Einstieg. Tipp: SharpDevelop bietet einen brauchbaren Editor für die UI.

Platz 12: SandCastle & SandCastle Help File Builder
Tool von Microsoft (Open Source) zum Generieren der Code-Dokumentation (beispielsweise im MSDN-Style).

Platz 13: NCover
Code-Coverage Tool. Sehr praktisches Tool zum Prüfen, ob die erstellten Tests den Code abdecken. Optional kann man auch auf PartCover (Open Source) setzen; allerdings ist es etwas unkomfortabler.

Platz 14: StyleCop & FxCop
Diese Tools analysieren den Code auf Best Practices, potentielle Sicherheitsprobleme usw. Die Regeln können auch selbst erweitert werden. Super Sache!

Platz 15: VisualSVN
Integration von Subversion in Visual Studio. Zeigt, welche Dateien sich geändert haben, Diff-Funktionalität direkt aus Visual Studio heraus, …
Sehr empfehlenswert!
BTW: Die Entwickler stellen kostenlos einen einfach zu konfigurierenden SVN-Server zur Verfügung (Visual SVN Server)

02
Aug
08

Tutorial iTextSharp: Erstellen von PDF-Objekten

Texte

In iTextSharp werden Texte mithilfe von drei Klassen zusammengesetzt: Chunk, Phrase und Paragraph. Diese sollen in den nächsten Zeilen etwas näher beschrieben werden.

Chunk

Die Klasse Chunk befindet sich im Namespace iTextSharp.text. Chunk stellt die „kleinste“ Einheit in iTextSharp dar. Es besteht aus einem String, bei dem alle Zeichen die gleiche Formatierung (also Schriftart, -größe, -stil und -farbe) besitzen.

Chunk-Objekte besitzen keinerlei Informationen über Zeilenabstände. Das heißt, dass wenn der enthaltene String zu lang ist, wird ein Wagenrücklauf (Carriage return) ohne Zeilenvorschub ausgelöst. Das Resultat ist das, dass die gerade geschriebene Zeile überschrieben wird (ohne gelöscht zu werden). Deshalb sollten Chunk-Objekte in der Regel nicht dazu verwendet werden, direkt einem Dokument hinzugefügt zu werden. Stattdessen sollten sie in Kombination mit anderen Objekten verwendet werden.

Code-Beispiel

Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, File.Create(„Zitate.pdf“));
doc.Open();
Chunk zitatEinstein = new Chunk(„Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.“);
Chunk zitatTwain = new Chunk(„Gib jedem Tag die Chance, der schönste deines Lebens zu werden.“);
doc.Add(zitatEinstein);
doc.Add(zitatTwain);
doc.Close();

Ausgabe im Adobe Reader

image

Phrase

Ein Phrase-Objekt (engl. Satz) besteht aus einer Aneinanderreihung von Chunk-Objekten mit einem wichtigen Extra: Wenn ein Zeilenende erkannt wird, dann wird neben den Wagenrücklauf (Carriage Return) auch ein Zeilenvorschub (New Line / Line Feed) ausgelöst, sodass sich die Chunks nicht mehr überschreiben. Der Zeilenabstand wird auch als Leading bezeichnet und kann im Konstruktor als auch in der Leading-Eigenschaft der Phrase-Klasse als float-Wert angegeben werden.

Zusätzlich ist es möglich, eine Hauptschriftart anzugeben, mit der das Phrase-Objekt formatiert wird. Somit erhalten alle enthaltenen Chunk-Objekte die gleiche Formatierung und ein einheitliches Aussehen. Aber ebenso kann man auch jedes Chunk-Objekt einzeln formatieren.

Code-Beispiel

Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, File.Create(„Zitate.pdf“));
doc.Open();
Chunk zitatEinstein = new Chunk(„Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.“);
Chunk zitatTwain = new Chunk(„Gib jedem Tag die Chance, der schönste deines Lebens zu werden.“);
Phrase zitate = new Phrase(25);
zitate.Add(zitatEinstein);
zitate.Add(zitatTwain);
doc.Add(zitate);
doc.Close();

Ausgabe im Adobe Reader

image

Paragraph

Das Paragraph-Objekt verbindet mehrere Chunk- und Phrase-Objekte zu einem Absatz (Paragraph, engl. Absatz). Nach jedem Absatz wird automatisch ein Zeilenumbruch erstellt. Das entspricht etwa dem, dass man einem Phrase-Objekt ein Chunk.NEWLINE oder new Chunk(„\n“) anhängt.

Die Paragraph-Klasse leitet von der Phrase-Klasse ab und ergänzt diese um einige Funktionen:

image

Abbildung 3: Klassenhierarchie bei Phrase und Paragraph

Der Zusammenhang zwischen Chunk, Phrase und Paragraph soll in folgender Abbildung verdeutlicht werden:

Bild1

Abbildung 4: Zusammenhang zwischen Paragraph, Phrase und Chunk

Initialisierung

Die Paragraph-Klasse besitzt mehrere Konstruktoren:

public Paragraph()
public Paragraph(float leading)
public Paragraph(Chunk chunk)
public Paragraph(float leading, Chunk chunk)
public Paragraph(string str)
public Paragraph(string str, Font font)
public Paragraph(float leading, string str)
public Paragraph(float leading, string str, Font font)
public Paragraph(Phrase phrase)

Ein Absatz kann also aus Chunks, Phrases oder String-Objekten erstellt werden. Über das Font-Objekt kann eine beliebige Schriftart für den Absatz festgelegt werden.

Abstand zwischen den Zeilen festlegen

Zusätzlich unterstützen einige Konstruktoren die Definition von Zeilenabständen (hier leading genannt). Alternativ kann über die Leading-Eigenschaft der Zeilenabstand festgelegt werden.

Abstand zwischen Absätzen festlegen

Den Abstand zwischen einzelnen Absätzen kann über die Eigenschaften SpacingBefore und SpacingAfter gesteuert werden. Dabei wird der angegebene Wert zu dem Wert addiert, der als leading definiert wurde.

Ausrichtung

Als „Besonderheit“ beim Paragraph-Objekt ist die Möglichkeit, Textausrichtungen vorzunehmen. Dazu wird die Methode SetAlignment verwendet. Als Parameter wird ein String erwartet, der als Konstante in ElementTag-Klasse festgelegt ist. Mögliche Werte sind: ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_JUSTIFIED, ALIGN_JUSTIFIED_ALL, ALIGN_TOP, ALIGN_MIDDLE, ALIGN_BOTTOM und ALIGN_BASELINE.

Ebenso wäre es möglich, anstatt die SetAlignment-Methode zu verwenden, der Alignment-Eigenschaft einen Wert zuzuweisen. Dieser Wert muss dabei vom Typ integer sein. Auch hier gibt es wieder Konstanten, die zum Setzen der richtigen Ausrichtung verwendet werden – allerdings sind sie in der Element-Klasse definiert: ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_JUSTIFIED, ALIGN_JUSTIFIED_ALL, ALIGN_TOP, ALIGN_MIDDLE, ALIGN_BOTTOM und ALIGN_BASELINE.

Wann man welche Methode verwendet, ist reine Geschmackssache. Intern wird SetAlignment auf Alignment gemappt.

Nachfolgend ein paar Code-Beispiele für die Textausrichtung im Absatz:

Document doc = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(doc, File.Create(„Zitate.pdf“));
doc.Open();
Chunk zitatTwain = new Chunk(„Gib jedem Tag die Chance, der schönste deines Lebens zu werden.“);
zitatTwain.Font = FontFactory.GetFont(„Tahoma“, 24);
Paragraph paragraphTwain = new Paragraph(zitatTwain);

Setzen der Ausrichtung über SetAlignment-Methode

paragraphTwain.SetAlignment(ElementTags.ALIGN_CENTER);
doc.Add(paragraphTwain);
paragraphTwain.SetAlignment(ElementTags.ALIGN_LEFT);

Setzen der Ausrichtung über Alignment-Eigenschaft

doc.Add(paragraphTwain);
paragraphTwain.Alignment = Element.ALIGN_RIGHT;
doc.Add(paragraphTwain);
doc.Close();

Ausgabe im PDF

image

Einrückungen am Absatzanfang

Weiterhin besitzt das Paragraph-Objekt noch die Möglichkeit, Einrückungen am Anfang eines Absatzes einzufügen. Die wird mithilfe der IdentationLeft- und IdentationRight-Eigenschaft.

02
Aug
08

Tutorial iTextSharp: Writer & Meta-Daten

Das Writer-Objekt

Nachdem nun das Document-Objekt definiert wurde, wird zum Schreiben ein Writer-Objekt benötigt. Dieses entscheidet, wie das Dokument später geschrieben wird. Für jeden „Dokumenttyp“ gibt es ein Writer-Objekt: Beispielsweise wird für PDF-Dokumente ein PdfWriter benötigt, während für TeX-Dokumente ein TeXWriter instanziiert werden muss usw. Das Konzept von iTextSharp ermöglicht auch eine Dokumenttypen und –writer zu erstellen. Diese müssen nur von der abstrakten Klasse DocWriter aus dem iTextSharp.text-Namespace abgeleitet sein.

image

Abbildung 1: Klassenhierarchie DocWriter

Der Konstruktor der Writer-Klassen ist nicht öffentlich (private), sodass mittels GetInstance-Methode ein neues Objekt erzeugt werden muss. GetInstance erwartet zwei Parameter: das Document-Objekt (Das Document-Objekt) und einen Stream, in den die Ausgabe geschrieben wird.

Beispiel für das Erstellen eines neuen PDF-Writers:

Document doc = new Document(PageSize.A4.Rotate());

PdfWriter writer = PdfWriter.GetInstance(doc, File.Create(„test.pdf“));

Zum Schreiben einer PDF-Datei wird das writer-Objekt nicht mehr direkt verwendet (natürlich hält jedes Writer-Objekt einen IDocListener auf das Document-Objekt und wird somit über Änderungen im Document informiert). Stattdessen ermöglicht es weitere Features, auf die in den entsprechenden Kapiteln eingegangen wird:

  • Bearbeiten vorhandener PDF-Dokumente
  • Direktes Zeichnen von Grafiken
  • Verschlüsseln von PDF-Dokumenten
  • Viewer-Einstellungen vornehmen (Anzeige mit/ohne Menüleiste, Vollbild-Modus, Vorschaubilder anzeigen, Seiten-Skalierung etc.)
  • Dateien anhängen

PDF Meta-Daten bearbeiten

Die Meta-Daten im PDF-Dokument beinhalten allgemeine Informationen über das Dokument. Im Adobe Acrobat Reader können die Meta-Daten in den Dokumenteigenschaften (Datei à Dokumenteigenschaften / Strg + D) angesehen werden:

image

Abbildung 2: PDF-Metadaten

Rot hervorgehoben sind die jeweiligen Metadaten, die programmatisch auf dem Document-Objekt gesetzt werden können:

Eigenschaft in den Metadaten

image

Beispiel für das Setzen der Meta-Daten:

doc.AddAuthor(„Ralf Abramowitsch“);
doc.AddCreationDate();
doc.AddCreator(„Mein Tool“);
doc.AddKeywords(„iTextSharp“);
doc.AddKeywords(„Tutorial“);
doc.AddKeywords(„.NET“);
doc.AddSubject(„Thema“);
doc.AddTitle(„Titel“);
doc.AddProducer();