iTextSharp实现PDF的合并与分卷

源码下载:iTextSharp实现PDF的合并与分卷https://download.csdn.net/download/xjzdr/85519979

在做一个项目时,涉及到大量的PDF文件(几千甚至上万个),用户需要将所有的PDF进行打印装订,为省去用户的麻烦,程序需要按指定的顺序进行合并,然后方便用户打印。

在合并过程中,又涉及到另外一个问题,PDF文件超过4G后,保存就出现问题。又需要将分成多个PDF。

下面的代码演示如何合并PDf,并分成多个PDF文件。

新建一项目,添加 iTextSharp引用:

核心代码:

  for (int i = 0; i < files_pdf.Length; i++)
                    {
                        #region 
                   
                        try
                        {

                         
                            pdfreader = new PdfReader( files_pdf[i]);
                            pdfreader.ConsolidateNamedDestinations();
                            n = pdfreader.NumberOfPages;//PDF的页数
                            tempBookmarks = SimpleBookmark.GetBookmark(pdfreader);
                            //此处也可以改为根据合并后PDF的文件大小分割

                            if (i % 10 == 0)//每10个PDF合并成一个PDF文件,如果需要改为每100个PDF合并成一个,改为: if (i % 100 == 0)
                            {
                                firstpage = true;
                                if (pdfCpy != null)
                                {
                                    pdfCpy.Outlines = bookmarks;//必须要此行代码,否则,生成的PDF无法打开
                                }
                                if (document.IsOpen())
                                    document.Close();
                                outputPdf = Application.StartupPath + "/合并后的PDF-" + "-" + list_Pdf.Count + ".pdf";
                                list_Pdf.Add(outputPdf);
                              
                            }

                            else
                                firstpage = false;

                            if (firstpage == true)
                            {
                                document = new iTextSharp.text.Document(pdfreader.GetPageSizeWithRotation(1));
                                pdfCpy = new PdfCopy(document, new FileStream(outputPdf, FileMode.Create));
                                document.Open();
                                SimpleBookmark.ShiftPageNumbers(tempBookmarks, page_offset, null);
                                page_offset += n;
                                if (tempBookmarks != null)
                                    bookmarks.AddRange(tempBookmarks);
                                totalPages = n;

                            }
                            else
                            {
                                SimpleBookmark.ShiftPageNumbers(tempBookmarks, page_offset, null);
                                if (tempBookmarks != null)
                                    bookmarks.AddRange(tempBookmarks);

                                page_offset += n;
                                totalPages += n;
                            }

                            for (int j = 1; j <= n; j++)
                            {
                                if (pdfCpy != null)
                                {
                                    pdfimportpage = pdfCpy.GetImportedPage(pdfreader, j);
                                    pdfCpy.AddPage(pdfimportpage);
                                }
                                else
                                {
                                    //log.Debug("pdfCpy==null,  j="+ j.ToString()+",");

                                }

                            }
                            pdfreader.Close();

                            //if(i>0 && i%100==0)
                            //{

                            //    list_Pdf.Add(outputPdf);

                            //    outputPdf= Application.StartupPath + "/temp/附件-" + FileBase +"-"+ list_Pdf .Count+ ".pdf";
                            //    log.Info("开始合并到文件:"+ outputPdf);
                            //    AppendText("开始合并到文件:" + outputPdf);
                            //    //if (document.IsOpen())
                            //    //    document.Close();

                            //}

                        }
                        catch (Exception ex1)
                        {
                            MessageBox.Show(ex1.Message);

                        }

                        #endregion 
                    }

运行效果:

源码下载:

iTextSharp实现PDF的合并与分卷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xjzdr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值