打印单页报告的最快选项是什么(wpf c#程序)
本文关键字:wpf 程序 是什么 选项 报告 单页 打印 | 更新日期: 2023-09-27 18:26:44
我正在开发一个管理学校的wpf c#程序。用户必须不时打印单个学生的证书。例如,该学生在我们机构学习的证明,或其津贴金额的证明。
在这些报告中有:
- 固定文本
- 关于学生的动态信息,比如他的名字等等
对于这个任务,我构建了rdls,它达到了目的,但用户要求更快的速度。
我的问题是:rdls(在报表服务器上工作)是执行此任务的正确方法吗?还是有其他更快的选择?
我使用FlowDocument
来实现这样的简单打印功能。将XAML元素添加到文档中,就像在窗口中以编程方式创建XAML时一样。使用相同的布局控件(网格、堆栈面板等)来排列所有其他控件(文本段落、图像等),当打印FlowDocument时,它将根据各种因素(如打印机对话框中选择的纸张大小)"流入"页面。
免责声明:这是匆忙复制/粘贴的,但它应该让你知道它是如何工作的!
// 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");
在我的应用程序中,我将所有这些都封装在一个类中(因为我有一些地方需要打印功能)。该类在其构造函数中创建并初始化FlowDocument,并提供各种方法,如"AddParagraph()"、"AddImage()",以及用于指定边距、字体、字体大小等的不同重载。
最后的文档分页器是我实现的简化版本,但它可能足以满足您的需要。(我创建了一个自定义文档分页器,它可以在每页上设置页眉和页脚)。