
离线 TA的专栏
- 打卡等级:即来则安
- 打卡总天数:26
- 打卡月天数:1
- 打卡总奖励:304
- 最近打卡:2025-12-09 23:14:41
|
目录- 前言
- 一、itext7
- 二、PdfSharpCore
- 三、Aspose.PDF
- 四、Spire.PDF
前言
在.NET 8中使用itext7需安装 itext7 和 itext7.bouncy-castle-fips-adapter 两个Nuget包,或者使用Aspose.PDF、PdfSharpCore、Spire.PDF任意一个第三方包就行
对比:
| 第三方包 | 是否开源 | 是否收费 | | itext7 | 是 | 不收费,免费使用没有水印 | | PdfSharpCore | 是 | 不收费,免费使用没有水印 | | Spire.PDF | 否 | 是,可以免费使用但有水印 | | Aspose.PDF | 否 | 是,可以免费使用但有水印 |
安装如下Nuget的包
- <ItemGroup>
- <PackageReference Include="Aspose.PDF" Version="23.11.1" />
- <PackageReference Include="itext7" Version="8.0.2" />
- <PackageReference Include="itext7.bouncy-castle-fips-adapter" Version="8.0.2" />
- <PackageReference Include="PdfSharpCore" Version="1.3.62" />
- <PackageReference Include="Spire.PDF" Version="9.12.0" />
- </ItemGroup>
复制代码
项目结构示意图
一、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
- /// <summary>
- /// 合并多个PDF文档
- /// 添加NuGet包引用:添加itext7和itext7.bouncy-castle-adapter,后者必须进行添加,否则会在运行报错。
- /// NuGet包为iText7,该库满足跨平台需求
- /// https://itextpdf.com/
- /// https://itextpdf.com/itext-suite-net-c
- /// </summary>
- /// <param name="fileList"></param>
- /// <param name="outFile"></param>
- /// <returns></returns>
- 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
- //有水印
-
- /// <summary>
- /// 合并PDF文件
- /// </summary>
- /// <param name="files">待合并文件列表</param>
- /// <param name="outFile">合并生成的文件名称</param>
- public static void SpirePdfMerge(string[] files, string outFile)
- {
- var doc = PdfDocument.MergeFiles(files);
- doc.Save(outFile, FileFormat.PDF);
- }
-
- /// <summary>
- /// 按每页拆分PDF文件
- /// </summary>
- /// <param name="inFile">待拆分PDF文件名称</param>
- 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的资料请关注晓枫资讯其它相关文章! 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|