【背景】
折腾:
【记录】把docbook中的html的css的配置效果应用到fo即PDF等输出文件类型中
期间,
已经尝试了:
【记录】docbook中尝试使用CSSToXSLFO将css转换为fo(pdf)的xsl配置参数
结果失败了。
所以只能现在去,手动的,将css的配置,转换为fo即pdf的xsl参数配置了。
【折腾过程】
1.去用:
<!--============================================================================
verbatim(programlisting/literallayout/...) setting
=============================================================================-->
<xsl:param name="shade.verbatim" select="1"></xsl:param>
<!-- http://lists.oasis-open.org/archives/docbook/200801/msg00009.html -->
<!-- http://www.dpawson.co.uk/docbook/styling/params.html -->
<xsl:attribute-set name="shade.verbatim.style">
<!-- <xsl:attribute name="border">0</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">Lavender</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#eee</xsl:attribute> -->
<xsl:attribute name="background-color">#fefde6</xsl:attribute>
<xsl:attribute name="padding">1pt</xsl:attribute>
</xsl:attribute-set>的确是可以让,包括programlisting(和其他的literallayout等)的背景色,变成橘黄色:
2.但是很明显,也把scree背景色,都变成一样的了。
希望是能区分开的。
参考:
Subject: Re: [docbook-apps] Background for programlisting
去试试:
<xsl:attribute name="background-color"> <xsl:choose> <xsl:when test="self::d:programlisting">>#eee</xsl:when> <xsl:otherwise>inherit</xsl:otherwise> </xsl:choose> <xsl:choose> <xsl:when test="self::d:screen">>#edc</xsl:when> <xsl:otherwise>inherit</xsl:otherwise> </xsl:choose> </xsl:attribute>
结果出错:
CLi@PC-CLI-1 ~/develop/docbook/books/docbook_dev_note/src
$ make pdf
=============================== generating docbook_dev_note fo ==============================
export XML_CATALOG_FILES="/home/develop/docbook/config_root/catalog/catalog.xml" && \
export XML_DEBUG_CATALOG=1 && \
xsltproc --xinclude --stringparam callout.graphics 1 --stringparam admon.graphics 1 --stringparam callout.graphics.number.limit 30 --stringparam callout.graphics.extension .svg --stringparam callout.graphics.path D:/tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/callouts/ --stringparam admon.graphics.extension .svg --stringparam admon.graphics.path D:/tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/colorsvg/ -o ../output/fo/docbook_dev_note.fo docbook_fo_crl.xsl docbook_dev_note.xml
Resolve: sysID docbook_fo_crl.xsl
-2147483592 Parsing catalog /home/develop/docbook/config_root/catalog/catalog.xml
/home/develop/docbook/config_root/catalog/catalog.xml added to file hash
Resolve URI docbook_fo_crl.xsl
Found URI match docbook_fo_crl.xsl
compilation error: file /home/develop/docbook/config_root/docbook-xsl-ns-1.78.1/fo/common_fo.xsl line 95 element attribute
element attribute only allowed within a template, variable or param
compilation error: file /home/develop/docbook/config_root/docbook-xsl-ns-1.78.1/fo/common_fo.xsl line 95 element attribute
xsltParseStylesheetTop: unknown attribute element
Catalogs cleanup
Free catalog entry crl.ent
Free catalog entry /home/develop/docbook/tools_root/docbook-xsl-ns-1.78.1/
Free catalog entry docbook_html.xsl
Free catalog entry docbook_fo.xsl
Free catalog entry /home/develop/docbook/config_root/docbook-xsl-ns-1.78.1/
Free catalog entry docbook_html_crl.xsl
Free catalog entry chunk_html_crl.xsl
Free catalog entry docbook_htmlhelp_crl.xsl
Free catalog entry docbook_fo_crl.xsl
Free catalog entry docbook_webhelp_crl.xsl
Free catalog entry /home/develop/docbook/config_root/catalog/catalog.xml
Free catalog entry
make: *** [../output/fo/docbook_dev_note.fo] Error 511.改为:
<!--============================================================================
verbatim(programlisting/literallayout/...) setting
=============================================================================-->
<xsl:param name="shade.verbatim" select="1"></xsl:param>
<!-- http://lists.oasis-open.org/archives/docbook/200801/msg00009.html -->
<!-- http://www.dpawson.co.uk/docbook/styling/params.html -->
<xsl:attribute-set name="shade.verbatim.style">
<!-- <xsl:attribute name="border">0</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">Lavender</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#eee</xsl:attribute> -->
<xsl:attribute name="background-color">#fefde6</xsl:attribute>
<xsl:attribute name="padding">1pt</xsl:attribute>
<xsl:attribute name="background-color">
<xsl:choose>
<xsl:when test="self::d:programlisting">>#eee</xsl:when>
<xsl:otherwise>inherit</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="self::d:screen">>#edc</xsl:when>
<xsl:otherwise>inherit</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:attribute-set>效果为:
还是全部是橘黄色,没有区分开背景色。
3.改为:
<!--============================================================================
verbatim(programlisting/literallayout/...) setting
=============================================================================-->
<xsl:param name="shade.verbatim" select="1"></xsl:param>
<!-- http://lists.oasis-open.org/archives/docbook/200801/msg00009.html -->
<!-- http://www.dpawson.co.uk/docbook/styling/params.html -->
<xsl:attribute-set name="shade.verbatim.style">
<!-- <xsl:attribute name="border">0</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">Lavender</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#eee</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#fefde6</xsl:attribute> -->
<xsl:attribute name="padding">1pt</xsl:attribute>
<xsl:attribute name="background-color">
<xsl:choose>
<xsl:when test="self::d:programlisting">>#eee</xsl:when>
<xsl:otherwise>inherit</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="self::d:screen">>#edc</xsl:when>
<xsl:otherwise>inherit</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:attribute-set>结果编译fo为pdf会出错:
CLi@PC-CLI-1 ~/develop/docbook/books/docbook_dev_note/src
$ make pdf
=============================== generating docbook_dev_note fo ==============================
export XML_CATALOG_FILES="/home/develop/docbook/config_root/catalog/catalog.xml" && \
export XML_DEBUG_CATALOG=1 && \
xsltproc --xinclude --stringparam callout.graphics 1 --stringparam admon.graphics 1 --stringparam callout.graphics.number.limit 30 --stringparam callout.graphics.extension .svg --stringparam callout.graphics.path D:/tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/callouts/ --stringparam admon.graphics.extension .svg --stringparam admon.graphics.path D:/tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/config/images/system/colorsvg/ -o ../output/fo/docbook_dev_note.fo docbook_fo_crl.xsl docbook_dev_note.xml
Resolve: sysID docbook_fo_crl.xsl
-2147483592 Parsing catalog /home/develop/docbook/config_root/catalog/catalog.xml
/home/develop/docbook/config_root/catalog/catalog.xml added to file hash
Resolve URI docbook_fo_crl.xsl
Found URI match docbook_fo_crl.xsl
Resolve: pubID crl.ent sysID https://www.crifan.org/files/res/docbook/entity/crl.ent
Found public match crl.ent
Resolve: pubID crl.ent sysID https://www.crifan.org/files/res/docbook/entity/crl.ent
Found public match crl.ent
Resolve: pubID crl.ent sysID https://www.crifan.org/files/res/docbook/entity/crl.ent
Found public match crl.ent
Resolve: pubID crl.ent sysID https://www.crifan.org/files/res/docbook/entity/crl.ent
Found public match crl.ent
Resolve: pubID crl.ent sysID https://www.crifan.org/files/res/docbook/entity/crl.ent
Found public match crl.ent
Resolve: pubID crl.ent sysID https://www.crifan.org/files/res/docbook/entity/crl.ent
Found public match crl.ent
Resolve: pubID crl.ent sysID https://www.crifan.org/files/res/docbook/entity/crl.ent
Found public match crl.ent
Making portrait pages on A4 paper (210mmx297mm)
XPath error : Undefined namespace prefix
Catalogs cleanup
Free catalog entry crl.ent
Free catalog entry /home/develop/docbook/tools_root/docbook-xsl-ns-1.78.1/
Free catalog entry docbook_html.xsl
Free catalog entry docbook_fo.xsl
Free catalog entry /home/develop/docbook/config_root/docbook-xsl-ns-1.78.1/
Free catalog entry docbook_html_crl.xsl
Free catalog entry chunk_html_crl.xsl
Free catalog entry docbook_htmlhelp_crl.xsl
Free catalog entry docbook_fo_crl.xsl
Free catalog entry docbook_webhelp_crl.xsl
Free catalog entry /home/develop/docbook/config_root/catalog/catalog.xml
Free catalog entry
make: *** [../output/fo/docbook_dev_note.fo] Error 104.再试试:
<!--============================================================================
verbatim(programlisting/literallayout/...) setting
=============================================================================-->
<xsl:param name="shade.verbatim" select="1"></xsl:param>
<!-- http://lists.oasis-open.org/archives/docbook/200801/msg00009.html -->
<!-- http://www.dpawson.co.uk/docbook/styling/params.html -->
<xsl:attribute-set name="shade.verbatim.style">
<!-- <xsl:attribute name="border">0</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">Lavender</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#eee</xsl:attribute> -->
<xsl:attribute name="background-color">#fefde6</xsl:attribute>
<xsl:attribute name="padding">1pt</xsl:attribute>
<xsl:attribute name="background-color">
<xsl:choose>
<xsl:when test="self::d:programlisting">>#eee</xsl:when>
<xsl:when test="self::d:screen">>#edc</xsl:when>
<xsl:otherwise>inherit</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:attribute-set>效果为:
还是没区分背景色。
5.参考:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\docbook\tools\docbook-xsl-ns-1.78.1\fo\verbatim.xsl
去试试自己写代码试试。
后来终于用:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:d="http://docbook.org/ns/docbook"
version='1.0'>
<!--============================================================================
verbatim(programlisting/literallayout/...) setting
=============================================================================-->
<xsl:param name="shade.verbatim" select="1"></xsl:param>
<!-- http://lists.oasis-open.org/archives/docbook/200801/msg00009.html -->
<!-- http://www.dpawson.co.uk/docbook/styling/params.html -->
<xsl:attribute-set name="shade.verbatim.style">
<!-- <xsl:attribute name="border">0</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">Lavender</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#eee</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#fefde6</xsl:attribute> -->
<xsl:attribute name="padding">1pt</xsl:attribute>
<xsl:attribute name="background-color">
<xsl:choose>
<xsl:when test="self::d:programlisting">blue</xsl:when>
<xsl:when test="self::d:screen">red</xsl:when>
<xsl:otherwise>gray</xsl:otherwise>
<!-- <xsl:otherwise>inherit</xsl:otherwise> -->
</xsl:choose>
</xsl:attribute>
<!--
<xsl:attribute name="background-color">
<xsl:choose>
<xsl:when test="d:programlisting">>#eee</xsl:when>
<xsl:when test="d:screen">>#edc</xsl:when>
<xsl:otherwise>#fefde6</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
-->
</xsl:attribute-set>算是可以实现条件判断式的,去设置不同的背景色了:
5.但是如果设置颜色的值是:
#eee
#edc
#fefde6
则就出现下面这类错误:
SEVERE: Invalid property value encountered in background-color=">#edc": org.apache.fop.fo.expr.PropertyException: file:/D:/tmp/tmp_dev_root/cgwin/home/CLi/develop/docbook/books/docbook_dev_note/src/../output/fo/docbook_dev_note.fo:4787:44: illegal character; property:'background-color' (See position 4800:426)
6.所以需要去:
搞清楚之前在css中配置的颜色的值,尤其是#edc,到底是什么意思:
【已解决】搞清楚css中颜色值#xxx形式的#edc是什么含义
7.所以去试试:
<!--============================================================================
verbatim(programlisting/literallayout/...) setting
=============================================================================-->
<xsl:param name="shade.verbatim" select="1"></xsl:param>
<!-- http://lists.oasis-open.org/archives/docbook/200801/msg00009.html -->
<!-- http://www.dpawson.co.uk/docbook/styling/params.html -->
<xsl:attribute-set name="shade.verbatim.style">
<!-- <xsl:attribute name="border">0</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">Lavender</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#eee</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#fefde6</xsl:attribute> -->
<xsl:attribute name="padding">1pt</xsl:attribute>
<xsl:attribute name="background-color">
<xsl:choose>
<xsl:when test="self::d:programlisting">#eeeeee</xsl:when>
<xsl:when test="self::d:screen">#eeddcc</xsl:when>
<xsl:otherwise>#fefde6</xsl:otherwise>
<!-- <xsl:otherwise>inherit</xsl:otherwise> -->
</xsl:choose>
</xsl:attribute>
<!--
<xsl:attribute name="background-color">
<xsl:choose>
<xsl:when test="d:programlisting">>#eee</xsl:when>
<xsl:when test="d:screen">>#edc</xsl:when>
<xsl:otherwise>#fefde6</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
-->
</xsl:attribute-set>是否可以。
结果终于可以了:
8.最后,由于在:
【已解决】搞清楚css中颜色值#xxx形式的#edc是什么含义
搞清楚了,xsl是支持#xxx的,所以去改为:
<!--============================================================================
verbatim(programlisting/literallayout/...) setting
=============================================================================-->
<xsl:param name="shade.verbatim" select="1"></xsl:param>
<!-- http://lists.oasis-open.org/archives/docbook/200801/msg00009.html -->
<!-- http://www.dpawson.co.uk/docbook/styling/params.html -->
<xsl:attribute-set name="shade.verbatim.style">
<!-- <xsl:attribute name="border">0</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">Lavender</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#eee</xsl:attribute> -->
<!-- <xsl:attribute name="background-color">#fefde6</xsl:attribute> -->
<xsl:attribute name="padding">1pt</xsl:attribute>
<xsl:attribute name="background-color">
<xsl:choose>
<xsl:when test="self::d:programlisting">#eee</xsl:when>
<xsl:when test="self::d:screen">#edc</xsl:when>
<xsl:otherwise>#fefde6</xsl:otherwise>
<!-- <xsl:otherwise>inherit</xsl:otherwise> -->
</xsl:choose>
</xsl:attribute>
</xsl:attribute-set>效果也是一样的。
9.然后,继续去试试别的参数。
先去看看,equation的背景色。
结果发现css中是之前自己的设置:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\docbook\config\docbook-xsl-ns-1.78.1\fo\common_fo.xsl
中的:
<!--============================================================================
equation setting
=============================================================================-->
<!-- TODO:tmp here only valid for FO(PDF), not take effect for HTML, need later fix it -->
<!-- <xsl:attribute-set name="equation.properties" use-attribute-sets="formal.object.properties"></xsl:attribute-set> -->
<xsl:attribute-set name="equation.properties" use-attribute-sets="formal.object.properties">
<!-- http://www.dpawson.co.uk/docbook/styling/params.html#d2221e282 -->
<!-- <xsl:attribute name="border-color">thin black ridge</xsl:attribute> -->
<!-- http://raibledesigns.com/wiki/Wiki.jsp?page=DocBook -->
<!-- <xsl:attribute name="border">0</xsl:attribute> -->
<!-- <xsl:attribute name="border-style">solid</xsl:attribute> -->
<!-- <xsl:attribute name="border-width">.1mm</xsl:attribute> -->
<xsl:attribute name="background-color">Lavender</xsl:attribute>
<!-- <xsl:attribute name="border-width">0.5pt</xsl:attribute> -->
<xsl:attribute name="padding">1pt</xsl:attribute>
</xsl:attribute-set>效果还是之前的:
无需变化。
10.还是去继续看看,那个example的背景色。
后来查到了,是之前自己在:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\docbook\config\docbook-xsl-ns-1.78.1\fo\common_fo.xsl
中的:
<!--============================================================================
formal(figure/table/equation/example/...) setting
=============================================================================-->
<!-- http://www.sagehill.net/docbookxsl/TitleFontSizes.html#FormalTitleProperties -->
<xsl:attribute-set name="formal.title.properties"
use-attribute-sets="normal.para.spacing">
<xsl:attribute name="font-weight">bold</xsl:attribute>
<xsl:attribute name="font-size">12pt</xsl:attribute>
<xsl:attribute name="hyphenate">false</xsl:attribute>
<xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
<xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
<xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
<xsl:attribute name="text-align">center</xsl:attribute>
</xsl:attribute-set>然后另外看到:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\docbook\tools\docbook-xsl-ns-1.78.1\fo\formal.xsl
中有:
<xsl:when test="self::d:example">
<fo:block id="{$id}"
xsl:use-attribute-sets="example.properties">
<xsl:if test="$keep.together != ''">
<xsl:attribute name="keep-together.within-column"><xsl:value-of
select="$keep.together"/></xsl:attribute>
</xsl:if>
<xsl:copy-of select="$content"/>
</fo:block>所以去单独加:
<xsl:attribute-set name="example.properties"> <xsl:attribute name="background-color">#fefde6</xsl:attribute> </xsl:attribute-set>
效果是:是希望的颜色:
11.另外,再去设置note,tip,important,warning,caution的背景色:
看到:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\docbook\tools\docbook-xsl-ns-1.78.1\fo\admon.xsl
中有:
<xsl:template name="graphical.admonition">
<xsl:variable name="id">
<xsl:call-template name="object.id"/>
</xsl:variable>
<xsl:variable name="graphic.width">
<xsl:apply-templates select="." mode="admon.graphic.width"/>
</xsl:variable>
<fo:block id="{$id}"
xsl:use-attribute-sets="graphical.admonition.properties">
<fo:list-block provisional-distance-between-starts="{$graphic.width} + 18pt"
provisional-label-separation="18pt">
<fo:list-item>
<fo:list-item-label end-indent="label-end()">
<fo:block>
<fo:external-graphic width="auto" height="auto"
content-width="{$graphic.width}" >
<xsl:attribute name="src">
<xsl:call-template name="admon.graphic"/>
</xsl:attribute>
</fo:external-graphic>
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<xsl:if test="$admon.textlabel != 0 or d:title or d:info/d:title">
<fo:block xsl:use-attribute-sets="admonition.title.properties">
<xsl:apply-templates select="." mode="object.title.markup">
<xsl:with-param name="allow-anchors" select="1"/>
</xsl:apply-templates>
</fo:block>
</xsl:if>
<fo:block xsl:use-attribute-sets="admonition.properties">
<xsl:apply-templates/>
</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:block>
</xsl:template>
<xsl:template name="nongraphical.admonition">
<xsl:variable name="id">
<xsl:call-template name="object.id"/>
</xsl:variable>
<fo:block id="{$id}"
xsl:use-attribute-sets="nongraphical.admonition.properties">
<xsl:if test="$admon.textlabel != 0 or d:title or d:info/d:title">
<fo:block keep-with-next.within-column='always'
xsl:use-attribute-sets="admonition.title.properties">
<xsl:apply-templates select="." mode="object.title.markup">
<xsl:with-param name="allow-anchors" select="1"/>
</xsl:apply-templates>
</fo:block>
</xsl:if>
<fo:block xsl:use-attribute-sets="admonition.properties">
<xsl:apply-templates/>
</fo:block>
</fo:block>
</xsl:template>所以去设置:
<xsl:attribute-set name="admonition.properties">
<xsl:attribute name="background-color">
<xsl:choose>
<xsl:when test="self::d:note">#eee</xsl:when>
<xsl:when test="self::d:tip">#d8ecd6</xsl:when>
<xsl:when test="self::d:warning">#f8e8e8</xsl:when>
<xsl:when test="self::d:caution">#FFC</xsl:when>
<xsl:otherwise>#fefde6</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:attribute-set>结果是:
背景色可以生效:
还不错。
12.剩下的,其他的需要转化为pdf中的配置,还有一些,比如标题字体都是褐色之类的。
有空再折腾。
【总结】