wkhtmltopdf автоматическая нумерация глав - PullRequest
0 голосов
/ 09 апреля 2019

Я использую 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>

Большое спасибо!

Edit:

С помощью CSS можно добавить нумерацию в оглавление, если на листе XSL есть ol списки НО, но невозможно добавить эти номера к заголовкам в контенте как таковом. В моем случае 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

...