我们正在使用与VS2005捆绑在一起的Crystal Reports.NET。我们有一份确认预订表单信函报告,我们要批量打印。一般来说,这会在信头纸上每人打印一页,但偶尔如果他们预订了很多课程,这封信就会翻到两页。第二页不应打印在信头纸上。
基本上,因为这是一个罕见的事件,我只是要打印该批次并暂停,如果一个特定的字母超过1页。即加载报告,获取页面数量,如果超过一页,则抓住用户的hollah,否则继续进行。
我在报告的页脚上放了一个TotalPageCount(如果它有效的话我会压制它!)然后尝试在我的应用程序中读取它。
一旦我加载了我试图打电话的文件
report.ReportDefinition.ReportObjects("TotalPageCount1")
其类型为CrystalDecisions.CrystalReports.Engine.FieldObject
我似乎无法从爱中获得价值,也没有钱(也没有任何诅咒和咒骂!)
我可以读取TextObject类型的任何项目,但是如果我将TotalPageCount附加到文本字段,它会在报告中正确显示,但会返回“Page count:TotalPageCount”而不是“Page count:1”。 / p>
Soo,没有忘记,有没有人有任何建议?无论是读取价值的方式还是绕过它的方式。打印机没有多个托盘,但即使我们有一个托盘,我也不确定如何说服水晶将不同的页面打印到不同的托盘上。
答案 0 :(得分:2)
我只花了一个时间来寻找这个答案。想想我已经设法使其工作如下..(VC2008,C#.net Windows窗体查看器等)
使用CrystalDecisions.Shared;
int iPageCount = report1.FormatEngine.GetLastPageNumber(new ReportPageRequestContext());
希望它有所帮助!
詹姆斯肯特答案 1 :(得分:0)
为什么不将总页数字段嵌入到公式字段中,然后获取公式字段的值?
尝试ReportDocument.FormatEngine.GetLastPageNumber(New CrystalDecisions.Shared.ReportPageRequestContext)
答案 2 :(得分:0)
我知道这是一个老问题,但我有一个关于打印到不同托盘的解决方案。关于定义打印机文件源的全部内容,请参阅下面的示例代码......
PageRange range = pageRange;
var tray = printerToUse.PrinterTrays.FirstOrDefault(t => t.PaperTypeId == range.PaperTypeId);
var printerSettings = new PrinterSettings
{
FromPage = pageRange.StartPage,
ToPage = pageRange.EndPage ?? 0,
PrinterName = printerToUse.PrinterName,
Copies = copies,
};
PaperSource paperSource = printerSettings.PaperSources
.OfType<PaperSource>()
.FirstOrDefault(
ps => ps.SourceName.Trim().Equals(tray.Name, StringComparison.InvariantCultureIgnoreCase));
var pageSettings = new PageSettings(printerSettings)
{
PaperSource = paperSource,
};
_internalDocument.PrintToPrinter(printerSettings, pageSettings, false);