.NET 4.5 WPF打印问题,纸张尺寸总是NorthAmericaLetter [英] .Net 4.5 wpf printing issue, paper size is always NorthAmericaLetter

查看:954
本文介绍了.NET 4.5 WPF打印问题,纸张尺寸总是NorthAmericaLetter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,与印在上头。在.net 4.5,它总是将打印纸张尺寸NorthAmericaLetter。在.NET Framework 3.5的它打印在正确的纸张尺寸,我在code定义。我试了一下在同一个解决方案,用同样的code和只是改变了目标框架。

我的问题是,我失去了一些东西,在打印标签的配置或我怎么能设置纸张尺寸在.net 4.5是否正确?

  VAR视觉=新DrawingVisual();

使用(VAR上下文= visual.RenderOpen())
{
    context.DrawRectangle(Brushes.CadetBlue,新朋(Brushes.Black,2)
        新的矩形(新点(0,0),新的大小(793,1122)));
    context.DrawRectangle(Brushes.Brown,新朋(Brushes.Black,2)
        新的矩形(新点(20,20),新尺寸(40,40)));
    context.DrawRectangle(Brushes.Brown,新朋(Brushes.Black,2)
        新的矩形(新点(20,257),新的大小(40,40)));
}


VAR队列=新LocalPrintServer()DefaultPrintQueue。

queue.UserPrintTicket.PageMediaSize =队列
    .GetPrintCapabilities()
    .PageMediaSizeCapability
    。单(X => x.PageMediaSizeName == PageMediaSizeName.ISOA4);

queue.UserPrintTicket.PageOrientation = PageOrientation.Portrait;

VAR作家= PrintQueue.CreateXpsDocumentWriter(队列);
writer.Write(视觉);
 

解决方案

  PageMediaSize pageMediaSize =新PageMediaSize(PageMediaSizeName.ISOA4);
        如果(printCapabilities.PageMediaSizeCapability.Contains(pageMediaSize))
        {

            打印标签deltaPrintTicket =新打印标签{PageMediaSize = pageMediaSize};

            VAR的结果=
                queue.MergeAndValidatePrintTicket(queue.UserPrintTicket,
                    deltaPrintTicket);

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

您将不得不进行合并和验证的打印标签:

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);

解决方案

        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:

这篇关于.NET 4.5 WPF打印问题,纸张尺寸总是NorthAmericaLetter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆