Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions FastReport.Base/Export/Html/HTMLExport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ public enum ExportType
private bool enableMargins = false;
private ExportType exportMode;
private bool enableVectorObjects = true;
private float imageDpi = 1.0f;

/// <summary>
/// hash:base64Image
Expand Down Expand Up @@ -444,6 +445,15 @@ public bool NotRotateLandscapePage
get { return notRotateLandscapePage; }
set { notRotateLandscapePage = value; }
}

/// <summary>
/// Gets or sets the DPI for exported images.
/// </summary>
public int ImageDpi
{
get { return (int)(96 * imageDpi); }
set { imageDpi = value / 96f; }
}

#endregion Public properties

Expand Down
26 changes: 14 additions & 12 deletions FastReport.Base/Export/Html/HTMLExportLayers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}
Expand Down Expand Up @@ -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());

Expand All @@ -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);
Expand Down Expand Up @@ -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("\">");
Expand Down