Как узнать, что задание на печать прерывается с помощью ActiveReport SystemPrinter? - PullRequest
0 голосов
/ 18 сентября 2018

Я совершенно новичок в 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? Я что-то упустил?

Пожалуйста, помогите.

Спасибо.

1 Ответ

0 голосов
/ 19 сентября 2018

класс SectionDocument в версии .NET имеет обработчик события 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

Спасибо

...