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

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

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

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

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

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

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

/// <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文件,簡(jiǎn)單高效,但生成的PDF文件帶有水印,即使使用破解版在第一頁還是有水印,我們可以使用  iTextSharp 類庫(kù),該類庫(kù)生成的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);
          }
        }
      }
    }

四、測(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">合并生成的文件名稱</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è)試效果如下圖所示:

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

相關(guān)文章

最新評(píng)論