c# - 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 窗体项目并放置一个 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 的宽度以不同的单位表示。
尝试使用缇设置图片宽度(Button2_Click)适用于 MyPic1,而 MyPic2 变得非常大。如果我指定一个与其未知单位成比例的值,MyPic2 的大小将正确调整:如果我将宽度设置为 435 * 1.5 ~= 653,它的大小正确地变为 15cm。
有人知道这个单位来自哪里吗?
谢谢!
解决方案
我的经验是,要求 Crystal 调整图像大小不是一个好主意。它可能会增加 rpt 内存消耗。
最好在 Crystal 外部调整图像大小并动态加载生成的文件。
此处列出的至少一个 UFL允许 Crystal 公式处理图像大小调整,因此 Crystal 中的“图形位置”表达式可以调整大小(在 Crystal 之外),然后加载图像文件。您可以在代码中执行相同的操作。
推荐阅读
- android - 我只想在设备位于地理围栏区域时启用打卡按钮。我需要做什么?
- python-3.x - 在 pycharm 中安装包时出错,即 pandas 和所有
- wicket - Wicket 实现 Flash 重定向
- python - 如何使用 boto 从 s3 下载最新更新文件
- javascript - 如何计算文本中的字符数?
- javascript - 我正在使用 for 循环从表单输入打印输出,但输入表单不断添加自身
- asp.net - vb asp .net webform下载excel文件返回错误的扩展名和文件名
- c++ - 如何复制此 API 方法(类 + typedef)
- mysql - MySQL DISTINCT 返回不那么明显的结果
- java - IO 异常:“java.io.FileNotFoundException:.\data(访问被拒绝)在 h2 数据库恢复