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。

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

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)