Avatar billede akjaer Nybegynder
29. juli 2005 - 02:25 Der 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 :)
Avatar billede mikkelbm Nybegynder
29. juli 2005 - 09:05 #1
Hvis du bruger Java 5.0 (1.5), så kan du fylde dine data i en JTable, som har fået en print-metode.

På denne printmetode kan man smide en header og en footer med:
- Den styrer så vidt jeg husker også sider for dig.

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTable.html
Avatar billede mikkelbm Nybegynder
29. juli 2005 - 09:10 #2
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.

Her kan du læse lidt om emnet:

http://java.sun.com/docs/books/tutorial/2d/printing/index.html

http://java.sun.com/j2se/1.4.2/docs/guide/jps/spec/JPSTOC.fm.html
Avatar billede mikkelbm Nybegynder
29. juli 2005 - 09:15 #3
Faldt lige over denne her:

http://www.jfree.org/jfreereport/

Som faktisk ser interessant ud.
Avatar billede sondergard Nybegynder
29. juli 2005 - 11:27 #4
Med hensyn til jfreereport så var der en tråd tidligere om det

http://eksperten.dk/spm/632741

Kan være et udgangspunkt hvis du vil bruge det
Avatar billede akjaer Nybegynder
29. juli 2005 - 13:41 #5
JTable er nok lidt for simpelt.

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...
Avatar billede mikkelbm Nybegynder
29. juli 2005 - 14:02 #6
Avatar billede mikkelbm Nybegynder
29. juli 2005 - 14:06 #7
Og så har der jo også deres JavaDoc:

http://www.jfree.org/jfreereport/javadoc/
Avatar billede mikkelbm Nybegynder
29. juli 2005 - 14:08 #8
Hov. Der kan vist være nogle problemer med mit link til dokumentationen, men det kan findes her:

http://sourceforge.net/projects/jfreereport
Avatar billede akjaer Nybegynder
29. juli 2005 - 14:15 #9
Spørgsmålet er så bare om den er up to date, eller hvad man skal sige...

Version 0.8.3 er fra 2003
Avatar billede mikkelbm Nybegynder
29. juli 2005 - 15:01 #10
Godt spørgsmål. De skriver på deres hjemmeside: "At the moment no usefull documentation is available. "

Så det skal nok være noget 3. parts dokumentation hvis der findes sådan noget.

Ellers har de et forum, som nok kan være brugbart.
Avatar billede osandum Nybegynder
29. juli 2005 - 21:25 #11
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.
Avatar billede mikkelbm Nybegynder
29. juli 2005 - 21:31 #12
Ja, så tillader jeg mig også at smide et svar, i tilfælde af at du kunne bruge mine svar.
Avatar billede akjaer Nybegynder
29. juli 2005 - 21:53 #13
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...
Avatar billede osandum Nybegynder
29. juli 2005 - 22:23 #14
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.

Og se evt. http://www.ibiblio.org/xml/books/bible2/chapters/ch18.html under "Using FOP".
Avatar billede mikkelbm Nybegynder
29. juli 2005 - 22:26 #15
Alt forladt. Bare gammel vane at jeg forventer at blive bedt om et svar, hvis mine indlæg kan bruges :)
Avatar billede osandum Nybegynder
29. juli 2005 - 22:29 #16
Cool nok. Det er opfattet. :-)
Avatar billede akjaer Nybegynder
30. juli 2005 - 13:23 #17
osandum -> hvordan får man så åbnet en pdf i AcrobatReader direkte fra sit javaprogam uden at brugeren skal bede OS'et om at åbne den?
Avatar billede mikkelbm Nybegynder
30. juli 2005 - 13:34 #18
try
{
      Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "test.pdf");
}
catch (Exception ex)
{
      ex.printStackTrace();
}


Kan gøre det. Om der er en bedre måde ved jeg ikke?
Avatar billede mikkelbm Nybegynder
30. juli 2005 - 13:35 #19
Men det er jo så nok en Windows-løsning ;)
Avatar billede akjaer Nybegynder
30. juli 2005 - 13:42 #20
Ja *G*

Det kunne jo være nice hvis det ikke afhænger af OS'et :)
Avatar billede mikkelbm Nybegynder
30. juli 2005 - 14:08 #21
En anden mulighed er at angive direkte sti til installationen af acrobat reader, men det kræver lidt brugeropsætning.

En anden mulighed kunne være:
http://www.pdfbox.org/

(har ikke selv prøvet det, men det dukker op mange steder)
Avatar billede mikkelbm Nybegynder
30. juli 2005 - 14:09 #22
Men det kan selvfølgelig også være, at 'osandum' har en bedre løsning på det problem, i og med at de bruger det i hverdagen.
Avatar billede osandum Nybegynder
30. juli 2005 - 14:52 #23
Nej, start af "dokumentlæsere" har vi ikke fundet et platformneutralt svar på. En stump af koden kan se ca. sådan ud:

<pre>
    String docPath = ....; // absolut sti eller URL til dokumentet

    String platform = System.getProperty("os.name").toLowerCase();
    if (platform.startsWith("mac"))
    {
      String command = "open " + docPath;
      LOG.info("executing " + command);
      Runtime runtime = Runtime.getRuntime();
      runtime.exec(command);
    }
    else if (platform.startsWith("windows"))
    {
      String command = "cmd.exe /C start \"Browser\" \"" + docPath + "\"";
      LOG.info("executing " + command);
      Runtime runtime = Runtime.getRuntime();
      runtime.exec(command);
    }
    else
    {
      LOG.info("launching " + docPath);
      com.Ostermiller.util.Browser.displayURL(docPath.toString());
    }
</pre>
Avatar billede osandum Nybegynder
30. juli 2005 - 14:53 #24
Hmm, "<pre>" var ikke svaret... Kan man opmærke sin tekst herinde?
Avatar billede mikkelbm Nybegynder
30. juli 2005 - 14:59 #25
Nope. Det er der desværre ikke mulighed for...
Avatar billede mikkelbm Nybegynder
30. juli 2005 - 15:25 #26
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.
Avatar billede akjaer Nybegynder
30. juli 2005 - 15:54 #27
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...
Avatar billede osandum Nybegynder
30. juli 2005 - 15:54 #28
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.

Og nu må I ha' go' week-end. :-)
Avatar billede akjaer Nybegynder
30. juli 2005 - 15:56 #29
JFreeReport ville dog være bedst at bruge, men så længe det ikke er nemt at bruge osv...
Avatar billede mikkelbm Nybegynder
30. juli 2005 - 15:57 #30
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.
Avatar billede akjaer Nybegynder
30. juli 2005 - 15:58 #31
ilm da :)
Avatar billede mikkelbm Nybegynder
30. juli 2005 - 15:58 #32
Stavefejl og grammatiske fejl er gratis :)
Avatar billede akjaer Nybegynder
30. juli 2005 - 15:58 #33
oki - kan være jeg lige skal se på den så :)
Avatar billede mikkelbm Nybegynder
03. august 2005 - 17:25 #34
Er du kommet videre her? :)
Avatar billede akjaer Nybegynder
03. august 2005 - 17:35 #35
hmmm ja jeg regner nok med at bruge iText, da det er nemt og enkelt at gå til. Jeg takker mange gange for hjælpen.
Avatar billede akjaer Nybegynder
03. august 2005 - 17:36 #36
Lukker...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester