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

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

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

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

    PDF文件使用了工業(yè)標準的壓縮算法,易于傳輸與儲存。它還是頁獨立的,一個PDF文件包含一個或多個“頁“,可以單獨處理各頁,特別適合多處理器系統(tǒng)的工作。PDF文件結構主要可以分為四個部分:首部、文件體、交叉引用表、尾部。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);
          }
        }
      }
    }

四、測試結果

      完整代碼如下:

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文件的詳細內容,更多關于C# 合并和拆分PDF文件的資料請關注腳本之家其它相關文章!

相關文章

  • C#實現(xiàn)讀取txt通用的方法小結

    C#實現(xiàn)讀取txt通用的方法小結

    這篇文章主要為大家詳細介紹了C#讀取txt通用的方法,兼容所有的UTF-8、Unicode(Little Endian)、BigEndianUnicode,有需要的小伙伴可以了解下
    2024-01-01
  • C# list<T>去重的實現(xiàn)

    C# list<T>去重的實現(xiàn)

    List集合在開發(fā)過程中很常見,經(jīng)常我們要對該集合進行一系列操作,本文主要介紹了C# list<T>去重的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • c#循環(huán)左移字符示例

    c#循環(huán)左移字符示例

    這篇文章主要介紹了c#循環(huán)左移字符示例,需要的朋友可以參考下
    2014-04-04
  • C#實現(xiàn)集合轉換成json格式數(shù)據(jù)的方法

    C#實現(xiàn)集合轉換成json格式數(shù)據(jù)的方法

    這篇文章主要介紹了C#實現(xiàn)集合轉換成json格式數(shù)據(jù)的方法,涉及C#針對dataTable、Enumerable及Json格式數(shù)據(jù)的遍歷及轉換操作相關技巧,需要的朋友可以參考下
    2016-07-07
  • C#編寫的windows計算器的實例代碼

    C#編寫的windows計算器的實例代碼

    這篇文章介紹了C#編寫windows計算器的代碼,有需要的朋友可以參考一下
    2013-07-07
  • C# WCF簡單入門圖文教程(VS2010版)

    C# WCF簡單入門圖文教程(VS2010版)

    這篇文章主要介紹了WCF簡單入門圖文教程,版本是VS2010版,幫助大家輕松學習了解DataContract、ServiceContract等特性,感興趣的小伙伴們可以參考一下
    2016-03-03
  • C#自定義控件添加右鍵菜單的方法

    C#自定義控件添加右鍵菜單的方法

    這篇文章主要介紹了C#自定義控件添加右鍵菜單的方法,本文用到control控件,專門自定義右鍵菜單,下面小編給大家整理下,有需要的小伙伴可以來參考下
    2015-08-08
  • C#使用udp如何實現(xiàn)消息的接收和發(fā)送

    C#使用udp如何實現(xiàn)消息的接收和發(fā)送

    這篇文章主要介紹了C#使用udp如何實現(xiàn)消息的接收和發(fā)送問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 用C#繪制九宮格形式的圖片

    用C#繪制九宮格形式的圖片

    大家好,本篇文章主要講的是用C#繪制九宮格形式的圖片,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C#中類成員的定義的修飾關鍵詞知識點總結

    C#中類成員的定義的修飾關鍵詞知識點總結

    在本篇文章里小編給大家整理了關于C#中類成員的定義的修飾關鍵詞知識點內容,有需要的朋友們可以參考下。
    2020-02-02

最新評論