wkhtmltopdf自动章节编号

时间:2019-04-09 11:19:08

标签: wkhtmltopdf

我正在使用wkhtmltopdf来生成PDF。我想在我的所有部分(内容和目录)中添加数字,但是我对此一无所获。似乎可以使用XSL-stylesheet,但我无法使其正常工作。像这样:

<h1>Title</h1>
<h2>Subtitle</h2>
<h3>Subsubtitle</h3>

预期结果是

1 Title
1.1 Subtitle
1.1.1 Subsubtitle

我都尝试过:

<xsl:number format="1. " count="item" level="multiple"/>

<xsl:number format="1. " count="outline:item/outline:item" level="multiple"/>

但是他们返回The element with local name number does not exist in XSL-T。知道如何实现章节编号吗?

我的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>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <style>
            [... style]
        </style>
      </head>
      <body>
        <h1 class="book-toc-title">Table of Contents</h1>
        <ol class="book-toc-list">
          <xsl:number format="1. " count="item" level="multiple"/>
          <xsl:apply-templates select="outline:item/outline:item"/>
        </ol>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="outline:item[count(ancestor::outline:item)&lt;=6]">
    <li class="book-toc-item level_{count(ancestor::outline:item)}">
      <xsl:if test="@title!=''">
        <div class="book-toc-item-inner">

          <span class="book-toc-item-pagenum">
            <xsl:value-of select="@page"/>
          </span>

          <a class="book-toc-item-title">
            <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>

            <span class="text">
              <span class="text-inner">
                <xsl:value-of select="@title"/>
              </span>
            </span>
          </a>

        </div>
      </xsl:if>

      <ol class="book-toc-list">
        <xsl:comment>added to prevent self-closing tags in QtXmlPatterns</xsl:comment>
        <xsl:apply-templates select="outline:item"/>
      </ol>
    </li>
  </xsl:template>
</xsl:stylesheet>

非常感谢您!

编辑:

如果XSL工作表具有ol列表,但是使用CSS可以在目录中添加编号,但是无法将这些编号添加到内容本身的标题中。就我而言,CSS就像:

ol {
    counter-reset: item;
}

.book-toc-item .book-toc-item-title .text-inner:before {
    content: counters(item, ".")" ";
    counter-increment: item;
}

因此,唯一的方法似乎是预先准备HTML。

访问以下链接以获取更多详细信息https://github.com/wkhtmltopdf/wkhtmltopdf/issues/4324

0 个答案:

没有答案