iTextSharp.dll用于合并的实战实例

iTextSharp.dll应该是目前开源里面比较好的第三方开源库,老外目前在GitHub上面维护的比较勤快。关注的人也比较多,支持的功能包括合并,切割和编辑都还不错。公司最近有一个跟PDF相关的项目,自己要开发底层功能,需要了解很详细的PDF文档规范,真这么做下去基本完菜,对比了几个开源第三方库,包括向iTexSharp,PDFSharp,这些主要是基于C#,很方便,比java,C++的要容易上手得多。


我们的这个项目是跟PDF合并相关,第三方的合并器很多,包括向一些简单的PDF合并器,我参照了下目前国外比较流行好用的一个产品,PDF Merge Pro作为我们这个项目的参考,因为这个产品的功能相对比较完善,正好适合我们公司的产品,用以借鉴开发PDF的合并功能。


这个PDF合并的功能折腾了大半个月,基本上实现并且交付,里面的部分我觉得比较不错的功能点,当然主要是PDF合并功能,包括对iTextSharp的引用,作为代码片段放出来,作为参考。


PageRangeParser pageRangeParser = new PageRangeParser(pdfFiles[fileIndex].Reader.NumberOfPages, pageRange);

                        pageRangeParser.TryParse(out pageRanges);


                        for(int index = 0; index < pageRanges.Length; index++)
                        {
                            Helper.PageRange currentPageRange = pageRanges[index];
                            if (currentPageRange.Pages != null)
                            {
                                int separatePageIndex = 0;
                                while (separatePageIndex < currentPageRange.Pages.Length)
                                {
                                    var realPageIndex = currentPageRange.Pages[separatePageIndex];
                                    destinationDoc.SetPageSize(pdfFiles[fileIndex].Reader.GetPageSizeWithRotation(realPageIndex));
                                    destinationDoc.NewPage();

                                    page = writer.GetImportedPage(pdfReader, realPageIndex);

                                    
                                    separatePageIndex++;
                                    pageNumber++;
                                }
                            }
                            else if (currentPageRange.PageFrom <= currentPageRange.PageTo)
                            {
                                int currentPage = currentPageRange.PageFrom;
                                while(currentPage <= currentPageRange.PageTo)
                                {
                                    destinationDoc.SetPageSize(pdfFiles[fileIndex].Reader.GetPageSizeWithRotation(currentPage));
                                    destinationDoc.NewPage();

                                    page = writer.GetImportedPage(pdfReader, currentPage);

                                   
                                    currentPage++;
                                    pageNumber++;
                                }
                            }
                            else if (currentPageRange.PageFrom > currentPageRange.PageTo)
                            {
                                int currentPage = currentPageRange.PageTo;
                                while (currentPage <= currentPageRange.PageFrom)
                                {
                                    destinationDoc.SetPageSize(pdfFiles[fileIndex].Reader.GetPageSizeWithRotation(currentPage));
                                    destinationDoc.NewPage();

                                    page = writer.GetImportedPage(pdfReader, currentPage);

                                    
                                    currentPage++;
                                    pageNumber++;
                                }
                            }

借鉴产品截图



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值