设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 699|回复: 2

.NET8实现PDF合并的示例代码

[复制链接]

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:26
  • 打卡月天数:1
  • 打卡总奖励:304
  • 最近打卡:2025-12-09 23:14:41
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
376
主题
354
精华
0
金钱
1436
积分
786
注册时间
2023-2-10
最后登录
2025-12-9

发表于 2024-2-25 09:00:50 | 显示全部楼层 |阅读模式
目录
  • 前言
  • 一、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的包

  1. <ItemGroup>
  2. <PackageReference Include="Aspose.PDF" Version="23.11.1" />
  3. <PackageReference Include="itext7" Version="8.0.2" />
  4. <PackageReference Include="itext7.bouncy-castle-fips-adapter" Version="8.0.2" />
  5. <PackageReference Include="PdfSharpCore" Version="1.3.62" />
  6. <PackageReference Include="Spire.PDF" Version="9.12.0" />
  7. </ItemGroup>
复制代码

项目结构示意图

1.png

一、itext7

  1. using iText.Kernel.Pdf;
  2. using iText.Kernel.Utils;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace PdfTest.PdfHelpers
  9. {
  10. public class iText7Helper
  11. {
  12. // https://blog.csdn.net/m0_47619208/article/details/130725907
  13. /// <summary>
  14. /// 合并多个PDF文档
  15. /// 添加NuGet包引用:添加itext7和itext7.bouncy-castle-adapter,后者必须进行添加,否则会在运行报错。
  16. /// NuGet包为iText7,该库满足跨平台需求
  17. /// https://itextpdf.com/
  18. /// https://itextpdf.com/itext-suite-net-c
  19. /// </summary>
  20. /// <param name="fileList"></param>
  21. /// <param name="outFile"></param>
  22. /// <returns></returns>
  23. public static Task MergePdf(string[] fileList, string outFile)
  24. {
  25. using PdfWriter writer = new(outFile);
  26. using PdfDocument pdf = new(writer);
  27. PdfMerger merger = new(pdf);
  28. for (int i = 0; i < fileList.Length; i++)
  29. {
  30. PdfReader reader = new(fileList[i]);
  31. using PdfDocument pdfDocument = new(reader);
  32. merger.Merge(pdfDocument, 1, pdfDocument.GetNumberOfPages());
  33. }
  34. merger.Close();
  35. return Task.CompletedTask;
  36. }
  37. }
  38. }
复制代码

二、PdfSharpCore

  1. using PdfSharpCore.Pdf;
  2. using PdfSharpCore.Pdf.IO;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace PdfTest.PdfHelpers
  9. {
  10. public class PdfSharpTool
  11. {
  12. // https://github.com/ststeiger/PdfSharpCore
  13. public static void PdfSharpCoreMerge(string[] files, string outFile)
  14. {
  15. using PdfDocument outPdfFile = new PdfDocument();
  16. foreach (var file in files)
  17. {
  18. using PdfDocument pdfFile = PdfReader.Open(file, PdfDocumentOpenMode.Import);
  19. foreach (var pdfPage in pdfFile.Pages)
  20. {
  21. outPdfFile.AddPage(pdfPage);
  22. }
  23. }
  24. outPdfFile.Save(outFile);
  25. }
  26. }
  27. }
复制代码

三、Aspose.PDF

  1. using Aspose.Pdf.Facades;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace PdfTest.PdfHelpers
  8. {
  9. internal class AsposePdfHelper
  10. {
  11. //https://blog.aspose.com/zh/pdf/merge-multiple-pdf-files-in-csharp-net/
  12. //收费
  13. public static void Merge(string[] filesArray, string outFile)
  14. {
  15. // 创建 PdfFileEditor 对象
  16. PdfFileEditor pdfEditor = new PdfFileEditor();
  17. // 合并文件
  18. //pdfEditor.Concatenate("file1.pdf", "file2.pdf", "merged.pdf");
  19. // 合并文件
  20. pdfEditor.Concatenate(filesArray, outFile);
  21. }
  22. public static void MergeStream(FileStream[] streamArray, string outFile)
  23. {
  24. // 创建 PdfFileEditor 对象
  25. PdfFileEditor pdfEditor = new PdfFileEditor();
  26. // 输出流
  27. //FileStream outputStream = new FileStream("Merged.pdf", FileMode.Create);
  28. FileStream outputStream = new FileStream(outFile, FileMode.Create);
  29. //// 输入流
  30. //FileStream inputStream1 = new FileStream("file1.pdf", FileMode.Open);
  31. //FileStream inputStream2 = new FileStream("file2.pdf", FileMode.Open);
  32. //// 合并文件
  33. //pdfEditor.Concatenate(inputStream1, inputStream2, outputStream);
  34. // 创建流数组
  35. //FileStream[] streamArray = new FileStream[3];
  36. //streamArray[0] = new FileStream("file1.pdf", FileMode.Open);
  37. //streamArray[1] = new FileStream("file2.pdf", FileMode.Open);
  38. //streamArray[2] = new FileStream("file3.pdf", FileMode.Open);
  39. // 合并文件
  40. pdfEditor.Concatenate(streamArray, outputStream);
  41. }
  42. }
  43. }
复制代码

四、Spire.PDF

  1. using Spire.Pdf;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace PdfTest.PdfHelpers
  8. {
  9. public class SpirePdfHelper
  10. {
  11. //https://www.e-iceblue.com/Introduce/pdf-for-net-introduce.html
  12. //https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Convert-HTML-to-PDF-Customize-HTML-to-PDF-Conversion-by-Yourself.html
  13. //https://www.cnblogs.com/dongweian/p/14305928.html
  14. //有水印
  15. /// <summary>
  16. /// 合并PDF文件
  17. /// </summary>
  18. /// <param name="files">待合并文件列表</param>
  19. /// <param name="outFile">合并生成的文件名称</param>
  20. public static void SpirePdfMerge(string[] files, string outFile)
  21. {
  22. var doc = PdfDocument.MergeFiles(files);
  23. doc.Save(outFile, FileFormat.PDF);
  24. }
  25. /// <summary>
  26. /// 按每页拆分PDF文件
  27. /// </summary>
  28. /// <param name="inFile">待拆分PDF文件名称</param>
  29. public static void SpirePdfSplit(string inFile)
  30. {
  31. var doc = new PdfDocument(inFile);
  32. doc.Split("SpirePdf_拆分-{0}.pdf");
  33. doc.Close();
  34. }
  35. }
  36. }
复制代码

在控制台上调用

  1. using PdfTest.PdfHelpers;
  2. namespace PdfTest
  3. {
  4. internal class Program
  5. {
  6. static void Main(string[] args)
  7. {
  8.        // 文件数组索引在前面的后,合并后的PDF,页面也在前面
  9. string [] files = Directory.GetFiles("Merge");
  10. #region Spire.Pdf
  11. //SpirePdfHelper.SpirePdfMerge(files, "SpirePdfMerge.pdf");
  12. //Console.WriteLine("使用 Spire.Pdf 合并文件完成...");
  13. #endregion
  14. #region PdfSharpCore
  15. //PdfSharpTool.PdfSharpCoreMerge(files, "PdfSharpCoreMerge.pdf");
  16. //Console.WriteLine("使用 PdfSharpCore 合并文件完成...");
  17. #endregion
  18. #region iText7
  19. //iText7Helper.MergePdf(files, "iText7PdfMerge.pdf");
  20. //Console.WriteLine("使用 iText7 合并文件完成...");
  21. #endregion
  22. #region AsposePdf
  23. AsposePdfHelper.Merge(files, "AsposePdfMerge.pdf");
  24. Console.WriteLine("使用 AsposePdf 合并文件完成...");
  25. #endregion
  26. Console.ReadKey();
  27. }
  28. }
  29. }
复制代码

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
21
积分
22
注册时间
2022-12-27
最后登录
2022-12-27

发表于 2024-10-31 02:50:02 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
19
积分
18
注册时间
2022-12-27
最后登录
2022-12-27

发表于 2025-11-30 01:32:08 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表