You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用QuestPdf库生成PDF时实现目录的最优方法示例求助

使用QuestPdf生成简单目录的实现示例

核心实现思路

QuestPdf通过TableOfContents组件自动收集文档中注册的章节条目,配合Section组件的注册方法生成可交互的目录(支持点击跳转至对应章节)。

完整代码示例

using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

// 社区版可跳过许可证注册,商业版需填写对应许可证信息
QuestPDF.Settings.License = LicenseType.Community;

Document.Create(container =>
{
    // 目录页
    container.Page(page =>
    {
        page.Header().Text("目录").FontSize(20).Bold().AlignCenter();
        page.Content().TableOfContents();
    });

    // 第一章:入门介绍(一级目录)
    container.Page(page =>
    {
        page.Content().Section(section =>
        {
            // 向目录注册条目,指定标题和层级
            section.RegisterTableOfContentsEntry("第一章:入门介绍", level: 1);
            
            section.Item().Text("第一章:入门介绍").FontSize(16).Bold().MarginBottom(10);
            section.Item().Text("这里填写第一章的实际内容,可替换为Paragraph、Image等组件").FontSize(12);
        });
    });

    // 1.1 安装QuestPdf(二级目录)
    container.Page(page =>
    {
        page.Content().Section(section =>
        {
            section.RegisterTableOfContentsEntry("1.1 安装QuestPdf", level: 2);
            
            section.Item().Text("1.1 安装QuestPdf").FontSize(14).Bold().MarginBottom(10);
            section.Item().Text("通过NuGet包管理器安装QuestPDF库,命令:Install-Package QuestPDF").FontSize(12);
        });
    });

    // 第二章:高级功能(一级目录)
    container.Page(page =>
    {
        page.Content().Section(section =>
        {
            section.RegisterTableOfContentsEntry("第二章:高级功能", level: 1);
            
            section.Item().Text("第二章:高级功能").FontSize(16).Bold().MarginBottom(10);
            section.Item().Text("这里填写第二章的实际内容").FontSize(12);
        });
    });
})
.GeneratePdf("带目录的文档.pdf");

自定义目录样式

如果需要调整目录的字体、缩进、间距,可通过TableOfContents的配置方法实现:

page.Content().TableOfContents(toc =>
{
    // 根据层级设置字体样式
    toc.EntryStyle(level => TextStyle.Default
        .FontSize(level == 1 ? 14 : 12)
        .Bold(level == 1)
        .FontColor(level == 1 ? Colors.Black : Colors.Grey.Darken2));
    
    // 层级缩进(单位:点)
    toc.EntryIndentation(level => level * 20);
    
    // 条目之间的间距
    toc.ItemSpacing(6);
});

关键说明

  • 必须使用Section组件包裹章节内容,并通过RegisterTableOfContentsEntry注册目录条目,TableOfContents才能收集到对应内容。
  • 生成的PDF目录默认支持点击跳转,无需额外配置。
  • 章节内容可以是任意QuestPdf支持的组件(文本、图片、表格等),替换示例中的文本内容即可。

内容的提问来源于stack exchange,提问作者Yan D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:02:42