Указан неверный принтер (иногда он работает, а иногда нет) - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь печатать с выбранного сетевого принтера.Иногда он работает, но в других случаях он не печатается, выдавая следующую ошибку:

"Указан неверный принтер. MyCrystalRPTfilename 11124_5324_ {67F07633-5EF3-49B4-9573-BB34151D75BA} .rpt"

Я нашел различные части кода ниже из сети. Я знаю, что здесь уже спрашивали, но приведенные решения не работают для меня , может быть, я просто что-то упустил.

Try

            Dim PrintDialog1 As New PrintDialog
            PrintDialog1.ShowDialog()
            PrintDocument1.PrinterSettings.PrinterName = PrintDialog1.PrinterSettings.PrinterName

            Dim prtdoc As New PrintDocument
            Dim strDefaultPrinter As String = PrintDialog1.PrinterSettings.PrinterName


            Dim cryRpt As New ReportDocument
            Dim crtableLogoninfos As New TableLogOnInfos
            Dim crtableLogoninfo As New TableLogOnInfo
            Dim crConnectionInfo As New ConnectionInfo
            Dim CrTables As Tables
            Dim CrTable As Table
            cryRpt.Load("C:\path\of\my\report\MyCrystalRPTfilename.rpt")

            With crConnectionInfo
                .ServerName = "myserver"
                .DatabaseName = "mydbase"
                .UserID = "myuser"
                .Password = "mypassword"
            End With

            CrTables = cryRpt.Database.Tables
            For Each CrTable In CrTables
                crtableLogoninfo = CrTable.LogOnInfo
                crtableLogoninfo.ConnectionInfo = crConnectionInfo
                CrTable.ApplyLogOnInfo(crtableLogoninfo)
            Next

            cryRpt.Refresh()
            cryRpt.PrintOptions.PrinterName = strDefaultPrinter
            cryRpt.PrintOptions.PaperSource = CrystalDecisions.[Shared].PaperSource.Auto
            cryRpt.PrintToPrinter(1, False, 1, 1)


        Catch ex As Exception
            MessageBox.Show(ex.InnerException.ToString())
        End Try

1 Ответ

1 голос
/ 24 апреля 2019

Убедитесь, что принтер, который вы намереваетесь использовать, действительно существует на момент печати: Попробуйте проверить это:

if Not PrinterSettings.InstalledPrinters.OfType(Of String)().Any(Function (s) s.Equals(strDefaultPrinter)) Then
  ' Display/handle an error
End If

EDIT

Хорошо, в зависимости от используемой версии, SAP рекомендует перейти на использование PrintOutputController API, заявив, что PrintToPrinter больше не разрабатывается и не поддерживается:

  1. Ссылка CrystalDecisions.ReportAppServer.Controllers и CrystalDecisions.ReportAppServer.ClientDoc
  2. Создание объекта параметров печати с информацией о принтере по умолчанию

    Dim options = New PrintReportOptions With
    {
        .PrinterName = strDefaultPrinter,
        .Collated = False,
        .NumberOfCopies = 1,
        .JobTitle = report.Name
    }
    ' pass the options to the print method
    report.ReportClientDocument.PrintOutputController.PrintReport(options)
    ' If you're done
    report.Close()
    report.Dispose()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...