WPF

2013-03-15 13 views
5

içinde darbeli yazıcıya özel kağıt boyutu yazdırma Baskı aleti 8,5 x 8,5 inç kağıtla birlikte yüklüyorum. Yazdırdığımda, yazıcı 8.5 yerine 11 inç çıkarır. KullanılmasıWPF

PageMediaSize pageSize = new PageMediaSize(PageMediaSizeName.Unknown, element.Width, element.Height); 

PrintDialog dialog = new PrintDialog(); 
dialog.PrintTicket.PageMediaSize = pageSize; 
Console.WriteLine(dialog.PrintableAreaHeight); // 816, good! 
dialog.PrintQueue = myQueue;     // selected from a combobox 
Console.WriteLine(dialog.PrintableAreaHeight); // 1056 :(

dialog.PrintVisual(element, description); 

"How do I convert Twips to Pixels in .NET?" Ben 8,5 inç element.Width ve element.Height benim büyüklüğü olan 816 piksel olduğunu tespit ettik. Yeni bir PageMediaSize ayarlıyorum, ancak bu hiç bir etkisinin yok gibi görünüyor, iletişim kutusu üzerinde kuyruğu ayarladığımda dialog.PrintableAreaHeight hala 1056'da bitiyor.

dialog.ShowDialog()'u kullanırsam, yazıcımı el ile işaretleyin ve yazıcımın gelişmiş ayarlarında Kağıt Boyutu'nu elle bulun ve değiştirin, ardından dialog.PrintableAreaHeight değişikliği doğru şekilde yansıtır.

Bu sayfa http://go4answers.webhost4life.com/Example/set-printdialogs-default-page-size-168976.aspx yazıcım tarafından desteklenen bir PageMediaSize ayarlayabileceğimi önerir. Benim PrintQueueGetPrintCapabilities işlevini kullanarak, 10 veya daha fazla sayfa boyutlarının bir listesini görüyorum, bunların hiçbiri 8.5 x 8.5 değil. Bu, yazıcımın pencerelerde gelişmiş ayarlarına gittiğimde gördüğüm listedir.

cevap

2

kod aşağıda bulabilirsiniz, bu gerektiği gibi kağıt boyutunu belirler

 var printerSettings = new PrinterSettings(); 
     var labelPaperSize = new PaperSize { RawKind = (int)PaperKind.A6, Height = 148, Width = 105 }; 
     printerSettings.DefaultPageSettings.PaperSize = labelPaperSize; 
     var labelPaperSource = new PaperSource { RawKind = (int)PaperSourceKind.Manual }; 
     printerSettings.DefaultPageSettings.PaperSource = labelPaperSource; 
     if (printerSettings.CanDuplex) 
     { 
      printerSettings.Duplex = Duplex.Default; 
     }