Tags: Apex | Open Source

Open source PDF printing vanuit APEX

PDF-printing binnen APEX met Open Source-oplossingen

Achilleshiel

PDF printing in Oracle Apex Het product Application Express behoeft geen introductie meer; steeds meer bedrijven raken enthousiast over deze Rapid Application Developmenttool. Zeker nu we ons wereldwijd midden in een recessie bevinden die zijn weerga niet kent, kan de populariteit van een gratis product als APEX alleen maar toenemen. Immers, de IT-manager van nu moet met minder middelen nog steeds dezelfde vraag vanuit de business kunnen beantwoorden. Ondanks alle uitstekende opties die APEX standaard al in zich heeft, ontbreekt er echter toch één heel belangrijke functie: PDF-printing.

Natuurlijk is het mogelijk om een PDF-printerdriver te installeren en naar PDF te printen vanuit APEX. Maar dan wordt feitelijk de hele page geprint, waar misschien slechts een afdruk van een bepaalde regio gewenst is. Er wordt dus een schermafdruk gemaakt. Het is ook niet mogelijk om vanaf een pagina een aangepast rapport met een afwijkende lay-out en aangestuurd met parameters op te starten en naar PDF af te drukken.

PDF-printing, of liever: het gebrek aan deze mogelijkheid, kan dus wel de achilleshiel van APEX genoemd worden en is wellicht voor veel klanten een reëel struikelblok.

Twee oplossingen

Omdat PDF-printing niet out-ofthe- box mogelijk is, biedt Oracle twee manieren voor PDF-printing met behulp van enkele extra componenten.

Gebruik van BI Publisher Oracle raadt zelf aan om BI Publisher in te zetten bij het printen naar PDF. Het mooie van deze oplossing is dat met behulp van de BI Publisher-plugin voor MS Word op een visuele manier in Word een Report Layout te maken is. Tijdens het ontwerpen kan de gebruiker zelfs direct het rapport vanuit Word testen en de lay-out verder naar smaak aanpassen. Deze oplossing stelt de gebruiker in staat om met weinig kennis van XSL heel snel redelijk geavanceerde rapporten te maken. Nadeel van deze oplossing is het prijskaartje. Indien uw bedrijf nog geen gebruik maakt van BI Publisher, zult u het moeten aanschaffen. Zeker voor kleine bedrijven zullen de hoge licentiekosten een probleem zijn. Dan hebben we het nog niet over de recessie waar we ons op dit moment in bevinden en is het contrast met APEX - dat gratis is - wel erg groot.

Apache FOP met OC4J Een tweede oplossing die Oracle aandraagt, is om gebruik te maken van Apache FOP (Formatting Objects Processor) in combinatie met OC4J (Oracle containers for J2EE). Groot voordeel van deze oplossing is dat Apache FOP al meegeleverd wordt met APEX. Dit onderdeel heeft u dus al in bezit zodra u APEX geïnstalleerd heeft. Deze Apache FOP zorgt voor het formatten van de data aan de hand van de XSL-FO naar een opgegeven output formaat, zoals PDF. Samen met het OC4J-component vormt Apache FOP de print-server, waarbij de OC4J het daadwerkelijke uitvoeren van de opdracht naar het scherm verzorgt. Het nadeel van deze oplossing zit hem in het gebruik van dat OC4J-component. Om dit component te gebruiken, is minimaal een standalone OC4Jinstallatie nodig, waarvoor een Oracle Application-serverlicentie nodig is of een lokale OC4J-installatie die geleverd wordt met de Developer Suite. Ook hier moet u dus behoorlijk in de buidel tasten om PDF’s te kunnen printen.

Naast het prijskaartje is er nog een ander probleem; het maken van XSL-FO¿s is een stuk complexer zonder een handige tool als BI Publisher en dan met name de plug-in voor Word. Het vereist veel meer handwerk en dus ook meer tijd om een fatsoenlijk rapport te ontwikkelen.

Duidelijk is dat beide oplossingen één belangrijk nadeel hebben: ze kosten veel geld. De kracht van APEX is juist dat het gratis is, wat de drempel om het product te gebruiken enorm verlaagt. Het zou zonde zijn als u voor het printen van een paar rapporten ineens veel geld moet uitgeven en daarom aan APEX voorbij zou gaan.

Gelukkig is er licht aan het einde van tunnel. Laten we eerst eens kijken welke componenten eigenlijk nodig zijn om PDF¿s te kunnen printen vanuit APEX.

Benodigde onderdelen voor PDF Printing
In het bovenstaande figuur is de aanvraag door een gebruiker van een PDF-rapport te zien, bijvoorbeeld een factuur. De webbrowser doet een verzoek aan APEX, via de webserver, om de factuur te krijgen. Aan de hand van het verzoek genereert APEX vervolgens twee bestanden: een XML-bestand met data en een templatebestand (als XSL-FO- of RTFformaat) en stuurt deze naar de FOconverter. Het XML-databestand bevat de factuurdata zoals bijvoorbeeld factuurregels, klantinformatie etc. Het XSL-FO- of RTF-bestand (Rich Text Format) bevat de opmaak van de factuur.

XSL-FO staat voor XSL formatting objects en is een XML-standaard die beschrijft hoe een XML-databestand getoond moet worden, terwijl RTF een bestandsformaat is om tekstdocumenten uit te wisselen.

De bestanden worden aangeleverd aan de FO-converter, in dit geval BI Publisher. De converter vult het template met waarden uit het XML-bestand en genereert hier een PDF van. Daarna wordt de PDF via Apex aan de client ter download aangeboden.

Een open source-oplossing

Als we kijken naar wat we eigenlijk nodig hebben voor het printen van PDF¿s vanuit APEX, blijkt dat we helemaal niet afhankelijk hoeven te zijn van BI Publisher of de OC4J met Apache FOP-combinatie.

Om duidelijk te maken wat een alternatief moet bieden, beschouwen we de FO-converter even als black box. Apex doet een verzoek aan de converter om een PDF te genereren. In dit verzoek zitten ook het XML- en XSL-FO-bestand. APEX verwacht als resultaat van dit verzoek een PDFbestand terug. Om zo een verzoek te kunnen doen aan de FO-converter moet deze door APEX via HTTP te benaderen zijn.

Apache FOP is slechts deels een vervanger van deze black box; dit component is alleen in staat een vertaling te maken van XSL-FO + XML naar PDF. Oracle heeft dit opgelost door Apache FOP als webapplicatie binnen OC4J te draaien. Een open source-alternatief voor OC4J is Apache Tomcat.

Apache Tomcat is net als OC4J een webcontainer, een soort verzamelbak waarin webapplicaties draaien. Helaas zal de meegeleverde webapplicatie van Oracle hierin niet werken. Als alternatief hiervoor is Cocoon beschikbaar, waarin Apache FOP al is verwerkt. Cocoon is een Java-framework om webapplicaties te kunnen maken en draait onder Tomcat.

De exacte wijze van installeren is beschreven op een blogpost van Carl Backstrom. http://carlback.blogspot.com/2007/03/apex-cocoon-pdf-and-more.html

Op dit punt is het mogelijk standaard rapportage uit APEX te krijgen. Dit is echter niet al te fraai: niet iets dat als factuur naar een klant gestuurd kan worden. Met de XSL-FO-template is echter wel veel mogelijk. Zo is bijvoorbeeld voor grafieken SVG-ondersteuning (Scalable Vector Graphics). Dit is een XML-standaard waarmee afbeeldingen kunnen worden gegenereerd. Uiteraard is het ook mogelijk afbeeldingen, tabellen etc te maken. De afbeelding hiernaast laat wat eenvoudige mogelijkheden zien:



 





Om een goede XSL-FO-template te maken, is wel wat tijd nodig. Maar u kunt de template, indien deze generiek is opgezet, dan wel gebruiken voor meerdere rapporten.

Een ander voordeel van de gekozen oplossing is dat we gebruik kunnen blijven maken van de standaard APEXaanroep en hier zelf niets voor hoeven te verzinnen. We hoeven alleen een XML-bestand met data te genereren en samen met een XSL-FO-template aan te leveren bij APEX. Dit doen we met de aanroep apex_util.get_print_ document, die een PDF als resultaat oplevert. Dit bestand kunnen we vervolgens naar de browser sturen of bijvoorbeeld opslaan in een tabel.

Conclusie

Het is dus mogelijk is om PDFprinting toe te voegen aan APEX zonder dat daar een enorme prijskaart aan hangt. Er zijn echter ook consequenties. Zo mist u de kracht van de BI Publisher-plug-in voor MS Word die zorgt voor een snellere time-to-market. Optioneel zou u één van de visuele XSL-FO-editors kunnen proberen, zodat u toch op een makkelijke manier RTF templates kunt maken. Ten tweede geeft Oracle alleen support op gebruik van BI Publisher of de Apache FOP met OC4J-combinatie. U kunt echter altijd uw vragen stellen op Oracle OTN en u zult zien dat u niet de enige bent.

Als uw bedrijf beschikt over BI Publisher, dan blijft dit de absoluut de beste oplossing, al is het maar vanwege de tijdswinst en gemak waarmee report templates gemaakt en getest kunnen worden in MS Word met behulp van de BI Publisher-plug-in voor MS Word. Beschikt u echter niet over BI Publisher en speelt budget een belangrijke rol, dan is het open source-alternatief, dat in dit artikel beschreven is, absoluut de overweging waard.

Andrik Eker,
Technology
Manager & consultant EC
Oracle at Caesar Groep

Bart Meijer,
Systeem ontwerper
Caesar Groep

 

Lees meer over de Caesar Groep
Ga terug naar We Love IT uitgave 2 - 2009
Advertentie