如何在UWP应用程序中获取所有已安装的打印机列表及其支持的纸张尺寸?

时间:2018-03-07 11:37:15

标签: c# printing uwp uwp-xaml

我正在开发一个UWP应用程序,我需要打印,只能打印3种尺寸。为了实现这一点,我认为我需要获得机器中所有已安装打印机的列表以及它们支持的纸张尺寸。

我已经研究了很多,发现我可以使用UWP样本大师的打印样本中提供的PrintHelper类。

ShowPrintUIAsync()这是显示已安装打印机下拉菜单的方法但是我无法通过调试找出它是如何获取所有打印机名称的。

 protected virtual void CreatePrintPreviewPages(object sender, PaginateEventArgs e)
    {
        // Clear the cache of preview pages
        printPreviewPages.Clear();

        // Clear the print canvas of preview pages
        PrintCanvas.Children.Clear();

        // This variable keeps track of the last RichTextBlockOverflow element that was added to a page which will be printed
        RichTextBlockOverflow lastRTBOOnPage;

        // Get the PrintTaskOptions
        PrintTaskOptions printingOptions = ((PrintTaskOptions)e.PrintTaskOptions);

        // Get the page description to deterimine how big the page is
        PrintPageDescription pageDescription = printingOptions.GetPageDescription(0);

        // We know there is at least one page to be printed. passing null as the first parameter to
        // AddOnePrintPreviewPage tells the function to add the first page.
        lastRTBOOnPage = AddOnePrintPreviewPage(null, pageDescription);

        // We know there are more pages to be added as long as the last RichTextBoxOverflow added to a print preview
        // page has extra content
        //while (lastRTBOOnPage.HasOverflowContent && lastRTBOOnPage.Visibility == Windows.UI.Xaml.Visibility.Visible)
        //{
        //    lastRTBOOnPage = AddOnePrintPreviewPage(lastRTBOOnPage, pageDescription);
        //}

        if (PreviewPagesCreated != null)
        {
            PreviewPagesCreated.Invoke(printPreviewPages, null);
        }

        PrintDocument printDoc = (PrintDocument)sender;

        // Report the number of preview pages created
        printDoc.SetPreviewPageCount(printPreviewPages.Count, PreviewPageCountType.Intermediate);
    }

我也调试了这个方法,在页面描述中我得到了纸张的宽度和高度,但我不能简单地假设它是正确的,我需要所有打印机的纸张尺寸而不是特定的一个,所以这可以& #39;是解决方案。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

经过大量的研究和调试后,我发现答案就在我的问题中。 在我的问题中提到的方法中有这两行

 PrintTaskOptions printingOptions = ((PrintTaskOptions)e.PrintTaskOptions);

    // Get the page description to deterimine how big the page is
    PrintPageDescription pageDescription = printingOptions.GetPageDescription(0);

在页面描述中,您可以获得4件事: 1. Dpix 2.Dpiy 3.Imageable Rect 4.页面大小

通过这些东西,我们可以知道打印机支持的纸张尺寸,然后根据它进行操作。

对于另一半问题:从本地计算机获取已安装的打印机列表,答案只有一行

 private DeviceInformationCollection deviceCollection;
 deviceCollection = await DeviceInformation.FindAllAsync("System.Devices.InterfaceClassGuid:=\"{0ecef634-6ef0-472a-8085-5ad023ecbccd}\"");

现在我可以在CPCL仿真模式下从我的标签打印机打印。

快乐的编码。