前言
在.NET 8中使用itext7需安装 itext7 和 itext7.bouncy-castle-fips-adapter 两个Nuget包,或者使用Aspose.PDF、PdfSharpCore、Spire.PDF任意一个第三方包就行
对比:
第三方包 | 是否开源 | 是否收费 |
itext7 | 是 | 不收费,免费使用没有水印 |
PdfSharpCore | 是 | 不收费,免费使用没有水印 |
Spire.PDF | 否 | 是,可以免费使用但有水印 |
Aspose.PDF | 否 | 是,可以免费使用但有水印 |
安装如下Nuget的包
1 |
项目结构示意图
一、itext7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 { /// <summary> /// 合并多个PDF文档 /// 添加NuGet包引用:添加itext7和itext7.bouncy-castle-adapter,后者必须进行添加,否则会在运行报错。 /// NuGet包为iText7,该库满足跨平台需求 /// </summary> /// /// /// 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 |
二、PdfSharpCore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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 { 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 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 { //收费 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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 { //有水印 /// <summary> /// 合并PDF文件 /// </summary> /// 待合并文件列表 /// 合并生成的文件名称 public static void SpirePdfMerge( string [] files, string outFile) { var doc = PdfDocument.MergeFiles(files); doc.Save(outFile, FileFormat.PDF); } /// <summary> /// 按每页拆分PDF文件 /// </summary> /// 待拆分PDF文件名称 public static void SpirePdfSplit( string inFile) { var doc = new PdfDocument(inFile); doc.Split( "SpirePdf_拆分-{0}.pdf" ); doc.Close(); } } } |
在控制台上调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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的资料请关注IT俱乐部其它相关文章!