我正在尝试找到一种在 WPF 中打印流文档的好方法。我想要的是有可能在我设计文档时看到文档的结果,因此创建一个纯 FlowDocument 作为 XAML 是不可能的(因为 Visual Studio 不会显示它的设计视图)。
所以我现在所做的是创建一个包含这样的 FlowDocument 的窗口(一些多余的部分已被删除以使代码更简洁):
<Window x:Class="MyNamespace.ProjectPrintout...>
<Grid>
<FlowDocumentReader>
<FlowDocument ColumnWidth="500" Name="Document">
<!-- Header -->
<Paragraph Name="HeaderText">
The header will go here
</Paragraph>
</FlowDocument>
</FlowDocumentReader>
</Grid>
</Window>
这有点奇怪,因为我永远不会向用户显示这个窗口,我只用一个窗口包装 FlowDocument,这样我就可以在开发它时看到它的样子。这个我可以忍受。
所以在我的应用程序的其他地方,我想将此 FlowDocument 打印到默认打印机,但我还必须动态设置标题(除了需要此处省略的动态数据的文档的许多其他部分)。
要打印的代码如下所示:
var printout = new ProjectPrintout();
printout.HeaderText= new Paragraph(new Run("Proper header text"));
var document = printout.Document;
var pd = new PrintDialog();
IDocumentPaginatorSource dps = document;
pd.PrintDocument(dps.DocumentPaginator, "Document");
该文档正在打印,并且看起来很好,除了标题文本仍然显示“标题将转到此处”,即使我从代码中将其替换为“正确的标题文本”。我也试过这样改变它:
(printout.HeaderText.Inlines.FirstInline as Run).Text = "Proper header text";
但结果是一样的。
所以问题是:如何在打印之前从代码中更改 FlowDocument 中的内容,或者有更好的方法来代替我的方法吗?