.net - 打印多页不同数据

标签 .net printing

在我的应用程序中,我有几种打印特定数据的表单。为此,我使用 PrintDocument PrintPage 事件。

如果一份报告超过 1 页,我将 hasMorePages 标志设置为 true,然后再次触发事件,我有责任从最后一页末尾的位置继续打印。

现在,我需要在一个 PrintDocument 中打印所有这些报告,并且我想重复使用每个报告的代码,以便用户可以在一个打印按钮中打印所有报告。这个想法是不打印多个文档。

您会采用什么方法来做到这一点?

最佳答案

虽然我不太喜欢它的感觉,但显而易见的解决方案是创建一个打印事件,它是其他打印事件的聚合器。您挂接到文档打印事件,并且对于需要打印的每个项目,您手动触发其打印事件。

我想你会想要制作一个像 IPrintableForm 这样的接口(interface),它有一个方法 DoPrintEvent(object sender, PrintPageEventArgs args);

然后您的聚合器获取一堆需要打印的表单并将其存储在实例变量中并执行如下操作:

private multiDocPageEventHandler(object sender, PrintPageEventArgs args)
{
    if (printStack == null) { // all done
        throw new Exception("This should never happen.");
    }
    else { // send to top of stack
        printStack.Peek().DoPrintEvent(sender, args);
        if (!args.HasMorePages) {
             printStack.Pop();
        }
        args.HasMorePages = printStack.Count > 0;
        if (!args.HasMorePages) {
            printStack = null;
        }
    }
}

关于.net - 打印多页不同数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/439591/

相关文章:

c# - 按 session 共享变量

c# - 从 StreamWriter 输出 .txt 文件而不写入磁盘?

linux - 使用 Cups 打印多个 Dymo 标签

android - 在android中打印时如何更改字体大小?

php - 如何在 PHP 中打印或回显数组索引

.net - 使用自定义 SerializerSettings 将 JToken 转换为 .NET 类型

c# - .NET 3.5 DotNetZip 搜索提取文件时出现问题

css - 使用EPSON的 "FontA11"打印HTML页面

c# - 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信,因为它处于 Faulted 状态

delphi - 打印 TDBGrid