Изменение шрифта Crystal Report .NET
Я разработал отчет о кристалле, который будет отправлен на определенный принтер (штрих-код) через веб-интерфейс. Разрешение создания отчета в стандартной программе просмотра отчетов 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?
3 ответа
Хотя казалось, что специальный шрифт, который я использовал, был включен на каждый мыслимый сервер, я так и не смог заставить его работать через веб-интерфейс. Я закончил тем, что нашел стандартный шрифт Windows, который в основном соответствовал потребностям этого проекта, и разочаровался в попытках решить эту проблему.
Эта идея пришла мне в голову:
Вместо того, чтобы отправлять отчет прямо из Crystal на принтер, что, если вы используете посредника, то есть сначала экспортируете.rpt в.pdf, а затем печатаете PDF?
(Да, это был бы очень "деревянный стол", но если он работает, он работает.)
Я пытался изменить шрифт Crystal Report в соответствии с данными, которые будут отображаться в отчете.
Я использую Формула Формула, чтобы изменить шрифт, используя флаги Условие.
if({?vIsRightToLeft}=true)then
"Attari Font"
Else
"Arial"
Вам нужно использовать 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