コード例 #1
0
        private void RenderPrintView(object printView)
        {
            PrintElementMetadataMap elementMetadataMap = null;
            FrameworkFlowDocument   printViewDocument  = null;

            if (printView != null)
            {
                try
                {
                    elementMetadataMap = new PrintElementMetadataMap();

                    var printViewDocumentModel = PrintViewFactory.Create(printView, null, elementMetadataMap);

                    printViewDocument = FlowDocumentBuilder.Build(printViewDocumentModel, elementMetadataMap);
                }
                catch (Exception error)
                {
                    elementMetadataMap = null;
                    printViewDocument  = CreateDocumentByError(error);
                }
            }

            _elementMetadataMap = elementMetadataMap;

            Editor.Document = printViewDocument;
        }
コード例 #2
0
 public static void RemapElement(this PrintElementMetadataMap elementMetadataMap, dynamic element, object flowElement)
 {
     if (elementMetadataMap != null && flowElement != null)
     {
         var elementMetadata = elementMetadataMap.GetMetadata(element);
         elementMetadataMap.Map(flowElement, elementMetadata);
     }
 }
コード例 #3
0
        public PrintViewDocument Create(object printView, object printViewSource, PrintElementMetadataMap elementMetadataMap = null)
        {
            var buildContext = new PrintElementBuildContext
            {
                IsDesignMode       = false,
                PrintViewSource    = printViewSource,
                ElementBuilder     = ElementBuilder,
                ElementMetadataMap = elementMetadataMap
            };

            var document = ElementBuilder.BuildElement(buildContext, printView, "PrintView") as PrintViewDocument;

            return(document);
        }
コード例 #4
0
        public object Build(PrintElement element, PrintElementMetadataMap elementMetadataMap)
        {
            if (element != null)
            {
                IFlowElementBuilder builder;

                if (_builders.TryGetValue(element.GetType(), out builder))
                {
                    var flowElement = builder.Build(this, element, elementMetadataMap);

                    elementMetadataMap.RemapElement(element, flowElement);

                    return(flowElement);
                }
            }

            return(null);
        }
        public override object Build(FlowElementBuilderContext context, PrintElementSection element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new Section();

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyBlockStyles(elementContent, element);

            foreach (var block in element.Blocks)
            {
                var newBlock = context.Build <Block>(block, elementMetadataMap);
                elementContent.Blocks.Add(newBlock);
            }

            return(elementContent);
        }
コード例 #6
0
        public override object Build(FlowElementBuilderContext context, PrintViewDocument element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new FrameworkFlowDocument
            {
                FontFamily = new FontFamily("Arial")
            };

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyDocumentStyles(elementContent, element);

            foreach (var block in element.Blocks)
            {
                var blockContent = context.Build <Block>(block, elementMetadataMap);

                elementContent.Blocks.Add(blockContent);
            }

            return(elementContent);
        }
        public override object Build(FlowElementBuilderContext context, PrintElementHyperlink element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new Hyperlink();

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyInlineStyles(elementContent, element);

            elementContent.NavigateUri = element.Reference;

            foreach (var inline in element.Inlines)
            {
                var inlineContent = context.Build <Inline>(inline, elementMetadataMap);

                elementContent.Inlines.Add(inlineContent);
            }

            return(elementContent);
        }
コード例 #8
0
 public static System.Windows.Documents.FlowDocument Build(PrintViewDocument innerDocument, PrintElementMetadataMap elementMetadataMap)
 {
     return((System.Windows.Documents.FlowDocument)Context.Build(innerDocument, elementMetadataMap));
 }
        public override object Build(FlowElementBuilderContext context, PrintElementImage element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new InlineUIContainer {
                BaselineAlignment = BaselineAlignment.Baseline
            };

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyInlineStyles(elementContent, element);

            var imageSource = new BitmapImage();

            imageSource.BeginInit();

            var elementSourceStream = new MemoryStream();

            element.Source.Save(elementSourceStream, ImageFormat.Png);
            imageSource.StreamSource = elementSourceStream;
            imageSource.EndInit();

            var imageControl = new Image();

            imageControl.BeginInit();
            imageControl.Width = (element.Size != null
                                      ? element.Size.Width
                                      : null) ?? imageSource.Width;
            imageControl.Height = (element.Size != null
                                       ? element.Size.Height
                                       : null) ?? imageSource.Height;
            imageControl.Source  = imageSource;
            imageControl.Stretch = Stretch.Fill;
            imageControl.EndInit();

            elementContent.Child = imageControl;

            return(elementContent);
        }
コード例 #10
0
        public override object Build(FlowElementBuilderContext context, PrintElementLine element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new Paragraph
            {
                FontSize        = 0.1,
                BorderBrush     = Brushes.Black,
                BorderThickness = new Thickness(0, 0, 0, 1)
            };

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyBlockStyles(elementContent, element);

            return(elementContent);
        }
コード例 #11
0
        public override object Build(FlowElementBuilderContext context, PrintElementPageBreak element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new Paragraph
            {
                FontSize        = 0.1,
                BreakPageBefore = true
            };

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyBlockStyles(elementContent, element);

            return(elementContent);
        }
        public override object Build(FlowElementBuilderContext context, PrintElementList element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new List
            {
                MarkerStyle  = TextMarkerStyle.None,
                MarkerOffset = element.MarkerOffsetSize + DefaultMarkerOffsetSize
            };

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyBlockStyles(elementContent, element);

            if (element.StartIndex != null)
            {
                elementContent.StartIndex = element.StartIndex.Value;
            }

            if (element.MarkerStyle != null)
            {
                elementContent.MarkerStyle = FlowElementBuilderHelper.GetMarkerStyle(element.MarkerStyle.Value);
            }

            foreach (var item in element.Items)
            {
                var itemContent = context.Build <Block>(item, elementMetadataMap);

                if (itemContent != null)
                {
                    var listItem = new ListItem();
                    listItem.Blocks.Add(itemContent);
                    elementContent.ListItems.Add(listItem);
                }
            }

            return(elementContent);
        }
コード例 #13
0
        public override object Build(FlowElementBuilderContext context, PrintElementTable element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new Table
            {
                CellSpacing     = 0,
                BorderBrush     = Brushes.Black,
                BorderThickness = new Thickness(1, 1, 0, 0),
                RowGroups       = { new TableRowGroup() }
            };

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyBlockStyles(elementContent, element);

            foreach (var column in element.Columns)
            {
                var columnContent = new TableColumn {
                    Width = new GridLength(column.Size ?? 1)
                };

                elementMetadataMap.RemapElement(column, columnContent);

                elementContent.Columns.Add(columnContent);
            }

            foreach (var row in element.Rows)
            {
                var rowContent = new TableRow();

                FlowElementBuilderHelper.ApplyRowStyles(rowContent, row);

                var colSpansCount = 0;

                foreach (var cell in row.Cells)
                {
                    var cellContent = new TableCell
                    {
                        ColumnSpan      = 1,
                        RowSpan         = 1,
                        BorderBrush     = Brushes.Black,
                        BorderThickness = new Thickness(0, 0, 1, 1)
                    };

                    //Check ColSpan and RowSpan

                    colSpansCount += cell.ColumnSpan ?? 1;

                    if (colSpansCount > element.Columns.Count)
                    {
                        cell.ColumnSpan = element.Columns.Count - (colSpansCount - cell.ColumnSpan);
                    }

                    FlowElementBuilderHelper.ApplyCellStyles(cellContent, cell);

                    var blockContent = context.Build <Block>(cell.Block, elementMetadataMap);

                    if (blockContent != null)
                    {
                        cellContent.Blocks.Add(blockContent);
                    }

                    elementMetadataMap.RemapElement(cell, cellContent);

                    rowContent.Cells.Add(cellContent);
                }

                elementMetadataMap.RemapElement(row, rowContent);

                elementContent.RowGroups[0].Rows.Add(rowContent);
            }

            return(elementContent);
        }
コード例 #14
0
        public override object Build(FlowElementBuilderContext context, PrintElementRun element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new Run {
                Text = element.Text
            };

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyInlineStyles(elementContent, element);

            return(elementContent);
        }
コード例 #15
0
 public TResult Build <TResult>(PrintElement element, PrintElementMetadataMap elementMetadataMap) where TResult : TextElement
 {
     return((TResult)Build(element, elementMetadataMap));
 }
 public abstract object Build(FlowElementBuilderContext context, TElement element, PrintElementMetadataMap elementMetadataMap);
        public override object Build(FlowElementBuilderContext context, PrintElementParagraph element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new Paragraph();

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyBlockStyles(elementContent, element);

            if (element.IndentSize != null)
            {
                elementContent.TextIndent = element.IndentSize.Value;
            }

            foreach (var inline in element.Inlines)
            {
                var newInline = context.Build <Inline>(inline, elementMetadataMap);

                if (newInline != null)
                {
                    elementContent.Inlines.Add(newInline);
                }
            }

            return(elementContent);
        }
 public object Build(FlowElementBuilderContext context, PrintElement element, PrintElementMetadataMap elementMetadataMap)
 {
     return(Build(context, (TElement)element, elementMetadataMap));
 }
コード例 #19
0
        public override object Build(FlowElementBuilderContext context, PrintElementUnderline element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new Underline();

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyInlineStyles(elementContent, element);

            foreach (var inline in element.Inlines)
            {
                var inlineContent = context.Build <Inline>(inline, elementMetadataMap);

                elementContent.Inlines.Add(inlineContent);
            }

            return(elementContent);
        }
        public override object Build(FlowElementBuilderContext context, PrintElementLineBreak element, PrintElementMetadataMap elementMetadataMap)
        {
            var elementContent = new LineBreak();

            FlowElementBuilderHelper.ApplyBaseStyles(elementContent, element);
            FlowElementBuilderHelper.ApplyInlineStyles(elementContent, element);

            return(elementContent);
        }