经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
.NET 8上进行PDF合并
来源:cnblogs  作者:青春似雨后霓虹  时间:2023/12/27 14:09:01  对本文有异议

前言:在.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>

项目结构示意图

一、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. }
View Code

二、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.  
  14. public static void PdfSharpCoreMerge(string[] files, string outFile)
  15. {
  16. using PdfDocument outPdfFile = new PdfDocument();
  17. foreach (var file in files)
  18. {
  19. using PdfDocument pdfFile = PdfReader.Open(file, PdfDocumentOpenMode.Import);
  20. foreach (var pdfPage in pdfFile.Pages)
  21. {
  22. outPdfFile.AddPage(pdfPage);
  23. }
  24. }
  25. outPdfFile.Save(outFile);
  26. }
  27. }
  28. }
View Code

三、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. }
View Code

四、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.  
  16. /// <summary>
  17. /// 合并PDF文件
  18. /// </summary>
  19. /// <param name="files">待合并文件列表</param>
  20. /// <param name="outFile">合并生成的文件名称</param>
  21. public static void SpirePdfMerge(string[] files, string outFile)
  22. {
  23. var doc = PdfDocument.MergeFiles(files);
  24. doc.Save(outFile, FileFormat.PDF);
  25. }
  26. /// <summary>
  27. /// 按每页拆分PDF文件
  28. /// </summary>
  29. /// <param name="inFile">待拆分PDF文件名称</param>
  30. public static void SpirePdfSplit(string inFile)
  31. {
  32. var doc = new PdfDocument(inFile);
  33. doc.Split("SpirePdf_拆分-{0}.pdf");
  34. doc.Close();
  35. }
  36. }
  37. }
View Code

 

在控制台上调用

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

 

原文链接:https://www.cnblogs.com/hudean/p/17930436.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号