title: How to print multiple WPF pages in one document
body: <p>I want to create a document with several pages and with one wpf window depicted on each page.</p>
  
  <p>I managed to print one window using PrintDialog and PrintVisual. However this seem to only work with one single page? Any ideas how I can build a document with several pages and print the complete set. </p>
  
  <p>Can I insert that visual (referred in code) and insert it as a page in a document and print it after that?</p>
  
  <p>Is approach really bad? Is there som other way to solve this problem?</p>
  
  <pre><code>      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() &lt;&gt; 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
  </code></pre>