产品比较

如何使用iTextSharp在C#中向PDF添加页码

Chipego
奇佩戈-卡琳达
2024年四月3日
分享:

介绍

"便携式文档格式 "或 PDF 是 Adobe 公司创建的一种文件格式。 在提交需要对文本和照片进行格式化的论文时,PDF 文件就会派上用场。 在当今世界,PDF 文件是必不可少的,所有企业部门都使用它来创建文档和开具发票。 得益于目前市场上的多个 PDF 库,创建 PDF 几乎成为了一种本能。要选择适合自己的 PDF 库,关键是在为自己的项目使用一个 PDF 库之前,要权衡每个 PDF 库的优势和特点。

在本文中,我们将了解如何使用 iTextSharp C# 在 PDF 中添加页码。 另外,我们将比较iTextSharpIronPDF

如何使用 iTextSharp C&num 在 PDF 中添加页码;

  1. 使用任何集成开发环境创建一个新的 C# 项目。

  2. 创建一个新的 PDF 对象。

  3. 在 HTML 页脚添加页码。

  4. 根据 HTML 资料创建 PDF。

  5. 将 PDF 文件保存到电脑中。

什么是 IronPDF

IronPDF 是一个强大的 PDF .NET Framework,开发人员可以轻松用于生成、查看和编辑 PDF。 IronPDF 是一款复杂的工具,内部使用 chromium 引擎。 它可以将 HTML5、JavaScript、CSS 和图片文件转换为 PDF,添加自定义页眉和页脚,并生成与浏览器中显示完全一致的 PDF。 IronPDF 支持许多在线和 .NET 格式,包括 HTML、ASPX、Razor View 和 MVC。

IronPDF 功能

  • 利用 .NET C# 代码创建、读取和简单编辑 PDF 文件。
  • 从网站 URL 链接创建 PDF 的过程,同时管理用户代理、代理、Cookie、HTTP 标头和表单变量,以便使用 HTML 登录表单进行登录。
  • 从已有的 PDF 文件中删除图片的过程。
  • 包括 PDF 的元素:表格、文本、照片、书签、水印、页眉、页脚等。
  • 能轻松分离和合并大量 PDF 文档的页面。

    要了解更多关于IronPDF文档的信息,请参考此处

安装 IronPDF

在 Visual Studio 工具中,选择 NuGet 包管理器,就能在工具下找到 Visual Command-Line 界面。 应在软件包管理终端选项卡中输入以下命令。

Install-Package IronPdf

或者,我们也可以使用软件包管理器方法。 使用 Visual Studio 的 NuGet 包管理器选项,可以直接将软件包安装到解决方案中。 在 NuGet 网站上有一个用于查找软件包的搜索框。我们只需在软件包管理器中查找 "IronPDF",如下图所示:

如何使用 iTextSharp 在 PDF 中添加页码:图 1 - 从包管理器安装 IronPDF

相关搜索结果列表显示在上图中。 要在系统中安装软件包,请进行必要的选择。

现在软件包已经下载并安装完毕,可以在当前项目中使用。

什么是 iTextSharp

iTextSharp 是一个用于在 C# 中生成和修改 PDF 文档的灵活库。 它提供多种功能,如加密、PDF 合并、文本和图片提取等。 iTextSharp 是一款高效的工具,可用于多种任务,包括为 PDF 添加页码。

iTextSharp 的功能

  • iText 库提供了生成 PDF 文档的应用程序接口。
  • HTML 和 XML 字符串均可使用 iText 程序解析为 PDF 文件。
  • 我们可以使用 iText 库为 PDF 文档添加书签、页码和标记。
  • 我们还可以使用 iText 库将 PDF 文档分割成多个 PDF 文档,或将多个 PDF 文档合并成一个 PDF 文档。
  • 我们可以使用 iText 修改 PDF 表单。

安装 iTextSharp

使用 NuGet 软件包管理器查找 iText。 iText7 和 iText.pdfhtml 是必须安装的软件,因为 iText 的功能分属多个软件包。

如果选择 Visual Command-Line 界面,则需要安装以下软件包:

Install-Package iTextSharp

由于 iText 7 是最新版本,因此我们在解决方案中采用了该版本。

使用 IronPDF 添加页码

通过 IronPDF 的综合库,在 PDF 文件中添加页码变得非常简单。 请看下面的代码以作说明。

using IronPdf;
static void main(string [] args)
{ 
    var renderer = new IronPdf.HtmlToPdf();
    private string header = "<h1>Hello Ironpdf!<h1>";
    PdfDocument pdf = renderer.RenderHtmlAsPdf(header);
    HtmlHeaderFooter htmlFooter = new HtmlHeaderFooter()
    {
        HtmlFragment = "<center><i>{page} of {total-pages}<i></center>"
    };
    // Add footer
    pdf.AddHtmlFooters(htmlFooter);
    pdf.SaveAs("output.pdf");
}
using IronPdf;
static void main(string [] args)
{ 
    var renderer = new IronPdf.HtmlToPdf();
    private string header = "<h1>Hello Ironpdf!<h1>";
    PdfDocument pdf = renderer.RenderHtmlAsPdf(header);
    HtmlHeaderFooter htmlFooter = new HtmlHeaderFooter()
    {
        HtmlFragment = "<center><i>{page} of {total-pages}<i></center>"
    };
    // Add footer
    pdf.AddHtmlFooters(htmlFooter);
    pdf.SaveAs("output.pdf");
}
Imports IronPdf
Shared Sub main(ByVal args() As String)
	Dim renderer = New IronPdf.HtmlToPdf()
	private String header = "<h1>Hello Ironpdf!<h1>"
	Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(header)
	Dim htmlFooter As New HtmlHeaderFooter() With {.HtmlFragment = "<center><i>{page} of {total-pages}<i></center>"}
	' Add footer
	pdf.AddHtmlFooters(htmlFooter)
	pdf.SaveAs("output.pdf")
End Sub
$vbLabelText   $csharpLabel

首先,我们定义要转换成 PDF 的 HTML 文本。 这些 HTML 内容可以是一个 HTML 段落,也可以是整个 HTML 页面。 接下来,我们创建一个HTMLToPdf类的实例,该类提供HTML到PDF的转换功能RenderHtmlAsPdf

HTML 内容作为参数传递给RenderHtmlAsPdf函数。 我们指定必须转换成 PDF 格式的 HTML 资料。 页码表示为占位符,或在此HTML文本的页脚部分表示为{page} of {total-pages}

创建的 PDF 文档通过此方法作为 PdfDocument 对象返回。 使用SaveAs方法,我们将PDF文档保存为名为"output.pdf"的文件。 或者,我们可以使用OpenInDefaultPDFViewer函数来用系统的默认PDF阅读器打开创建的PDF文档。 我们还可以使用上述方法为现有 PDF 文件添加页码。

如何在C#中使用iTextSharp在PDF中添加页码:图2 - IronPDF:带有页码的输出PDF

要了解有关IronPDF代码的更多信息,请参考此处

使用 iTextSharp 添加页码

首先,让我们使用 iTextSharp 生成一个新的 PDF 文档。 下面是如何制作带有页码的新 PDF 文档的基本示例:

using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string [] args)
        {
            // Create a new PDF document
            Document doc = new Document();
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("output.pdf", FileMode.Create));
            doc.Open();
            doc.Add(new Paragraph("Hello, world!"));
            // Attach page number event to PDF writer
            writer.PageEvent = new PageNumberEventHandler();
            // Close the document
            doc.Close();
        }
    }
    public class PageNumberEventHandler : PdfPageEventHelper
    {
        public override void OnOpenDocument(PdfWriter writer, Document document)
        {
            base.OnOpenDocument(writer, document);
        }
        public override void OnEndPage(PdfWriter writer, Document document)
        {
            base.OnEndPage(writer, document);
            PdfPTable table = new PdfPTable(1);
            table.TotalWidth = 300f;
            table.HorizontalAlignment = Element.ALIGN_CENTER;
            PdfPCell cell = new PdfPCell(new Phrase($"Page {writer.PageNumber}"));
            cell.Border = 0;
            table.AddCell(cell);
            table.WriteSelectedRows(0, -1, 150, document.Bottom, writer.DirectContent);
        }
        public override void OnCloseDocument(PdfWriter writer, Document document)
        {
            base.OnCloseDocument(writer, document);
        }
    }
}
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string [] args)
        {
            // Create a new PDF document
            Document doc = new Document();
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("output.pdf", FileMode.Create));
            doc.Open();
            doc.Add(new Paragraph("Hello, world!"));
            // Attach page number event to PDF writer
            writer.PageEvent = new PageNumberEventHandler();
            // Close the document
            doc.Close();
        }
    }
    public class PageNumberEventHandler : PdfPageEventHelper
    {
        public override void OnOpenDocument(PdfWriter writer, Document document)
        {
            base.OnOpenDocument(writer, document);
        }
        public override void OnEndPage(PdfWriter writer, Document document)
        {
            base.OnEndPage(writer, document);
            PdfPTable table = new PdfPTable(1);
            table.TotalWidth = 300f;
            table.HorizontalAlignment = Element.ALIGN_CENTER;
            PdfPCell cell = new PdfPCell(new Phrase($"Page {writer.PageNumber}"));
            cell.Border = 0;
            table.AddCell(cell);
            table.WriteSelectedRows(0, -1, 150, document.Bottom, writer.DirectContent);
        }
        public override void OnCloseDocument(PdfWriter writer, Document document)
        {
            base.OnCloseDocument(writer, document);
        }
    }
}
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Namespace ConsoleApp1
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			' Create a new PDF document
			Dim doc As New Document()
			Dim writer As PdfWriter = PdfWriter.GetInstance(document, New FileStream("output.pdf", FileMode.Create))
			doc.Open()
			doc.Add(New Paragraph("Hello, world!"))
			' Attach page number event to PDF writer
			writer.PageEvent = New PageNumberEventHandler()
			' Close the document
			doc.Close()
		End Sub
	End Class
	Public Class PageNumberEventHandler
		Inherits PdfPageEventHelper

		Public Overrides Sub OnOpenDocument(ByVal writer As PdfWriter, ByVal document As Document)
			MyBase.OnOpenDocument(writer, document)
		End Sub
		Public Overrides Sub OnEndPage(ByVal writer As PdfWriter, ByVal document As Document)
			MyBase.OnEndPage(writer, document)
			Dim table As New PdfPTable(1)
			table.TotalWidth = 300F
			table.HorizontalAlignment = Element.ALIGN_CENTER
			Dim cell As New PdfPCell(New Phrase($"Page {writer.PageNumber}"))
			cell.Border = 0
			table.AddCell(cell)
			table.WriteSelectedRows(0, -1, 150, document.Bottom, writer.DirectContent)
		End Sub
		Public Overrides Sub OnCloseDocument(ByVal writer As PdfWriter, ByVal document As Document)
			MyBase.OnCloseDocument(writer, document)
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

首先,我们正在为DocumentPdfWriter创建一个新对象,这使我们能够创建一个空的PDF文件。您可以在PDF文档中包含文本、照片、表格和其他类型的材料。 让我们在新段落中添加一些示例文本,以进行演示。 现在重要的一步是在 PDF 文档中添加页码。 我们将使用 iTextSharp 的页面事件来实现这一点。 为了能够覆盖在PDF生成过程中特定事件发生时调用的方法,我们首先构建一个继承自PdfPageEventHelper类的类。

在此类中重写了OnEndPage函数,以添加一个包含当前页码的单元格的表格。 最后,在我们关闭文档之前,需要将我们的PageNumberEventHandler类的一个实例连接到PdfWriter对象。 通过此配置,每次向 PDF 文档添加新页面时,PageNumberEventHandler 类的 OnEndPage 函数将被调用,在每页底部添加页码。 我们还可以使用现有的 PDF 文档来添加页码。

如何使用iTextSharp在PDF中添加页码 (C#):图3 - iTextSharp:输出的PDF带有页码

结论

总之,IronPDF在专长、可用性以及与.NET环境的无缝集成方面,使其成为需要HTML到PDF转换及相关功能的场景的最佳选择,即使iTextSharp在C# PDF操作库的领域中仍然是一个强劲的竞争者。 有了 IronPDF,您可以从 HTML 内容创建发票、报告和动态生成的文档,其简便性、有效性和适应性是在现代开发环境中取得成功所必需的。

IronPDF 的$749 Lite 版包含永久许可、升级选项和一年的软件维护。 带水印的试用期允许用户在实际环境中对产品进行评估。 访问许可证页面。 访问此网站以了解更多有关Iron Software的信息。

Chipego
软件工程师
Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。
< 前一页
C# 报告工具(功能比较)
下一步 >
在 C# 中使用 iTextSharp 阅读 PDF 文档的方法: