J'utilise un FlowDocument
pour une fonctionnalité d'impression simple comme celle-ci. Vous ajoutez des éléments XAML au document tout comme vous le feriez lors de la création de XAML dans une fenêtre par programmation. Utilisez les mêmes contrôles de disposition (grilles, panneaux de pile, etc.) pour organiser tous les autres contrôles (paragraphes de texte, images, etc.), et lorsque le FlowDocument est imprimé, il sera "coulé" dans la page en fonction de divers facteurs comme le format de papier sélectionné dans la boîte de dialogue de l'imprimante.
Clause de non-responsabilité: ceci a été copié/collé à la hâte mais cela devrait vous donner une idée de son fonctionnement!
// Show the print dialog
var dlg = new PrintDialog();
if (!dlg.ShowDialog().GetValueOrDefault())
{
// User cancelled
return;
}
// Create and initialise the FlowDocument
_doc = new FlowDocument();
_doc.FontFamily = new FontFamily("Arial");
_doc.FontSize = 14;
// Add a paragraph of text
var para = new Paragraph(new Run("My paragraph....."))
{
FontSize = 14,
Foreground = new SolidColorBrush(Colors.Black),
Margin = new Thickness(0,0,0,12)
};
_doc.Blocks.Add(para);
// Add an image
var para = new Paragraph();
var img = new Image
{
Source = bitmapSource,
HorizontalAlignment = HorizontalAlignment.Center,
Margin = new Thickness(0,0,0,12)
};
para.Inlines.Add(img);
_doc.Blocks.Add(para);
// Print
var documentPaginator = ((IDocumentPaginatorSource)_doc).DocumentPaginator;
dlg.PrintDocument(documentPaginator, "My print job");
Dans mon application, j'ai tout cela enveloppé dans une classe (car j'ai quelques endroits où j'ai besoin d'une fonctionnalité d'impression). La classe crée et initialise le FlowDocument dans son constructeur, et fournit diverses méthodes telles que "AddParagraph()", "AddImage()", avec différentes surcharges pour spécifier les marges, les polices, les tailles de police, etc
Le document paginator Un peu à la fin est une version simplifiée de ma mise en œuvre, mais cela peut suffire à vos besoins. (J'ai créé un paginateur de document personnalisé qui permet de définir un en-tête et un pied de page sur chaque page).
Merci beaucoup. Je commence par cette méthode, en essayant de construire un papier imprimé. Je suis sûr que je vais devoir vérifier cette méthode pour savoir si elle permettra l'impression instantanée sans prévisualisation, l'exportation vers html ou docx, et ainsi de suite. –