Tôi đã viết lại câu trả lời cho câu hỏi này, bởi vì tôi đã tìm cách tốt hơn để in một bộ FlowDocuments, trong khi chỉ hiển thị Hộp thoại In một lần. Câu trả lời đến từ MacDonald, Pro WPF trong C# 2008 (Apress 2008) trong Chương 20 tại trang. 704.
Mã của tôi bao gồm một tập hợp các đối tượng Ghi chú thành một IList được gọi là notesToPrint và lấy FlowDocument cho từng Ghi chú từ lớp DocumentServices trong ứng dụng của tôi. Nó thiết lập các ranh giới FlowDocument để phù hợp với máy in và thiết lập một lề 1 inch. Sau đó, nó in FlowDocument, sử dụng thuộc tính DocumentPaginator của tài liệu. Đây là mã:
// Show Print Dialog
var printDialog = new PrintDialog();
var userCanceled = (printDialog.ShowDialog() == false);
if(userCanceled) return;
// Print Notes
foreach(var note in notesToPrint)
{
// Get next FlowDocument
var collectionFolderPath = DataStore.CollectionFolderPath;
var noteDocument = DocumentServices.GetFlowDocument(note, collectionFolderPath) ;
// Set the FlowDocument boundaries to match the page
noteDocument.PageHeight = printDialog.PrintableAreaHeight;
noteDocument.PageWidth = printDialog.PrintableAreaWidth;
// Set margin to 1 inch
noteDocument.PagePadding = new Thickness(96);
// Get the FlowDocument's DocumentPaginator
var paginatorSource = (IDocumentPaginatorSource)noteDocument;
var paginator = paginatorSource.DocumentPaginator;
// Print the Document
printDialog.PrintDocument(paginator, "FS NoteMaster Document");
}
Đây là một cách tiếp cận khá đơn giản, với một giới hạn đáng kể: Nó không in không đồng bộ. Để làm điều đó, bạn sẽ phải thực hiện thao tác này trên một chuỗi nền, đó là cách tôi làm điều đó.
Nguồn
2010-08-29 00:02:03
Tôi vẫn muốn tìm cách tốt hơn để thực hiện việc này. Nếu bất cứ ai có thể đề nghị một, tôi sẽ thay đổi câu trả lời được chấp nhận. –
Bạn có thể thử sử dụng các thành viên PrintDialog.PrintQueue và PrintDialog.PrintTicket. Với PrintQueue, bạn có thể tạo XpsDocumentWriter, sau đó bạn có thể sử dụng WriteAsync() để in không đồng bộ. Caching hàng đợi và vé có vẻ tốt hơn so với bộ nhớ đệm PrintDialog. –
Cảm ơn - điều đó rất hữu ích. +1 từ tôi. –