Hi @ all,
damit ihr nicht solange warten müsste, will euch heute über meine vergangene Woche berichten.
Nach dem ich nun die kleinen Toolchen fertig geschrieben hatte und zum testen freigegeben hatte, wartete ich vergebens auf eine Resonanz. Aber das liegt wahrscheinlich daran, dass es erst ende der nächsten Woche implementiert werden soll. Nichts desto trotzt, hatte ich ein weitere Aufgaben erhalten. Es handelte sich diesmal um C# und SVGT.
Ich möchte das System kurz beschreiben, was ich damit meine, bzw. was die Aufgabe beinhaltet. Der Kunde, hat die Möglichkeit, seine generierte Karte, die er mittels GeoMedia WebMap erstellt, in ein PDF-Dokument umzuwandeln, was er anschliessen ausdrucken kann. Leider funktioniert das Drucken nicht richtig, denn wenn das Dokument an den Druck gesendet wird, dann bricht der Acrobat Reader nach 5 % ab.
Wie wird das PDF-Dokument erstellt? Der WebMap-Server generiert eine SVG-Datei, die in eine SVGT-Datei umgewandelt wird (mit C#). Mittels dieser neu erzeugten Datei wird daraus ein PDF erstellt. Dies geschieht mit der Software abcPDF (ist kommerziell :-(). Der Praktikant soll das Programm so optimieren, dass der Acrobat Reader nicht mehr abschmiert. Bevor es an den Source Code ging, habe ich mich erstmal mit SVGT beschäftigt. Im Grunde genommen, ist es das gleiche wie SVG, nur eine schlankere Version. Es wird hauptsächlich für Handys eingesetzt, denn das T steht für Tiny.
Nach einem kurzen Crash-Kurs in SVGT, habe ich mich daran gemacht und versucht das C# zu verstehen. Was auf den ersten Blick sehr chaotisch aussah, denn das Dokument wurde in meinen Augen zu oft iteriert und dies machte in meine Augen keinen sinn. Deshalb, habe ich die Vorzüge des Debugger genutzt und mir angeschaut, wohin er überall springt und was er alles verändern will. Im Endeffekt, hatte sich herausgestellt, dass er, von den 7 for- und foreach-Schleifen, nur 3 benötigt um das ganze Dokument zu durchlaufen! Irgendwie, kam mir das alles spanisch vor und ich habe mir erstmal die Changelog angeschaut und war sehr erstaunt, dass 10 unterschiedliche Personen diesen Source Code modifiziert haben, und jeder hatte seine eigene Schleife dazugepackt. War irgendwie komisch. Jedenfalls, behob das nicht das Problem mit dem Drucken.
Nach dem ich den Source Code „gesäubert“ hatte, habe ich mir die unterschiedlichen Dokumente angeschaut, um zu sehen, was er eigentlich alles verändert. Eigentlich fast gar nichts, nur das der svg-Tag einen anderen Eintrag erhalten hatte und das wars. Denn das Problem ist, dass das SVGT keine viewBox versteht und dies wurde mit einer Transformation ersetzt, die sehr kurios berechnet wurde. Nun kamen auch langsam die Vorzüge, eines Geoinformatikers zum Vorscheinen und ich habe die Transformation neu geschrieben. Interessanterweise, kam ich auf das gleiche Ergebnis, wie im Source Code nur das meine ein bisschen übersichtlicher war.
Nun ging das Gespiele los oder besser das numerische Herumprobiere. In einem sehr großen Group-Tag, worin die Transformation beschrieben worden war, enthielt mehrere kleine Group-Tags, die wiederum Pfade enthalten. Diese Pfade dienten zur Darstellung von Linien und der gleichen. Kurz gesagt, es wurde jede Koordinate durch die Transformationsparameter temporär, neu geschrieben, wenn das Dokument ausgedruckt wird. Somit war dies meine erste Vermutung, dass es vielleicht daran lag, dass der Acrobat Reader abschmiert. Also habe ich mich darangemacht und versucht die Koordinaten mit Massstab zu multiplizieren. Dies war aber nicht so einfach, denn es mussten nicht nur die Koordinaten multipliziert werden, sondern auch die Schriftgröße und der gleichen. Das war schon sehr haarig um herauszufinden, wo sich überall ein Tag befindet, der multipliziert werden sollte. Ich hatte sehr viel mit der Methode Replace gearbeitet.
Mitte der Woche, war ich damit auch fertig und ich konnte einen Testdruck starten. Und siehe da, der Acrobat Reader hängte sich nicht mehr auf. Komischerweise, wurde aus dem 180 KB großen Dokument ein 100 MB Dokumente, was an den Drucker gesendet wird. Natürlich, musste ich 30 Minuten warten, bis er mir endlich das Dokument ausgedruckt hat. So richtig befriedigt hat mich das noch nicht. Deshalb hieß es wieder zurück ans Werk.
Bevor ich jede Koordinate mit dem offset-Wert von der Transformation versehe, versuche ich nun gerade die Group-Tags zulöschen. Denn ich habe das Gefühl, dass der Acrobat Reader jeden einzelnen Group-Tag als neuen Layer interpretiert und deshalb das Dokument so „aufbläht“. Jedenfalls, bin ich gerade dabei die ganzen Group-Tags zu löschen. Leider fehlt mir ein bisschen die Erfahrung, mit dem Umgang mit C# und XML (SVG). Insbesondere, wenn ich einen Child-Node löschen will oder wie in meine Fall, aus dem Group-Tag herausnehmen und dann diesen Group-Tag löschen. Jedenfalls, breche ich mir gerade die Finger.
Aber dazu nächste Woche mehr!!!! ;-)
Ich wünsche euch einen schönen Tag,
der Hagen
Abonnieren
Kommentare zum Post (Atom)
1 Kommentar:
hagen, ich bin von deiner lockerheit imponiert. nichts mehr zu spüren von deiner anfänglichen sprachbarriere und die aufgaben dort scheinen ja wie gemacht für dich. chapeau! ;)
wird mal wieder zeit, dich im icq anzutreffen. aber dazu musst du wohl die täglichen bar-aufenthalte reduzieren und das kann ich nicht verantworten und gutheißen. machst das richtig. viel spaß noch dort. beste grüße, peter
Kommentar veröffentlichen