如何知道使用ActiveReport SystemPrinter中止打印任务?

时间:2018-09-18 03:48:11

标签: .net printing reporting activereports

我对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中完成?我想念什么吗?

请帮助。

谢谢。

1 个答案:

答案 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

谢谢