Crystal Reports,vb.net和动态图片:代码中错误的宽度单位度量

问题描述

我在水晶报表中动态加载图片时遇到了麻烦。

我需要在运行时加载图片(通过公式)并在代码中设置其宽度。 在cr文档中指出,对象大小通过代码访问时以缇表示。

我发现动态加载的图片不是这样。

以下是重现此问题的步骤:

  • 创建具有以下规格的“ 10cm.jpg”文件:
    • 宽度= 1181像素
    • 高度= 100像素
    • 密度= 300 dpi

此图片在打印时将为10厘米宽((10 / 2.54)* 300〜= 1181)。

  • 创建一个新报告(“ 10cm.rpt”)。
  • 插入“ 10cm.jpg”。
  • 为此图片设置属性,如下所示:
    • 对象名称=“ MyPic1”
  • 插入另一张图片(例如10x10,这没关系)。
  • 为此图片设置属性,如下所示:
    • 对象名称=“ MyPic2”
    • 图形位置[X-2](在“图片”标签下)=“ C:\ Path \ to \ 10cm.jpg”

这样,报告将包含同一张图片的两份“副本”,一份嵌入并且一份在运行时加载。

  • 现在创建一个VB.NET/C# Windows Forms项目,并放置一个cr查看器和两个按钮。

这是相关代码:

Private report As New ReportDocument

Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load

    report.Load("C:\Path\to\10cm.rpt",OpenReportMethod.OpenReportByDefault)

    viewer.ReportSource = report

End Sub

Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click

    Dim MyPic1W = report.ReportDefinition.ReportObjects("MyPic1").Width ' 5669 <-- this is in twips and the value is OK: 1mm ~= 56.69 twips
    Dim MyPic2W = report.ReportDefinition.ReportObjects("MyPic2").Width ' 435 <- ????????????????????????  

End Sub ' Breakpoint here

Private Sub Button2_Click(sender As Object,e As EventArgs) Handles Button2.Click

    report.ReportDefinition.ReportObjects("MyPic1").Width = 8504 ' MyPic1 is correctly resized to 15 cm
    report.ReportDefinition.ReportObjects("MyPic2").Width = 8504 ' MyPic2 becomes really large!

    viewer.ReportSource = report

End Sub

您可以在Button1_Click中看到,MyPic1的宽度正确地以缇为单位,而MyPic2的宽度则以不同的单位来表达。

对于MyPic1,尝试使用缇设置图片宽度(Button2_Click)是有效的,而MyPic2变得非常大。 如果我指定一个与其未知单位成比例的值,则MyPic2的大小将正确调整:如果我将width设置为435 * 1.5〜= 653,则其大小正确变为15cm。

有人知道这个单位来自哪里吗?

谢谢!

解决方法

我的经验是,要求Crystal调整图像大小不是一个好主意。可能会增加rpt的内存消耗。

最好在Crystal外部调整图像大小并动态加载生成的文件。

here中列出的至少一个UFL允许Crystal公式来调整图像大小,以便Crystal的“ Graphic Location”表达式可以调整大小(在Crystal外部),然后加载图像文件。您可以在代码中执行相同的操作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...