当前位置: 首页 > news >正文

使用C#代码在 PDF 中创建目录

目录在提升文档的可读性和可导航性方面起着至关重要的作用。它为读者提供了文档结构的清晰概览,使他们能够快速定位并访问感兴趣的特定章节或信息。对于较长的文档(例如报告、书籍或学术论文)而言,这一点尤为重要,因为读者可能需要多次返回特定的章节或部分进行查阅。

本文将介绍如何使用 Spire.PDF for .NET 在 C# 和 VB.NET 中创建 PDF 文档的目录。

安装 Spire.PDF for .NET

首先,需要将 Spire.PDF for .NET 包中包含的 DLL 文件添加为 .NET 项目的引用。
这些 DLL 文件可以通过以下链接下载,或通过 NuGet 安装。

PM> Install-Package Spire.PDF

在 C# 和 VB.NET 中创建 PDF 目录

目录通常包括目录标题(例如 “Table of Contents”)、目录内容、页码,以及可点击跳转到对应页面的交互动作。
使用 Spire.PDF for .NET 创建 PDF 目录时,可以按照以下步骤进行:

  1. 初始化 PdfDocument 类的实例。

  2. 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文档。

  3. 通过 PdfDocument.Pages.Count 属性获取文档的页数。

  4. 使用 PdfDocument.Pages.Insert(0) 方法在文档开头插入一个新页面作为目录页。

  5. 使用 PdfPageBase.Canvas.DrawString() 方法在该页面上绘制目录标题、目录内容和页码。

  6. 通过 PdfActionAnnotation 类创建跳转动作,并使用 PdfNewPage.Annotations.Add() 方法将这些动作添加到页面中。

  7. 使用 PdfDocument.SaveToFile() 方法保存生成的结果文档。

示例代码如下:

using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Annotations;
using Spire.Pdf.General;
using Spire.Pdf.Graphics;
using System;
using System.Drawing;namespace TableOfContents
{internal class Program{static void Main(string[] args){//初始化 PdfDocument 类的实例PdfDocument doc = new PdfDocument();//加载 PDF 文档doc.LoadFromFile("Sample.PDF");//获取文档的页数int pageCount = doc.Pages.Count;//在文档开头插入一个新页面作为目录页PdfPageBase tocPage = doc.Pages.Insert(0);//在新页面上绘制目录标题string title = "Table of Contents";PdfTrueTypeFont titleFont = new PdfTrueTypeFont(new Font("Arial", 20, FontStyle.Bold));PdfStringFormat centerAlignment = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);PointF location = new PointF(tocPage.Canvas.ClientSize.Width / 2, titleFont.MeasureString(title).Height + 10);tocPage.Canvas.DrawString(title, titleFont, PdfBrushes.CornflowerBlue, location, centerAlignment);//在新页面上绘制目录内容PdfTrueTypeFont titlesFont = new PdfTrueTypeFont(new Font("Arial", 14));String[] titles = new String[pageCount];for (int i = 0; i < titles.Length; i++){titles[i] = string.Format("This is page {0}", i + 1);}float y = titleFont.MeasureString(title).Height + 10;float x = 0;//在新页面上绘制目标页的页码for (int i = 1; i <= pageCount; i++){string text = titles[i - 1];SizeF titleSize = titlesFont.MeasureString(text);PdfPageBase navigatedPage = doc.Pages[i];string pageNumText = (i + 1).ToString();SizeF pageNumTextSize = titlesFont.MeasureString(pageNumText);tocPage.Canvas.DrawString(text, titlesFont, PdfBrushes.CadetBlue, 0, y);float dotLocation = titleSize.Width + 2 + x;float pageNumlocation = tocPage.Canvas.ClientSize.Width - pageNumTextSize.Width;for (float j = dotLocation; j < pageNumlocation; j++){if (dotLocation >= pageNumlocation){break;}tocPage.Canvas.DrawString(".", titlesFont, PdfBrushes.Gray, dotLocation, y);dotLocation += 3;}tocPage.Canvas.DrawString(pageNumText, titlesFont, PdfBrushes.CadetBlue, pageNumlocation, y);//为目录页中的文本添加可点击的跳转动作location = new PointF(0, y);RectangleF titleBounds = new RectangleF(location, new SizeF(tocPage.Canvas.ClientSize.Width, titleSize.Height));PdfDestination Dest = new PdfDestination(navigatedPage, new PointF(-doc.PageSettings.Margins.Top, -doc.PageSettings.Margins.Left));PdfActionAnnotation action = new PdfActionAnnotation(titleBounds, new PdfGoToAction(Dest));action.Border = new PdfAnnotationBorder(0);(tocPage as PdfNewPage).Annotations.Add(action);y += titleSize.Height + 10;}//保存生成的 PDF 文档doc.SaveToFile("AddTableOfContents.pdf");doc.Close();}}
}

申请临时许可证

如果您希望去除生成文档中的评估提示信息,或解除功能限制,请申请一份为期 30 天的试用许可证。

http://www.dtcms.com/a/597184.html

相关文章:

  • NAT基础原理
  • 多粒子模型--交通堵塞2
  • 用AI训练数据,预测房地产价格走势(Python版)
  • Rust:泛型
  • [CSP-X2025山东小学组T4]勇者斗恶龙
  • 基于单片机的多模式智能洗衣机设计
  • 【java阶段练习】----- 学生管理系统
  • 高校网站如何建设论文外国网站怎么做
  • portfolio做网站台州做网站需要多少钱
  • 网站名称 规则装修设计培训机构
  • Dify工作流如何用“拖拉拽”重构我们的自动化测试体系?
  • 【Docker】基础
  • AI应用开发的架构哲学:框架、平台与定制的协同(ComfyUI+cnb+云存储)
  • MySQL快速入门——索引
  • 舆情处置的技术实现:Infoseek 如何用 AI 重构 “识别 - 研判 - 处置” 全链路
  • gRPC vs RPC 高频面试题
  • 淘宝联盟推广网站怎么做什么是搜索引擎
  • 扬州住房城乡建设局网站设计画册
  • 在线视频网站a做免费下载中山精品网站建设价位
  • LangFlow 节点(Node)
  • Linux设置系统同步时间
  • 花垣网站建设一台主机做两个网站
  • 生成模型技术宇宙:从VAE到世界模型,揭示AIGC核心引擎
  • 网站建设中魔板免费扑克网站代码
  • 股指期货的收益和风险大吗?
  • 第12章 测试编写
  • 性能测试之使用 adb 查看设备CPU占用与数据分析
  • 【AUTOSAR SOMEIP】SD状态机
  • 海尔网站建设情况wordpress 没有保存
  • CSS 对齐