我想创建一个包含多个页面的文档,并在每个页面上显示一个wpf窗口.
我设法使用PrintDialog和PrintVisual打印一个窗口.然而,这似乎只适用于一个页面?任何想法如何我可以构建一个包含多个页面的文档并打印整套文档.
我可以插入那个视觉(在代码中引用)并将其作为页面插入文档中并在此之后打印出来吗?
Sub Print (Dim ele As FrameWorkElement) Dim margin As Double = 30 Dim titlePadding As Double = 10 Dim printDlg As PrintDialog = New PrintDialog() printDlg.PrintTicket.PageOrientation = PageOrientation.Landscape If (printDlg.ShowDialog() <> True) Then Return Dim formattedText As FormattedText = New FormattedText(Name,CultureInfo.GetCultureInfo("en-us"),FlowDirection.LeftToRight,New Typeface("Verdana"),25,Brushes.Black) formattedText.MaxTextWidth = printDlg.PrintableAreaWidth Dim scale As Double = Math.Min(printDlg.PrintableAreaWidth / (ele.ActualWidth + (Margin * 2)),(printDlg.PrintableAreaHeight - (formattedText.Height + titlePadding)) / (ele.ActualHeight + (Margin * 2))) Dim visual As DrawingVisual = New DrawingVisual() Using context As DrawingContext = visual.RenderOpen() Dim brush As VisualBrush = New VisualBrush(ele) context.DrawRectangle(brush,Nothing,New Rect(New Point(margin,margin + formattedText.Height + titlePadding),New Size(ele.ActualWidth,ele.ActualHeight))) context.DrawText(formattedText,New Point(margin,margin)) End Using visual.Transform = New ScaleTransform(scale,scale) printDlg.PrintVisual(visual,"") End Sub
您想要创建具有多个FixedPages的FixedDocument.
例:
如何创建新文档和单页.
var pageSize = new Size(8.26 * 96,11.69 * 96); // A4 page,at 96 dpi var document = new FixedDocument(); document.DocumentPaginator.PageSize = pageSize; // Create FixedPage var fixedPage = new FixedPage(); fixedPage.Width = pageSize.Width; fixedPage.Height = pageSize.Height; // Add visual,measure/arrange page. fixedPage.Children.Add((UIElement)visual); fixedPage.Measure(pageSize); fixedPage.Arrange(new Rect(new Point(),pageSize)); fixedPage.UpdateLayout(); // Add page to document var pageContent = new PageContent(); ((IAddChild)pageContent).AddChild(fixedPage); document.Pages.Add(pageContent); // Send to the printer. var pd = new PrintDialog(); pd.PrintDocument(document.DocumentPaginator,"My Document");
用C#编写,但是你应该可以转换为VB.
HTH,