123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- using System;
- using System.ComponentModel;
- using System.Drawing;
- using System.Drawing.Design;
- using System.Drawing.Drawing2D;
- using System.Drawing.Imaging;
- using System.IO;
- using System.Threading;
- using System.Windows;
- using System.Windows.Forms;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Threading;
- using FastReport;
- using FastReport.Utils;
- using ikvm.extensions;
- using InABox.WPF;
- using TheArtOfDev.HtmlRenderer.Core;
- using TheArtOfDev.HtmlRenderer.WPF;
- using Color = System.Drawing.Color;
- using FontFamily = System.Drawing.FontFamily;
- using FontStyle = System.Drawing.FontStyle;
- using Size = System.Windows.Size;
- namespace InABox.Wpf.Reports.CustomObjects;
- internal class HTMLViewSmartTag : DataColumnSmartTag
- {
- protected override void ItemClicked()
- {
- (Obj as HTMLView).DataColumn = DataColumn;
- base.ItemClicked();
- }
- public HTMLViewSmartTag(ComponentBase obj) : base(obj)
- {
- DataColumn = (Obj as HTMLView).DataColumn;
- }
- }
- public class HTMLView : ReportComponentBase
- {
- [Category("Data")]
- [Editor("FastReport.TypeEditors.DataColumnEditor, FastReport", typeof(UITypeEditor))]
- public string? DataColumn { get; set; }
-
- [Category("Layout")]
- public Padding Padding { get; set; }
-
- public HTMLView()
- {
- Padding = Padding.Empty;
- SetFlags(Flags.HasSmartTag, true);
- CanGrow = true;
- }
-
- public override SmartTagBase GetSmartTag()
- {
- return new HTMLViewSmartTag(this);
- }
-
- public override SizeF GetPreferredSize()
- {
- if ((Page as ReportPage).IsImperialUnitsUsed)
- return new SizeF(Page.Width / Units.Inches, Units.Inches * 0.5f);
- return new SizeF(Page.Width / Units.Millimeters, Units.Millimeters * 10f);
- }
-
- public override void Serialize(FRWriter writer)
- {
- base.Serialize(writer);
- if (writer.DiffObject is HTMLView view)
- {
- if (Padding != view.Padding)
- writer.WriteValue("Padding", Padding);
- if (!string.Equals(DataColumn,view.DataColumn))
- writer.WriteValue("DataColumn", DataColumn);
- }
- }
-
- public override void Assign(Base source)
- {
- base.Assign(source);
- if (source is HTMLView src)
- {
- Padding = src.Padding;
- DataColumn = src.DataColumn;
- }
- }
-
- // public override void GetData()
- // {
- // base.GetData();
- // if (!string.IsNullOrEmpty(DataColumn))
- // {
- // object data = Report.GetColumnValueNullable(DataColumn);
- // Text = data as string;
- // }
- // }
- public override float CalcHeight()
- {
- if (IsDesigning || !CanGrow)
- return base.CalcHeight();
- var data = Report.GetColumnValueNullable(DataColumn) as string;
- if (String.IsNullOrWhiteSpace(data))
- return base.CalcHeight();
- var size = HtmlRender.Measure(data, Width - Padding.Horizontal);
- return ((float)size.Height + Padding.Vertical);
- }
-
- public static BitmapSource CreateBitmap(
- int width, int height, double dpiX, double dpiY, Action<DrawingContext> render)
- {
- DrawingVisual drawingVisual = new DrawingVisual();
- using (DrawingContext drawingContext = drawingVisual.RenderOpen())
- {
- render(drawingContext);
- }
- RenderTargetBitmap bitmap = new RenderTargetBitmap(
- width, height, dpiX, dpiY, PixelFormats.Default);
- bitmap.Render(drawingVisual);
- return bitmap;
- }
-
- public override void Draw(FRPaintEventArgs e)
- {
- base.Draw(e);
- DrawMarkers(e);
-
- IGraphics g = e.Graphics;
-
- RectangleF rect = new RectangleF(
- (AbsLeft + Padding.Left) * e.ScaleX,
- (AbsTop + Padding.Top) * e.ScaleY,
- (Width - Padding.Horizontal) * e.ScaleX,
- (Height - Padding.Vertical) * e.ScaleY);
-
- StringFormat format = e.Cache.GetStringFormat(
- StringAlignment.Near,
- StringAlignment.Near,
- StringTrimming.None,
- StringFormatFlags.NoWrap,
- 0f,
- 48f);
-
- Font font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular);
- var textBrush = new SolidBrush(Color.Black);
-
- if (IsDesigning)
- {
- g.DrawString(DataColumn ?? "", font, textBrush, rect, format);
- }
- else
- {
-
-
- g.ResetClip();
- g.SetClip(rect);
- Report report = Report;
- if (report != null && report.SmoothGraphics)
- {
- g.InterpolationMode = InterpolationMode.HighQualityBicubic;
- g.SmoothingMode = SmoothingMode.AntiAlias;
- }
- if (!string.IsNullOrWhiteSpace(DataColumn))
- {
- var data = Report.GetColumnValueNullable(DataColumn) as string;
- BitmapSource image = CreateBitmap(
- (int)(Width * (e.Graphics.DpiX / 96f)) , (int)(Height * e.ScaleX * (e.Graphics.DpiY / 96f)), e.Graphics.DpiX , e.Graphics.DpiY ,
- context =>
- {
- HtmlRender.Render(context, data,0,0,(int)(Width));
- });
-
- var bmp = ImageUtils.BitmapSourceToBitmap(image);
- bmp.Save("c:\\development\\html.png");
- g.DrawImage(bmp, rect.X, rect.Y, bmp.Width * 96f * e.ScaleX / e.Graphics.DpiX, bmp.Height * 96f * e.ScaleY / e.Graphics.DpiY);
- }
-
- }
-
- Border.Draw(e, new RectangleF(AbsLeft, AbsTop, Width, Height));
- }
-
-
- }
|