ABCPDF:将PDF文件拆分为单页PDF文件

我正在使用ABCpdf工具,我试图将1TB的PDF文件(因此效率问题)分成单页PDF文件。

我尝试过以下方法:

Doc theSrc = new Doc(); theSrc.Read("C://development//pdfSplitter//Bxdfbc91ca-fc05-4315-8c40-798a77431ee0xP.pdf"); for (int i = 1; i <= theSrc.PageCount; i++) { Doc singlePagePdf = new Doc(); singlePagePdf.Rect.String = singlePagePdf.MediaBox.String = theSrc.MediaBox.String; singlePagePdf.AddPage(); singlePagePdf.AddImageDoc(theSrc, i, null); singlePagePdf.FrameRect(); singlePagePdf.Save("C://development//pdfSplitter//singlePDF//singlePage"+i+".pdf"); singlePagePdf.Clear(); } theSrc.Clear(); 

这个非常快,但它不保留旋转的页面,他们需要。 我试图手动旋转它们,但这很快就变得有点混乱了,它们并没有像原始文档那样精确地出现。

我也尝试过:

 Doc theSrc = new Doc(); theSrc.Read("C://development//pdfSplitter//Bxdfbc91ca-fc05-4315-8c40-798a77431ee0xP.pdf"); for (int i = 1; i <= theSrc.PageCount; i++) { Doc singlePagePdf = new Doc(); singlePagePdf.Append(theSrc); singlePagePdf.RemapPages(i.ToString()); singlePagePdf.Save("C://development//pdfSplitter//singlePDF//singlePage"+i+".pdf"); singlePagePdf.Clear(); } theSrc.Clear(); 

这个比第一个慢大约6倍(在大型文档上)但它保留了旋转页面的格式,这很重要。 这个问题是我必须附加整个文档并再次删除所有不需要的页面。 这对文件中的所有页面都是非常低效的。

有人可以帮我解决这个问题吗?

所以我谈到了WebSuperGoo(ABCpdf的创建者)的支持,他们给了我以下内容:

 Doc theSrc = new Doc(); theSrc.Read("C://development//pdfSplitter//Bxdfbc91ca-fc05-4315-8c40-798a77431ee0xP.pdf"); int srcPagesID = theSrc.GetInfoInt(theSrc.Root, "Pages"); int srcDocRot = theSrc.GetInfoInt(srcPagesID, "/Rotate"); for (int i = 1; i <= theSrc.PageCount; i++) { Doc singlePagePdf = new Doc(); singlePagePdf.Rect.String = singlePagePdf.MediaBox.String = theSrc.MediaBox.String; singlePagePdf.AddPage(); singlePagePdf.AddImageDoc(theSrc, i, null); singlePagePdf.FrameRect(); int srcPageRot = theSrc.GetInfoInt(theSrc.Page, "/Rotate"); if (srcDocRot != 0) { singlePagePdf.SetInfo(singlePagePdf.Page, "/Rotate", srcDocRot); } if (srcPageRot != 0) { singlePagePdf.SetInfo(singlePagePdf.Page, "/Rotate", srcPageRot); } singlePagePdf.Save("C://development//pdfSplitter//singlePDF//singlePage"+i+".pdf"); singlePagePdf.Clear(); } theSrc.Clear(); 

这个解决方案与我的第一个解决方案相同,但它结合了页面旋转并且非常快。

我希望这也可以帮助别人。

有一个更新的解决方案,(最新版本> ABCpdf 9.0)这是一种有效且更快速的方法。

  using (Doc copyDoc = new Doc()) { copyDoc.Read(filePath); copyDoc.RemapPages(sb.ToString()); copyDoc.Save(tagetFileName); } 

传递int []页面类型的参数或要分割为REMAPPAGES方法的字符串逗号或空格分隔的页码(上面的代码sb是stringbuilder)并保存。