C#使用iText7将多个PDF文档合并为单个文档

使用HtmlAgilityPack抓取并分析网页内容,然后再调用PuppeteerSharp将网页生成PDF文件,最终的成果如下图所示,得到将近120个pdf文档。能看,但是不方便,需要逐个打开文档才能看到所需的内容,最好能将这些文档合并成单个文档,便于查看与保存。

  百度"C# 合并pdf文档",最终决定使用IText7,其GitHub主页介绍特点时就提到支持合并PDF文件,如下图所示:

  新建Winform项目,在Nuget包管理器中搜索并安装iText7,如下图所示。注意这里与iText相关的包有很多个,最初测试时错装了iTextSharp,关键类的名字和用法都差不多,直到编译和调试时才发现包装错了。

合并PDF文档最关键的类是PdfDocument和PdfMerger,前者用于打开PDF文档,后者则用于将多个文档合并到指定文档,关键代码如下所示,参照自iText7的GitHub主页示例(参考文献)。

csharp 复制代码
private void button2_Click(object sender, EventArgs e)
{
    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(txtOutputFileName.Text));
    PdfMerger merger = new PdfMerger(pdfDoc);
    merger.SetCloseSourceDocuments(true);

    List<PdfDocument> pdfFiles = GetSourceDocuments();

    foreach (PdfDocument doc in pdfFiles)
    {
        merger.Merge(doc, 1, doc.GetNumberOfPages());
    }

    pdfDoc.Close();

    foreach(PdfDocument doc in pdfFiles)
    {
        doc.Close();
    }
}

private List<PdfDocument> GetSourceDocuments()
{
    List<PdfDocument> list = new List<PdfDocument>();
    foreach(ListViewItem item in listView1.Items)
    {
        list.Add(new PdfDocument(new PdfReader(item.Tag.ToString())));
    }

    return list;
}

实际运行过程中还出现如下错误,百度错误信息找到参考文献5,原因是漏装了itext7.bouncy-castle-adapter包,安装后即可正常运行程序。

bash 复制代码
InnerException	{"Either com.itextpdf:bouncy-castle-adapter or
com.itextpdf:bouncy-castle-fips-adapter 
dependency must be added in order to use BouncyCastleFactoryCreator"}	
System.Exception {System.NotSupportedException}



  最后是程序运行效果及合并后的文档效果,如下图所示:

还存在很多不足之处,比如没有书签,从八百多页中查找内容并跳转到指定内容处不方便,后续还会学习iText7的用法,完善合并PDF文档功能。

参考文献:

1\]https://itextpdf.com/ \[2\]https://github.com/itext/itext-dotnet \[3\]https://blog.csdn.net/qq_38628970/article/details/135478244 \[4\]https://github.com/itext/itext-publications-samples-dotnet/blob/master/itext/itext.samples/itext/samples/sandbox/merge/PdfDenseMergeExample.cs \[5\]https://blog.csdn.net/rebecca_cao/article/details/135185043

相关推荐
zimoyin1 小时前
Java 快速转 C# 教程
java·开发语言·c#
向宇it1 小时前
【unity游戏开发——编辑器扩展】使用MenuItem自定义菜单栏拓展
开发语言·ui·unity·c#·编辑器·游戏引擎
动感光博1 小时前
Unity碰撞检测(射线投射、胶囊体投射)、交互(图层、掩码)
unity·c#·游戏引擎·游戏程序·动画
动感光博4 小时前
Unity(URP渲染管线)的后处理、动画制作、虚拟相机(Virtual Camera)
开发语言·人工智能·计算机视觉·unity·c#·游戏引擎
诸葛大钢铁5 小时前
如何免费在线PDF转换成Excel
职场和发展·pdf·excel
开开心心就好5 小时前
Word图片格式调整与转换工具
java·javascript·spring·eclipse·pdf·word·excel
hie988946 小时前
C#与KepOPC通讯
开发语言·c#
icloudelectron7 小时前
Altium Designer AD如何输出PIN带网络名的PDF装配图
pdf
沉到海底去吧Go7 小时前
【软件工具】基于PDF文件内容识别的改名软件,PDF根据内容自动重命名,如何识别pdf内容并做文件命名,PDF批量改名
pdf·扫描pdf文档批量文件改名·批量提取识别pdf中的特定字段·根据pdf某个区域内容改名·图片识别工具
EchoZeal7 小时前
【实测有效】Edge浏览器打开部分pdf文件显示空白
edge·pdf·adobe acrobat