diff --git a/Source/QuestPDF/Drawing/DocumentGenerator.cs b/Source/QuestPDF/Drawing/DocumentGenerator.cs index 05a458e..86e9062 100644 --- a/Source/QuestPDF/Drawing/DocumentGenerator.cs +++ b/Source/QuestPDF/Drawing/DocumentGenerator.cs @@ -51,7 +51,7 @@ namespace QuestPDF.Drawing var settings = document.GetSettings(); var canvas = new ImageCanvas(settings); - RenderDocument(canvas, document, settings); + RenderDocument(canvas, document, settings, useOriginalImages: true); return canvas.Images; } @@ -92,7 +92,7 @@ namespace QuestPDF.Drawing return canvas.Pictures; } - internal static void RenderDocument(TCanvas canvas, IDocument document, DocumentSettings settings) + internal static void RenderDocument(TCanvas canvas, IDocument document, DocumentSettings settings, bool useOriginalImages = false) where TCanvas : ICanvas, IRenderingCanvas { var container = new DocumentContainer(); @@ -101,7 +101,7 @@ namespace QuestPDF.Drawing ApplyInheritedAndGlobalTexStyle(content, TextStyle.Default); ApplyContentDirection(content, settings.ContentDirection); - ApplyDefaultImageConfiguration(content, settings.ImageRasterDpi, settings.ImageCompressionQuality); + ApplyDefaultImageConfiguration(content, settings.ImageRasterDpi, settings.ImageCompressionQuality, useOriginalImages); var debuggingState = Settings.EnableDebugging ? ApplyDebugging(content) : null; @@ -228,7 +228,7 @@ namespace QuestPDF.Drawing ApplyContentDirection(child, direction); } - internal static void ApplyDefaultImageConfiguration(this Element? content, int imageRasterDpi, ImageCompressionQuality imageCompressionQuality) + internal static void ApplyDefaultImageConfiguration(this Element? content, int imageRasterDpi, ImageCompressionQuality imageCompressionQuality, bool useOriginalImages) { content.VisitChildren(x => { @@ -236,25 +236,28 @@ namespace QuestPDF.Drawing { image.TargetDpi ??= imageRasterDpi; image.CompressionQuality ??= imageCompressionQuality; + image.UseOriginalImage |= useOriginalImages; } if (x is QuestPDF.Elements.DynamicImage dynamicImage) { dynamicImage.TargetDpi ??= imageRasterDpi; dynamicImage.CompressionQuality ??= imageCompressionQuality; + dynamicImage.UseOriginalImage |= useOriginalImages; } if (x is DynamicHost dynamicHost) { dynamicHost.ImageTargetDpi ??= imageRasterDpi; dynamicHost.ImageCompressionQuality ??= imageCompressionQuality; + dynamicHost.UseOriginalImage |= useOriginalImages; } if (x is TextBlock textBlock) { foreach (var textBlockElement in textBlock.Items.OfType()) { - textBlockElement.Element.ApplyDefaultImageConfiguration(imageRasterDpi, imageCompressionQuality); + textBlockElement.Element.ApplyDefaultImageConfiguration(imageRasterDpi, imageCompressionQuality, useOriginalImages); } } }); diff --git a/Source/QuestPDF/Elements/Dynamic.cs b/Source/QuestPDF/Elements/Dynamic.cs index 3d1dbcc..f15a404 100644 --- a/Source/QuestPDF/Elements/Dynamic.cs +++ b/Source/QuestPDF/Elements/Dynamic.cs @@ -16,6 +16,7 @@ namespace QuestPDF.Elements internal int? ImageTargetDpi { get; set; } internal ImageCompressionQuality? ImageCompressionQuality { get; set; } + internal bool UseOriginalImage { get; set; } public DynamicHost(DynamicComponentProxy child) { @@ -63,6 +64,7 @@ namespace QuestPDF.Elements ImageTargetDpi = ImageTargetDpi.Value, ImageCompressionQuality = ImageCompressionQuality.Value, + UseOriginalImage = UseOriginalImage, PageNumber = PageContext.CurrentPage, TotalPages = PageContext.GetLocation(Infrastructure.PageContext.DocumentLocation).PageEnd, @@ -88,6 +90,7 @@ namespace QuestPDF.Elements internal int ImageTargetDpi { get; set; } internal ImageCompressionQuality ImageCompressionQuality { get; set; } + internal bool UseOriginalImage { get; set; } public int PageNumber { get; internal set; } public int TotalPages { get; internal set; } @@ -100,7 +103,7 @@ namespace QuestPDF.Elements container.ApplyInheritedAndGlobalTexStyle(TextStyle); container.ApplyContentDirection(ContentDirection); - container.ApplyDefaultImageConfiguration(ImageTargetDpi, ImageCompressionQuality); + container.ApplyDefaultImageConfiguration(ImageTargetDpi, ImageCompressionQuality, UseOriginalImage); container.InjectDependencies(PageContext, Canvas); container.VisitChildren(x => (x as IStateResettable)?.ResetState()); diff --git a/Source/QuestPDF/Elements/DynamicImage.cs b/Source/QuestPDF/Elements/DynamicImage.cs index 4441c63..d5d7028 100644 --- a/Source/QuestPDF/Elements/DynamicImage.cs +++ b/Source/QuestPDF/Elements/DynamicImage.cs @@ -13,6 +13,7 @@ namespace QuestPDF.Elements { internal int? TargetDpi { get; set; } internal ImageCompressionQuality? CompressionQuality { get; set; } + internal bool UseOriginalImage { get; set; } public GenerateDynamicImageDelegate? Source { get; set; } internal override SpacePlan Measure(Size availableSpace) @@ -31,6 +32,13 @@ namespace QuestPDF.Elements return; using var originalImage = SKImage.FromEncodedData(imageData); + + if (UseOriginalImage) + { + Canvas.DrawImage(originalImage, Position.Zero, availableSpace); + return; + } + using var compressedImage = originalImage.CompressImage(CompressionQuality.Value); var targetImage = Helpers.Helpers.GetImageWithSmallerSize(originalImage, compressedImage);