public void CheckActions_ResultedFileContainsOnlyImages_ProperlyRotated() { string inPdfPath = Directory.GetCurrentDirectory() + @"\BlackRectangles1.pdf"; PdfProcessorTests.FlushResourceToFile(Resources + "BlackRectangles.pdf", inPdfPath); string outPdfPath = inPdfPath + ".out.pdf"; using (var reader = new PdfReader(inPdfPath)) { using (var fs = new FileStream(outPdfPath, FileMode.Create)) { using (var stamper = new PdfStamper(reader, fs)) { using (var render = new GsNetPdfRender(inPdfPath, 150)) { var andFilter = new AndFilter( new HasSpecialCsResourceFilter(reader), new NotFilter(new HasFontResourceFilter(reader)), new NotFilter( new PageHasSpecificKeyFilter( reader, RenderPageAction.EstPageRendered, new PdfBoolean(true)))); using (var action = new RenderPageAction(reader, stamper, andFilter, render)) { var processor = new PdfProcessor(new List <IPdfAction> { action }); for (int i = 1; i <= reader.NumberOfPages; i++) { processor.Execute(i); } } } } } } using (var reader = new PdfReader(outPdfPath)) { AssertPageRotation(reader, 1, 0); AssertOnlyImageAndImageSize(reader, 1, 1275, 1650); AssertPageRotation(reader, 2, 90); AssertOnlyImageAndImageSize(reader, 2, 1275, 1650); AssertPageRotation(reader, 3, 180); AssertOnlyImageAndImageSize(reader, 3, 1275, 1650); } }
/// <summary> /// The render scanned pages with GhostScript.Net. /// </summary> /// <param name="inPdfBuffer"> /// The in PDF memory stream. /// </param> /// <param name="outPdfBuffer"> /// The out PDF stream (any). /// </param> /// <param name="resolution"> /// The resolution. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> public bool RenderSpecialCsPagesWithGsNet(byte[] inPdfBuffer, out byte[] outPdfBuffer, int resolution) { bool result = false; PdfReader.unethicalreading = true; using (var reader = new PdfReader(inPdfBuffer)) { // Check if document has scanned pages. var andFilter = new AndFilter(new List <PdfFilter> { new HasSpecialCsResourceFilter(reader), // removed the comment out here to make all unit tests working as designed by the author new NotFilter(new HasFontResourceFilter(reader)), new NotFilter(new PageHasSpecificKeyFilter(reader, RenderPageAction.EstPageRendered, new PdfBoolean(true))) }); var processor = new PdfProcessor(new List <IPdfAction> { andFilter }); bool containsSpecialCsPages = false; for (var i = 1; i <= reader.NumberOfPages; i++) { if (processor.Execute(i)) { containsSpecialCsPages = true; break; } } // Render the document if it has scanned pages. if (containsSpecialCsPages) { using (var outPdfStream = new MemoryStream()) { using (var stamper = new PdfStamper(reader, outPdfStream)) { using (var render = CreateGsNetPdfRender(inPdfBuffer, resolution)) { var action = new RenderPageAction(reader, stamper, andFilter, render); processor = new PdfProcessor(new List <IPdfAction> { action }); for (var i = 1; i <= reader.NumberOfPages; i++) { result |= processor.Execute(i); } } reader.RemoveUnusedObjects(); } outPdfBuffer = outPdfStream.ToArray(); } } else { outPdfBuffer = inPdfBuffer; } reader.Close(); return(result); } }