Domanda

Sto cercando di stampare una tela WPF su più pagine.

Sono perfettamente felice con adattarne le dimensioni alla larghezza della pagina, quindi ritaglio e traducendo la tela per ogni pagina; tutti abbastanza semplici di matematica.

Quello che non capisco è come ottenere le dimensioni dell'area di stampa, e come dire la stampante dove stampare. Qualunque cosa provo sembra che i valori che sto usando sono le dimensioni della carta, e pertanto ottenere il ritaglio che si verificano come stampante sopraelevazione stampare fino al bordo della carta.

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

capacità ha le seguenti proprietà:

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

Qual è l'area "stampabile"? è che l'area sulla carta in cui posso mettere i contenuti? Credo di sì, perché:

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

Comunque per quanto riguarda la parte inferiore e margini destro? Dove posso trovare queste informazioni?

Cosa dovrebbe fare la proprietà PageSize del DocumentPaginator essere impostato? Devo impostare questo da capabilities.PageImageableArea? O fa la funzione dialog.Print() impostare questo, e ho solo bisogno di leggere da esso in GetPage()?

Infine, quando torno a DocumentPage, quello che faccio a passare ai tre argomenti geometria pageSize, bleedBox e contentBox?

Grazie:)

È stato utile?

Soluzione

Ok sembra che la stampa sempre si verifica da (0, 0) (in alto a sinistra) della carta.

Prendi il formato della carta con:

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

ed i margini superiore e sinistra con:

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

I presuppone che il fondo e margini destro erano gli stessi alto a sinistra e, anche se questo non può essere sicuro.

Si deve scalare e ritagliare la tela come si farebbe normalmente, quindi applicare una TranslateTransform la dimensione dei margini per spostare il contenuto per l'area di stampa.

Altri suggerimenti

Hai guardato utilizzando un FlowDocument invece di stampare le Canvas? v'è un buon esempio di creare e stampare Qui .

Si spera che negare la necessità di un sacco di matematica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top