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