我正在使用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>
非常感谢您!
编辑:
如果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