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

借鑑產品截圖



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章