设置 WPF PrintDialog 的页面大小

Grh*_*rhm 6 c# printing wpf

我正在尝试从 WPF 应用程序进行打印,但很难设置默认页面大小。

我要打印的内容应该是在 C5 大小的信封上,这里的大多数打印机默认使用 A4 纸。

我想向用户显示一个对话框,允许他们选择要使用的打印机 - 但如果他们只是按“确定”接受默认打印机,则默认为 A4 纸。

如何将作业的打印默认设置为 C5 信封?
我仍然可以提示用户输入打印机吗?

private void PrintVisual_Sized(UIElement toPrint)
{
    PrintDialog dlg = new PrintDialog();
    PrintQueue queue = dlg.PrintQueue;

    // Get C5 page size if possible from printer
    var availPageSizes = queue.GetPrintCapabilities().PageMediaSizeCapability;
    PageMediaSize pageSize = Utilities.GetPageSize(availPageSizes, PageMediaSizeName.ISOC5Envelope);

    if (pageSize != null)
    {
        PrintTicket ticket = new PrintTicket
        {
            PageMediaSize = pageSize,
            InputBin = InputBin.AutoSelect,
            CopyCount = 1
        };

        dlg.UserPageRangeEnabled = false;

        var result = dlg.PrintQueue.MergeAndValidatePrintTicket(dlg.PrintTicket, ticket);
        Debug.Print(result.ConflictStatus.ToString());

        // Try to get the page size honoured by someone!!!
        dlg.PrintQueue.DefaultPrintTicket = result.ValidatedPrintTicket;
        dlg.PrintQueue.UserPrintTicket = result.ValidatedPrintTicket;
        dlg.PrintTicket = result.ValidatedPrintTicket;

        // Height still seems to be A4 sized!?
        Debug.Print("Height: " + dlg.PrintableAreaHeight);
    }

    // Ask user which printer they want...
    if (dlg.ShowDialog().GetValueOrDefault(false))
    {
        Size printSize = new Size(dlg.PrintableAreaWidth, dlg.PrintableAreaHeight);
        toPrint.Measure(printSize);
        toPrint.Arrange(new Rect(new Point(), printSize));
        toPrint.UpdateLayout();

        dlg.PrintVisual(toPrint, "My Print Job");
    }
}
Run Code Online (Sandbox Code Playgroud)

最后一部分printSize是 A4,除非用户手动选择其他纸张尺寸。
有没有办法显示带有非默认页面大小预设的对话框?