.NET8實現(xiàn)PDF合并的示例代碼
更新時間:2023年12月27日 15:00:26 作者:青春似雨后霓虹
這篇文章主要為大家詳細介紹了如何使用.NET8實現(xiàn)PDF合并的效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習一下
前言
在.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>
項目結(jié)構(gòu)示意圖
一、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) { // 創(chuàng)建 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) { // 創(chuàng)建 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); // 創(chuàng)建流數(shù)組 //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(); } } }
在控制臺上調(diào)用
using PdfTest.PdfHelpers; namespace PdfTest { internal class Program { static void Main(string[] args) { // 文件數(shù)組索引在前面的后,合并后的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實現(xiàn)PDF合并的示例代碼的詳細內(nèi)容,更多關(guān)于.NET合并PDF的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#圖片截取壓縮(百分比壓縮/大小壓縮)實現(xiàn)代碼
為了娛樂寫了個截取圖片和壓縮圖片你的小工具:按照百分比壓縮/制定大小壓縮等等,感興趣的朋友可以了解下啊,希望本文對你學(xué)些c#圖片知識有所幫助2013-01-01淺談ASP.NET MVC 防止跨站請求偽造(CSRF)攻擊的實現(xiàn)方法
下面小編就為大家分享一篇淺談ASP.NET MVC 防止跨站請求偽造(CSRF)攻擊的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01.net任務(wù)調(diào)度框架FluentScheduler簡介
這篇文章介紹了.net任務(wù)調(diào)度框架FluentScheduler,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07