コード例 #1
0
ファイル: PdfText.cs プロジェクト: sbc77/templator
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 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());
     }
 }
コード例 #4
0
        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));
        }
コード例 #5
0
ファイル: PdfRectangle.cs プロジェクト: sbc77/templator
        protected override void OnRender(PrintableElement element, PdfPage page)
        {
            using (var gfx = XGraphics.FromPdfPage(page))
            {
                var rect = element.AsXRect();

                gfx.DrawRectangle(null, XBrushes.Black, rect);
            }
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        public void Render(PrintableElement element, PdfPage page)
        {
            var renderer = this.GetRenderer(element);

            renderer.Render(element, page);

            if (this.Template.IsDebug)
            {
                this.RenderDebug(element, page);
            }
        }
コード例 #8
0
        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);
        }
コード例 #9
0
ファイル: Barcode.cs プロジェクト: sbc77/templator
        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);
        }
コード例 #10
0
ファイル: Barcode.cs プロジェクト: sbc77/templator
        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);
        }
コード例 #11
0
ファイル: PdfText.cs プロジェクト: sbc77/templator
        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);
                }
            }
        }
コード例 #12
0
        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());
            }
        }
コード例 #13
0
ファイル: Line.cs プロジェクト: sbc77/templator
        // 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);
        }
コード例 #14
0
 protected abstract void OnRender(PrintableElement element, PdfPage context);
コード例 #15
0
 public void Render(PrintableElement element, PdfPage page)
 {
     this.OnRender(element, page);
 }