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

时间:2022-03-23 07:20:57

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++;
                                }
                            }

借鉴产品截图

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