C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# PDF创建目录

使用C#代码在PDF中创建目录的方法示例

作者:2501_93070778

目录在提升文档的可读性和可导航性方面起着至关重要的作用,它为读者提供了文档结构的清晰概览,使他们能够快速定位并访问感兴趣的特定章节或信息,本文将介绍如何使用 Spire.PDF for .NET 在 C# 和 VB.NET 中创建 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();
        }
    }
}

到此这篇关于使用C#代码在PDF中创建目录的方法示例的文章就介绍到这了,更多相关C# PDF创建目录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文