← Prev in month ← Prev in thread
Next in thread → Next in month →

AW: [docbook-apps] Using imageobject twice on title page fails (FO)

From
Kallauch, Benjamin (EEIN) <>
Date
2015-04-20T07:29:25+00:00
ID
Thread
AW: [docbook-apps] Using imageobject twice on title page fails (FO)
Fantastic, this works fine. Still it's not easy for me to wrap my head around all the modes in DocBook XSL.

Thanks,
Ben


-----Ursprüngliche Nachricht-----
Von: Bob Stayton [mailto:] 
Gesendet: Freitag, 17. April 2015 20:56
An: Kallauch, Benjamin (EEIN); 
Betreff: Re: [docbook-apps] Using imageobject twice on title page fails (FO)

Hi,
If you take a peek inside the generated titlepage.templates.xsl, you'll 
see that each of the title pages uses different modes to process their 
elements:

recto page:

<xsl:template match="mediaobject" mode="book.titlepage.recto.auto.mode">
   <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
           xsl:use-attribute-sets="book.titlepage.recto.style">
     <xsl:apply-templates select="." mode="book.titlepage.recto.mode"/>
   </fo:block>
</xsl:template>

verso page:

<xsl:template match="mediaobject" mode="book.titlepage.verso.auto.mode">
   <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
         xsl:use-attribute-sets="book.titlepage.verso.style"
         space-before="1.5in">
     <xsl:apply-templates select="." mode="book.titlepage.verso.mode"/>
   </fo:block>
</xsl:template>

For many elements (including mediaobject), these modes eventually apply 
templates in the normal mode.  That's why you get duplicate ids.

You'll need to add a template to your customization layer something like 
this:

<xsl:template match="mediaobject" mode="book.titlepage.verso.mode">

   <!-- copy the contents of the normal template that matches on 
mediaobject (from fo/graphics.xsl) here, and remove the part that 
generates the id attribute. -->

</xsl:template>

(Add the namespace prefix d:mediaobject if you are using the namespaced 
stylesheets with DocBook 5).

Bob Stayton
Sagehill Enterprises


On 4/10/2015 5:52 AM, Kallauch, Benjamin (EEIN) wrote:
> Hi group.
> I want to display an image (mediaobject) twice on my book titlepages,
> first on the recto page and second on the following verso page.
> I made a simple extension to the "titlepage.templates.xml" file as
> proposed by Bob. Here is an XML snippet:
> <t:titlepage-content t:side="recto">
>            <mediaobject
>                    t:predicate="[position() = 1]"/>
> .
> <t:titlepage-content t:side="verso">
> .
>            <mediaobject
>                    space-before="1.5in"
>                    t:predicate="[position() = 1]" />
> .
> When I do this with other elements (i.e. <author>), everything is fine.
> But if I do this with an image, the FOP complains about a previously
> used ID:
> "javax.xml.transform.TransformerException:
> org.apache.fop.fo.ValidationException: Property ID "N4000E" (found on
> "fo:block") previously used; ID values must be unique within a document!"
> I checked the FO-Output and indeed found the image block twice with the
> same ID ("N4000E"). For the other elements there is no problem, because
> they don't get an ID (i.e. author).
> Question: How can I reuse my image more than once on the recto/verso
> title page.
> I could insert a second imageobject (same file) and fetch it with
> t:predicate="[position() = 2]" as a work around. But somehow I want to
> keep my code easy and clean.
> Can anyone help? Thanks.
> Ben
← Prev in month ← Prev in thread
Next in thread → Next in month →