打印单页报告的最快选项是什么(wpf c#程序)

本文关键字:wpf 程序 是什么 选项 报告 单页 打印 | 更新日期: 2023-09-27 18:26:44

我正在开发一个管理学校的wpf c#程序。用户必须不时打印单个学生的证书。例如,该学生在我们机构学习的证明,或其津贴金额的证明。

在这些报告中有:

  1. 固定文本
  2. 关于学生的动态信息,比如他的名字等等

对于这个任务,我构建了rdls,它达到了目的,但用户要求更快的速度。

我的问题是:rdls(在报表服务器上工作)是执行此任务的正确方法吗?还是有其他更快的选择?

打印单页报告的最快选项是什么(wpf c#程序)

我使用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()",以及用于指定边距、字体、字体大小等的不同重载。

最后的文档分页器是我实现的简化版本,但它可能足以满足您的需要。(我创建了一个自定义文档分页器,它可以在每页上设置页眉和页脚)。