29. juli 2005 - 02:25Der er
34 kommentarer og 2 løsninger
Formatering af tekst til udskrift
Jeg overvejer at lave et program i Java, der bl.a. skal kunne generere og udskrive en tekst i A4-format. Denne tekst skal kunne indeholde tabeller, hvor indholdet primært hentes fra en database. Det vil bestemt heller ikke gøre noget, hvis der kan tilføjes et sidehovede eller en sidefod. Desuden skal der gerne være muligheder for at gøre noget tekst fed etc. Det vil også være rart at kunne kontrollere sideskift i forbindelse med udskriften.
Spørgsmålet er så hvordan denne tekst nemmest kan genereres, så den er mulig af udskrive. Jeg har ikke den store erfaring med generere dokumenter til udskrift i Java, så jeg vil gerne have nogle tips til at komme i gang med at formatere en tekst, der kan udskrives, og nogle links til tutorials.
Der er garanteret en masse måder at gøre det på. Bl.a. har jeg læst mig til, at Java kan udskrive html og 2D-grafik fra Swing, så det er bare med at komme med en masse idéer :)
Hvis det ikke er brugbart, kan du godt bruge Javas Printable interface, men det er fatkisk ikke så nemt at gå til. Her skal man selv holde styr på sidetal og lignende.
Faktisk ser jfreereport rigtigt godt ud, men er der nogen dokumentation til den nyeste version (0.8.5)? Til JFreeChart er der lavet et rigtigt godt pdf-dokument med eksempler etc., der dog koster penge...
Hvis du har mod på at kaste dig over XSL:FO og i øvrigt har et afslappet forhold til at jonglere med XML i Java, kan du måske med fordel kigge på Apaches FOP-projekt. Det kan producere et væld af formater, inkl. Java-print og HP PCL men i særdeleshed PDF. Den seneste release har efterhånden to år på bagen og er ikke fejlfri. Til gengæld har den en stor brugerskare. Der findes kommercielle produkter med lignende funktion, men FOP har dækket vores behov fint. Inputformatet (XSL:FO) er en W3C-standard.
På min arbejdsplads anvender vi FOP til al udskrift fra Java (via PDF). Vores klientapplikation viser "udskriften" i AcrobatReader og brugerne vælger så printerindstillinger og sender til print derfra. Praktisk og platformneutralt. Vi distribuerer de anvendte skriftsnit (i TrueType eller PostScript) sammen med klienten, så alle kan lave _helt_ identiske udskrifter uanset klientmaskinens operativsystem og udvalg af skrifter og printerdrivere.
Google på 'xsl fo' og 'apache fop' hvis du vil vide mere.
Jeg venter lige med at acceptere noget, da der kan komme flere svar.
Jeg har ikke den store erfaring med XML, men det burde vel ikke være noget problem at sætte sig ind i, hvis apache fop er veldokumenteret. Er det tilfældet?
Det handler vel dybest set om at få nogle eksempler, der kan rettes til, når man ikke skal bruge det til mere end nogle simple udskrifter...
Ups, efter at have set mig omkring kan jeg se det var etikettebrud at bruge "Svar" uopfordret. Tag det ikke til indtægt for andet end min begynderopførsel. :-(
XSL:FO er en standard og dermed særdeles velbeskrevet. FOP's API er ikke så overvældende -- det drejer sig jo blot om at få et XML-dokument (reelt set en bytestream) ind og et PDF-dokument (en anden bytestream) ud. Men indrømmet, der er en vis tærskel af start-snask, der skal overvindes før man er godt kørende.
Standarddistributionen indeholder køreklare eksempler. De illustrerer principperne, men er egentlig ikke særlig god reklame for FOP, fordi de er meget simple.
Der findes adskillige bøger og utallige websider om XSL:FO og FOP. Brug Google.
Nu er jeg gået igang med at lege lidt med JFreeReport - og har kigget lidt på deres demo. Og det ser ud til at kunne fantastisk meget. Der er endda en "PrintView" dialog med, hvorfra det er muligt at udskrive direkte til printer, eller gemme som pdf, excel, html mm.
Det ser bestemt også lækkert ud, men det virker lidt uoverskueligt når der ikke er tilgængelige dokumentation eller kildekode-eksempler.
Jeg har set lidt på iText, som JFreeReport bruger, og det ser faktisk rigtigt lækkert ud. Især fordi de har lagt en del eksempler på deres hp, så man ikke skal bruge en krig på først at sætte sig ind i det. Det er ikke noget der skal bruges alt for meget tid på, da det kun handler om at lave tabels, noget tekst og evt. sætte et billede ind...
Kig evt. også på JasperReports (denne måneds "Project of the Month" på SF), som fornylig frigav den første version 1.0.
Vi evaluerede begge projekter (JasperReports og JFReeReports) for et par år siden, men på det tidspunkt kunne de ikke dække vores behov. Ellers er de sikkert den hurtigste vej (programmeringsmæssigt) for at få data fra JDBC til papir.
Mht. kildekode eksempler og JFreeReport, så har de i den zip fil du download en helle mappe der hedder demo (under src). Der finder du ca. 12 rigtig gode eksempler.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.