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();

02
Aug
08

Tutorial iTextSharp: Einführung

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äten erweitern konnten. In diesem Tutorial soll darum gehen, einzelne Funktionalitäten von iTextSharp anhand von Beispielen vorzustellen.

Bezugsmöglichkeiten

iText: http://www.lowagie.com/iText

iTextSharp: http://sourceforge.net/projects/itextsharp/

Tipp: Code-Dokumentation mit Doxygen erzeugen

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ückgegriffen.

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ädt man einfach das letzte Doxygen Release von http://www.stack.nl/~dimitri/doxygen/ herunter.

Erstellen von PDF-Dokumenten

Das Document-Objekt

Das Document-Objekt stellt die Basis aller Dokument-Typen der iTextSharp-Bibliothek dar. Das Document-Objekt besitzt drei öffentliche Konstruktoren:

public Document()

public Document(Rectangle pageSize)

public Document(Rectangle pageSize, int marginLeft,int marginRight,

int marginTop, int marginBottom)

Definition der Seitengröße

Der parameterlose Konstruktor von Document verwendet als Default-Einstellung die Seitengröße A4, während die anderen beiden Konstruktoren eine Angabe der Seitengröße erwarten. Bei deren Definition kann auf die Klasse PageSize zurückgegriffen werden. PageSize besitzt öffentliche Felder, die die Auswahl von Seitengrößen vereinfacht. Mögliche Werte sind: A0 … A10, B0 … B10, HALFLETTER, LETTER, EXECUTIVE, LEGAL, NOTE, POSTCARD und einige mehr.

Definition des Seitenformats

Neben der eigentlichen Größe 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 „rotate()“ auf dem von PageSize zurückgegebenen Wert auf. Ein PDF-Dokument im Querformat der Größe A4 würde wie folgt definiert werden:

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

Definition der Seitenränder

Der dritte Konstruktor von Document bietet zudem noch die Möglichkeit, die Größe von Seitenrändern zu definieren. Die Angabe der Größe erfolgt in der Einheit „Point“ (Punkte). Die Umrechnung von „Point“ in „Zentimeter“ ist etwas umständlich, da die 72 Points genau ein Zoll darstellt. Ein Zoll wiederum besteht aus 2,54cm. Seitenränder von jeweils 2cm entsprechen also 56,693Points und werden wie folgt berechnet:

Ein PDF-Dokument der Seitengröße A4 mit jeweils 2cm Seitenrändern würde so erstellt werden:

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

image

Öffnen und Schließen des Documents

Document besitzt zwei wesentliche Funktionen, die zum Erstellen des PDF-Dokuments notwendig sind: Open() und Close():

Open() / IsOpen()
Um ein Dokument zu bearbeiten bzw. mit Inhalten zu befüllen, muss es geöffnet werden. Dazu ruft man die Methode Open() auf dem Document-Objekt auf. Über die Methode IsOpen() kann man abfragen, ob das Dokument bereits mit Open() geöffnet wurde.
Hinweis: Nachdem Open() aufgerufen wurde, kann man weder Meta-Daten noch PDF-Header-Informationen bearbeiten!

Close()
Sobald alle Inhalte dem Dokument hinzugefügt wurden, muss das Dokument geschlossen werden, damit es korrekt (auf die Festplatte) geschrieben werden kann. Nach dem Aufruf von Close() kann nichts mehr hinzugefügt werden.

02
Aug
08

Vortrag: iTextSharp – Eigene Programme um PDF-Funktionalität erweitern

Am Mittwoch, den 30. Juli 2008, habe ich vor der .NET-Developers Group Stuttgart einen Vortrag über die Open Source Bibliothek iTextSharp gehalten.

Den Vortrag, zusammen mit Code-Beispielen, habe ich auf meinen Webserver hochgeladen: www.abramowitsch.de/vortraege/dotnetstuttgart/itextsharp/itextsharp.zip

Viel Spaß damit :-)

Ralf

11
Jun
08

Office Live Workspace: Problem bei der Installation des Add-Ins

Ich habe mich vor einer Weile bei der Beta-Version vom Office Live Workspace angemeldet. Dort kann man seine Office-Dokumente archivieren, verteilen und betrachten. Leider ist es – im Gegensatz zu Google Text & Tabellen – nicht möglich, die Texte online zu bearbeiten :-(

image

http://office.live.com

Nun habe ich auf der Webseite gesehen, dass man sich ein Plugin für Office installieren kann, mit dem man direkt mit Office Live Workspace kommunizieren kann:

image

Nachdem ich die Setup.exe gestartet habe, erhalte ich folgende Fehlermeldung:

image

Das Hotfix for Office KB941637 konnte nicht installiert werden:

image

Ich setze hier seit Kurzem ein x64-Vista Ultimate Edition mit Office 2007 Professional ein.

Auf dem Logfile konnte ich entnehmen, dass die Installation mit dem Exitcode 17031 (”Process exited with code 17031″) beendet wurde.

Nach kurzem Googeln habe ich festgestellt, dass es ein Problem mit der Web Authoring Component vom Visual Studio 2008 das Problem ist! Wenn man dieses deinstalliert, sollte es funktionieren:

image

image

Danach startet man die Setup.exe vom Office Live Update (die hat man oben bereits von der Office Live Workspace Seite heruntergeladen):

 image

Jetzt funktioniert auch die Installation des Add-Ins:

image

So sieht das Add-In dann in beispielsweise PowerPoint aus:

image

Es kommen zwei neue Menüpunkte hinzu: “Von Office Live aus öffnen” und “In Office Live speichern”.

 

Scheinbar wird gerade an einer Lösung gearbeitet. Doch bisher ist davon nichts zu spüren, denn das Problem ist bereits seit Wochen bekannt …

08
Jun
08

Gratis Source-Code Analyse Tool für Visual Studio

Vor ein paar Wochen hat Microsoft das Project “Microsoft Source Analysis for C#” veröffentlicht. Die Grundlage für die statische Code-Analyse ist dieses Mal der (C#)-Quellcode.

image

Wie man der eigens dafür eingerichteten Blog-Seite entnehmen kann, wurde das Tool zuvor intern eingesetzt, um den Code auf bestimmte Qualitätsmerkmale zu überprüfen.

Für meinen Geschmack sind ein paar Einstellungen wirklich unnötig bzw. nicht wirklich praxistauglich (zumindest für mich). Zum Glück kann man die zu prüfenden Kriterien über ein kleines Tool im Installationsverzeichnis konfigurieren:

image

Mit einem Doppelklick auf die Settings-Datei wird der Editor geöffnet. Dieser verfügt über 5 Tabs zur Konfiguration: Rules, Settings Files, Results Caching, Company Information und Hungarian. Diese sind nachfolgend der Übersicht halber

alle aufgeführt:

image

image

image

image

image

Im Visual Studio 2008 wird dann eine neue View “Source Analysis” hinzugefügt, in der die jeweiligen Regelverletzungen aufgeführt werden:

image

Download: http://code.msdn.microsoft.com/sourceanalysis/Release/ProjectReleases.aspx?ReleaseId=1047

Blog-Seite:
http://blogs.msdn.com/sourceanalysis/

Dokumentation der einzelnen Rules:
http://blogs.msdn.com/sourceanalysis/pages/source-analysis-4-2-rules.aspx