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++; } }
借鉴产品截图