Hi Bernmeister,

You can do that. Take the block element, where your user can put the text in. 
Give it an ID. Render to the area tree. Use Xpath and the ID to find the block. 
Ask for ist height. Use this height/1000 (+ paddings, spaces, ...) to set the 
extent. 

    private org.w3c.dom.Document multipass(Page p) {
        StringBuffer sb = new StringBuffer();
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        sb.append(("<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\""; +
                " xmlns:fox=\"http://xmlgraphics.apache.org/fop/extensions\"; >" 
+
            "<fo:layout-master-set>"));
        for(PageMaster pm : p.getPageMasters().values()) {
            sb.append(pm);
        }
        sb.append(p.getPageSequence());
        sb.append("</fo:layout-master-set>");
        sb.append(p);
        sb.append("</fo:root>");
        return multipass(sb);
    }

    private org.w3c.dom.Document multipass(StringBuffer sb) {
        try{
            return multipass(new StreamSource(new 
ByteArrayInputStream(sb.toString().getBytes("UTF-8"))));
        } catch (IOException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    private org.w3c.dom.Document multipass(StreamSource source) {
        try {
            FOUserAgent foUserAgent = getFopFactory().newFOUserAgent();
            Transformer transformer =  getMultipassFactory().newTransformer();
            TransformerHandler handler = 
getMultipassFactory().newTransformerHandler();
            DOMResult domResult = new DOMResult();
            handler.setResult(domResult);

            org.apache.fop.render.Renderer targetRenderer =
            foUserAgent.getRendererFactory().createRenderer(
                            foUserAgent, MimeConstants.MIME_PDF);

            XMLRenderer renderer = new XMLRenderer();
            renderer.mimicRenderer(targetRenderer);
            renderer.setContentHandler(handler);
            renderer.setUserAgent(foUserAgent);

            foUserAgent.setRendererOverride(renderer);
            
            Fop fop = getFopFactory().newFop(MimeConstants.MIME_FOP_AREA_TREE, 
foUserAgent);
            Result res = new SAXResult(fop.getDefaultHandler());
            transformer.transform(source, res);
            return  (org.w3c.dom.Document)domResult.getNode();
        } catch (TransformerException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        } catch (FOPException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
//        } catch (IOException e) {
//            System.out.println(e.getMessage());
//            e.printStackTrace();
        } catch (SAXException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

double height_in_milipoints = xPath.evaluate(".//blo...@prod-id='"+<your 
id>+"']/@bpd", <your document root>, XPathConstants.NUMBER)

Mit freundlichen Grüßen
 
Georg Datterl
 
------ Kontakt ------
 
Georg Datterl
 
Geneon media solutions gmbh
Gutenstetter Straße 8a
90449 Nürnberg
 
HRB Nürnberg: 17193
Geschäftsführer: Yong-Harry Steiert 

Tel.: 0911/36 78 88 - 26
Fax: 0911/36 78 88 - 20
 
www.geneon.de
 
Weitere Mitglieder der Willmy MediaGroup:
 
IRS Integrated Realization Services GmbH:    www.irs-nbg.de 
Willmy PrintMedia GmbH:                            www.willmy.de
Willmy Consult & Content GmbH:                 www.willmycc.de 
-----Ursprüngliche Nachricht-----
Von: Bernmeister [mailto:[email protected]] 
Gesendet: Freitag, 24. April 2009 06:40
An: [email protected]
Betreff: Change the header/footer size in a PDF


Hi,

I have a simple XSL report with header, body and footer which renders to a PDF. 
 My Java application passes variables to the XSL to set body-margin, 
header/footer-extent and font sizes.

I set the header size (in point not mm) to be slightly larger than the font 
size for text to appear in the header.  This works fine - gives enough space 
for the header to hold all the text.  

However, if the text in the header (which is set by a user back in the
application) is "longer" than the width of the header, that text will carry 
over to a next line...and so bleed into the body.

I've seen this post from a while back
http://www.nabble.com/Auto-size-header-to-fit-with-content---td4765740.html#a4765740

...but it doesn't really help.  Hardcoding for line height, text height, etc, 
etc is too dangerous.

I've scoured the FOP Javadoc and cannot seem to figure out if it's possible to 
access the rendered PDF (as some sort of tree or data object) and work out if 
the header text has wrapped.  Is it possible to determine this and so fix it?  

Or is it possible to access the PDF itself and determine if wrapping has 
occurred in the header?

If I can detect the header has wrapped text (or footer for that matter), I can 
just increase the header by the original amount and re-render to PDF.


Thanks in advance,

Bernmeister.
--
View this message in context: 
http://www.nabble.com/Change-the-header-footer-size-in-a-PDF-tp23209748p23209748.html
Sent from the FOP - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to