DITA OT PDF Customization - Table with Alternate Row Background Colors
Read time: 4 minute(s)
Based on this forum thread I will try to give some steps in which you can create your own DITA Open Toolkit PDF customization folder for customizing a table to have alternate row background colors.
- First of all you need to know the XSLT template that you need to override.
- You can open a DITA topic which has a table inside it and select in the Outline view the table row. The Attributes view will show you its @class attribute value which is - topic/row .
- Use the Find/Replace in Files tool to search in the PDF plugin folder (for example DITA-OT-DIR/plugins/org.dita.pdf2/) for the string topic/row.
- In the XSLT stylesheet DITA-OT-DIR/plugins/org.dita.pdf2/xsl/fo/tables.xsl you will find a template which matches all rows from a table body:
That is the template which you will need to overwrite in your customization.<xsl:template match="*[contains(@class, ' topic/tbody ')]/*[contains(@class, ' topic/row ')]"> <fo:table-row xsl:use-attribute-sets="tbody.row"> <xsl:call-template name="commonattributes"/> <xsl:apply-templates/> </fo:table-row> </xsl:template>
- Copy the entire folder DITA-OT-DIR/plugins/org.dita.pdf2/Customization to an external location. For example in my case I copied it to my Desktop.
- Renamed in that copied folder the catalog.xml.orig file to catalog.xml, edit it and uncomment the line:
This custom catalog file will be automatically used to contribute in the PDF publishing process with high priority the XSLT stylesheet located in Customization/fo/xsl/custom.xsl.<uri name="cfg:fo/xsl/custom.xsl" uri="fo/xsl/custom.xsl"/>
- Rename in the Customization/fo/xsl folder the custom.xsl.orig file to custom.xsl. This stylesheet will contain all your template overrides.
- Overwrite in the custom.xsl the original template like:
<xsl:template match="*[contains(@class, ' topic/tbody ')]/*[contains(@class, ' topic/row ')]"> <fo:table-row xsl:use-attribute-sets="tbody.row"> <xsl:choose> <xsl:when test="(count(preceding-sibling::*[contains(@class, ' topic/row ')]) mod 2) = 0"> <!-- Even row, light blue --> <xsl:attribute name="background-color">rgb(210, 222, 253)</xsl:attribute> </xsl:when> <xsl:otherwise> <!-- Odd row, white --> <xsl:attribute name="background-color">white</xsl:attribute> </xsl:otherwise> </xsl:choose> <xsl:call-template name="commonattributes"/> <xsl:apply-templates/> </fo:table-row> </xsl:template>
- If you want the table frame border colors to have a custom color you can override some attribute sets defined in the DITA-OT-DIR/plugins/org.dita.pdf2/cfg/fo/attrs/tables-attr.xsl:
<xsl:attribute-set name="table__tableframe__top" use-attribute-sets="common.border__top"> <xsl:attribute name="border-top-color">blue</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="table__tableframe__bottom" use-attribute-sets="common.border__bottom"> <xsl:attribute name="border-bottom-color">blue</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="table__tableframe__right" use-attribute-sets="common.border__right"> <xsl:attribute name="border-right-color">blue</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="table__tableframe__left" use-attribute-sets="common.border__left"> <xsl:attribute name="border-left-color">blue</xsl:attribute> </xsl:attribute-set>ou
- Edit your PDF transformation scenario and set the parameter customization.dir to point to your customization folder.
- Publish and enjoy :)
If you want to create a DITA Open Toolkit plugin to achieve the same result you can use the dita.xsl.xslfo plugin extension to contribute your own XSLT stylesheet to the publishing process: Creating a simple DITA Open Toolkit plugin to customize published HTML and PDF content