Example #1
0
        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);
            }
        }
Example #2
0
        /// <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);
            }
        }