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); }
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"); } } }
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)); }