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


      使用HtmlAgilityPack抓取并分析网页内容,然后再调用PuppeteerSharp将网页生成PDF文件,最终的成果如下图所示,得到将近120个pdf文档。能看,但是不方便,需要逐个打开文档才能看到所需的内容,最好能将这些文档合并成单个文档,便于查看与保存。
    在这里插入图片描述
      百度"C# 合并pdf文档",最终决定使用IText7,其GitHub主页介绍特点时就提到支持合并PDF文件,如下图所示:
    在这里插入图片描述
      新建Winform项目,在Nuget包管理器中搜索并安装iText7,如下图所示。注意这里与iText相关的包有很多个,最初测试时错装了iTextSharp,关键类的名字和用法都差不多,直到编译和调试时才发现包装错了。
    在这里插入图片描述

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

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

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

    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}
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    在这里插入图片描述
      最后是程序运行效果及合并后的文档效果,如下图所示:

    在这里插入图片描述在这里插入图片描述

      还存在很多不足之处,比如没有书签,从八百多页中查找内容并跳转到指定内容处不方便,后续还会学习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

  • 相关阅读:
    Zabbix之SNMP的OID获取
    设计模式之享元模式
    51单片机 LCD1602
    Vue--插槽slot
    【yum包管理器常见用法】
    SAP Spartacus 和 CDC 集成的 HTTP 请求明细
    设计模式——工厂模式
    python 自定义异常/raise关键字抛出异常
    【AutoSAR CAN】03 - 如何使用Davinci Configurator Pro工具配置CAN的波特率
    SpringBoot+Mybaits搭建通用管理系统实例十一:数据缓存功能实现
  • 原文地址:https://blog.csdn.net/gc_2299/article/details/136357970