Как напечатать несколько страниц WPF в одном документе
Я хочу создать документ с несколькими страницами и с одним окном 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
1 ответ
Решение
Вы хотите создать FixedDocument
с несколькими FixedPages
,
Пример:
Как создать новый документ и одну страницу.
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.
НТН,