Frage

Ich versuche, eine WPF-Leinwand über mehrere Seiten gedruckt werden sollen.

Ich bin vollkommen zufrieden damit die Skalierung auf die Seitenbreite passt, dann Clipping und übersetzen die Leinwand für jede Seite; alle ziemlich einfache Mathematik.

Was ich nicht verstehe, ist, wie ich die Abmessungen des Druckbereichs erhalten, und wie der Drucker sagen, wohin sie zu drucken. Was auch immer ich versuche, es erscheint die Werte Ich verwende die Größe des Papiers sind, und ich bekomme daher Zuschneiden auftritt als der Drucker kann nicht bis zum Rand des Papiers drucken.

var capabilities = printDialog.GetPrintCapabilities(dialog.PrintTicket);

Fähigkeiten haben die folgenden Eigenschaften:

capabilities.PageImageableArea.ExtentWidth
// "Gets the width of the imageable area"

Was ist die „bebilderbaren“ -Bereich? das ist der Bereich auf dem Papier, in dem ich zufrieden stellen kann? Ich denke, so, weil:

capabilities.PageImageableArea.OriginWidth
// Gets the distance from the left edge of the page to the imageable area.

Doch was ist mit den unteren und rechten Rand? Wo finde ich diese Informationen?

Was sollte die PageSize Eigenschaft des DocumentPaginator zu setzen? Sollte ich dies aus capabilities.PageImageableArea? Oder hat die dialog.Print() Funktion dieses gesetzt, und ich brauche nur von ihm in GetPage() zu lesen?

Schließlich, wenn ich eine DocumentPage zurückkehren, was passiere ich an die drei Geometrie Argumente pageSize, bleedBox und contentBox?

Danke:)

War es hilfreich?

Lösung

Ok es scheint, dass immer Druck von (0, 0) auftritt (oben links) des Papiers.

Holen Sie sich die Größe des Papiers mit:

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

und die oberen und linken Ränder mit:

var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight

ging ich davon aus, dass die unteren und rechten Ränder der gleiche wie der oben waren und nach links, obwohl dies nicht sicher sein kann.

Sie haben die Leinwand zu skalieren und Clip wie gewohnt, dann eine TranslateTransform die Größe der Ränder gelten die Inhalte in auf den druckbaren Bereich zu bewegen.

Andere Tipps

Haben Sie sich das Drucken eines Flowdocument, anstatt nur die Leinwand zu verwenden? es ist ein gutes Beispiel für das Erstellen und Drucken von

scroll top