【问题标题】:How to Silent print from an UWP Application如何从 UWP 应用程序静默打印
【发布时间】:2018-04-09 14:57:22
【问题描述】:

我正在尝试在 UWP 上制作打印应用程序,但示例显示

await Windows.Graphics.Printing.PrintManager.ShowPrintUIAsync();

这会带来 UWP 打印对话框。

我需要在没有此对话框的情况下直接打印。如何做到这一点?

我需要类似的东西

await Windows.Graphics.Printing.PrintManager.PrintAsync();

我们应该能够以编程方式列出打印机、选择打印机、配置纸张大小、方向、设置...

【问题讨论】:

标签: uwp


【解决方案1】:

等待 Windows.Graphics.Printing.PrintManager.PrintAsync();

据我所知,没有PrintUI 的打印机没有这样的api。我搜索了一些类似的issues。答案是否定的。如果您确实想要此功能,欢迎您在UserVoice 上投票。

【讨论】:

  • 一般来说是正确的,不过这有一些细微差别。让我提供另一个答案。
  • 是的。请继续。
【解决方案2】:

当前的 UWP API 不支持静默打印,即没有明确的用户交互。

对于 POS 场景,UWP 确实提供了 POSPrinter API - 不过这可能适用于您的场景,也可能不适用:

https://docs.microsoft.com/en-us/uwp/api/Windows.Devices.PointOfService.PosPrinter

https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/PosPrinter

对于在桌面上运行的 LOB 应用程序,您还可以选择继续使用 UWP 应用程序包中包含的完全信任进程中的 Win32 打印 API。我整理了一个快速示例,在从 UWP 静默打印图像文件的示例中演示了这种技术:

商店:https://www.microsoft.com/store/apps/9pd51nnkx3t2

来源:https://1drv.ms/u/s!AovTwKUMywTNnOsbzlRfghOikDy8Dw

这当然是一个有效的功能请求,我们应该扩展 API 以使用适当的用户模型(API、功能、设置等)启用此场景,以确保适当的用户体验。

请在此处对 UserVoice 投票,以帮助团队优先考虑该功能: https://wpdev.uservoice.com/forums/110705-universal-windows-platform/suggestions/6185763-allow-direct-printing-without-modern-ui-print-dial

【讨论】:

  • 另外,在 WPF 中,我曾经以厘米为单位指定页面和打印对象(边框)的打印尺寸。
  • 有史以来最好的应用描述。 "演示与 Win32 打印 API 互操作的示例"
  • 我认为这是一个很好的功能,请创建以编程方式选择打印机所需的 API、功能、设置等,然后在 UWP 上进行静默打印。见wpdev.uservoice.com/forums/110705-universal-windows-platform/…
  • UserVoice 仍然是最好的选择吗?我正在努力思考如何让 Zebra 打印机与 UWP 配合使用。
  • @eltiare 该功能仍在积压中。更多的选票将帮助印刷团队优先考虑。目前唯一的解决方法是使用桌面扩展过程,就像我在上面的简单图像打印演示中所做的那样。
【解决方案3】:

我正在使用 RawPrint nuget 在 UWP 中静默打印:

https://github.com/frogmorecs/RawPrint

示例:

  ...

  if (file != null)
  {
      IPrinter printer = new Printer();
      var stream = await file.OpenStreamForReadAsync();
      printer.PrintRawStream("Brother DCP-L2540DN series Printer", stream, file.DisplayName);
  }

【讨论】:

  • 旧线程,但据我所知,这不支持 UWP?
  • @AdamMcMahon 它支持它,但前提是你在 Windows (win32) 中运行它。例如,它不适用于 Arm 设备。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多