Я совершенно новичок в ActiveReport.
У меня есть устаревший код VB6, который использует ActiveReport 2.0.
Процесс печати выглядит следующим образом (код 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 для .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
Однако я не могу найти printer.Status, как в ActiveReport2, и нет способа узнать состояние прерванной печати DDActiveReports2.JobStatus.ddJSAborted.
Я не совсем уверен, что такое DDActiveReports2.JobStatus.ddJSAborted на самом деле, я думаю, что пользователь может отменить печать в окне Windows Printing Tasks. Как только это будет отменено, программа отменит все оставшиеся страницы.
Однако, кажется, это невозможно сделать в .NET? Я что-то упустил?
Пожалуйста, помогите.
Спасибо.