合并 PDF 文件并添加頁碼
Spire.PDF for .NET 是一款專門對(duì) Word 文檔進(jìn)行操作的 .NET 類庫。致力于在于幫助開發(fā)人員輕松快捷高效地創(chuàng)建、編輯、轉(zhuǎn)換和打印 Microsoft Word 文檔,而無需安裝 Microsoft Word。
行號(hào)用于在每行文本旁邊顯示 Word 自動(dòng)計(jì)算的行數(shù)。當(dāng)我們需要參考合同或法律文件等文檔中的特定行時(shí),它非常有用。word中的行號(hào)功能允許我們?cè)O(shè)置起始值、編號(hào)間隔、與文本的距離以及行號(hào)的編號(hào)方式。使用 Spire.Doc,我們可以實(shí)現(xiàn)上述所有功能。本文將介紹如何將 HTML 轉(zhuǎn)換為 PDF。
歡迎加入spire技術(shù)交流群:767755948
在搜索了大量有關(guān) PDF 合并的信息之后,我們不難發(fā)現(xiàn),無論是在線合并 PDF 文件還是使用 C#/VB.NET 來實(shí)現(xiàn)這項(xiàng)任務(wù),您始終無法擺脫對(duì)一些重要問題的擔(dān)憂,例如 PDF 文件的安全性、所花費(fèi)的時(shí)間以及合并后的文件是否支持打印頁碼等等。不過,只要你來到這里,這些煩惱就不會(huì)出現(xiàn)了。本節(jié)將專門為您介紹一種安全的解決方案,通過 .NET PDF 組件 Spire.PDF for .NET,用 C#、VB.NET 將 PDF 文件合并為一個(gè)文件。
Spire.PDF for .NET是用C#語言從零開始構(gòu)建的,它能讓程序員和開發(fā)人員在.NET應(yīng)用程序中創(chuàng)建、讀取、寫入和處理PDF文檔,而無需使用Adobe Acrobat或任何外部庫。使用 Spire.PDF for .NET,您不僅可以快速合并 PDF 文件,還可以打印帶有頁碼的 PDF 頁面?,F(xiàn)在請(qǐng)預(yù)覽下面的有效截圖:
在執(zhí)行以下步驟之前,請(qǐng)下載 Spire.PDF for .NET 并將其安裝到系統(tǒng)上。
步驟1:你可以使用字符串?dāng)?shù)組來保存將合并為一個(gè)PDF的三個(gè)PDF文件的名稱,并演示Spire.Pdf.PdfDocument數(shù)組。然后,加載三個(gè) PDF 文件并選擇第一個(gè) PdfDocument,以便將第二個(gè)和第三個(gè) PDF 文件合并到其中。為了將第二個(gè)PDF文件中的所有頁面導(dǎo)入到第一個(gè)PDF文件中,你需要調(diào)用方法 public void AppendPage(PdfDocument doc)。同樣通過調(diào)用另一個(gè)方法public PdfPageBase InsertPage(PdfDocument doc, int pageIndex),第三個(gè)PDF文件的每一頁都可以導(dǎo)入到第一個(gè)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第二步:在第一個(gè) PDF 文件中繪制頁碼。在這一步中,你可以通過調(diào)用 Spire.Pdf.Graphics.PdfMargins 類來設(shè)置 PDF 頁碼頁邊距。PdfMargins。然后,調(diào)用自定義方法 DrawPageNumber(PdfPageCollection pages, PdfMargins margin, int startNumber, int pageCount) 在第一個(gè) PDF 文件的每一頁底部添加頁碼。請(qǐng)看下面的詳細(xì)代碼:
[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 合并代碼乍一看可能很長(zhǎng),實(shí)際上,如果你不需要在合并后的 PDF 中添加頁碼,則應(yīng)避免使用第二步。然而,在很多情況下,頁碼為用戶閱讀 PDF 和打印 PDF 帶來了極大的便利。Spire.PDF for .NET既能滿足您合并PDF文件的要求,又能在合并后的PDF文件中添加頁碼。