【背景】
折腾:
【记录】把docbook中的html的css的配置效果应用到fo即PDF等输出文件类型中
期间,
已经尝试了:
【记录】docbook中尝试使用CSSToXSLFO将css转换为fo(pdf)的xsl配置参数
结果失败了。
所以只能现在去,手动的,将css的配置,转换为fo即pdf的xsl参数配置了。
【折腾过程】
1.去用:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!--============================================================================ verbatim(programlisting/literallayout/...) setting =============================================================================--> < xsl:param name = "shade.verbatim" select = "1" ></ xsl:param > < 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
去试试:
1 2 3 4 5 6 7 8 9 10 | < 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 > |
结果出错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 5 |
11.改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <!--============================================================================ verbatim(programlisting/literallayout/...) setting =============================================================================--> < xsl:param name = "shade.verbatim" select = "1" ></ xsl:param > < 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.改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <!--============================================================================ verbatim(programlisting/literallayout/...) setting =============================================================================--> < xsl:param name = "shade.verbatim" select = "1" ></ xsl:param > < 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会出错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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.com/files/res/docbook/entity/crl.ent Found public match crl.ent Resolve: pubID crl.ent sysID https://www.crifan.com/files/res/docbook/entity/crl.ent Found public match crl.ent Resolve: pubID crl.ent sysID https://www.crifan.com/files/res/docbook/entity/crl.ent Found public match crl.ent Resolve: pubID crl.ent sysID https://www.crifan.com/files/res/docbook/entity/crl.ent Found public match crl.ent Resolve: pubID crl.ent sysID https://www.crifan.com/files/res/docbook/entity/crl.ent Found public match crl.ent Resolve: pubID crl.ent sysID https://www.crifan.com/files/res/docbook/entity/crl.ent Found public match crl.ent Resolve: pubID crl.ent sysID https://www.crifan.com/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 10 |
4.再试试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <!--============================================================================ verbatim(programlisting/literallayout/...) setting =============================================================================--> < xsl:param name = "shade.verbatim" select = "1" ></ xsl:param > < 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
去试试自己写代码试试。
后来终于用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | version = '1.0' > <!--============================================================================ verbatim(programlisting/literallayout/...) setting =============================================================================--> < xsl:param name = "shade.verbatim" select = "1" ></ xsl:param > < 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
则就出现下面这类错误:
1 | 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.所以去试试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <!--============================================================================ verbatim(programlisting/literallayout/...) setting =============================================================================--> < xsl:param name = "shade.verbatim" select = "1" ></ xsl:param > < 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的,所以去改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <!--============================================================================ verbatim(programlisting/literallayout/...) setting =============================================================================--> < xsl:param name = "shade.verbatim" select = "1" ></ xsl:param > < 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
中的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!--============================================================================ 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> --> <!-- <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
中的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!--============================================================================ 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
中有:
1 2 3 4 5 6 7 8 9 | < 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 > |
所以去单独加:
1 2 3 | < 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
中有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | < 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 > |
所以去设置:
1 2 3 4 5 6 7 8 9 10 11 | < 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中的配置,还有一些,比如标题字体都是褐色之类的。
有空再折腾。
【总结】