前言
在.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的资料请关注代码网其它相关文章!
发表评论