public static byte[] ConvertToPdf(Image iTextImage, PdfResizeInfo pageSizeInfo, PdfScalingOptions scalingOptions = null)
        {
            var pdfOptions = scalingOptions ?? PdfScalingOptions.Default;

            //BBernard
            //Statically ensure that Compression is enabled...
            Document.Compress = pdfOptions.EnableCompression;

            var marginInfo = pageSizeInfo.MarginSize;

            using (var outputMemoryStream = new MemoryStream())
                using (var pdfDocBuilder = new Document(pageSizeInfo.PageSize, marginInfo.Left, marginInfo.Right, marginInfo.Top, marginInfo.Bottom))
                    using (var pdfWriter = PdfWriter.GetInstance(pdfDocBuilder, outputMemoryStream))
                    {
                        if (pdfOptions.EnableScaling)
                        {
                            var scaledContent = PdfResizeHelper.ScalePdfContent(iTextImage, pageSizeInfo, scalingOptions);
                            pdfDocBuilder.SetPageSize(scaledContent.ScaledPageSize);

                            pdfDocBuilder.Open();
                            pdfDocBuilder.Add(scaledContent.ScaledPdfContent);
                        }
                        else
                        {
                            pdfDocBuilder.Open();
                            pdfDocBuilder.Add(iTextImage);
                        }

                        pdfDocBuilder.Close();

                        var pdfBytes = outputMemoryStream.ToArray();
                        return(pdfBytes);
                    }
        }
        public static byte[] ConvertImageToPdf(FileInfo fileInfo, PdfResizeInfo pageSizeInfo, PdfScalingOptions scalingOptions = null)
        {
            var imageBytes = File.ReadAllBytes(fileInfo.FullName);
            var pdfBytes   = ConvertImageToPdf(imageBytes, pageSizeInfo, scalingOptions);

            return(pdfBytes);
        }
        public static byte[] ConvertImageToPdf(string filePath, PdfResizeInfo pageSizeInfo, PdfScalingOptions scalingOptions = null)
        {
            var fileInfo = new FileInfo(filePath);

            if (!fileInfo.Exists)
            {
                throw new FileNotFoundException($"File specified could not be found [{filePath}].");
            }

            var pdfBytes = ConvertImageToPdf(fileInfo, pageSizeInfo, scalingOptions);

            return(pdfBytes);
        }
        public static byte[] MergePdfFiles(List <byte[]> pdfFileBytesList, PdfResizeInfo pageSizeInfo, PdfScalingOptions scalingOptions = null)
        {
            if (pdfFileBytesList == null || !pdfFileBytesList.Any())
            {
                throw new ArgumentNullException(nameof(pdfFileBytesList), "List of Pdf Files to be merged cannot be null or empty.");
            }
            if (pageSizeInfo == null)
            {
                throw new ArgumentNullException(nameof(pageSizeInfo), "ResizeInfo cannot be null.");
            }

            byte[] outputBytes = null;

            //NOTE: For Merging we DISABLE ALL SCALING by default, so that we can preserve Annotations, etc.
            //          but this can be easily set by the client code to enable scaling.
            var pdfScalingOptions = scalingOptions ?? PdfScalingOptions.DisableScaling;

            //Set static references for Pdf Processing...
            PdfReader.unethicalreading = pdfScalingOptions.EnableUnethicalReading;
            Document.Compress          = pdfScalingOptions.EnableCompression;

            var targetPageSize   = pageSizeInfo.PageSize;
            var targetMarginSize = pageSizeInfo.MarginSize;

            using (var outputMemoryStream = new MemoryStream())
                using (var pdfDocBuilder = new Document(targetPageSize, targetMarginSize.Left, targetMarginSize.Right, targetMarginSize.Top, targetMarginSize.Bottom))
                    using (var pdfSmartCopy = new PdfSmartCopy(pdfDocBuilder, outputMemoryStream))
                    {
                        pdfDocBuilder.Open();

                        foreach (var pdfBytes in pdfFileBytesList)
                        {
                            if (pdfScalingOptions.EnableScaling)
                            {
                                var scaledPdfBytes = PdfResizeHelper.ResizePdfPageSize(pdfBytes, pageSizeInfo, pdfScalingOptions);
                                pdfSmartCopy.AppendPdfDocument(scaledPdfBytes);
                            }
                            else
                            {
                                pdfSmartCopy.AppendPdfDocument(pdfBytes);
                            }
                        }

                        pdfDocBuilder.Close();
                        outputBytes = outputMemoryStream.ToArray();
                    }

            return(outputBytes);
        }
Exemple #5
0
        public static void AssertThatPdfPageSizeIsAsExpected(byte[] pdfBytes, PdfResizeInfo resizeInfo)
        {
            //*************************************************
            //Validate Results...
            //*************************************************
            using (var pdfReader = new PdfReader(pdfBytes))
            {
                for (var pageNumber = 1; pageNumber <= pdfReader.NumberOfPages; pageNumber++)
                {
                    //NOTE: Init/Reset the target page sizes for validation on each page since we may be mutating/rotating
                    //      them to validate Landscape/Rotated outputs...
                    var targetPageSize   = resizeInfo.PageSize;
                    var targetMarginSize = resizeInfo.MarginSize;


                    //NOTE: To correctly validate we must get the Page Size WITH any Rotation being applied;
                    //      which is a  different method that we must call to get all correct details...
                    var currentPageSize = pdfReader.GetPageSizeWithRotation(pageNumber);

                    //Validate Landscape & Rotation...
                    if (currentPageSize.Width <= currentPageSize.Height)
                    {
                        //PORTRAIT
                        Assert.IsTrue(currentPageSize.Rotation == 0 || currentPageSize.Rotation == 180, $"Checking Portrait Page Rotation for Page[{pageNumber}]");
                    }
                    else
                    {
                        //LANDSCAPE
                        Assert.IsTrue(currentPageSize.Rotation == 90 || currentPageSize.Rotation == 270, $"Checking Landscape Page Rotation for Page[{pageNumber}]");

                        //Rotate the Target Page size so we can safely compare Width & Height...
                        targetPageSize   = targetPageSize.Rotate();
                        targetMarginSize = targetMarginSize.Rotate();
                    }

                    //After handling Rotation we can validate the Width & Height of the Sizes!
                    Assert.AreEqual(currentPageSize.Width, targetPageSize.Width, $"Comparing PageSize Width for Page[{pageNumber}]");
                    Assert.AreEqual(currentPageSize.Height, targetPageSize.Height, $"Comparing PageSize Height for Page[{pageNumber}]");

                    //After handling Rotation we can validate the Margins!
                    var marginSize = pdfReader.GetPdfMarginRectangleFromCropBox(pageNumber);
                    Assert.AreEqual(marginSize.Left, targetMarginSize.Left, "Check Page Margin Left Matches");
                    Assert.AreEqual(marginSize.Right, targetMarginSize.Right, "Check Page Margin Right Matches");
                    Assert.AreEqual(marginSize.Top, targetMarginSize.Top, "Check Page Margin Top Matches");
                    Assert.AreEqual(marginSize.Bottom, targetMarginSize.Bottom, "Check Page Margin Bottom Matches");
                }
            }
        }
Exemple #6
0
        public void PdfResizeHelperSimpleTest()
        {
            var originalPdfBytes = TestHelper.ReadTestDataFileBytes(@"TestDoc_01.pdf");

            //*************************************************
            //Setup & Execute Tests...
            //*************************************************
            //RESIZE & scale LETTER Doc down to Postcard size, and validate the last page with the SMALL image is scaled up!
            var resizeInfo   = new PdfResizeInfo(PageSize.POSTCARD, PdfMarginSize.None);
            var resizedBytes = PdfResizeHelper.ResizePdfPageSize(originalPdfBytes, resizeInfo, PdfScalingOptions.Default);

            //*************************************************
            //Validate Results...
            //*************************************************
            TestHelper.AssertThatPdfPageSizeIsAsExpected(resizedBytes, resizeInfo);

            File.WriteAllBytes($@"D:\Temp\PdfResizeHelper\RESIZED OUTPUT TEST - {Guid.NewGuid()}.pdf", resizedBytes);
        }
        public void PdfMergeImagesWithExistingDocTest()
        {
            //*************************************************
            //Setup & Execute Tests...
            //*************************************************
            //RESIZE & scale LETTER Doc down to Postcard size, and validate the last page with the SMALL image is scaled up!
            var resizeInfo = new PdfResizeInfo(PageSize.POSTCARD, PdfMarginSize.None);

            var testDocPdfBytes = TestHelper.ReadTestDataFileBytes(@"TestDoc_01.pdf");

            var floppyDiskPdfBytes = PdfConvertHelper.ConvertImageToPdf(
                TestHelper.GetTestDataFileInfo(@"floppy_disks.jpg"),
                resizeInfo,
                PdfScalingOptions.Default
                );

            var satellitePdfBytes = PdfConvertHelper.ConvertImageToPdf(
                TestHelper.GetTestDataFileInfo(@"satellite.jpg"),
                resizeInfo,
                PdfScalingOptions.Default
                );

            var mergedPdfBytes = PdfMergeHelper.MergePdfFiles(resizeInfo, PdfScalingOptions.Default, testDocPdfBytes, floppyDiskPdfBytes, satellitePdfBytes);

            //*************************************************
            //Validate Results...
            //*************************************************
            using (var pdfReader = new PdfReader(mergedPdfBytes))
            {
                Assert.AreEqual(pdfReader.NumberOfPages, 6, "Check Page Count = 6");
            }

            //Handle dynamic rotation validation (for wide images)...
            TestHelper.AssertThatPdfPageSizeIsAsExpected(mergedPdfBytes, resizeInfo);

            File.WriteAllBytes($@"D:\Temp\PdfResizeHelper\MERGED PDF FILE - {Guid.NewGuid()}.pdf", mergedPdfBytes);
        }
        public void PdfImageBytesConversionWithScalingTest()
        {
            var imageBytes = TestHelper.ReadTestDataFileBytes(@"floppy_disks.jpg");

            //*************************************************
            //Setup & Execute Tests...
            //*************************************************
            //RESIZE & scale LETTER Doc down to Postcard size, and validate the last page with the SMALL image is scaled up!
            var resizeInfo = new PdfResizeInfo(PageSize.POSTCARD, PdfMarginSize.None);
            var pdfBytes   = PdfConvertHelper.ConvertImageToPdf(imageBytes, resizeInfo, PdfScalingOptions.Default);

            //*************************************************
            //Validate Results...
            //*************************************************
            using (var pdfReader = new PdfReader(pdfBytes))
            {
                Assert.AreEqual(pdfReader.NumberOfPages, 1, "Check Page Count = 1");
            }

            //Handle dynamic rotation validation (for wide images)...
            TestHelper.AssertThatPdfPageSizeIsAsExpected(pdfBytes, resizeInfo);

            //File.WriteAllBytes($@"D:\Temp\PdfResizeHelper\IMAGE CONVERSION TO PDF - {Guid.NewGuid()}.pdf", pdfBytes);
        }
        public static byte[] MergePdfFiles(PdfResizeInfo pageSizeInfo, PdfScalingOptions scalingOptions, params byte[][] pdfFileParams)
        {
            var pdfFileList = pdfFileParams.ToList();

            return(MergePdfFiles(pdfFileList, pageSizeInfo, scalingOptions));
        }
 public static byte[] MergePdfFiles(PdfResizeInfo pageSizeInfo, params byte[] pdfFileParams)
 {
     return(MergePdfFiles(pageSizeInfo, null, pdfFileParams));
 }
        public static byte[] ConvertImageToPdf(byte[] imageBytes, PdfResizeInfo pageSizeInfo, PdfScalingOptions scalingOptions = null)
        {
            var iTextImage = Image.GetInstance(imageBytes);

            return(ConvertToPdf(iTextImage, pageSizeInfo, scalingOptions));
        }