Hallo Julian,
Welchen Prozessor verwendest du?
FOP von Apache. Hältst du es für einen Fehler von mir oder für einen Fehler im Prozessor?
FOP hat Probleme mit padding siehe http://xml.apache.org/fop/compliance.html
- only implemented for blocks
- can't be used to make extra space (use indents + spaces instead)
Mein Code ist ganz einfach:
<xsl:template match="block">
<fo:block
<xsl:attribute name="margin-left"><xsl:value-of select="@indent" /></xsl:attribute>
<xsl:apply-templates />
</fo:block>
</xsl:template>
Was ich dir empfehlen kann ist folgendes:
<xsl:template match="block">
<fo:block padding-left="{sum(ancestor::block/@indent)+1}cm" start-indent="{sum(ancestor::block/@indent)+1}cm">
<xsl:apply-templates />
</fo:block>
</xsl:template>
Das +1 ist notwendig, sonst sind die angaben es beim obersten <block> 0
Du kannst natürlich auch andere Angaben als cm verwenden (ich würde explizit pt empfehlen), aber dies ist natürlich auch der Nachteil, denn du kannst dies nut im XSL/FO und nicht im XML festlegen.
Grüße
Thomas
Testcode:
----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<data>
<block indent="1">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam tincidunt. Nulla sit amet urna in est gravida interdum. Aenean suscipit. Vestibulum
non augue. Vivamus luctus enim ac nunc adipiscing dictum. Nunc ac lorem eget dolor aliquam laoreet. Suspendisse potenti. Fusce urna. Nunc
congue, neque eu pharetra commodo, turpis dolor molestie erat, a adipiscing ipsum lacus a nisl.
<block indent="1">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam tincidunt. Nulla sit amet urna in est gravida interdum. Aenean suscipit. Vestibulum
non augue. Vivamus luctus enim ac nunc adipiscing dictum. Nunc ac lorem eget dolor aliquam laoreet. Suspendisse potenti. Fusce urna. Nunc
congue, neque eu pharetra commodo, turpis dolor molestie erat, a adipiscing ipsum lacus a nisl. Quisque eget elit. Morbi odio. Duis sit amet pede.
Vivamus sed enim in erat vehicula fringilla. Duis viverra. Nam condimentum, mi vel mollis vulputate, libero orci sodales urna, a tempor odio lectus
eget wisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam vestibulum tortor nec turpis.
Aenean suscipit adipiscing sem. Vivamus id felis. Praesent ornare malesuada tortor.
</block>
Quisque eget elit. Morbi odio. Duis sit amet pede.
Vivamus sed enim in erat vehicula fringilla. Duis viverra. Nam condimentum, mi vel mollis vulputate, libero orci sodales urna, a tempor odio lectus
eget wisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam vestibulum tortor nec turpis.
Aenean suscipit adipiscing sem. Vivamus id felis. Praesent ornare malesuada tortor.
</block>
</data>
---------------
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
fo:root
fo:layout-master-set
<fo:simple-page-master master-name="meineSeite"
page-width="21cm"
page-height="29.7cm"
margin="2cm">
fo:region-body/
<fo:region-after extent="1.5cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="meineSeite">
<fo:static-content flow-name="xsl-region-after">
fo:block
fo:page-number/
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
xsl:apply-templates/
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="block">
<fo:block padding-left="{sum(ancestor::block/@indent)+1}cm" start-indent="{sum(ancestor::block/@indent)+1}cm">
<xsl:apply-templates />
</fo:block>
</xsl:template>
</xsl:stylesheet>
-----------------
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
fo:layout-master-set
<fo:simple-page-master master-name="meineSeite" page-width="21cm" page-height="29.7cm" margin="2cm">
fo:region-body/
<fo:region-after extent="1.5cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="meineSeite">
<fo:static-content flow-name="xsl-region-after">
fo:block
fo:page-number/
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block padding-left="1cm" start-indent="1cm">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam tincidunt. Nulla sit amet urna in est gravida interdum. Aenean suscipit. Vestibulum
non augue. Vivamus luctus enim ac nunc adipiscing dictum. Nunc ac lorem eget dolor aliquam laoreet. Suspendisse potenti. Fusce urna. Nunc
congue, neque eu pharetra commodo, turpis dolor molestie erat, a adipiscing ipsum lacus a nisl.
<fo:block padding-left="2cm" start-indent="2cm">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam tincidunt. Nulla sit amet urna in est gravida interdum. Aenean suscipit. Vestibulum
non augue. Vivamus luctus enim ac nunc adipiscing dictum. Nunc ac lorem eget dolor aliquam laoreet. Suspendisse potenti. Fusce urna. Nunc
congue, neque eu pharetra commodo, turpis dolor molestie erat, a adipiscing ipsum lacus a nisl. Quisque eget elit. Morbi odio. Duis sit amet pede.
Vivamus sed enim in erat vehicula fringilla. Duis viverra. Nam condimentum, mi vel mollis vulputate, libero orci sodales urna, a tempor odio lectus
eget wisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam vestibulum tortor nec turpis.
Aenean suscipit adipiscing sem. Vivamus id felis. Praesent ornare malesuada tortor.
</fo:block>
Quisque eget elit. Morbi odio. Duis sit amet pede.
Vivamus sed enim in erat vehicula fringilla. Duis viverra. Nam condimentum, mi vel mollis vulputate, libero orci sodales urna, a tempor odio lectus
eget wisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam vestibulum tortor nec turpis.
Aenean suscipit adipiscing sem. Vivamus id felis. Praesent ornare malesuada tortor.
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>