最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET8實(shí)現(xiàn)PDF合并的示例代碼

 更新時間:2023年12月27日 15:00:26   作者:青春似雨后霓虹  
這篇文章主要為大家詳細(xì)介紹了如何使用.NET8實(shí)現(xiàn)PDF合并的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

前言

在.NET 8中使用itext7需安裝 itext7 和 itext7.bouncy-castle-fips-adapter 兩個Nuget包,或者使用Aspose.PDF、PdfSharpCore、Spire.PDF任意一個第三方包就行

對比:

第三方包是否開源是否收費(fèi)
itext7不收費(fèi),免費(fèi)使用沒有水印
PdfSharpCore不收費(fèi),免費(fèi)使用沒有水印
Spire.PDF是,可以免費(fèi)使用但有水印
Aspose.PDF是,可以免費(fèi)使用但有水印

安裝如下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>

項(xiàng)目結(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,后者必須進(jìn)行添加,否則會在運(yùn)行報錯。
        /// 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/
        //收費(fèi)
        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實(shí)現(xiàn)PDF合并的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于.NET合并PDF的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • .Net Core3.0 WEB API中使用FluentValidation驗(yàn)證(批量注入)

    .Net Core3.0 WEB API中使用FluentValidation驗(yàn)證(批量注入)

    這篇文章主要介紹了.Net Core3.0 WEB API中使用FluentValidation驗(yàn)證(批量注入),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • .NET CORE動態(tài)調(diào)用泛型方法詳解

    .NET CORE動態(tài)調(diào)用泛型方法詳解

    這篇文章主要為大家詳細(xì)介紹了.NET CORE動態(tài)調(diào)用泛型方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • .net?core如何使用Nacos注冊中心

    .net?core如何使用Nacos注冊中心

    文章主要介紹了如何在Windows本機(jī)上進(jìn)行Nacos單節(jié)點(diǎn)快速部署,并詳細(xì)描述了如何在ASP.NET Core項(xiàng)目中集成Nacos服務(wù),包括配置Nacos、創(chuàng)建服務(wù)配置文件以及在項(xiàng)目中注冊和啟用Nacos服務(wù)的步驟,感興趣的朋友一起看看吧
    2025-02-02
  • ASP.NET使用SignalR2實(shí)現(xiàn)服務(wù)器廣播

    ASP.NET使用SignalR2實(shí)現(xiàn)服務(wù)器廣播

    這篇文章介紹了ASP.NET使用SignalR2實(shí)現(xiàn)服務(wù)器廣播的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • ASP.NET中的參數(shù)與特殊類型和特性

    ASP.NET中的參數(shù)與特殊類型和特性

    這篇文章主要介紹了ASP.NET中的參數(shù)與特殊類型和特性,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • .NET反射中的類型不匹配問題的解決方案(long與Int64沖突)

    .NET反射中的類型不匹配問題的解決方案(long與Int64沖突)

    在.NET平臺的開發(fā)中,反射是一個強(qiáng)大的工具,它能夠讓開發(fā)者動態(tài)地訪問和操作對象的類型信息,然而,在實(shí)際開發(fā)過程中,尤其是當(dāng)我們在使用反射時遇到long與Int64類型不匹配的情況,往往會導(dǎo)致類型轉(zhuǎn)換錯誤,本文將深度剖析.NET反射中類型不匹配的問題
    2025-07-07
  • Asp.Net獲取網(wǎng)站截圖的實(shí)例代碼

    Asp.Net獲取網(wǎng)站截圖的實(shí)例代碼

    這篇文章介紹了Asp.Net獲取網(wǎng)站截圖的實(shí)例代碼,有需要的朋友可以參考一下
    2013-07-07
  • 一個事半功倍的c#方法 動態(tài)注冊按鈕事件

    一個事半功倍的c#方法 動態(tài)注冊按鈕事件

    前幾天在網(wǎng)上看見一個制作計算器的c#程序,其中有一個動態(tài)注冊按鈕事件,覺的很有用。于是實(shí)際操作了一哈, 確實(shí)比較好。
    2010-04-04
  • 較為全面的Asp.net提交驗(yàn)證方案分析 (上)

    較為全面的Asp.net提交驗(yàn)證方案分析 (上)

    以前在學(xué)習(xí)Asp.net時備受困擾的就是提交驗(yàn)證這塊,網(wǎng)上流行的關(guān)于圖片驗(yàn)證的教程大都存在很多問題
    2008-10-10
  • ASP.NET 2.0中預(yù)設(shè)的cookie

    ASP.NET 2.0中預(yù)設(shè)的cookie

    ASP.NET 2.0中預(yù)設(shè)的cookie...
    2006-09-09

最新評論

龙山县| 凤翔县| 渭南市| 定安县| 弥渡县| 竹北市| 大关县| 湘潭县| 加查县| 肥城市| 玉树县| 高雄县| 三亚市| 吴江市| 博罗县| 横山县| 兴和县| 永靖县| 北京市| 鄂托克前旗| 泰安市| 丹东市| 恭城| 灵宝市| 赣榆县| 原平市| 怀柔区| 聂荣县| 乌海市| 无为县| 蛟河市| 五常市| 法库县| 兴仁县| 永定县| 古田县| 莱阳市| 金昌市| 绥德县| 武平县| 南城县|