我对ActiveReport完全陌生。
我有一个使用ActiveReport 2.0的旧版VB6代码。 打印流程如下(代码为VB,未显示ar的初始化)
Dim ar as DDActiveReports2.ActiveReport
Dim aborted As Boolean
aborted = False
ar.Printer.StartJob("some job")
For i = 0 To ar.Pages.Count - 1
ar.Printer.StartPage()
If ar.Printer.Status = DDActiveReports2.JobStatus.ddJSAborted Then
ar.Printer.AbortJob()
aborted = True
Exit For
End If
ar.Printer.PrintPage(ar.Pages(i), left, top, width, height)
ar.Printer.EndPage()
Next
If Not Aborted Then
ar.Printer.EndJob()
End If
我正在尝试将其迁移到ActiveReport for .NET。经过研究,我发现最好的替代品是ActiveReports.SystemPrinter。迁移的代码可能如下所示(ar的初始化未显示),
Dim ar As ActiveReports.Document.SectionDocument
Dim aborted As Boolean = False
Dim printer As New ActiveReports.SystemPrinter
printer.StartJob("some job")
For i = 0 To ar.Pages.Count - 1
printer.StartPage()
If ??? Then
printer.AbortJob()
aborted = True
Exit For
End If
ar.Pages(i).Draw(printer.Graphics, New RectangleF(left, top, width, height))
printer.EndPage()
Next
If Not Aborted Then
printer.EndJob()
End If
但是,我找不到ActiveReport2中的printer.Status,并且无法知道打印已退出状态DDActiveReports2.JobStatus.ddJSAborted。
我不太确定DDActiveReports2.JobStatus.ddJSAborted到底是什么,我想用户可能会在Windows“打印任务”窗口中取消打印。一旦取消,程序将取消所有剩余页面。
但是,这似乎无法在.NET中完成?我想念什么吗?
请帮助。
谢谢。
答案 0 :(得分:1)
.NET版本的SectionDocument类具有PrintAborted事件处理程序。 这是代码示例:
导入GrapeCity.ActiveReports
导入GrapeCity.ActiveReports.Document
Dim WithEvents my_document As SectionDocument
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
my_document = New SectionDocument()
my_document.Load(ms)
my_document.Print(False)
End Sub
Private Sub PrintAborted(sender As Object, e As EventArgs) Handles my_document.PrintAborted
MsgBox("PrintAborted")
End Sub
请不要忘记将项目中的引用添加到GrapeCity.ActiveReports.Extensibility.dll和GrapeCity.ActiveReports.Viewer.Win.dll
谢谢