首页 > 其他分享 >.NET 8上进行PDF合并

.NET 8上进行PDF合并

时间:2023-12-27 14:11:42浏览次数:37  
标签:using FileStream 合并 System new pdf PDF NET

前言:在.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;
        }
    }
}
View Code

二、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);
        }

    }
}
View Code

三、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);

        }

    }
}
View Code

四、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();
        }

    }
}
View Code

 

在控制台上调用

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(); } } }

 

标签:using,FileStream,合并,System,new,pdf,PDF,NET
From: https://www.cnblogs.com/hudean/p/17930436.html

相关文章

  • Neural Networks for Game AI: A Comprehensive Overview
    1.背景介绍随着计算机游戏的不断发展和进步,游戏人工智能(AI)已经成为游戏开发中的一个重要组成部分。在过去的几十年里,游戏AI的研究和应用已经取得了显著的进展,但仍然面临着许多挑战。这篇文章将深入探讨神经网络在游戏AI中的应用和挑战,并提供一个全面的概述。神经网络是一种模仿生物......
  • AspNetCore的单元测试
    一、单元测试项目如何创建VisualStudio新建项目,项目类型选择测试。 可以看到有许多选项,都大差不差。这里选择xUnit。项目名使用要测试的项目名加上“.Tests”后缀。二、进行单元测试首先明确测试对象,通常是针对一个类型进行测试,新建Test类,类名为测试对象的类名加上“Test......
  • 人工智能大模型原理与应用实战:从RetinaNet到YOLOv4
    1.背景介绍人工智能(ArtificialIntelligence,AI)是指一种使计算机具有人类智能的科学和技术。人工智能的主要目标是让计算机能够理解自然语言、进行逻辑推理、学习自主行动、理解视觉和听觉等。人工智能的应用范围非常广泛,包括自然语言处理、计算机视觉、机器学习、深度学习、人工......
  • 人工智能大模型原理与应用实战:从UNet到Mask RCNN
    1.背景介绍人工智能(ArtificialIntelligence,AI)是一门研究如何让计算机自主地完成人类任务的学科。在过去的几十年里,人工智能主要关注于规则引擎和知识表示。然而,随着数据量的增加和计算能力的提高,深度学习(DeepLearning)成为人工智能领域的一个热门话题。深度学习是一种通过神经网......
  • 【专题】2023年中国数字金融调查报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34685原文出处:拓端数据部落公众号随着数字化转型的深入推进,新客户的增长速度已达顶峰,用户运营成为推动存量增长的关键手段。调查数据显示,相比去年,网上银行用户比例有所下降,而手机银行用户比例基本持平。阅读原文,获取专题报告合集全文,解锁文末249份......
  • 【专题】2023年中国6G产业研究报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33186原文出处:拓端数据部落公众号以5G技术的发展方向为基础,结合6G技术的理念,我们可以展望未来的发展方向。随着5G作为移动通信技术个人和企业服务的分界线的确立,未来更先进的移动通信技术必然会将目光聚焦在企业服务市场上,以获得更好的发展。阅读......
  • 讲解FCN,PSPNET,Deeplab-v3的网络结构
    图像语义分割是计算机视觉领域的重要任务之一,旨在识别和理解图像中的对象和场景,并将其划分为不同的语义类别。为了实现这一目标,深度学习技术被广泛应用于图像语义分割领域。其中,FCN、PSPNet和DeepLab-v3是三种具有代表性的网络结构,它们在图像语义分割任务中取得了显著的成果。FCN......
  • MXNet:Apache的高性能深度学习框架
    1.背景介绍MXNet是一个高性能的深度学习框架,由亚马逊开发并开源,并成为了Apache软件基金会的一个顶级项目。MXNet的核心设计思想是将深度学习模型和算法的实现与底层计算和存储分离,从而实现高性能和高效率的深度学习计算。MXNet支持多种编程语言,包括Python、C++、R等,并提供了丰富的A......
  • Neural Networks for Weather Prediction: Enhancing Accuracy with Deep Learning
    1.背景介绍气象预报是一项对于人类生活和经济发展至关重要的科学。传统的气象预报方法主要包括观测、数据处理、数值预报和预报分析等。随着计算能力和数据量的增加,人工智能技术,尤其是深度学习,在气象预报中发挥了越来越重要的作用。在这篇文章中,我们将介绍如何使用神经网络来预测气......
  • # vue 预览 pdf、word、excel
    vue预览pdf、word、excel这是之前做项目的时候涉及到的一个功能,当时做了之后就一直没有整理,其实也很简单,功能不多,只是预览,没有在线编辑的功能,所以呢,啊哈哈哈哈哈,一个插件就可以了。预览pdf预览pdf我是用的这个插件,直接运行一下命令就可以了:npminstall@vue-office/pdf......