3

複数のページがあり、各ページに1つのwpfウィンドウが表示されているドキュメントを作成したいと思います。

PrintDialogとPrintVisualを使用して1つのウィンドウを印刷することができました。しかし、これは1つのページでしか機能しないようですか?いくつかのページでドキュメントを作成し、完全なセットを印刷する方法についてのアイデア。

そのビジュアル(コードで参照)を挿入し、ドキュメントのページとして挿入して、その後印刷することはできますか?

アプローチは本当に悪いですか?この問題を解決する他の方法はありますか?

      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
4

1 に答える 1

12

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に変換できるはずです。

HTH、

于 2012-04-13T10:21:46.273 に答える