当前位置: 代码网 > it编程>编程语言>Asp.net > .NET8实现PDF合并的示例代码

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

2024年05月15日 Asp.net 我要评论
前言在.net 8中使用itext7需安装 itext7 和itext7.bouncy-castle-fips-adapter 两个nuget包,或者使用aspose.pdf、pdfsharpcore

前言

在.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;
        }
    }
}

二、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)
        {
            // 创建 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);

        }

    }
}

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

    }
}

在控制台上调用

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

以上就是.net8实现pdf合并的示例代码的详细内容,更多关于.net合并pdf的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com