2010-02-05 7 views
5

J'ai une fenêtre WPF avec un cadre. J'ai du code pour imprimer le contenu du cadre en utilisant printdialog et printvisual. Mais ceci ne fera qu'imprimer ce qui apparaît sur l'écran même si le cadre défile et que d'autres parties sont disponibles.WPF - pagination lors de l'impression d'un visuel

Existe-t-il un moyen d'ajouter de la pagination et de s'assurer que tout le contenu de mon cadre sera imprimé.

Ou existe-t-il un autre moyen de prendre mon contenu de cadre et de l'imprimer? c'est-à-dire de ne pas utiliser printvisual?

Répondre

13

Oui. J'ai fait ça. Ce n'est pas très difficile.

  1. Enveloppez votre cadre à l'intérieur d'un ScrollViewer qui a normalement son défilement horizontal et vertical désactivé

  2. Lorsque vous êtes prêt à imprimer, activer le défilement vertical. Cela indiquera à l'image qu'il a un espace vertical infini, de sorte qu'il rendra tout le contenu. Puis appelez UpdateLayout() pour obtenir la mise à jour mise à jour.

  3. Implémentez IDocumentPaginator pour renvoyer le même cadre pour chaque page, mais ajustez le clip et RenderTransform chaque fois pour afficher une partie différente du cadre réel.

  4. Imprimer en utilisant votre commande IDocumentPaginator

La description ci-dessus suppose que vous voulez fixer la largeur du cadre à la largeur de la page et paginer verticalement. Ce serait approprié pour une page Web, mais pas pour une feuille de calcul. Pour le contenu de type tableur, vous devez définir ScrollViewer pour permettre le défilement dans les deux directions, donnant à l'image un espace infini dans chaque direction. Dans ce cas, IDocumentPaginator est identique sauf que RenderTransforms et clipping sont choisis pour itérer horizontalement et verticalement.

Cette technique fonctionne réellement pour tout contenu WPF, pas seulement un cadre.

+0

Salut Ray, cela semble intéressant ... pouvez-vous nous donner quelques exemples de code sur la façon dont vous avez réalisé cela s'il vous plaît? Merci beaucoup! – Sid

+0

J'aime aussi savoir comment cela se fait, Ray. Tout ** bon ** échantillons ou didacticiels étape par étape disponibles? – DeMama

+0

Peut-être que cela vous aidera à commencer http://robertmcintosh.ca/2011/02/05/paginated-printing-of-wpf-visuals/ –

0

Vous pouvez effectuer une boucle de manière récursive dans l'arborescence visuelle avec VisualTreeHelper et traduire tous les contrôles trouvés en éléments à utiliser dans un document de flux. Ce document de flux, vous pouvez imprimer. Je pense qu'il n'y a aucun moyen acceptable d'imprimer un contenu directement à partir de GUI.

Questions connexes