예제 #1
0
 public void Convert(PrintViewDocument document, Stream documentStream)
 {
     using (var writer = new StreamWriter(documentStream, Encoding.UTF8, DefaultBufferSize, true))
     {
         Builder.Build(document, writer);
     }
 }
예제 #2
0
        private static void ApplyPageSize(PrintViewDocument element, dynamic pageSize)
        {
            // По умолчанию размер страницы A4
            const double pageWidthA4  = 21.0 * SizeUnits.Cm;
            const double pageHeightA4 = 29.7 * SizeUnits.Cm;

            var pageWidth  = pageWidthA4;
            var pageHeight = pageHeightA4;

            if (pageSize != null)
            {
                if (!BuildHelper.TryToSizeInPixels(pageSize.Width, pageSize.SizeUnit, out pageWidth))
                {
                    pageWidth = pageWidthA4;
                }

                if (!BuildHelper.TryToSizeInPixels(pageSize.Height, pageSize.SizeUnit, out pageHeight))
                {
                    pageHeight = pageHeightA4;
                }
            }

            element.PageSize = new PrintElementSize {
                Width = pageWidth, Height = pageHeight
            };
        }
예제 #3
0
 private static double CalcContentWidth(PrintViewDocument element)
 {
     return(Math.Max((double)element.PageSize.Width
                     - (double)element.PagePadding.Left
                     - (double)element.PagePadding.Right,
                     0));
 }
        public void Convert(PrintViewDocument document, Stream documentStream)
        {
            var saveSize    = document.PageSize;
            var savePadding = document.PagePadding;

            document.PagePadding = default(PrintElementThickness);
            document.PageSize    = null;

            try
            {
                using (var htmlStream = new MemoryStream())
                {
                    _htmlConverter.Convert(document, htmlStream);

                    htmlStream.Position = 0;

                    _htmlToPdfUtil.Convert(saveSize, savePadding, htmlStream, documentStream);
                }
            }
            finally
            {
                document.PageSize    = saveSize;
                document.PagePadding = savePadding;
            }
        }
        public void Convert(PrintViewDocument printView, Stream printViewStream, PrintViewFileFormat printViewFileFormat)
        {
            IFlowDocumentConverter documentConverter;

            if (_documentConverters.TryGetValue(printViewFileFormat, out documentConverter))
            {
                documentConverter.Convert(printView, printViewStream);
            }
            else
            {
                throw new NotSupportedException(string.Format(Resources.PrintViewFileFormatIsNotSupported, printViewFileFormat));
            }
        }
예제 #6
0
        private static void ApplyPagePadding(PrintViewDocument element, dynamic pagePadding)
        {
            // По умолчанию отступ на странице 1см
            const double pagePadding1Cm = 1.0 * SizeUnits.Cm;

            PrintElementThickness pagePaddingThickness;

            if (!BuildHelper.TryToThickness(pagePadding, out pagePaddingThickness))
            {
                pagePaddingThickness = new PrintElementThickness(pagePadding1Cm);
            }

            element.PagePadding = pagePaddingThickness;
        }
예제 #7
0
        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);
        }
예제 #8
0
 public static System.Windows.Documents.FlowDocument Build(PrintViewDocument innerDocument, PrintElementMetadataMap elementMetadataMap)
 {
     return((System.Windows.Documents.FlowDocument)Context.Build(innerDocument, elementMetadataMap));
 }
        public void ShouldBuildDocumentWithContents()
        {
            //Given
            var context = HtmlBuilderTestHelper.CreateHtmlBuilderContext();
            var element = new PrintViewDocument();
            var result  = new TextWriterWrapper();

            var image0   = new PrintElementImage(_getStream(Resources.ImageRotate0));
            var image90  = new PrintElementImage(_getStream(Resources.ImageRotate90));
            var image180 = new PrintElementImage(_getStream(Resources.ImageRotate180));
            var image270 = new PrintElementImage(_getStream(Resources.ImageRotate270));

            image0.Size = new PrintElementSize {
                Height = 50, Width = 150
            };
            image90.Size = new PrintElementSize {
                Height = 150, Width = 50
            };
            image180.Size = new PrintElementSize {
                Height = 50, Width = 150
            };
            image270.Size = new PrintElementSize {
                Height = 150, Width = 50
            };

            var par1 = new PrintElementParagraph();

            par1.Inlines.Add(image0);
            par1.Inlines.Add(image90);
            par1.Inlines.Add(image180);
            par1.Inlines.Add(image270);

            var runNormal = new PrintElementRun {
                Text = "Normal"
            };
            var runSubscript = new PrintElementRun
            {
                Text = "Subscript",
                Font = new PrintElementFont {
                    Variant = PrintElementFontVariant.Subscript
                }
            };
            var runSuperscript = new PrintElementRun
            {
                Text = "Superscript",
                Font = new PrintElementFont {
                    Variant = PrintElementFontVariant.Superscript
                }
            };

            var par2 = new PrintElementParagraph();

            par2.Inlines.Add(runNormal);
            par2.Inlines.Add(runSubscript);
            par2.Inlines.Add(runSuperscript);

            var run = new PrintElementRun {
                Text = "White Foreground & Black Background"
            };

            var par3 = new PrintElementParagraph();

            par3.Foreground = "white";
            par3.Background = "black";

            par3.Inlines.Add(run);

            element.Blocks.Add(par1);
            element.Blocks.Add(par2);
            element.Blocks.Add(new PrintElementPageBreak());
            element.Blocks.Add(par3);

            element.PagePadding = new PrintElementThickness(100);

            //When
            context.Build(element, result.Writer);

            //Then
            Assert.AreEqual(Resources.ResultTestShouldBuildDocumentWithContents, result.GetText());
        }
예제 #10
0
        public static void ApplyDocumentStyles(System.Windows.Documents.FlowDocument document, PrintViewDocument element)
        {
            var pagePadding = new Thickness(
                element.PagePadding.Left,
                element.PagePadding.Top,
                element.PagePadding.Right,
                element.PagePadding.Bottom);


            if (element.PageSize != null)
            {
                if (element.PageSize.Width != null)
                {
                    document.PageWidth = element.PageSize.Width.Value - pagePadding.Left - pagePadding.Right + 10 /* RichTextBox Default Padding */;
                }

                if (element.PageSize.Height != null)
                {
                    document.PageHeight = element.PageSize.Height.Value;
                }
            }
        }