使用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 目录时,可以按照以下步骤进行:
-
初始化 PdfDocument 类的实例。
-
使用
PdfDocument.LoadFromFile()方法加载 PDF 文档。 -
通过
PdfDocument.Pages.Count属性获取文档的页数。 -
使用
PdfDocument.Pages.Insert(0)方法在文档开头插入一个新页面作为目录页。 -
使用
PdfPageBase.Canvas.DrawString()方法在该页面上绘制目录标题、目录内容和页码。 -
通过
PdfActionAnnotation类创建跳转动作,并使用PdfNewPage.Annotations.Add()方法将这些动作添加到页面中。 -
使用
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 天的试用许可证。
