Exemplo n.º 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;
        }
        /// <summary>
        /// Создает файл печатного представления.
        /// </summary>
        /// <param name="printView">Шаблон печатного представления.</param>
        /// <param name="printViewSource">Данные печатного представления.</param>
        /// <param name="printViewFileFormat">Формат файла печатного представления.</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <returns>Файл печатного представления.</returns>
        public byte[] BuildFile(object printView, object printViewSource, PrintViewFileFormat printViewFileFormat = PrintViewFileFormat.Pdf)
        {
            if (printView == null)
            {
                throw new ArgumentNullException("printView");
            }

            // Текущая реализация на базе WPF требует STA-поток
            return(ExecuteInStaThread(() =>
            {
                // Формирование документа печатного представления
                var document = _printViewFactory.Create(printView, printViewSource);

                if (document != null)
                {
                    // Сохранение документа печатного представления в указанном формате
                    using (var documentStream = new MemoryStream())
                    {
                        _printViewConverter.Convert(document, documentStream, printViewFileFormat);

                        documentStream.Flush();

                        return documentStream.ToArray();
                    }
                }

                return null;
            }));
        }