目录

前言

在.NET 8中使用itext7需安装 itext7 和 itext7.bouncy-castle-fips-adapter 两个Nuget包,或者使用Aspose.PDF、PdfSharpCore、Spire.PDF任意一个第三方包就行

对比:

第三方包是否开源是否收费
itext7不收费,免费使用没有水印
PdfSharpCore不收费,免费使用没有水印
Spire.PDF是,可以免费使用但有水印
Aspose.PDF是,可以免费使用但有水印

安装如下Nuget的包

                      

项目结构示意图

一、itext7

using iText.Kernel.Pdf;using iText.Kernel.Utils;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace PdfTest.PdfHelpers{    public class iText7Helper    {        // https://blog.csdn.net/m0_47619208/article/details/130725907        ///         /// 合并多个PDF文档        /// 添加NuGet包引用:添加itext7和itext7.bouncy-castle-adapter,后者必须进行添加,否则会在运行报错。        /// NuGet包为iText7,该库满足跨平台需求        /// https://itextpdf.com/        /// https://itextpdf.com/itext-suite-net-c        ///         ///         ///         ///         public static Task MergePdf(string[] fileList, string outFile)        {            using PdfWriter writer = new(outFile);            using PdfDocument pdf = new(writer);            PdfMerger merger = new(pdf);            for (int i = 0; i < fileList.Length; i++)            {                PdfReader reader = new(fileList[i]);                using PdfDocument pdfDocument = new(reader);                merger.Merge(pdfDocument, 1, pdfDocument.GetNumberOfPages());            }            merger.Close();            return Task.CompletedTask;        }    }}

二、PdfSharpCore

using PdfSharpCore.Pdf;using PdfSharpCore.Pdf.IO;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace PdfTest.PdfHelpers{    public class PdfSharpTool    {        // https://github.com/ststeiger/PdfSharpCore                public static void PdfSharpCoreMerge(string[] files, string outFile)        {            using PdfDocument outPdfFile = new PdfDocument();            foreach (var file in files)            {                using PdfDocument pdfFile = PdfReader.Open(file, PdfDocumentOpenMode.Import);                foreach (var pdfPage in pdfFile.Pages)                {                    outPdfFile.AddPage(pdfPage);                }            }            outPdfFile.Save(outFile);        }    }}

三、Aspose.PDF

using Aspose.Pdf.Facades;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace PdfTest.PdfHelpers{    internal class AsposePdfHelper    {        //https://blog.aspose.com/zh/pdf/merge-multiple-pdf-files-in-csharp-net/        //收费        public static void Merge(string[] filesArray, string outFile)        {            // 创建 PdfFileEditor 对象            PdfFileEditor pdfEditor = new PdfFileEditor();            // 合并文件            //pdfEditor.Concatenate("file1.pdf", "file2.pdf", "merged.pdf");            // 合并文件            pdfEditor.Concatenate(filesArray, outFile);        }        public static void MergeStream(FileStream[] streamArray, string outFile)        {            // 创建 PdfFileEditor 对象            PdfFileEditor pdfEditor = new PdfFileEditor();            // 输出流            //FileStream outputStream = new FileStream("Merged.pdf", FileMode.Create);            FileStream outputStream = new FileStream(outFile, FileMode.Create);            //// 输入流            //FileStream inputStream1 = new FileStream("file1.pdf", FileMode.Open);            //FileStream inputStream2 = new FileStream("file2.pdf", FileMode.Open);            //// 合并文件            //pdfEditor.Concatenate(inputStream1, inputStream2, outputStream);            // 创建流数组             //FileStream[] streamArray = new FileStream[3];            //streamArray[0] = new FileStream("file1.pdf", FileMode.Open);            //streamArray[1] = new FileStream("file2.pdf", FileMode.Open);            //streamArray[2] = new FileStream("file3.pdf", FileMode.Open);            // 合并文件            pdfEditor.Concatenate(streamArray, outputStream);        }    }}

四、Spire.PDF

using Spire.Pdf;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace PdfTest.PdfHelpers{    public class SpirePdfHelper    {        //https://www.e-iceblue.com/Introduce/pdf-for-net-introduce.html        //https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Convert-HTML-to-PDF-Customize-HTML-to-PDF-Conversion-by-Yourself.html        //https://www.cnblogs.com/dongweian/p/14305928.html        //有水印        ///         /// 合并PDF文件        ///         /// 待合并文件列表        /// 合并生成的文件名称        public static void SpirePdfMerge(string[] files, string outFile)        {            var doc = PdfDocument.MergeFiles(files);            doc.Save(outFile, FileFormat.PDF);        }        ///         /// 按每页拆分PDF文件        ///         /// 待拆分PDF文件名称        public static void SpirePdfSplit(string inFile)        {            var doc = new PdfDocument(inFile);            doc.Split("SpirePdf_拆分-{0}.pdf");            doc.Close();        }    }}

在控制台上调用

using PdfTest.PdfHelpers;namespace PdfTest{    internal class Program    {        static void Main(string[] args)        {        // 文件数组索引在前面的后,合并后的PDF,页面也在前面            string [] files = Directory.GetFiles("Merge");            #region Spire.Pdf            //SpirePdfHelper.SpirePdfMerge(files, "SpirePdfMerge.pdf");            //Console.WriteLine("使用 Spire.Pdf 合并文件完成...");            #endregion            #region PdfSharpCore            //PdfSharpTool.PdfSharpCoreMerge(files, "PdfSharpCoreMerge.pdf");            //Console.WriteLine("使用 PdfSharpCore 合并文件完成...");            #endregion            #region iText7            //iText7Helper.MergePdf(files, "iText7PdfMerge.pdf");            //Console.WriteLine("使用 iText7 合并文件完成...");            #endregion            #region AsposePdf            AsposePdfHelper.Merge(files, "AsposePdfMerge.pdf");            Console.WriteLine("使用 AsposePdf 合并文件完成...");            #endregion            Console.ReadKey();        }    }}

以上就是.NET8实现PDF合并的示例代码的详细内容,更多关于.NET合并PDF的资料请关注脚本之家其它相关文章!