最近,我必须为我当前的一个客户创建一份 RDLC 报告。更具体地说,是数字固定纸上的发票。 (参见“stationary_paper_example.png”)。
当高分辨率图像设置为报告背景时,图像的缩放完全关闭。请参阅“stationary_paper_falsely_scaled.png”
由于之前仅在一个项目中介绍了带有数字固定纸的报告,因此我们通过在背景中设置图像元素(z-index)并设置高分辨率图像来使其工作。但这一次我们得到了一些新的隐含限制。
客户希望在发票文章表上方显示当前页码(请参阅“stationary_paper_page_number.png”)。您只能在报告的页眉或页脚部分获取此信息
我设置为“报告背景”的图像元素不能放置在报告的页眉、正文和页脚内(参见“stationary_paper_image_as_background.png”)
所以要么客户改变他们的报告布局,要么我让这件事继续下去。
如前所述,当您简单地将高分辨率图像设置为背景时,您(可能)会遇到“缩放”错误,如“stationary_paper_falsely_scaled.png”中所示。图像渲染几乎完全超出范围。
如果您将低分辨率图像设置为背景,您(可能)会看到一种模糊背景,如“stationary_paper_low_res.png”中所示。当您使用“pdf打印机”(例如“Microsoft print to pdf”)导出此解决方案时,也会发生这种情况。
经过一些挖掘和测试,我终于让它工作了(至少在我看来)
我将报告的背景设置如下:
Source: External
Value: ="file:" + Parameters!PathToStationeryPaper.Value
MIMEType: image/jpeg
private bool reportUsesStationaryPaper()
{
var result = false;
foreach (var param in reportViewer1.LocalReport.GetParameters())
{
if (param.Name.Equals("UsesStationeryPaper"))
{
result = true;
break;
}
}
return result;
}
private void reportViewer1_RenderingBegin(object sender, CancelEventArgs e)
{
if (reportUsesStationaryPaper())
{
//Reset report to low-resolution mode for screen rendering
var pathToStationaryPaper = "[…]/stationary_lowres.png";
reportViewer1.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter("PathToStationeryPaper", pathToStationaryPaper));
}
}
private void reportViewer1_ReportExport(object sender, ReportExportEventArgs e)
{
if (reportUsesStationaryPaper())
{
//Reset report to high-resolution mode for printing
string deviceInfo =
@"<DeviceInfo>
<DpiX>300</DpiX>
<DpiY>300</DpiY>
</DeviceInfo>";
e.DeviceInfo = deviceInfo;
var pathToStationaryPaper = "[…]/stationary_highres.png";
reportViewer1.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter("PathToStationeryPaper", pathToStationaryPaper));
}
}
可以设置较低分辨率的更高性能,如果需要,还可以设置“预览”水印
仍然模糊,因为我们无法在“reportviewer_PrintingBegin”或“reportviewer_Print”中设置分辨率
通过报表查看器控件的导出进行导出时,您现在将获得一个漂亮的高分辨率图像作为报表的背景😊
由于我的客户的用户习惯于“打印到 pdf”,因此客户现在需要培训用户使用报表查看器导出按钮,或者在视图中引入单独的按钮“导出到 PDF”。