【问题标题】:Printing in Universal Apps在通用应用程序中打印
【发布时间】:2023-03-19 16:54:01
【问题描述】:

我正在开发一个需要执行计算并根据结果生成打印输出的 Windows 10 通用应用程序。我不知道从哪里开始打印。创建新文档最简单的方法是什么?在 WPF 中,我们有 FixedDocument 和 FlowDocument。我看不到通用应用格式的那些。

【问题讨论】:

    标签: c# printing uwp


    【解决方案1】:

    声明PrintManagerPrintDocumentPrintManager 类型与支持其他 Windows 打印功能的类型一起位于 Windows.Graphics.Printing 命名空间中。 PrintDocument 类型与支持准备用于打印的 XAML 内容的其他类型一起位于 Windows.UI.Xaml.Printing 命名空间中。您可以通过将以下 using 或 Imports 语句添加到您的页面来更轻松地编写打印代码。

    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    

    PrintDocument 类用于处理应用程序和PrintManager 之间的大部分交互,但它公开了几个自己的回调。在注册期间,创建PrintManagerPrintDocument 的实例并为其打印事件注册处理程序。 在 UWP 打印示例中,注册是通过 RegisterForPrinting 方法执行的。

    public virtual void RegisterForPrinting()
    {
       printDocument = new PrintDocument();
       printDocumentSource = printDocument.DocumentSource;
       printDocument.Paginate += CreatePrintPreviewPages;
       printDocument.GetPreviewPage += GetPrintPreviewPage;
       printDocument.AddPages += AddPrintPages;
    
       PrintManager printMan = PrintManager.GetForCurrentView();
       printMan.PrintTaskRequested += PrintTaskRequested;
    }
    

    当用户转到支持的页面时,它会在 OnNavigatedTo 方法中启动注册。

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
       // Initalize common helper class and register for printing
       printHelper = new PrintHelper(this);
       printHelper.RegisterForPrinting();
    
       // Initialize print content for this scenario
       printHelper.PreparePrintContent(new PageToPrint());
    
       // Tell the user how to print
       MainPage.Current.NotifyUser("Print contract registered with customization, use the Print button to print.", NotifyType.StatusMessage);
    }
    

    当用户离开页面时,断开打印事件处理程序。如果您有一个多页应用程序并且没有断开打印,则当用户离开页面然后返回时会引发异常。

    您可以在Print from your app 上阅读更多内容,还可以找到提示:提示本主题中的大多数示例均基于打印示例。要查看完整代码,请从 GitHub 上的 Windows-universal-samples 存储库下载通用 Windows 平台 (UWP) 打印示例。

    【讨论】:

    • 这是微软网站上的逐字记录。我尝试将此代码复制并粘贴到我的“MainPage”类中,但它充满了红色下划线,甚至无法编译。我们将不胜感激有关如何在简单的应用程序中实现此代码的更多实用指导。
    • 如何为“PrintHelper”类添加参考?
    【解决方案2】:

    GetPrintPreviewPage 事件对每个页面执行一次,当我返回一个页面时,该事件不发生。 我使用这段代码来持久化当前的预览页面。

    私有异步 void PrintDoc_GetPreviewPage(object p_sender, GetPreviewPageEventArgs p_args) { SelectedPagePreview = p_args.PageNumber;

    我正在 Windows 8.1 和平板 x64 上进行测试。

    【讨论】:

      猜你喜欢
      • 2011-07-17
      • 2023-03-12
      • 1970-01-01
      • 2012-06-16
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2010-09-30
      相关资源
      最近更新 更多