加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在一个文档中打印多个WPF页面

发布时间:2020-12-17 00:04:39 所属栏目:大数据 来源:网络整理
导读:我想创建一个包含多个页面的文档,并在每个页面上显示一个wpf窗口. 我设法使用PrintDialog和PrintVisual打印一个窗口.然而,这似乎只适用于一个页面?任何想法如何我可以构建一个包含多个页面的文档并打印整套文档. 我可以插入那个视觉(在代码中引用)并将其作
我想创建一个包含多个页面的文档,并在每个页面上显示一个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,

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读