Member 13954973 Ответов: 4

Как печатать непосредственно на принтере клиента?


всегда печатайте на принтере сервера

Что я уже пробовал:

Dim doc как новый Отчетдокумент
doc.Load("..\CrystalReport4.rpt")
док.PrintToPrinter(1, True, 0, 0)

4 Ответов

Рейтинг:
2

OriginalGriff

Цитата:
всегда печатайте на принтере сервера

Это связано с тем, что VB - код всегда выполняется на сервере, а не на клиенте, поэтому все принтеры, к которым он имеет доступ, подключены к серверу. Похоже, что он работает в разработке, потому что сервер и клиент-это одна и та же физическая машина.

Сервер не имеет прямого доступа к клиентскому оборудованию, включая принтеры, по соображениям безопасности. Представьте себе, что вы могли бы: что бы сделали вредоносные сайты с вашим принтером, если бы они могли получить к нему прямой доступ?


Рейтинг:
2

Patrice T

Цитата:
всегда печатайте на принтере сервера

Сервер не может напрямую печатать на принтере клиента, это функция безопасности.
Единственная возможность-это если принтер клиента является сетевым принтером и сервером в одной сети (корпоративная сеть, а не интернет).


Рейтинг:
1

F-ES Sitecore

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


Рейтинг:
0

Jochen Arndt

Код выполняется на сервере и поэтому обращается к принтеру сервера.

По соображениям безопасности такой код, запущенный на сервере, не имеет или очень ограничен доступом к оборудованию клиента. Но есть решения для печати Crytal отчетов на клиенте:
Crystal Reports печать на стороне клиента без средства просмотра[^]
Печать отчета Crystal непосредственно в ASP.NET C# - переполнение стека[^]


Member 13954973

Большое спасибо.

Я знал, как использовать Crystal Report для печати на принтере, но просто нужно было
(1) Выберите условия , нажмите кнопку Печать и покажите отчет.
(2) Нажмите кнопку crystal report print .
(3) Выберите принтер, а затем печать.
Я написал::
Дим oRpt в новом документе
oRpt.Load(сервер.MapPath("T13RLABEL.rpt"))
Dim mytablelogoninfo как новый TableLogOnInfo
Затемните mytable как таблицу
Для каждой таблицы mytable в базе данных oRpt.Таблицы
mytablelogoninfo = mytable.LogOnInfo
С помощью mytablelogoninfo.ConnectionInfo
.ServerName = ConfigurationSettings.AppSettings("ServerString")
.Имя Базы Данных = ConfigurationSettings.Параметр Appsettings("DatabaseString")
.UserID = ConfigurationSettings.Параметр Appsettings("UidString")
.Password = ConfigurationSettings.Параметр Appsettings("PwdString")
Конец С
таблица MyTable.ApplyLogOnInfo(mytablelogoninfo)
Следующий
oRpt.RecordSelectionFormula = "{T13LABEL.Функция user_id} = """ &амп; sys_user усилителя; """"
oRpt.Обновить()

CreportV.ReportSource = oRpt

Jochen Arndt

Вы поняли, что я и другие писали?
Код может получить доступ только к принтерам локальной системы, в которой он запущен. Поскольку ваш код выполняется на сервере, он не может получить доступ к принтеру клиента.

Существуют хитрости, позволяющие клиентам печатать отчеты, как показано в ссылках из моего решения. Но затем выбор принтера и выбор параметров принтера должны выполняться на клиенте, который должен быть инициирован пользователем.

Member 13954973

Я понял.
Спасибо.