【问题标题】:ActiveReports not allowing overwrite of jpg after report generation. Windows. VB.NETActiveReports 不允许在报告生成后覆盖 jpg。视窗。 VB.NET
【发布时间】:2016-07-13 16:36:44
【问题描述】:

目前,我正在利用 ActiveReports 通过路径名将动态图像实现到正在生成的报告中。

图像会以 .jpg 格式自动生成到服务器文件夹。 Active Reports 模块使用此代码导入文件。

Sub ActiveReport_ReportStart

    Picture1.Image = System.Drawing.Image.FromFile("path\filename.jpg")

End Sub

我遇到的问题是该报告锁定了 jpg 文件以防被覆盖。

我不确定可能出了什么问题,但在报告生成后,报告似乎仍在使用图像文件。

我是否缺少“断开连接”代码片段以确保导入不允许继续联系文件?

如果这很简单,我深表歉意,但我找不到这个特定实例的任何内容。

谢谢。

编辑:

我试图通过将它们复制到自己的变量中来绕过锁定。但这也不起作用。

Sub ActiveReport_ReportStart

dim TempImage as Image = Image.FromFile("path\filename")
Picture1.Image = TempImage
End Sub

【问题讨论】:

标签: vb.net activereports


【解决方案1】:

您可以使用“Using”块来确保图像的对象在使用完成后立即被释放。

Using 语句基本上标记了语句中指定的对象的边界。所以当使用Using-End Using的代码块在正常执行或者异常原因退出时,框架会自动调用这些对象的Dispose方法。

以下是可以帮助您解决问题的建议代码:

Private Sub SectionReport1_ReportStart(sender As Object, e As EventArgs) Handles MyBase.ReportStart
    Dim img As Image

    Using bmpTemp = New Bitmap("path\filename.jpg")
        img = New Bitmap(bmpTemp)
    End Using

    Picture1.Image = img
End Sub

【讨论】:

  • 由于 Bitmap("path\filename.jpg") 没有采用直接路径,因此遇到了问题。这可能是因为正在使用的程序是 ActiveReports 的简化版本,并且不包括 Bitmap() 的所有潜在用途。
【解决方案2】:

我能够通过创建一个使用 Graphics.FromImage 方法并处理原始文件的函数来实现此功能。

Public Function GetImageFile(ByVal pathfn As String) As Image
    Dim tempImg As Image = Image.FromFile(pathfn)
    Dim tempBtm As New Bitmap(Width:=img.Width*CorrectFactor, Height:=img.Height*CorrectFactor, Format:=tempImg.PixelFormat)
        Using g As Graphics = Graphics.FromImage(bm)
            g.DrawImage(tempImg, Point.Empty)
        End Using
    tempImg.Dispose()
    Return tempBtm  
End Function

将放置在报告中的项目如下。

Sub ActiveReport_ReportStart
    Picture1.Image = GetImageFile("Path\Filename")
End Sub

【讨论】:

    猜你喜欢
    • 2018-09-09
    • 2022-06-15
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多