【问题标题】:WPF Printing Issue: why are my PageMediaSize settings being ignored?WPF 打印问题:为什么我的 PageMediaSize 设置被忽略?
【发布时间】:2021-03-10 19:58:45
【问题描述】:

在我的 WPF 应用程序中,我有一个要打印的 xaml 页面。页面宽度为 454 像素,页面高度为 794 像素。 页面大小来自我要使用的纸张尺寸,即 12 厘米宽(454 像素)和 21 厘米高(794 像素)。

下面是代码:

 public void Print()
    {
        PrintDialog printDialog = new PrintDialog();
        if(printDialog.ShowDialog() == true)
        {
            printDialog.PrintTicket.PageOrientation = PageOrientation.Portrait;
            printDialog.PrintTicket.PageMediaSize = new PageMediaSize(454, 794);

            printDialog.PrintVisual(this, $"Ricevuta {ReceiptToPrint.CustomerFullName}");
        }
    }

问题是 PageMediaSize 设置被忽略,打印机打印就好像抽屉里有一张 A4 纸。所以要打印的 xaml 页面被放置在一张不存在的 A4 纸的左上角,结果只有一部分要打印的 xaml 页面打印在我的自定义纸张上。

我还补充说我使用的打印机支持自定义纸张尺寸。

【问题讨论】:

    标签: c# wpf printing


    【解决方案1】:

    也许有帮助。取自here。 我在使用 XPS 打印时遇到了类似的问题。

    XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(mPrintQueue);
    PrintTicket ticket = new PrintTicket();
    ticket.PageMediaSize = new PageMediaSize(PageMediaSizeName.Unknown, width, height);
    
    writer.Write(pages, ticket); // in some cases did not work
    

    我使用 XpsDocumentWriter 的 WritingPrintTicketRequired 事件处理程序在打印文档时强制执行 PrintTicket:

    writer.WritingPrintTicketRequired += (s, e) =>
    {
        e.CurrentPrintTicket = ticket;
    };
    writer.Write(pages);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2020-08-25
      相关资源
      最近更新 更多