Question

Je suis en train d'imprimer une toile WPF sur plusieurs pages.

Je suis parfaitement satisfait de mise à l'échelle pour l'adapter à la largeur de la page, puis découpage et la traduction de la toile pour chaque page; mathématiques tout assez simple.

Ce que je ne comprends pas comment je reçois les dimensions de la zone imprimable, et comment dire l'imprimante où imprimer. Tout ce que j'essaie il semble que les valeurs que je utilise sont la taille du papier, et je donc obtenir des cultures se produisant comme l'imprimante ne peut pas imprimer jusqu'au bord du papier.

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

capacités a les propriétés suivantes:

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

Quelle est la zone "imageable"? est que la zone sur le papier dans lequel je peux mettre du contenu? Je pense que oui, parce que:

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

Mais quid du bas et les marges droite? Où puis-je trouver cette information?

Quelle devrait être la propriété PageSize du DocumentPaginator être réglé sur? Dois-je mettre cela de capabilities.PageImageableArea? Ou la fonction dialog.Print() réglée, et je juste besoin de lire dans GetPage()?

Enfin, quand je reviens un DocumentPage, qu'est-ce que je passe aux trois arguments de la géométrie pageSize, bleedBox et contentBox?

Merci:)

Était-ce utile?

La solution

Ok, il semble que l'impression se produit toujours de (0, 0) (en haut à gauche) du papier.

Obtenir la taille du papier avec:

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

et les marges supérieure et gauche avec:

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

Je suppose que le fond et les marges de droite étaient les mêmes que le haut et à gauche, bien que cela puisse ne pas être sûr.

Vous avez à l'échelle et couper la toile comme vous le feriez normalement, puis appliquer une TranslateTransform la taille de vos marges pour déplacer le contenu dans la zone imprimable.

Autres conseils

Avez-vous regardé à l'aide d'un FlowDocument au lieu d'imprimer juste la toile? il est un bon exemple de la création et l'impression

scroll top