#vb.net #printing
#vb.net #печать
Вопрос:
Я пытаюсь выполнить печать с выбранного сетевого принтера. Иногда он работает, но в других случаях он не будет печатать, выдавая мне следующую ошибку:
«Указан недопустимый принтер.Имя файла MYCRYSTALRPT 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:pathofmyreportMyCrystalRPTfilename.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. глядя на это, я замечаю, что у вас есть
PrintDocument1
,prtdoc
иcryRpt
что делают первые 2? Кроме того, для устранения неполадок, какое имя принтера при сбое и при успешном завершении?2. @reckface забыл прокомментировать первые два, я этим не пользовался. При устранении неполадок я выбираю имя принтера, значение strdefaultPrinter — это имя принтера. Выглядит так: «\ network sharedprintername», прежде чем выдавать мне исключение, оно заканчивается в этой части: cryRpt.PrintOptions. Имя принтера = strDefaultPrinter
Ответ №1:
Убедитесь, что принтер, который вы собираетесь использовать, действительно существует на момент печати: попробуйте проверить с помощью этого:
if Not PrinterSettings.InstalledPrinters.OfType(Of String)().Any(Function (s) s.Equals(strDefaultPrinter)) Then
' Display/handle an error
End If
Редактировать
Хорошо, в зависимости от используемой версии, SAP рекомендует изменить использование PrintOutputController
API, указав, что PrintToPrinter
он больше активно не разрабатывается и не поддерживается:
- Ссылка
CrystalDecisions.ReportAppServer.Controllers
иCrystalDecisions.ReportAppServer.ClientDoc
-
Создайте объект параметров печати с информацией о принтере по умолчанию
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()
Комментарии:
1. Привет. Я сделал это. И это показывает, что общий принтер существует. Кстати, принтер является общим сетевым принтером, если это что-то значит.
2. если он существует, он все еще терпит неудачу?
3. да, все еще сбой. Вот почему я не знаю, как отладить его сейчас, даже если он получит правильный принтер.
4. Я добавил рекомендацию SAP