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