diff --git a/FastReport.Base/Export/Html/HTMLExport.cs b/FastReport.Base/Export/Html/HTMLExport.cs
index c84f374b..c1dc6666 100644
--- a/FastReport.Base/Export/Html/HTMLExport.cs
+++ b/FastReport.Base/Export/Html/HTMLExport.cs
@@ -168,6 +168,7 @@ public enum ExportType
private bool enableMargins = false;
private ExportType exportMode;
private bool enableVectorObjects = true;
+ private float imageDpi = 1.0f;
///
/// hash:base64Image
@@ -444,6 +445,15 @@ public bool NotRotateLandscapePage
get { return notRotateLandscapePage; }
set { notRotateLandscapePage = value; }
}
+
+ ///
+ /// Gets or sets the DPI for exported images.
+ ///
+ public int ImageDpi
+ {
+ get { return (int)(96 * imageDpi); }
+ set { imageDpi = value / 96f; }
+ }
#endregion Public properties
diff --git a/FastReport.Base/Export/Html/HTMLExportLayers.cs b/FastReport.Base/Export/Html/HTMLExportLayers.cs
index 16e2037e..b7173d94 100644
--- a/FastReport.Base/Export/Html/HTMLExportLayers.cs
+++ b/FastReport.Base/Export/Html/HTMLExportLayers.cs
@@ -486,12 +486,14 @@ private string GetLayerPicture(ReportComponentBase obj, out float Width, out flo
int zoom = highQualitySVG ? 3 : 1;
- using (System.Drawing.Image image =
+ using (Bitmap image =
new Bitmap(
- (int)(Math.Abs(Math.Round(Width * Zoom * zoom))),
- (int)(Math.Abs(Math.Round(Height * Zoom * zoom)))
+ (int)(Math.Abs(Math.Round(Width * Zoom * zoom * imageDpi))),
+ (int)(Math.Abs(Math.Round(Height * Zoom * zoom * imageDpi)))
))
{
+ float targetDpi = 96 * imageDpi;
+ image.SetResolution(targetDpi, targetDpi);
using (Graphics g = Graphics.FromImage(image))
{
var needClear = obj is TextObjectBase
@@ -511,27 +513,27 @@ private string GetLayerPicture(ReportComponentBase obj, out float Width, out flo
float dx = 0;
float dy = 0;
- g.TranslateTransform((-Left - dx) * Zoom * zoom, (-Top - dy) * Zoom * zoom);
+ g.TranslateTransform((-Left - dx) * Zoom * zoom * imageDpi, (-Top - dy) * Zoom * zoom * imageDpi);
BorderLines oldLines = obj.Border.Lines;
obj.Border.Lines = BorderLines.None;
- obj.Draw(new FRPaintEventArgs(g, Zoom * zoom, Zoom * zoom, Report.GraphicCache));
+ obj.Draw(new FRPaintEventArgs(g, Zoom * zoom * imageDpi, Zoom * zoom * imageDpi, Report.GraphicCache));
obj.Border.Lines = oldLines;
}
using (Bitmap b = new Bitmap(
- (int)(Math.Abs(Math.Round(Width * Zoom))),
- (int)(Math.Abs(Math.Round(Height * Zoom)))
+ (int)(Math.Abs(Math.Round(Width * Zoom * imageDpi))),
+ (int)(Math.Abs(Math.Round(Height * Zoom * imageDpi)))
))
{
using (Graphics gr = Graphics.FromImage(b))
{
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
- gr.DrawImage(image, 0, 0, (int)Math.Abs(Width) * Zoom, (int)Math.Abs(Height) * Zoom);
+ gr.DrawImage(image, 0, 0, (int)Math.Abs(Width) * Zoom * imageDpi, (int)Math.Abs(Height) * Zoom * imageDpi);
}
if (FPictureFormat == System.Drawing.Imaging.ImageFormat.Jpeg)
- ExportUtils.SaveJpeg(b, PictureStream, 95);
+ ExportUtils.SaveJpeg(b, PictureStream, 100);
else
b.Save(PictureStream, FPictureFormat);
}
@@ -595,7 +597,7 @@ private void LayerPicture(FastString Page, ReportComponentBase obj, FastString t
(obj as TextObject).Text = old_text;
FastString picStyleBuilder = new FastString("background: url('")
- .Append(pic).Append("') no-repeat !important;-webkit-print-color-adjust:exact;");
+ .Append(pic).Append("') no-repeat !important;background-size:contain !important;-webkit-print-color-adjust:exact;");
string style = GetStyle(obj, picStyleBuilder.ToString());
@@ -619,7 +621,7 @@ private void LayerShape(FastString Page, ShapeObject obj, FastString text)
addstyle.Append("position:absolute;");
- addstyle.Append("background: url('" + GetLayerPicture(obj, out Width, out Height) + "');no-repeat !important;-webkit-print-color-adjust:exact;");
+ addstyle.Append("background: url('" + GetLayerPicture(obj, out Width, out Height) + "');no-repeat !important;background-size:contain !important;-webkit-print-color-adjust:exact;");
float x = obj.Width > 0 ? obj.AbsLeft : (obj.AbsLeft + obj.Width);
float y = obj.Height > 0 ? hPos + obj.AbsTop : (hPos + obj.AbsTop + obj.Height);
@@ -816,7 +818,7 @@ private void ExportHTMLPageLayeredBegin(HTMLData d)
backPage.Width = reportPage.Width;
string pic = GetLayerPicture(backPage, out float Width, out float Height);
htmlPage.Append("background: url('")
- .Append(pic).Append("') no-repeat !important;-webkit-print-color-adjust:exact;");
+ .Append(pic).Append("') no-repeat !important;background-size:contain !important;-webkit-print-color-adjust:exact;");
}
}
htmlPage.Append("\">");