这是在WinForms应用程序中使用ReportViewer。原始应用程序是在2006年写回来的。如果直接从报表服务器上运行,该报告将打印出横向图,但这对我的用例不起作用。
我失去了理智。这应该是容易和明显的。报告中有一个横向设置,有合法的页面大小。报告应在整个页面上打印。但是NOOOOOOO .....我和我一直在努力工作几个小时。我终于把它归结为可能引发某些人知识和经验的东西。首先是报告的报告属性设置页面:我故意将纸张尺寸设置为自定义,并且尺寸不完全合法,因为我的报告确实是徽章,完全不标准,而且我要显示的相同代码工作正常。将此更改为合法的景观和14宽8.5高度没有区别。现在,这是在推送报表查看器上的打印按钮时运行的代码。
private void Print(bool showDialog)
{
if (_streams == null || _streams.Count == 0)
return;
PrintDocument printDoc = new PrintDocument();
//printDoc.PrinterSettings.PrinterName = printerName;
printDoc.PrinterSettings.Copies = _report.Copies;
//if (!printDoc.PrinterSettings.IsValid)
//{
// MessageBox.Show("error");
// return;
//}
//Reports like Registration and Overview Badges have custom page
//sizes defined in the RDL file, grab that PaperSize and assign
//it to the current print document.
ReportPageSettings settings = reportViewer.ServerReport.GetDefaultPageSettings();
printDoc.DefaultPageSettings.PaperSize = settings.PaperSize;
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
//printDoc.Print();
PrintDialog dlg = new PrintDialog();
dlg.Document = printDoc;
if (showDialog == false || dlg.ShowDialog() == DialogResult.OK)
printDoc.Print();
}
当它运行并且PrintDoc.DefaultPageSettings.PaperSize = settings.PaperSize中断时,立即窗口显示:
? settings
{Microsoft.Reporting.WinForms.ReportPageSettings}
IsLandscape: true
Margins: {[Margins Left=50 Right=50 Top=0 Bottom=0]}
PaperSize: {[PaperSize Kind=Custom Height=1350 Width=825]}
正如您所看到的,高度和宽度与我在报告属性中输入的内容相反。我无法解决这个问题。结果是报告看起来像这样: 如果我直接从报表服务器运行相同的报表而不涉及reportviewer,它将按预期运行: