dinsdag, januari 17, 2006

Ik kan alles beter! (printen in .net)

Echt waar! Ik ben de beste! Het is dat ik geen tijd heb anders had ik heel windows opnieuw geschreven maar dan goed! Ja ik dacht ik vertel het maar gelijk, dat ik de beste ben, anders was je er waarschijnlijk zelf wel achter gekomen over een aantal maanden. En dan kan ik het beter zelf vertellen. Scheelt toch weer tijd!

Het bovenstaande klinkt raar, maar dat is eigenlijk wat je zegt als je weigert frameworks en tools van anderen te gebruiken, puur omdat je te eigenwijs bent of omdat je geen zin hebt om je in te lezen. En daarom verspil je kostbare regels code aan functionaliteit die al bestaat.( 90 euro p/u delen door 90 regels code p/u, uren vallen tegen elkaar weg, 90 euro voor 90 regels is 1 euro per regel. En dan ga ik gemakshalve uit van een gemiddelde van 90 code regels per uur. En volgens mij is dat nog aan de hoge kant en ligt het eerder tegen de 30 regels per uur wat 3 euro per regel code maakt.). Dan wordt eigenwijs zijn ineens erg duur.

Om op het printen in .net terug te komen. Ik ben bezig met een applicatie en in deze applicatie wil ik rapporten kunnen printen. Nu zit daarvoor in Visual Studio een mooie tool: Crystal Reports. Man o Man wat een onvriendelijk programma is dat! Ik heb er beroepshalve mee gewerkt en het is een drama. Vraag het iemand die ermee gewerkt heeft (pas jij maar even 8 rapporten aan :S) en die zal het beamen of is niet goed wijs, of wordt betaald door Crystal Reports om onwaarheden te verkondigen.

Ik wil dus printen en ik wil dus geen gebruik maken van crystal reports. Dus prijsbewust als ik ben ga ik op zoek naar een goede, goedkope reporting engine. En omdat ik voor mezelf aan het werk ben ligt mijn uurprijs erg laag. Naderd nul zogezegd. Het pakket mag dus niets kosten: open source! Daarnaast moet het inleren korter zijn dan de tijd die ik er voor nodig heb om de functionaliteit die ik nodig heb zelf te schrijven( +/- 8 uur) . Ik heb gezocht en gezocht en gezocht. En ik kan dus werkelijk waar niets vinden wat: en .NET, en Open Source en flexibel/eenvoudig genoeg is. Dus dat wordt zelf bouwen...

Om een flexibel systeem te hebben heb ik het volgende bedacht: In principe is afdrukken op papier hetzelfde als afdrukken op het scherm. Met 1 uitzondering: je hebt geen scrollbalken voor als je over de rand gaat. Nu is een scherm met elementen vrij simpel opgebouwd. Je hebt een hoop componenten waar tegen je zegt: teken je zelf in dat gebied van het scherm. Val je buiten het scherm? Teken jezelf dan niet. Val je gedeeltelijk buiten het scherm, teken jezelf dan gedeeltelijk. Simpel he! Hetzelfde kun je ook doen met printen.
1 Zeg tegen het component: teken jezelf, deze ruimte heb je daar voor.
2 Selecteer het volgende component
3 Goto 1.
Simpel! Het enige wat lastig is zijn componenten die niet op de pagina passen: hop naar de volgende pagina! En componenten die maar gedeeltelijk op een pagina passen: teken jezelf gedeeltelijk, de rest gaat naar de volgende pagina.
Daar zul je even moeten rekenen om te bepalen waar de pagebreak komt.

Op deze manier printen is heel simpel. Elk component is zelf verantwoordelijk om zich af te drukken binnen het gebied wat hem toegewezen is. Als hij klaar is geeft hij informatie terug over hoeveel ruimte hij nu eigenlijk ingenomen heeft. Deze informatie wordt weer gebruik om het volgende gebied te kunnen berekenen. Al met al een leuke vingeroefening, flink wat ervaring rijker met printen in .NET. En wie weet misschien kan ik ooit mijn reporting engine verhandelen! Tot die tijd: houdoe!

Geen opmerkingen: