我正在使用this code向点阵打印机打印rdlc报告。报告采用账单收据的格式。我想要的是打印机应该完全停止收据完全打印的位置(即要打印的文本的结尾),而不是接收纸张的其余部分并且不打印任何内容。
由于要打印大量的收据并且可能排长队,如果最终用户必须将纸张(已浪费)重新装回打印机,则会非常耗时。因此,我正在寻找打印机可以在打印文本完成后立即停止进纸的方法。
答案 0 :(得分:3)
听起来你要问的是如何将收据打印为连续流,而不是逐页打印。您链接的代码完全是页面驱动和页面导向的。您可以在以页面为主的视图系统中工作,但您将不得不做额外的工作。
您应该能够通过更改PrintPage代码在每页上输出多个图像块来在一个页面上打印多个内容。您必须管理每个矩形的偏移量以将第二个图像放在第一个图像下方,并且您必须弄清楚要对下一个报告页面执行的操作不适合当前页面上剩余的空间。我希望输出将被剪切到当前页面,因此如果您在页面边界外绘制(超过页面末尾),则不会输出任何内容。
当下一个报告图像不适合当前页面上剩余的空间时,您可以选择前进到下一页。
或者,您可以在此页面上打印尽可能多的内容,然后在下一页的顶部打印该报告图像的其余部分。为此,您需要计算第1页上剩余空间与报表图像矩形的交点,并保存该交点的高度。结束页面。当第2页滚动时,再次打印相同的报告图像,但这次将输出矩形偏移上一页上打印的矩形的高度。这假设裁剪矩形已经在打印设备手柄上就位(很可能)。
在这样的页面之间拆分报表的缺点是,您最终可能会在页面之间剪切或拆分图形或甚至文本行。这些将难以阅读。如果您知道字体高度和行间距以及报告的布局方式,我想您可以计算猜测文本行在输出矩形中的位置,并将输出矩形向下舍入到最接近行高的整数倍,但这已深入到hacky kludge领域。