public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { var element = new PrintElementItalic(); BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.ApplyTextProperties(element, elementMetadata); BuildHelper.ApplyInlineProperties(element, buildContext.ElementStyle); BuildHelper.ApplyInlineProperties(element, elementMetadata); // Генерация содержимого элемента var inlines = buildContext.ElementBuilder.BuildElements(buildContext, elementMetadata.Inlines); if (inlines != null) { foreach (var inline in inlines) { element.Inlines.Add(inline); } } BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.PostApplyTextProperties(element, elementMetadata); return(element); }
public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { var element = new PrintElementParagraph { Margin = BuildHelper.DefaultMargin, Padding = BuildHelper.DefaultPadding }; BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.ApplyTextProperties(element, elementMetadata); BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle); BuildHelper.ApplyBlockProperties(element, elementMetadata); ApplyIndent(element, elementMetadata); // Генерация содержимого элемента var contentContext = CreateContentContext(element, buildContext); var inlines = buildContext.ElementBuilder.BuildElements(contentContext, elementMetadata.Inlines); if (inlines != null) { foreach (var inline in inlines) { element.Inlines.Add(inline); } } BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.PostApplyTextProperties(element, elementMetadata); return(element); }
private Stream CreateBarcodeImageStream(PrintElementBuildContext buildContext, dynamic elementMetadata, PrintElementSize imageSize) { string textSting = BuildHelper.FormatValue(buildContext, elementMetadata.Text, elementMetadata.SourceFormat); textSting = PrepareText(textSting); if (textSting != null) { bool showText; showText = !ConvertHelper.TryToBool(elementMetadata.ShowText, out showText) || showText; // Для генерации штрих-кода используется функциональность FastReport try { var barcode = new BarcodeObject { Barcode = CreateBarcode(elementMetadata), ShowText = showText, Text = textSting, Height = 64 }; // Для получения размеров штрих-кода рисуем его первый раз using (var codeBmp = new Bitmap(1, 1)) using (var graphics = Graphics.FromImage(codeBmp)) using (var graphicCache = new GraphicCache()) { barcode.Draw(new FRPaintEventArgs(graphics, 1, 1, graphicCache)); } // Теперь, зная размеры штрих-кода, рисуем его второй раз if (barcode.Width > 0 && barcode.Height > 0) { using (var codeBmp = new Bitmap((int)barcode.Width, (int)barcode.Height)) using (var graphics = Graphics.FromImage(codeBmp)) using (var graphicCache = new GraphicCache()) { graphics.Clear(Color.White); barcode.Draw(new FRPaintEventArgs(graphics, 1, 1, graphicCache)); imageSize.Width = codeBmp.Width; imageSize.Height = codeBmp.Height; var codeStream = new MemoryStream(); codeBmp.Save(codeStream, ImageFormat.Png); codeStream.Seek(0, SeekOrigin.Begin); return(codeStream); } } } catch { } } return(null); }
private static void CreateTableColumns(PrintElementBuildContext buildContext, PrintElementTable table, dynamic columns) { if (columns != null) { var autoWidthAvailable = BuildHelper.CalcContentWidth(buildContext.ElementWidth, table.Margin, table.Padding, table.Border.Thickness); var autoWidthColumns = 0; // Генерация столбцов foreach (var column in columns) { var tableColumn = new PrintElementTableColumn(); double sizeInPixels; // Если указан абсолютный размер if (BuildHelper.TryToSizeInPixels(column.Size, column.SizeUnit, out sizeInPixels)) { // Если размер не превышает доступный остаток if (autoWidthAvailable > sizeInPixels) { autoWidthAvailable -= sizeInPixels; } else { sizeInPixels = autoWidthAvailable; autoWidthAvailable = 0; } tableColumn.Size = sizeInPixels; } // Если размер не указан, он высчитывается автоматически else { ++autoWidthColumns; tableColumn.Size = null; } table.Columns.Add(tableColumn); buildContext.MapElement(tableColumn, column); } if (autoWidthColumns > 0) { var autoWidth = Math.Max(autoWidthAvailable, 0) / autoWidthColumns; foreach (var tableColumn in table.Columns) { if (tableColumn.Size == null) { tableColumn.Size = autoWidth; } } } } }
private static PrintElementImage CreateImage(PrintElementBuildContext buildContext, dynamic elementMetadata) { var imageStream = GetImageDataStream(buildContext, elementMetadata.Data); if (imageStream != null) { return ApplyImageData(imageStream, elementMetadata); } return null; }
public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { var element = new PrintElementPageBreak(); BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.ApplyTextProperties(element, elementMetadata); BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle); BuildHelper.ApplyBlockProperties(element, elementMetadata); return(element); }
public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { PrintElementImage element = CreateBarcodeImage(buildContext, elementMetadata); BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.ApplyTextProperties(element, elementMetadata); BuildHelper.ApplyInlineProperties(element, buildContext.ElementStyle); BuildHelper.ApplyInlineProperties(element, elementMetadata); return(element); }
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); }
private static void ApplyReference(PrintElementHyperlink element, PrintElementBuildContext buildContext, dynamic elementMetadata) { string referenceSting = BuildHelper.FormatValue(buildContext, elementMetadata.Reference, elementMetadata.SourceFormat); if (!string.IsNullOrEmpty(referenceSting)) { Uri referenceUri; if (Uri.TryCreate(referenceSting, UriKind.RelativeOrAbsolute, out referenceUri)) { element.Reference = referenceUri; } } }
private static void CreateStaticTableRows(PrintElementBuildContext buildContext, PrintElementTable table, dynamic rows) { if (rows != null) { var rowIndex = 0; var columnCount = table.Columns.Count; var skippedCells = new List <int>(); foreach (var rowMetadata in rows) { var tableRow = new PrintElementTableRow(); if (rowMetadata != null) { var rowStyle = buildContext.FindStyle(rowMetadata.Style); // Установка общих свойств для текста BuildHelper.ApplyTextProperties(tableRow, rowStyle); BuildHelper.ApplyTextProperties(tableRow, rowMetadata); for (var columnIndex = 0; columnIndex < columnCount; ++columnIndex) { var cellOffset = GetCellOffset(columnCount, rowIndex, columnIndex); // Если ячейку не нужно отображать (из-за настроек RowSpan или ColumnSpan) if (!skippedCells.Contains(cellOffset)) { var cellMetadata = (rowMetadata.Cells != null) ? Enumerable.ElementAtOrDefault(rowMetadata.Cells, columnIndex) : null; var tableCell = CreateTableCell(buildContext, table, columnIndex, cellMetadata, true); tableRow.Cells.Add(tableCell); AddSkippedCells(skippedCells, columnCount, rowIndex, columnIndex, cellMetadata); } } // Пост-установка общих свойств для текста BuildHelper.PostApplyTextProperties(tableRow, rowStyle); BuildHelper.PostApplyTextProperties(tableRow, rowMetadata); } buildContext.MapElement(tableRow, rowMetadata); table.Rows.Add(tableRow); ++rowIndex; } } }
public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { var element = new PrintElementRun(); BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.ApplyTextProperties(element, elementMetadata); BuildHelper.ApplyInlineProperties(element, buildContext.ElementStyle); BuildHelper.ApplyInlineProperties(element, elementMetadata); ApplyText(element, buildContext, elementMetadata); BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.PostApplyTextProperties(element, elementMetadata); return(element); }
private static void ApplyPrintViewStyles(PrintElementBuildContext buildContext, dynamic styles) { if (styles != null) { var printViewStyles = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase); foreach (var style in styles) { string name; if (ConvertHelper.TryToNormString(style.Name, out name)) { printViewStyles[name] = style; } } buildContext.PrintViewStyles = printViewStyles; } }
private PrintElementImage CreateBarcodeImage(PrintElementBuildContext buildContext, dynamic elementMetadata) { var imageSize = new PrintElementSize(); var imageStream = CreateBarcodeImageStream(buildContext, elementMetadata, imageSize); try { imageStream = ApplyRotation(imageStream, elementMetadata.Rotation, imageSize); return(new PrintElementImage(imageStream) { Size = imageSize }); } catch { } return(null); }
public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { var element = new PrintElementLine { Border = new PrintElementBorder { Thickness = new PrintElementThickness(0, 0, 0, 1), Color = "Black" } }; BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.ApplyTextProperties(element, elementMetadata); BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle); BuildHelper.ApplyBlockProperties(element, elementMetadata); return(element); }
public static string FormatValue(PrintElementBuildContext buildContext, dynamic text, dynamic format) { string result; // Если текст не задан, значение берется из источника if (!ConvertHelper.TryToString(text, out result)) { var sourceValue = buildContext.ElementSourceValue; if (sourceValue != null) { // Определение функции для форматирования значения Func <object, string> formatFunc = buildContext.ElementBuilder.BuildElement(buildContext, format); if (formatFunc == null) { formatFunc = v => v.ToString(); } // Форматирование значения (или значений для коллекции) result = ConvertHelper.ObjectIsCollection(sourceValue) ? string.Join("; ", ((IEnumerable)sourceValue).Cast <object>().Select(formatFunc)) : formatFunc(sourceValue); } else if (buildContext.IsDesignMode) { // В режиме дизайна отображается наименование свойства источника данных или выражение if (!string.IsNullOrEmpty(buildContext.ElementSourceProperty)) { result = string.Format("[{0}]", buildContext.ElementSourceProperty); } else if (!string.IsNullOrEmpty(buildContext.ElementSourceExpression)) { result = string.Format("[{0}]", buildContext.ElementSourceExpression); } } } return(result); }
private static PrintElementTableRow CreateHeaderTableRow(PrintElementBuildContext buildContext, PrintElementTable table, dynamic columns) { var tableRow = new PrintElementTableRow(); if (columns != null) { var columnIndex = 0; foreach (var column in columns) { var cellMetadata = column.Header; var tableCell = CreateTableCell(buildContext, table, columnIndex, cellMetadata, false); tableRow.Cells.Add(tableCell); ++columnIndex; } } return(tableRow); }
public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { var element = new PrintViewDocument { Font = new PrintElementFont { Family = BuildHelper.DefautlFontFamily } }; // Установка стилей печатного представления ApplyPrintViewStyles(buildContext, elementMetadata.Styles); // Установка общих свойств печатного представления BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.ApplyTextProperties(element, elementMetadata); // Настройка размеров страницы печатного представления ApplyPageSize(element, elementMetadata.PageSize); ApplyPagePadding(element, elementMetadata.PagePadding); // Настройка размеров колонки печатного представления var contentWidth = CalcContentWidth(element); // Генерация содержимого печатного представления var contentContext = buildContext.Create(contentWidth); var blocks = buildContext.ElementBuilder.BuildElements(contentContext, elementMetadata.Blocks); if (blocks != null) { foreach (var block in blocks) { element.Blocks.Add(block); } } BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.PostApplyTextProperties(element, elementMetadata); return(element); }
private static PrintElementTableRow CreateDynamicTableRow(PrintElementBuildContext buildContext, PrintElementTable table, dynamic columns, object rowSource) { var tableRow = new PrintElementTableRow(); if (columns != null) { var rowContext = buildContext.Create(buildContext.ElementWidth); rowContext.ElementSourceValue = rowSource; var columnIndex = 0; foreach (var column in columns) { var cellMetadata = column.CellTemplate; var tableCell = CreateTableCell(rowContext, table, columnIndex, cellMetadata, false); tableRow.Cells.Add(tableCell); ++columnIndex; } } return(tableRow); }
private static Stream GetImageDataStream(PrintElementBuildContext buildContext, dynamic imageData) { Stream result = null; byte[] imageDataBytes; // Если данные не заданы, они берутся из источника if (!ConvertHelper.TryToBytes(imageData, out imageDataBytes) || imageDataBytes == null) { if (!ConvertHelper.TryToBytes(buildContext.ElementSourceValue, out imageDataBytes) || imageDataBytes == null) { if (buildContext.IsDesignMode) { // В режиме дизайна отображается наименование свойства источника данных или выражение if (!string.IsNullOrEmpty(buildContext.ElementSourceProperty)) { result = GetImageDataStreamStub(string.Format("[{0}]", buildContext.ElementSourceProperty)); } else if (!string.IsNullOrEmpty(buildContext.ElementSourceExpression)) { result = GetImageDataStreamStub(string.Format("[{0}]", buildContext.ElementSourceExpression)); } } } else { result = new MemoryStream(imageDataBytes); } } else { result = new MemoryStream(imageDataBytes); } return result; }
public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { return(FormatFunc(elementMetadata.Format)); }
private static PrintElementBuildContext CreateContentContext(PrintElementParagraph element, PrintElementBuildContext buildContext) { var contentWidth = (element.Border != null) ? BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, element.Border.Thickness) : BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding); return(buildContext.Create(contentWidth)); }
private static void ApplyText(PrintElementRun element, PrintElementBuildContext buildContext, dynamic elementMetadata) { element.Text = BuildHelper.FormatValue(buildContext, elementMetadata.Text, elementMetadata.SourceFormat); }
private static PrintElementBuildContext CreateItemContext(PrintElementList element, PrintElementBuildContext buildContext) { var contentWidth = (element.Border != null) ? BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, element.Border.Thickness, new PrintElementThickness(element.MarkerOffsetSize)) : BuildHelper.CalcContentWidth(buildContext.ElementWidth, element.Margin, element.Padding, new PrintElementThickness(element.MarkerOffsetSize)); return(buildContext.Create(contentWidth)); }
private static PrintElementTableCell CreateTableCell(PrintElementBuildContext buildContext, PrintElementTable table, int columnIndex, dynamic cellMetadata, bool applySpan) { var tableCell = new PrintElementTableCell { ColumnSpan = 1, RowSpan = 1, Border = new PrintElementBorder { Thickness = new PrintElementThickness(0, 0, 1, 1), Color = PrintElementColors.Black }, Padding = BuildHelper.DefaultPadding }; if (cellMetadata != null) { var cellStyle = buildContext.FindStyle(cellMetadata.Style); // Установка общих свойств для текста BuildHelper.ApplyTextProperties(tableCell, cellStyle); BuildHelper.ApplyTextProperties(tableCell, cellMetadata); // Установка общих свойств ячейки таблицы BuildHelper.ApplyTableCellProperties(tableCell, cellStyle); BuildHelper.ApplyTableCellProperties(tableCell, cellMetadata); // Объединение ячеек по горизонтали и вертикали if (applySpan) { tableCell.ColumnSpan = GetCellSpan(cellMetadata.ColumnSpan); tableCell.RowSpan = GetCellSpan(cellMetadata.RowSpan); } // Вычисление ширины ячейки для размещения содержимого var cellWidth = 0.0; for (var i = columnIndex; (i < columnIndex + tableCell.ColumnSpan) && (i < table.Columns.Count); ++i) { cellWidth += table.Columns[i].Size.Value; } cellWidth = BuildHelper.CalcContentWidth(cellWidth, tableCell.Padding, tableCell.Border.Thickness); // Создание содержимого и помещение его в ячейку var cellContext = buildContext.Create(cellWidth); var cellContent = buildContext.ElementBuilder.BuildElement(cellContext, cellMetadata.Block); if (cellContent is PrintElementBlock) { tableCell.Block = cellContent; } // Пост-установка общих свойств для текста BuildHelper.PostApplyTextProperties(tableCell, cellStyle); BuildHelper.PostApplyTextProperties(tableCell, cellMetadata); } buildContext.MapElement(tableCell, cellMetadata); return(tableCell); }
public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { var element = new PrintElementTable { Border = new PrintElementBorder { Thickness = new PrintElementThickness(1, 1, 0, 0), Color = PrintElementColors.Black }, Margin = BuildHelper.DefaultMargin, Padding = BuildHelper.DefaultPadding, }; BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.ApplyTextProperties(element, elementMetadata); BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle); BuildHelper.ApplyBlockProperties(element, elementMetadata); // Генерация стобцов таблицы CreateTableColumns(buildContext, element, elementMetadata.Columns); // Генерация заголовка таблицы bool showHeader; if (!ConvertHelper.TryToBool(elementMetadata.ShowHeader, out showHeader) || showHeader) { var tableRow = CreateHeaderTableRow(buildContext, element, elementMetadata.Columns); element.Rows.Add(tableRow); } // Генерация явно объявленных строк таблицы CreateStaticTableRows(buildContext, element, elementMetadata.Rows); // Генерация строк таблицы по данным источника var tableSource = buildContext.ElementSourceValue; if (ConvertHelper.ObjectIsCollection(tableSource)) { if (HasCellTemplate(elementMetadata.Columns)) { foreach (var rowSource in (IEnumerable)tableSource) { var tableRow = CreateDynamicTableRow(buildContext, element, elementMetadata.Columns, rowSource); element.Rows.Add(tableRow); } } } else if (buildContext.IsDesignMode) { // Отображение шаблона строки в дизайнере if (HasCellTemplate(elementMetadata.Columns)) { var tableRow = CreateDynamicTableRow(buildContext, element, elementMetadata.Columns, null); element.Rows.Add(tableRow); } } BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.PostApplyTextProperties(element, elementMetadata); return(element); }
public object Create(PrintElementBuildContext buildContext, dynamic elementMetadata) { var element = new PrintElementList { Margin = BuildHelper.DefaultMargin, Padding = BuildHelper.DefaultPadding, MarkerStyle = PrintElementListMarkerStyle.None }; BuildHelper.ApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.ApplyTextProperties(element, elementMetadata); BuildHelper.ApplyBlockProperties(element, buildContext.ElementStyle); BuildHelper.ApplyBlockProperties(element, elementMetadata); ApplyStartIndex(element, elementMetadata.StartIndex); ApplyMarkerStyle(element, elementMetadata.MarkerStyle); MarkerOffsetStyle(element, elementMetadata.MarkerOffsetSize, elementMetadata.MarkerOffsetSizeUnit); var itemContext = CreateItemContext(element, buildContext); // Генерация явно объявленных элементов списка var staticItems = buildContext.ElementBuilder.BuildElements(itemContext, elementMetadata.Items); if (staticItems != null) { foreach (var staticItem in staticItems) { var listItem = new PrintElementSection(); listItem.Blocks.Add(staticItem); element.Items.Add(listItem); } } // Генерация элементов списка по данным источника var listItemTemplate = elementMetadata.ItemTemplate; var listSource = buildContext.ElementSourceValue; if (listItemTemplate != null) { if (ConvertHelper.ObjectIsCollection(listSource)) { foreach (var itemSource in (IEnumerable)listSource) { itemContext.ElementSourceValue = itemSource; var dynamicItem = buildContext.ElementBuilder.BuildElement(itemContext, listItemTemplate); if (dynamicItem is PrintElementBlock) { var listItem = new PrintElementSection(); listItem.Blocks.Add(dynamicItem); element.Items.Add(listItem); } } } else if (buildContext.IsDesignMode) { // Отображение шаблона элемента в дизайнере itemContext.ElementSourceValue = null; var dynamicItem = buildContext.ElementBuilder.BuildElement(itemContext, listItemTemplate); if (dynamicItem is PrintElementBlock) { var listItem = new PrintElementSection(); listItem.Blocks.Add(dynamicItem); element.Items.Add(listItem); } } } BuildHelper.PostApplyTextProperties(element, buildContext.ElementStyle); BuildHelper.PostApplyTextProperties(element, elementMetadata); return(element); }