欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# 如何合并和拆分PDF文件

 更新時間:2021年01月21日 08:39:34   作者:Dwaynerbing  
這篇文章主要介紹了C# 如何合并和拆分PDF文件,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

一、合并和拆分PDF文件的方式

    PDF文件使用了工業(yè)標準的壓縮算法,易于傳輸與儲存。它還是頁獨立的,一個PDF文件包含一個或多個“頁“,可以單獨處理各頁,特別適合多處理器系統(tǒng)的工作。PDF文件結(jié)構(gòu)主要可以分為四個部分:首部、文件體、交叉引用表、尾部。PDF操作類庫非常多,如下圖所示,常用的類庫有:Spire.Pdf、iTextSharp。

二、使用 Spire.Pdf 合并和拆分PDF文件

      使用 Nuget 添加Spire.Pdf 類庫,然后添加如下代碼:

/// <summary>
    /// 合并PDF文件
    /// </summary>
    /// <param name="files">待合并文件列表</param>
    /// <param name="outFile">合并生成的文件名稱</param>
    static void SpirePdfMerge(string[] files, string outFile)
    {
      var doc = Spire.Pdf.PdfDocument.MergeFiles(files);
      doc.Save(outFile, FileFormat.PDF);
    }

    /// <summary>
    /// 按每頁拆分PDF文件
    /// </summary>
    /// <param name="inFile">待拆分PDF文件名稱</param>
    static void SpirePdfSplit(string inFile)
    {
      var doc = new Spire.Pdf.PdfDocument(inFile);
      doc.Split("SpirePdf_拆分-{0}.pdf");
      doc.Close();
    }

三、使用 iTextSharp 合并和拆分PDF文件

      使用 Spire.Pdf 操作PDF文件,簡單高效,但生成的PDF文件帶有水印,即使使用破解版在第一頁還是有水印,我們可以使用  iTextSharp 類庫,該類庫生成的PDF無水印,具體使用如下:

/// <summary>
    /// 合并PDF文件
    /// </summary>
    /// <param name="inFiles">待合并文件列表</param>
    /// <param name="outFile">合并生成的文件名稱</param>
    static void iTextSharpPdfMerge(List<String> inFiles, String outFile)
    {
      using (var stream = new FileStream(outFile, FileMode.Create))
      {
        using (var doc = new Document())
        {
          using (var pdf = new PdfCopy(doc, stream))
          {
            doc.Open();
            inFiles.ForEach(file =>
            {
              var reader = new PdfReader(file);
              for (int i = 0; i < reader.NumberOfPages; i++)
              {
                var page = pdf.GetImportedPage(reader, i + 1);
                pdf.AddPage(page);
              }
              pdf.FreeReader(reader);
              reader.Close();
            });
          }
        }
      }
    }

    /// <summary>
    /// 按每頁拆分PDF文件
    /// </summary>
    /// <param name="inFile">待拆分PDF文件名稱</param>
    static void iTextSharpPdfSplit(string inFile)
    {
      using (var reader = new PdfReader(inFile))
      {
        // 注意起始頁是從1開始的
        for (int i = 1; i <= new PdfReader(inFile).NumberOfPages; i++)
        {
          using (var sourceDocument = new Document(reader.GetPageSizeWithRotation(i)))
          {
            var pdfCopyProvider = new PdfCopy(sourceDocument, new System.IO.FileStream($"iTextSharp_拆分_{i}.pdf", System.IO.FileMode.Create));
            sourceDocument.Open();
            var importedPage = pdfCopyProvider.GetImportedPage(reader, i);
            pdfCopyProvider.AddPage(importedPage);
          }
        }
      }
    }

四、測試結(jié)果

      完整代碼如下:

using Spire.Pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Mime;
using System.Text;
using System.Threading.Tasks;
using iTextSharp.text;
using iTextSharp.text.pdf;
using PdfDocument = iTextSharp.text.pdf.PdfDocument;

namespace Pdf
{
  class Program
  {
    static void Main(string[] args)
    {
      try
      {
        SpirePdfMerge(Directory.GetFiles("Merge"), "SpirePdfMerge.pdf");
        Console.WriteLine("使用 Spire.Pdf 合并文件完成...");

        SpirePdfSplit($"{AppDomain.CurrentDomain.BaseDirectory}Split\\1.pdf");
        Console.WriteLine("使用 Spire.Pdf 拆分文件完成...");

        iTextSharpPdfMerge(Directory.GetFiles("Merge").ToList(), "iTextSharpPdfMerge.pdf");
        Console.WriteLine("使用 iTextSharp 合并文件完成...");

        iTextSharpPdfSplit($"{AppDomain.CurrentDomain.BaseDirectory}Split\\2.pdf");
        Console.WriteLine("使用 iTextSharp 拆分文件完成...");

      }
      catch (Exception e)
      {
        Console.WriteLine(e);
      }
      finally
      {
        Console.ReadKey();
      }
    }

    #region Spire.Pdf

    /// <summary>
    /// 合并PDF文件
    /// </summary>
    /// <param name="files">待合并文件列表</param>
    /// <param name="outFile">合并生成的文件名稱</param>
    static void SpirePdfMerge(string[] files, string outFile)
    {
      var doc = Spire.Pdf.PdfDocument.MergeFiles(files);
      doc.Save(outFile, FileFormat.PDF);
    }

    /// <summary>
    /// 按每頁拆分PDF文件
    /// </summary>
    /// <param name="inFile">待拆分PDF文件名稱</param>
    static void SpirePdfSplit(string inFile)
    {
      var doc = new Spire.Pdf.PdfDocument(inFile);
      doc.Split("SpirePdf_拆分-{0}.pdf");
      doc.Close();
    }

    #endregion

    #region iTextSharp.text.pdf

    /// <summary>
    /// 合并PDF文件
    /// </summary>
    /// <param name="inFiles">待合并文件列表</param>
    /// <param name="outFile">合并生成的文件名稱</param>
    static void iTextSharpPdfMerge(List<String> inFiles, String outFile)
    {
      using (var stream = new FileStream(outFile, FileMode.Create))
      {
        using (var doc = new Document())
        {
          using (var pdf = new PdfCopy(doc, stream))
          {
            doc.Open();
            inFiles.ForEach(file =>
            {
              var reader = new PdfReader(file);
              for (int i = 0; i < reader.NumberOfPages; i++)
              {
                var page = pdf.GetImportedPage(reader, i + 1);
                pdf.AddPage(page);
              }
              pdf.FreeReader(reader);
              reader.Close();
            });
          }
        }
      }
    }

    /// <summary>
    /// 按每頁拆分PDF文件
    /// </summary>
    /// <param name="inFile">待拆分PDF文件名稱</param>
    static void iTextSharpPdfSplit(string inFile)
    {
      using (var reader = new PdfReader(inFile))
      {
        // 注意起始頁是從1開始的
        for (int i = 1; i <= new PdfReader(inFile).NumberOfPages; i++)
        {
          using (var sourceDocument = new Document(reader.GetPageSizeWithRotation(i)))
          {
            var pdfCopyProvider = new PdfCopy(sourceDocument, new System.IO.FileStream($"iTextSharp_拆分_{i}.pdf", System.IO.FileMode.Create));
            sourceDocument.Open();
            var importedPage = pdfCopyProvider.GetImportedPage(reader, i);
            pdfCopyProvider.AddPage(importedPage);
          }
        }
      }
    }

    #endregion

  }
}

      測試效果如下圖所示:

以上就是C# 如何合并和拆分PDF文件的詳細內(nèi)容,更多關(guān)于C# 合并和拆分PDF文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#將字節(jié)數(shù)組轉(zhuǎn)換成數(shù)字的方法

    C#將字節(jié)數(shù)組轉(zhuǎn)換成數(shù)字的方法

    這篇文章主要介紹了C#將字節(jié)數(shù)組轉(zhuǎn)換成數(shù)字的方法,涉及C#類型轉(zhuǎn)換的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • c#中xml文檔注釋編譯dll引用到其它項目示例

    c#中xml文檔注釋編譯dll引用到其它項目示例

    這篇文章主要介紹了c#中xml文檔注釋編譯dll引用到其它項目示例,需要的朋友可以參考下
    2014-02-02
  • C#實現(xiàn)文章添加內(nèi)鏈的方法

    C#實現(xiàn)文章添加內(nèi)鏈的方法

    文章添加內(nèi)鏈有利于提高讀者閱讀體驗,有利于搜索引擎優(yōu)化,提升頁面瀏覽量,下面小編通過兩種方法說下用c#實現(xiàn)文章添加內(nèi)鏈的方法,一起看看吧
    2018-08-08
  • WPF InkCanvas繪制矩形和橢圓

    WPF InkCanvas繪制矩形和橢圓

    這篇文章主要為大家詳細介紹了WPF InkCanvas繪制矩形和橢圓,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C#中閉包概念講解

    C#中閉包概念講解

    這篇文章主要介紹了C#中閉包概念講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 利用C#實現(xiàn)合并Word文檔功能

    利用C#實現(xiàn)合并Word文檔功能

    合并Word文檔可以快速地將多份編輯好的文檔合在一起,避免復制粘貼時遺漏內(nèi)容,以及耗費不必要的時間。本文將分為以下兩部分介紹如何通過C#合并Word文檔,并附上VB.NET代碼供大家參考,希望對大家有所幫助
    2022-12-12
  • C#如何遍歷Dictionary

    C#如何遍歷Dictionary

    這篇文章主要為大家詳細介紹了C#遍歷Dictionary的方法,.NET中的Dictionary是鍵/值對的集合,使用起來比較方便,Dictionary也可以用KeyValuePair來迭代遍歷,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C#使用dir命令實現(xiàn)文件搜索功能示例

    C#使用dir命令實現(xiàn)文件搜索功能示例

    這篇文章主要介紹了C#使用dir命令實現(xiàn)文件搜索功能,結(jié)合具體實例形式分析了C#調(diào)用與使用cmd命令相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • c#調(diào)用c++的DLL的實現(xiàn)方法

    c#調(diào)用c++的DLL的實現(xiàn)方法

    本文主要介紹了c#調(diào)用c++的DLL的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C#實現(xiàn)MQTT服務端與客戶端通訊功能

    C#實現(xiàn)MQTT服務端與客戶端通訊功能

    這篇文章介紹了C#實現(xiàn)MQTT服務端與客戶端通訊的功能,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論