Изменение шрифта Crystal Report .NET - PullRequest
1 голос
/ 15 июля 2010

Я разработал отчет Crystal, который будет отправляться на определенный принтер (штрих-код) через веб-интерфейс. Разрешение на создание отчета в стандартной программе просмотра отчетов Crystal было причиной проблем, поэтому сейчас я использую кодовый код для отправки отчета непосредственно на принтер.

ReportDocument Report = new ReportDocument();                      
ParameterDiscreteValue Order = new ParameterDiscreteValue();

Order.Value = Convert.ToInt32(txtOrder);
Report.Load(reportPath);
Report.SetParameterValue("OrderNo", Order);

PageMargins margins;
margins = Report.PrintOptions.PageMargins;
margins.bottomMargin = 0;
margins.leftMargin = 0;
margins.rightMargin = 0;
margins.topMargin = 0;

Report.PrintOptions.ApplyPageMargins(margins);
Report.PrintOptions.PrinterName = "\\\\printserver\\Zebra  Z6M Plus (300dpi)";                
Report.PrintToPrinter(1, false, PageNum, PageNum);

Report.Close();

При печати из конструктора (CRXI) все работает нормально, но когда веб-интерфейс отправляет задание на принтер (любой принтер), он меняет шрифт на Times New Roman, который портит все размеры полей. Если я использую стандартный просмотрщик отчетов .NET, он использует правильный шрифт, так что я уверен, что изменение вызвано созданием / использованием ReportDocument.

Как я могу отправить отчет напрямую на печать, не возвращая шрифты по умолчанию в Times New Roman?

Ответы [ 4 ]

0 голосов
/ 04 марта 2019

Я пытался изменить шрифт Crystal Report в соответствии с данными, которые будут отображаться в отчете.
Я использую формулу Формирования, чтобы изменить шрифт с помощью флагов Condition.

if({?vIsRightToLeft}=true)then
"Attari Font"
Else
"Arial"
0 голосов
/ 23 июля 2010

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

0 голосов
/ 11 октября 2013

Вам необходимо использовать RAS SDK API. Crystal Reports для Visual Studio 2010 (v13) включает этот API. (Этот код не работает в Crystal Reports для Visual Studio 2005 ... У меня нет информации о других версиях)

Добавьте эти ссылки к существующему коду:

CrystalDecisions.ReportAppServer.ClientDoc
CrystalDecisions.ReportAppServer.Controllers
CrystalDecisions.ReportAppServer.ReportDefModel

И используйте этот код (VB ... извините)

Using rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument
    rpt.Load(file, CrystalDecisions.[Shared].OpenReportMethod.OpenReportByTempCopy)
    rpt.SetDataSource(_ReportSource)
    Dim options As New CrystalDecisions.ReportAppServer.Controllers.PrintReportOptions
    options.Collated = _Collate
    options.NumberOfCopies = _Copies
    ' TODO: Implement_startPageN and _endPageN
    Dim optPrint As CrystalDecisions.ReportAppServer.ReportDefModel.PrintOptions
    optPrint = rpt.ReportClientDocument.PrintOutputController.GetPrintOptions
    optPrint.PrinterName = _PrinterName                                                    rpt.ReportClientDocument.PrintOutputController.ModifyPrintOptions(optPrint)
    rpt.ReportClientDocument.PrintOutputController.PrintReport(options)
    rpt.Close()
End Using
0 голосов
/ 15 июля 2010

Мне пришла в голову эта идея:
Вместо того, чтобы отправлять отчет прямо из Crystal на принтер, что, если вы используете посредника, то есть сначала экспортируете .rpt в .pdf, а затем печатаете PDF?

(Да, это был бы очень "деревянный стол", но если он работает, он работает.)

...