[JAVA] xml fop en pdf

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,
Ik maak gebruik van een XML bestand om gegevens in te voeren en uit te lezen. Dit kan allemaal gedaan worden in een door mij geschreven JAVA applicatie. In het scherm is een lijstje te zien met titels. Nu wil ik graag dat wanneer ik een titel selecteer en op een button druk dat een PDF bestand wordt gegenereerd met al die data.
Java: pdfmaker
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
    public void maakErEenPdfVan(String titel) {
        try {

            System.out.println("Preparing...");

            File baseDir = new File(".");
            File outDir = new File(baseDir, "pdfmap");
            outDir.mkdirs();

            FopFactory fopFactory = FopFactory.newInstance();
            FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
            OutputStream out = new java.io.FileOutputStream(pdffile);
            out = new java.io.BufferedOutputStream(out);
            try {
                Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
                TransformerFactory f= TransformerFactory.newInstance();
                Transformer t = f.newTransformer(new StreamSource(xsltfile));
                t.setParameter();
                Source src = new StreamSource(xmlfile);

                Result res = new SAXResult(fop.getDefaultHandler());

                t.transform(src, res);
            } finally {
                out.close();
            }
    }

Werkt

[ Voor 236% gewijzigd door Verwijderd op 23-03-2010 20:40 ]


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Ik ken de opbouw niet van je XML document maar ik zou zo op het eerste gezicht denken: een XQuery om die bepaalde node te selecteren.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Je kunt bovenin je xslt een parameter opnemen en deze gebruiken om het juiste boek te kiezen.

XML:
1
2
3
4
5
<xsl:param name="title" />

<xsl:template match="/boeken/boek[title=$title]">
 <!-- Genereer hier je pdf -->
</xsl:template>


Dan moet je deze parameter wel mee geven aan je transformer:
Java:
1
transformer.setParameter("title", title);


Xpath niet getest en uit het blote hoofd, dus je zal nog even moeten debuggen.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
code: xsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:param name="titel" /> 
<xsl:template match="[titel=$titel]">
    <fo:root>
        <fo:layout-master-set>
          <fo:simple-page-master master-name="A4">
            <fo:region-body/>
          </fo:simple-page-master>
        </fo:layout-master-set>     
        <fo:page-sequence master-reference="A4">
          <fo:flow flow-name="xsl-region-body">
            <fo:block>Betreft: <xsl:value-of select="Boeken/Boek/Titel"/> - <xsl:value-of select="Boeken/Boek/Auteur"/> ( <xsl:value-of select="Boeken/Boek/ISBN"/> )</fo:block>
          </fo:flow>
        </fo:page-sequence>
    </fo:root>
</xsl:template>
</xsl:stylesheet>

[ Voor 194% gewijzigd door Verwijderd op 23-03-2010 17:11 ]


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Hoe ziet je xml er (ongeveer) uit? En wat doet hij wel/niet?

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
XML: xml
1
2
3
4
5
6
7
<Administratie xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Boeken>
    <Boek>
      <Titel>Sesamstraat</Titel>
      <Auteur>Aart Staartjes</Auteur>
      <ISBN>123456789</ISBN>
    </Boek>
Is een stukje ervan.
Hij mekkert over het <xsl:param name="titel" />
<xsl:template match="[titel=$titel]"> -gedeelte.

[ Voor 155% gewijzigd door Woy op 23-03-2010 09:16 ]


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Die xpath expressie die je daar gebruikt is niet geldig. Dit zou meer iets moeten zijn als "/Administratie/Boeken/Boek[titel=$titel]

Mischien moet je ook nog een matcher op "/" toevoegen, welke dan apply templates doet op al je boeken.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, dankje. Ik zal het zo eventjes aanpassen. Maar als ik dat bovenstaande heb kan ik gewoon Administratie/Boeken/Boek/Auteur aanroepen en krijg ik de auteur van de geselecteerde titel op mijn scherm?

Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Nee, als je matcher boeken selecteerd is je root node dus je boek.

Dus:
XML:
1
2
3
<xsl:template match="/Administratie/Boeken/Boek[titel=$titel]"> 
   <xsl:value-of select="Auteur"/> ( <xsl:value-of select="ISBN"/> )
</xsl:template>

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Aangepast. Solved.

[ Voor 91% gewijzigd door Verwijderd op 23-03-2010 17:12 ]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Verwijderd schreef op maandag 22 maart 2010 @ 16:17:
Transforming...
22-mrt-2010 16:17:00 org.apache.fop.fo.FOTreeBuilder fatalError
SEVERE: java.lang.NullPointerException
(Location of error unknown)java.lang.NullPointerException

:'(
Programming FAQ - Algemeen

:)

https://niels.nu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Solved. Zie vorige posts. Staat oplossing in.

[ Voor 255% gewijzigd door Verwijderd op 23-03-2010 17:12 ]


Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 08:21
HenkD zou je het originele probleem en de oplosing even kunnen terug zetten? Zo is het niet handig voor anderen met een zelfde probleem

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Verwijderd schreef op dinsdag 23 maart 2010 @ 01:03:
Mmm, ik ben er nog steeds niet uit.
Ik krijg steeds maar weer een 'beschadigde' PDF uit.
Probeer eerst je transformatie eens uit op je data en valideer de uitkomst met wat je verwacht. Ga daarna aan de slag met FO -> PDF.

De meeste IDE's hebben wel een XSLT plugin, anders kun je ook ipv. je SAXResult een DomResult gebruiken en deze pretty printen.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het probleem is ondertussen al opgelost, ik heb het originele probleem terug gezet, en de user gevraagd alsnog de oplossing te posten.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1