如何使用iText7实现PDF文件的「真正」旋转(保持Rotation=0)
PDF顺时针旋转并保留页面边界(保持Rotation=0)的最优方案
我需要将PDF文件顺时针旋转,同时保留旋转后的页面边界。官方提供的示例代码仅为每页设置旋转属性,无法实现旋转后页面Rotation值为0的需求,官方示例代码如下:
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest)); for (int p = 1; p <= pdfDoc.GetNumberOfPages(); p++) { PdfPage page = pdfDoc.GetPage(p); int rotate = page.GetRotation(); if (rotate == 0) { page.SetRotation(90); } else { page.SetRotation((rotate + 90) % 360); } } pdfDoc.Close();
我自行编写了一段代码处理某源文件时,成功得到了预期结果,代码如下:
string src = @"-x-y_28P_src.pdf"; string targetFPath = @"-x-y_28P_real_rotated.pdf"; using (PdfDocument pdfDoc = new PdfDocument(new PdfWriter(targetFPath))) using (PdfDocument origPdf = new PdfDocument(new PdfReader(src))) { pdfDoc.GetWriter().SetSmartMode(true); int pageCount = origPdf.GetNumberOfPages(); for (int i = 1; i <= pageCount; i++) { PdfPage origPage = origPdf.GetPage(i); var pageCopy = origPage.CopyAsFormXObject(pdfDoc); var mediaBox = origPage.GetMediaBox();//x = -8.5,y=-8.5 var cropBox = origPage.GetCropBox(); var trimBox = origPage.GetTrimBox(); var mediaRect90 = new Rectangle(0, 0, mediaBox.GetHeight(), mediaBox.GetWidth());//media:0,0,h,w,data from pdfinfo of xpdf. var page = pdfDoc.AddNewPage(new PageSize(mediaRect90));//media:0,0,h,w var canvas = new PdfCanvas(page); canvas.AddXObject(pageCopy, 0, -1, 1, 0, 0 - mediaBox.GetBottom(), mediaBox.GetRight());//Clockwise var cropbox = new Rectangle(0, 0, cropBox.GetHeight(), cropBox.GetWidth()); page.SetCropBox(cropbox); var trimbox = new Rectangle(-mediaBox.GetBottom(), -mediaBox.GetLeft(), trimBox.GetHeight(), trimBox.GetWidth()); page.SetTrimBox(trimbox);//important } }
但这段代码处理另一文件时,无论如何调整都无法得到正确结果,且当前实现方案逻辑复杂,请问是否有更简洁、通用的解决方法?
内容的提问来源于stack exchange,提问作者zhusp
相关产品推荐
相关产品推荐

