将 PrintDialog 拦截到 XPS 文档编写器

Posted

技术标签:

【中文标题】将 PrintDialog 拦截到 XPS 文档编写器【英文标题】:Intercepting PrintDialog to XPS Document Writer 【发布时间】:2011-06-29 22:46:29 【问题描述】:

目前我为用户提供了两个控件:保存和打印。当用户选择保存时,WPF 显示的一个区域被打包并通过 XpsDocumentWriter 发送,并提示并鼓励用户签署新的 xps 文档。当用户选择打印时,PrintDialog.PrintVisual 将同一区域打印到用户选择的打印机。

一切都很好,除了 Microsoft XPS Document Writer 是打印机的选择之一。有没有办法阻止或拦截用户选择 XPS 文档编写器并将它们发送到 Save 方法,以便提示用户签署 xps 文档?

【问题讨论】:

【参考方案1】:

免责声明:我以前从未使用过PrintDialog,但看起来像这样的东西可能会起作用:

System.Windows.Controls.PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)

    PrintQueue selectedQueue = printDialog.PrintQueue;
    if (selectedQueue.Name == "Microsoft XPS Document Writer")
    
        // Run your XPS save & sign code
    
    else
    
        // Run your printDialog.PrintVisual() code
    

我不太喜欢硬编码打印机名称(我假设它会因语言设置而异)。可能PrintQueue 有一个更好的属性,您可以使用它来识别这台打印机。

【讨论】:

尝试 selectedQueue.QueueDriver.Name 代替 - 它是打印机驱动程序名称,也是“Microsoft XPS Document Writer”。打印机名称可以(很容易)更改,但据我所知,驱动程序名称无法更改(毕竟它是驱动程序)。

以上是关于将 PrintDialog 拦截到 XPS 文档编写器的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将 XPS 文件打印到物理打印机

Java 将PDF/XPS转为Word/html/SVG/PS/PCL/PNGPDF和XPS互转

Java 将PDF/XPS转为Word/html /SVG/PS/PCL/PNGPDF和XPS互转(基于Spire.Cloud.SDK for Java)

C#/VB.NET 将HTML转为XPS

解析 XPS 或 PDF 并将数据插入 Word 模板?

Java 将Word转为PDF/Html/图片/XPS/SVG(基于Spire.Cloud.SDK