您的位置:首页 > 其它

[置顶] iTextSharp.dll用于合并的实战实例

2017-02-24 13:41 399 查看
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++;
}
}


借鉴产品截图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: