wkhtmltopdf 目录对象使用 及 目录样式分享

最近又是更新了报告模板的样式新使用了目录对象 因为直接生成的目录样式比较丑所以这边使用的是自定义xsl

 

                                                    直接生成的目录样式

 

 

 

                  自定义样式

 

因为需求所以写了些特殊判断

<xsl:if test="">  只能单条件判断

多条件要使用

<xsl:when> 相当于if

<xsl:otherwise 判断语句> 相当于 else if

<xsl:otherwise> 相当于 else

test 里面可以使用函数 这边只使用到了 contains 包含  前面加 ! 不好使 只能使用上面的 判断语句实现效果

需要使用其他函数的 搜一下 xlst 函数

 

这里分享下使用到的代码。

 toc --xsl-style-sheet C:\Users\Administrator\Desktop\myself.xsl 

这句是 生成目录 使用 指定位置的样式

 

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:outline="http://wkhtmltopdf.org/outline"
                xmlns="http://www.w3.org/1999/xhtml">
  <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
              doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
              indent="yes" />
  <xsl:template match="outline:outline">
    <html>
      <head>
        <title>目录</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style>
          body{
            padding:2%
          }
          h1 {         
            color: #364063!important;
            margin: 2% 0%;
            padding:2% 0;
            font-size: 30px;
            font-family: calibri;
          }
          div {border-bottom: 1px dashed rgb(200,200,200);  padding:2% 0%;}
          span {float: right;}
          li {list-style: none; color: #364063;}
          ul {
            font-size: 30px;
            font-family: calibri;         
            color: #364063;
          }
          ul ul {font-size: 80%; }
          ul {padding-left: 0em;}
          ul ul {padding-left: 1em;}
          a {text-decoration:none; color: #364063;}
        
        </style>
      </head>
      <body>
        <h1 style="font-size:45px;">目录</h1>
        <ul><xsl:apply-templates select="outline:item/outline:item"/></ul>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="outline:item">
    <li>
        <xsl:if test="@title!='目录'">
      <xsl:if test="@title!=''">
          
        <div>
            <xsl:choose>
              <xsl:when test="contains(@title,' 异常')">
              <a style="color: #FF8B07!important;">
                <xsl:if test="@link">
                  <xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
                </xsl:if>
                <xsl:if test="@backLink">
                  <xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>
                </xsl:if>
                <xsl:value-of select="@title" /> 
              </a>
              </xsl:when>
                  <xsl:otherwise>
                  <a>
                    <xsl:if test="@link">
                      <xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
                    </xsl:if>
                    <xsl:if test="@backLink">
                      <xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>
                    </xsl:if>
                    <xsl:value-of select="@title" /> 
                  </a>
                  </xsl:otherwise>
                  </xsl:choose>
          <span> <xsl:value-of select="@page - 4" /> </span>
        </div>        
      </xsl:if>
          </xsl:if>
      <ul>
        <xsl:comment>added to prevent self-closing tags in QtXmlPatterns</xsl:comment>
        <xsl:apply-templates select="outline:item"/>
      </ul>
    </li>
  </xsl:template>
</xsl:stylesheet>

这是文件内容可以拷贝直接使用 再根据需求调整

 

分享结束 感谢 !!

因为要生成页码 所以底下能看到 目录 1 目录   没研究出怎么让目录不生成知道的大佬告知下 谢谢。

 

xsl中 page - 4 是因为 wkhtmltopdf 生成的页码是正常的  但是 目录里面的指向 多了 目录的页数 所以  page - 目录页数

 

 

2023-01-12 17:39:24

 

posted @ 2023-01-12 17:39  西红柿炒番茄拌土豆  阅读(359)  评论(0编辑  收藏  举报