最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

      使用 Nuget 添加Spire.Pdf 類(lèi)庫(kù),然后添加如下代碼:

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

    /// <summary>
    /// 按每頁(yè)拆分PDF文件
    /// </summary>
    /// <param name="inFile">待拆分PDF文件名稱(chēng)</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文件,簡(jiǎn)單高效,但生成的PDF文件帶有水印,即使使用破解版在第一頁(yè)還是有水印,我們可以使用  iTextSharp 類(lèi)庫(kù),該類(lèi)庫(kù)生成的PDF無(wú)水印,具體使用如下:

/// <summary>
    /// 合并PDF文件
    /// </summary>
    /// <param name="inFiles">待合并文件列表</param>
    /// <param name="outFile">合并生成的文件名稱(chēng)</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>
    /// 按每頁(yè)拆分PDF文件
    /// </summary>
    /// <param name="inFile">待拆分PDF文件名稱(chēng)</param>
    static void iTextSharpPdfSplit(string inFile)
    {
      using (var reader = new PdfReader(inFile))
      {
        // 注意起始頁(yè)是從1開(kāi)始的
        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);
          }
        }
      }
    }

四、測(cè)試結(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">合并生成的文件名稱(chēng)</param>
    static void SpirePdfMerge(string[] files, string outFile)
    {
      var doc = Spire.Pdf.PdfDocument.MergeFiles(files);
      doc.Save(outFile, FileFormat.PDF);
    }

    /// <summary>
    /// 按每頁(yè)拆分PDF文件
    /// </summary>
    /// <param name="inFile">待拆分PDF文件名稱(chēng)</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">合并生成的文件名稱(chēng)</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>
    /// 按每頁(yè)拆分PDF文件
    /// </summary>
    /// <param name="inFile">待拆分PDF文件名稱(chēng)</param>
    static void iTextSharpPdfSplit(string inFile)
    {
      using (var reader = new PdfReader(inFile))
      {
        // 注意起始頁(yè)是從1開(kāi)始的
        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è)試效果如下圖所示:

以上就是C# 如何合并和拆分PDF文件的詳細(xì)內(nèi)容,更多關(guān)于C# 合并和拆分PDF文件的資料請(qǐng)關(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#類(lèi)型轉(zhuǎn)換的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • c#中xml文檔注釋編譯dll引用到其它項(xiàng)目示例

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

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

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

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

    WPF InkCanvas繪制矩形和橢圓

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

    C#中閉包概念講解

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

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

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

    C#如何遍歷Dictionary

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

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

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

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

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

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

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

最新評(píng)論

湖北省| 禹城市| 江源县| 蓬安县| 云和县| 福清市| 莱阳市| 满洲里市| 五大连池市| 平定县| 河北省| 玉树县| 巴里| 广宗县| 大冶市| 枣阳市| 康保县| 岑溪市| 石楼县| 南丰县| 平乡县| 齐齐哈尔市| 大石桥市| 固镇县| 阿克| 长葛市| 澎湖县| 抚远县| 周口市| 洞头县| 于田县| 荔浦县| 合川市| 乐平市| 通州市| 瓮安县| 百色市| 漳平市| 克东县| 延津县| 廊坊市|