You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Peter Hansson <pe...@yahoo.com.INVALID> on 2016/12/20 08:46:34 UTC

How to re-use header/footer

I'm adding an SVG logo to every page of a document and notice that the logo gets "inlined" on every page, rather than appearing only once in the PDF file and then referenced when used on each page. Thus the size of the PDF balloons with number of pages. Ouch!

Here's what I do:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:fo="http://www.w3.org/1999/XSL/Format"
      xmlns:afp="http://xmlgraphics.apache.org/fop/extensions/afp"      
      >
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <fo:root>
            <fo:layout-master-set>
                <fo:simple-page-master master-name="A4-portrait"
                        page-height="29.7cm" page-width="21.0cm" 
                        margin-top="5mm"  margin-bottom="5mm"
                        margin-left="1.0in" margin-right="1.0in">
                    <fo:region-body margin-top="3cm"/>
                    <fo:region-before extent="10mm"/>  
                </fo:simple-page-master>
            </fo:layout-master-set>

            <fo:page-sequence master-reference="A4-portrait" 
                            initial-page-number="1" 
                            force-page-count="no-force">


                <!-- header -->
                <fo:static-content flow-name="xsl-region-before">
                    <fo:block text-align="end" >
                        <fo:external-graphic  
                            src="../mylogo.svg"/>
                    </fo:block>
                </fo:static-content>

                <!-- content -->
                <fo:flow flow-name="xsl-region-body">
                    <!-- a simple 2 page document -->
                    <fo:block page-break-before="always"> X </fo:block>
                    <fo:block page-break-before="always"> X </fo:block>

                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>
</xsl:stylesheet>

As can be seen there's only a single character on each page. If I from the above generate a 2 page PDF document it will be 13.01 KB and if I generate a 48 page document it will be 206.56 KB. I would have expected the two PDF document to be almost the same size.

How can I achieve that the logo (or header as a whole) is re-used and referenced instead of inlined ? By the way: Not using vector graphics is not an option for me.

Apache FOP 2.1, Java 8.

(this question also on Stackoverflow: http://stackoverflow.com/questions/41220101/xml-fo-how-to-re-use-graphics)

Thanks

Peter