合并 PDF 文件并添加页码
Spire.PDF for .NET 是一款专门对 Word 文档进行操作的 .NET 类库。致力于在于帮助开发人员轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档,而无需安装 Microsoft Word。
行号用于在每行文本旁边显示 Word 自动计算的行数。当我们需要参考合同或法律文件等文档中的特定行时,它非常有用。word中的行号功能允许我们设置起始值、编号间隔、与文本的距离以及行号的编号方式。使用 Spire.Doc,我们可以实现上述所有功能。本文将介绍如何将 HTML 转换为 PDF。
欢迎加入spire技术交流群:767755948
在搜索了大量有关 PDF 合并的信息之后,我们不难发现,无论是在线合并 PDF 文件还是使用 C#/VB.NET 来实现这项任务,您始终无法摆脱对一些重要问题的担忧,例如 PDF 文件的安全性、所花费的时间以及合并后的文件是否支持打印页码等等。不过,只要你来到这里,这些烦恼就不会出现了。本节将专门为您介绍一种安全的解决方案,通过 .NET PDF 组件 Spire.PDF for .NET,用 C#、VB.NET 将 PDF 文件合并为一个文件。
Spire.PDF for .NET是用C#语言从零开始构建的,它能让程序员和开发人员在.NET应用程序中创建、读取、写入和处理PDF文档,而无需使用Adobe Acrobat或任何外部库。使用 Spire.PDF for .NET,您不仅可以快速合并 PDF 文件,还可以打印带有页码的 PDF 页面。现在请预览下面的有效截图:
在执行以下步骤之前,请下载 Spire.PDF for .NET 并将其安装到系统上。
步骤1:你可以使用字符串数组来保存将合并为一个PDF的三个PDF文件的名称,并演示Spire.Pdf.PdfDocument数组。然后,加载三个 PDF 文件并选择第一个 PdfDocument,以便将第二个和第三个 PDF 文件合并到其中。为了将第二个PDF文件中的所有页面导入到第一个PDF文件中,你需要调用方法 public void AppendPage(PdfDocument doc)。同样通过调用另一个方法public PdfPageBase InsertPage(PdfDocument doc, int pageIndex),第三个PDF文件的每一页都可以导入到第一个PDF文件中。
[C#]
private void button1_Click(object sender, EventArgs e) { //pdf document list String[] files = new String[] { @"..\PDFmerge0.pdf", @"..\ PDFmerge1.pdf", @"..\ PDFmerge2.pdf" }; //open pdf documents PdfDocument[] docs = new PdfDocument[files.Length]; for (int i = 0; i < files.Length; i++) { docs[i] = new PdfDocument(files[i]); } //append document docs[0].AppendPage(docs[1]); //import PDF pages for (int i = 0; i < docs[2].Pages.Count; i = i + 2) { docs[0].InsertPage(docs[2], i); }[VB.NET]
Private Sub button1_Click(sender As Object, e As EventArgs) 'pdf document list Dim files As [String]() = New [String]() {"..\PDFmerge0.pdf", "..\ PDFmerge1.pdf", "..\ PDFmerge2.pdf"} 'open pdf documents Dim docs As PdfDocument() = New PdfDocument(files.Length - 1) {} For i As Integer = 0 To files.Length - 1 docs(i) = New PdfDocument(files(i)) Next 'append document docs(0).AppendPage(docs(1)) 'import PDF pages Dim i As Integer = 0 While i < docs(2).Pages.Count docs(0).InsertPage(docs(2), i) i = i + 2 End While第二步:在第一个 PDF 文件中绘制页码。在这一步中,你可以通过调用 Spire.Pdf.Graphics.PdfMargins 类来设置 PDF 页码页边距。PdfMargins。然后,调用自定义方法 DrawPageNumber(PdfPageCollection pages, PdfMargins margin, int startNumber, int pageCount) 在第一个 PDF 文件的每一页底部添加页码。请看下面的详细代码:
[C#]
//set PDF margin PdfUnitConvertor unitCvtr = new PdfUnitConvertor(); PdfMargins margin = new PdfMargins(); margin.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point); margin.Bottom = margin.Top; margin.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point); margin.Right = margin.Left; this.DrawPageNumber(docs[0].Pages, margin, 1, docs[0].Pages.Count); private void DrawPageNumber(PdfPageCollection pages, PdfMargins margin, int startNumber, int pageCount) { foreach (PdfPageBase page in pages) { page.Canvas.SetTransparency(0.5f); PdfBrush brush = PdfBrushes.Black; PdfPen pen = new PdfPen(brush, 0.75f); PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 9f, System.Drawing.FontStyle.Italic), true); PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Right); format.MeasureTrailingSpaces = true; float space = font.Height * 0.75f; float x = margin.Left; float width = page.Canvas.ClientSize.Width - margin.Left - margin.Right; float y = page.Canvas.ClientSize.Height - margin.Bottom + space; page.Canvas.DrawLine(pen, x, y, x + width, y); y = y + 1; String numberLabel = String.Format("{0} of {1}", startNumber++, pageCount); page.Canvas.DrawString(numberLabel, font, brush, x + width, y, format); page.Canvas.SetTransparency(1); } }[VB.NET]
'set PDF margin Dim unitCvtr As New PdfUnitConvertor() Dim margin As New PdfMargins() margin.Top = unitCvtr.ConvertUnits(2.54F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point) margin.Bottom = margin.Top margin.Left = unitCvtr.ConvertUnits(3.17F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point) margin.Right = margin.Left Me.DrawPageNumber(docs(0).Pages, margin, 1, docs(0).Pages.Count) Private Sub DrawPageNumber(pages As PdfPageCollection, margin As PdfMargins, startNumber As Integer, pageCount As Integer) For Each page As PdfPageBase In pages page.Canvas.SetTransparency(0.5F) Dim brush As PdfBrush = PdfBrushes.Black Dim pen As New PdfPen(brush, 0.75F) Dim font As New PdfTrueTypeFont(New Font("Arial", 9F, System.Drawing.FontStyle.Italic), True) Dim format As New PdfStringFormat(PdfTextAlignment.Right) format.MeasureTrailingSpaces = True Dim space As Single = font.Height * 0.75F Dim x As Single = margin.Left Dim width As Single = page.Canvas.ClientSize.Width - margin.Left - margin.Right Dim y As Single = page.Canvas.ClientSize.Height - margin.Bottom + space page.Canvas.DrawLine(pen, x, y, x + width, y) y = y + 1 Dim numberLabel As [String] = [String].Format("{0} of {1}", System.Math.Max(System.Threading.Interlocked.Increment(startNumber),startNumber - 1), pageCount) page.Canvas.DrawString(numberLabel, font, brush, x + width, y, format) page.Canvas.SetTransparency(1) Next End SubPDF 合并代码乍一看可能很长,实际上,如果你不需要在合并后的 PDF 中添加页码,则应避免使用第二步。然而,在很多情况下,页码为用户阅读 PDF 和打印 PDF 带来了极大的便利。Spire.PDF for .NET既能满足您合并PDF文件的要求,又能在合并后的PDF文件中添加页码。