gpt4 book ai didi

WPF:在没有打印对话框的情况下打印 FlowDocument

转载 作者:行者123 更新时间:2023-12-04 13:50:36 26 4
gpt4 key购买 nike

我正在 WPF 中编写一个笔记应用程序,使用 FlowDocument对于每个单独的音符。该应用程序按标签搜索和过滤笔记。我想将当前过滤列表中的所有笔记打印为单独的文档,并且我只想在作业开始时显示一个打印对话框。

我找到了一个很好的打印示例 in this thread ,但它适用于打印单个 FlowDocument ,所以它使用 CreateXpsDocumentWriter()显示打印对话框的重载。

所以,这是我的问题:谁能建议一些好的代码来打印 FlowDocument不显示 PrintDialog ?我想我将在程序开始时显示打印对话框,然后循环遍历我的笔记集以打印每个 FlowDocument .

最佳答案

我已经重写了我对这个问题的回答,因为我确实找到了一种更好的方法来打印一组 FlowDocuments,同时只显示一次打印对话框。答案来自 MacDonald, Pro WPF in C# 2008 (Apress 2008) in Chapter 20 at p。 704.

我的代码将一组 Note 对象捆绑到一个名为 notesToPrint 的 IList 中,并从我的应用程序中的 DocumentServices 类中获取每个 Note 的 FlowDocument。它设置 FlowDocument 边界以匹配打印机并设置 1 英寸边距。然后它使用文档的 DocumentPaginator 属性打印 FlowDocument。这是代码:

// 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");
}

这是一种非常简单的方法,但有一个明显的限制:它不会异步打印。为此,您必须在后台线程上执行此操作,我就是这样做的。

关于WPF:在没有打印对话框的情况下打印 FlowDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com