.Net 4.5 wpf printing issue, paper size is always NorthAmericaLetter

会有一股神秘感。 提交于 2019-12-07 13:13:40

问题


I have an issue with printing in WPF. In .Net 4.5 it always prints with paper size NorthAmericaLetter. In .Net Framework 3.5 it prints on the correct paper size, which I defined in Code. I tried it in the same Solution, with the same Code and just changed the Target Framework.

My question is, am I missing something in the PrintTicket configuration or how can I set the paper size in .Net 4.5 correctly?

var visual = new DrawingVisual();

using (var context = visual.RenderOpen())
{
    context.DrawRectangle(Brushes.CadetBlue, new Pen(Brushes.Black, 2),
        new Rect(new Point(0, 0), new Size(793, 1122)));
    context.DrawRectangle(Brushes.Brown, new Pen(Brushes.Black, 2),
        new Rect(new Point(20, 20), new Size(40, 40)));
    context.DrawRectangle(Brushes.Brown, new Pen(Brushes.Black, 2),
        new Rect(new Point(20, 257), new Size(40, 40)));
}


var queue = new LocalPrintServer().DefaultPrintQueue;

queue.UserPrintTicket.PageMediaSize = queue
    .GetPrintCapabilities()
    .PageMediaSizeCapability
    .Single(x => x.PageMediaSizeName == PageMediaSizeName.ISOA4);

queue.UserPrintTicket.PageOrientation = PageOrientation.Portrait;

var writer = PrintQueue.CreateXpsDocumentWriter(queue);
writer.Write(visual);

回答1:


        PageMediaSize pageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA4);
        if (printCapabilities.PageMediaSizeCapability.Contains(pageMediaSize))
        {

            PrintTicket deltaPrintTicket = new PrintTicket {PageMediaSize = pageMediaSize };

            var result =
                queue.MergeAndValidatePrintTicket(queue.UserPrintTicket,
                    deltaPrintTicket);

            if (result.ValidatedPrintTicket.PageMediaSize == pageMediaSize)
            {
                queue.UserPrintTicket = result.ValidatedPrintTicket;
                queue.Commit();
            }
        }

You'll have to merge and validate the printticket:




回答2:


Maybe queue.Commit(); is missing?



来源:https://stackoverflow.com/questions/28106409/net-4-5-wpf-printing-issue-paper-size-is-always-northamericaletter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!