itextPagina-evenementen (iText 5) versus Event-handlers en Renderers (iText 7)


Opmerkingen

In iText 5 hebben we het concept van pagina-evenementen geïntroduceerd waarmee ontwikkelaars specifiek gedrag kunnen toevoegen wanneer een document wordt geopend, wanneer een nieuwe pagina wordt geopend, wanneer een pagina eindigt en wanneer een document wordt gesloten.

In de documentatie hebben we heel duidelijk gemaakt dat het verboden was om inhoud toe te voegen in de methode onStartPage() ; inhoud kan alleen worden toegevoegd met de methode onEndPage() . We hebben ook heel duidelijk gemaakt dat het Document is doorgegeven aan de pagina-gebeurtenismethoden alleen voor alleen-lezen doeleinden is doorgegeven. Het was verboden om document.add() te gebruiken document.add() zelfs niet in de methode onEndPage() .

Helaas negeren veel ontwikkelaars de documentatie volledig, wat leidde tot problemen zoals:

Ik kan me niet herinneren hoe vaak ik geagiteerd raakte omdat nog een andere ontwikkelaar een duplicaat van deze vragen plaatste. Mensen vragen zich vaak af waarom ze een hard antwoord krijgen, maar ze realiseren zich niet dat een minimale inspanning van hun kant iedereen, inclusief zichzelf, veel tijd zou hebben bespaard. Al deze vragen hadden kunnen worden beantwoord door te zeggen: "Lees de (je weet wel welke) handleiding."

Een andere optie was een volledige revisie van iText zodat dit soort problemen kunnen worden vermeden.

Vanwege de organische groei van iText werd de pagina-eventklasse ook uitgebreid met functionaliteit die niet gerelateerd was aan pagina-events. Het bevat generieke chunk- functionaliteit, het registreerde het begin en het einde van paragrafen, enzovoort.

Wat we hebben opgelost in iText 7:

We hebben de functionaliteit van de pagina-gebeurtenis verwijderd.

Voor alle gebeurtenissen met betrekking tot pagina's implementeren we nu de interface IEventHandler en gebruiken we addEventHandler om deze handler als een PdfDocumentEvent aan het PdfDocument toe te voegen. In het voorbeeld gebruiken we een END_PAGE gebeurtenis, maar we hadden ook een START_PAGE gebeurtenis kunnen gebruiken. Het maakt niet meer uit of u aan het begin of aan het einde inhoud toevoegt. Meer hierover leest u in Gebeurtenissen afhandelen; voorkeuren voor kijkers en eigenschappen van de schrijver instellen zoals beschreven in hoofdstuk 7 in de tutorial iText 7: bouwstenen .

We hebben de bouwstenen verbeterd in die zin dat we ze hiërarchischer hebben gemaakt (zie Voordat we beginnen: Overzicht van de klassen en interfaces , de introductie van de tutorial iText 7: Bouwstenen ). We hebben ook een set Renderer-klassen geïntroduceerd, één voor elke bouwsteen, en we staan ontwikkelaars toe deze renderers aan te passen zodat een bouwsteen een ander gedrag vertoont wanneer deze wordt weergegeven. Zie bijvoorbeeld het renderer-voorbeeld in AbstractElement-objecten toevoegen (deel 1) dat hoofdstuk 7 is in de tutorial iText 7: Bouwstenen .

Deze wijzigingen vereenvoudigen de functionaliteit voor ontwikkelaars die niet veel willen (willen) weten over PDF en iText, terwijl ze tegelijkertijd een overvloed aan flexibiliteit bieden aan die ontwikkelaars die niet bang zijn om diep in de iText-code te graven om een PDF precies zoals ze het willen.

Wil meer weten? Ontvang het gratis ebook!

Pagina-evenementen (iText 5) versus Event-handlers en Renderers (iText 7) Gerelateerde voorbeelden