Ich schreibe eine neue WPF-Anwendung, die einige visuelle Elemente erstellt und dann versucht, sie auf einem Poloroid-Drucker zu drucken. Ich drucke erfolgreich mit den System.Printing-Klassen in WPF wie folgt:
Dim Pd As PrintDialog = New PrintDialog()
Dim Ps = New LocalPrintServer()
Dim PrintQueue = New PrintQueue(Ps, "Poloroid Printer")
Pd.PrintQueue = PrintQueue
Pd.PrintVisual(Me.Grid1, "Print Job 1") 'this prints out perfectly
Das Problem ist, dass der Poloroid-Drucker ein SDK hat, mit dem man den Magstrip auf der Rückseite der Karte beschreiben kann. Ich habe ein funktionierendes Beispiel mit dem PrintPageEventArgs in System.Drawing.Printing, aber ich kann keine enge Übereinstimmungen für die WPF-Welt finden. Hier ist der Code:
Private Sub PrintPage(ByVal sender as Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
'...
' Obtain the device context for this printer
deviceContext = e.Graphics.GetHdc().ToInt32()
'... device context is used in SDK to write to magstrip
e.Graphics.ReleaseHdc(New IntPtr(deviceContext))
End Sub
Meine Frage ist also:
Wie kann ich mein bestehendes Markup (XAML) drucken, indem ich System.Drawing.Printing
オア
Gibt es Ereignisse in der System.Printing
um mit dem SDK zu sprechen und die Int32
deviceContext?
und ich habe versucht RenderTargetBitmap
Klasse, um das Bildmaterial in WPF in eine Bitmap zu rendern und die Bitmap in System.Drawing.Bitmap zu konvertieren
RenderTargetBitmap bitmapSource;
...
bitmapSource.Render(visual);
...
using(MemoryStream outStream = new MemoryStream())
{
BitmapEncoder enc = new BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(bitmapSource));
enc.Save(outStream);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream);
...
}
Aber der Druck war nicht klar und perfekt.