2013-03-15 11 views
5

Ich drucke auf einen Impact-Drucker, geladen mit 8,5 x 8,5 Zoll Papier. Wenn ich drucke, stößt der Drucker 11 Zoll statt 8,5 aus.Drucken von benutzerdefinierten Papiergröße zu einem Impact-Drucker in 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); 

Mit „How do I convert Twips to Pixels in .NET?“ Ich habe festgestellt, dass 8,5 Zoll 816 Pixel ist, die die Größe meines element.Width und element.Height ist. Ich setze eine neue PageMediaSize, aber das scheint keine Wirkung zu haben, dialog.PrintableAreaHeight ist immer noch bei 1056 endet, wenn ich die Warteschlange auf den Dialog setzen.

Wenn ich dialog.ShowDialog() tun, manuell meinen Drucker auswählen und manuell finden, und das Papierformat in der erweiterten Einstellungen meines Druckers ändern, dann dialog.PrintableAreaHeight spiegelt richtig die Änderung.

Diese Seite http://go4answers.webhost4life.com/Example/set-printdialogs-default-page-size-168976.aspx schlägt vor, dass ich nur einen von meinem Drucker unterstützten PageMediaSize setzen kann. Unter Verwendung der GetPrintCapabilities Funktion auf meiner PrintQueue, sehe ich eine Liste von 10 oder so Seitengrößen, von denen keine 8,5 x 8,5 sind. Dies ist die gleiche Liste, die ich sehe, wenn ich in den erweiterten Einstellungen meines Druckers in Windows gehe.

Antwort

2

Bitte den Code unten finden, setzt sie das Papierformat je nach Bedarf

 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; 
     } 
Verwandte Themen