private XFont ApplyStyle(PrintableElement element, XTextFormatter tf) { var fontSize = 12; var fontFamily = "Arial Narrow"; var fontStyle = XFontStyle.Regular; if (element.HasProperty(PrintableElementProperty.Align)) { tf.Alignment = Enum.Parse <XParagraphAlignment>(element.Properties[PrintableElementProperty.Align].ToString()); } if (element.HasProperty(PrintableElementProperty.FontSize)) { fontSize = Convert.ToInt32(element.Properties[PrintableElementProperty.FontSize]); } if (element.HasProperty(PrintableElementProperty.FontFamily)) { fontFamily = element.Properties[PrintableElementProperty.FontFamily].ToString(); } if (element.HasProperty(PrintableElementProperty.FontStyle)) { fontStyle = Enum.Parse <XFontStyle>(element.Properties[PrintableElementProperty.FontStyle].ToString()); } return(new XFont(fontFamily, fontSize, fontStyle)); }
public override void Initialize(double?maxWidth, double?maxHeight, RenderContext context, IList <PropertyData> data) { if (this.Height == null) { this.Height = 0; } if (this.Width == null) { this.Width = 0; } var pe = new PrintableElement { ElementType = ElementType.NewPage, Height = this.Height.Value, Width = this.Width.Value, X = context.CurrentX, Y = context.CurrentY }; context.CurrentY = context.PageSettings.Margin.Value; context.AddElement(pe); }
protected override void OnRender(PrintableElement element, PdfPage page) { using (var gfx = XGraphics.FromPdfPage(page)) { var img = XImage.FromFile(element.Value.ToString()); gfx.DrawImage(img, element.AsXRect()); } }
public static XRect AsXRect(this PrintableElement item) { var x = XUnit.FromMillimeter(item.X).Point; var y = XUnit.FromMillimeter(item.Y).Point; var w = XUnit.FromMillimeter(item.Width).Point; var h = XUnit.FromMillimeter(item.Height).Point; return(new XRect(x, y, w, h)); }
protected override void OnRender(PrintableElement element, PdfPage page) { using (var gfx = XGraphics.FromPdfPage(page)) { var rect = element.AsXRect(); gfx.DrawRectangle(null, XBrushes.Black, rect); } }
protected override void OnRender(PrintableElement element, PdfPage page) { using (var gfx = XGraphics.FromPdfPage(page)) { var rect = element.AsXRect(); gfx.DrawLine(XPens.Black, rect.Left, rect.Center.Y, rect.Right, rect.Center.Y); } }
public void Render(PrintableElement element, PdfPage page) { var renderer = this.GetRenderer(element); renderer.Render(element, page); if (this.Template.IsDebug) { this.RenderDebug(element, page); } }
private PdfElementRendererBase GetRenderer(PrintableElement element) { var r = this.renderers.SingleOrDefault(x => x.ElementType == element.ElementType); if (r == null) { throw new Exception($"Cannot find PDF renderer for element type [{element.ElementType}]"); } return(r); }
private static void PrintBarcodeText(RenderContext context, string barcodeStr, double barcodeStringHeight, double barcodeWidth, double offsetLeft, double barHeight) { var barStr = new PrintableElement { ElementType = ElementType.Text, Height = barcodeStringHeight, Width = barcodeWidth - offsetLeft, X = context.CurrentX + offsetLeft, Y = context.CurrentY + barHeight, Value = barcodeStr }; barStr.AddProperty(PrintableElementProperty.FontFamily, "Courier New"); barStr.AddProperty(PrintableElementProperty.FontSize, BarcodeStringFontSize); barStr.AddProperty(PrintableElementProperty.Align, "Left"); context.AddElement(barStr); }
private void PrintBarcodeLabel(RenderContext context, double barcodeHeight) { var label = new PrintableElement { ElementType = ElementType.Text, Height = this.LabelFontSize, Width = barcodeHeight, X = context.CurrentX, Y = context.CurrentY + barcodeHeight, Value = this.Label }; label.AddProperty(PrintableElementProperty.Rotate, -90); label.AddProperty(PrintableElementProperty.Align, "Center"); label.AddProperty(PrintableElementProperty.FontSize, this.LabelFontSize); context.AddElement(label); }
protected override void OnRender(PrintableElement element, PdfPage context) { using (var gfx = XGraphics.FromPdfPage(context)) { var tf = new XTextFormatter(gfx); var value = element.Value.ToString(); XStringFormat format = new XStringFormat(); format.LineAlignment = XLineAlignment.Near; format.Alignment = XStringAlignment.Near; if (element.Value is string || element.Value is DateTime) { tf.Alignment = XParagraphAlignment.Left; } else { if (element.HasProperty(PrintableElementProperty.Precision)) { var prec = element.Properties[PrintableElementProperty.Precision]; value = Convert.ToDecimal(element.Value).ToString("F" + prec); } tf.Alignment = XParagraphAlignment.Right; } var labelFont = this.ApplyStyle(element, tf); var rect = element.AsXRect(); if (element.HasProperty(PrintableElementProperty.Rotate)) { var state = gfx.Save(); var angle = Convert.ToDouble(element.Properties[PrintableElementProperty.Rotate]); gfx.RotateAtTransform(angle, rect.TopLeft); tf.DrawString(value, labelFont, XBrushes.Black, rect, format); gfx.Restore(state); } else { tf.DrawString(value, labelFont, XBrushes.Black, rect, format); } } }
private void RenderDebug(PrintableElement element, PdfPage page) { using (var gfx = XGraphics.FromPdfPage(page)) { var rect = element.AsXRect(); gfx.DrawRectangle(XPens.Silver, rect); var font = new XFont("Arial Narrow", 4, XFontStyle.Regular); var tf = new XTextFormatter(gfx) { Alignment = XParagraphAlignment.Right }; var width = rect.Width > 18 ? 18: 9; var height = rect.Width > 18 ? 5 : 10; var dbgStr = $"{element.ElementType} ({XUnit.FromPoint(rect.X).Millimeter:F0},{XUnit.FromPoint(rect.Y).Millimeter:F0})"; gfx.DrawRectangle(new XSolidBrush(XColor.FromArgb(128 + 64, 240, 240, 240)), rect.TopRight.X - width, rect.Y, width, height); tf.DrawString(dbgStr, font, XBrushes.Navy, element.AsXRect()); } }
// public override bool IsLayout => false; public override void Initialize(double?maxWidth, double?maxHeight, RenderContext context, IList <PropertyData> data) { if (this.Height == null) { this.Height = 2; } if (this.Width == null) { this.Width = maxWidth ?? context.MaxPageWidth; } var pe = new PrintableElement { ElementType = ElementType.Line, Height = this.Height.Value, Width = this.Width.Value, X = context.CurrentX, Y = context.CurrentY }; context.AddElement(pe); }
protected abstract void OnRender(PrintableElement element, PdfPage context);
public void Render(PrintableElement element, PdfPage page) { this.OnRender(element, page); }