How to load an embedded rpt file in crystal report - crystal-reports

We have a requirement to load crystal report from embedded resource. In our application each module is a portable area and rpt files are embedded in the assembly. In the crystal report viewer we need to read the embedded rpt file and load the report document using the embedded rpt file.
Thanks in advance,
Anoop X.

Something like this?
private void SetReportSource(String reportPath)
{
object reportPathAsObject = (object)reportPath;
ReportClientDocument reportClientDocument = new ReportClientDocumentClass();
reportClientDocument.Open(ref reportPathAsObject, 0);
crystalReportViewer.ReportSource = reportClientDocument;
}

Related

How to retrieve crystal report page(section) name using c#

I have crystal report that I want to separate by the page(section) name and create a pdf file. I've been looking everywhere and have not found and answer. Hopefully someone can help.
`
foreach (ReportDocument pgnName in rpt)
{
exportOpts.ExportFormatOptions = pdfRtfWordOpts;
exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
destinationOpts.DiskFileName = "C:\\Temp\\report File" + pgnName+ ".pdf";
exportOpts.ExportDestinationOptions = destinationOpts;
exportOpts.ExportDestinationType = ExportDestinationType.DiskFile;
rpt.Export(exportOpts);
}
Couldn't find anything.
The Crystal runtime doesn't provide such an option.
Building report bursting functionality (by page or by group logic) is fairly complex. Your question seems to suggest you are not very familiar with the Crystal Reports object model. So consider 3rd-party Crystal Reports automation tools. Ken Hamady maintains a listing of such tools here. And several of them support report bursting.
Some of these tools also provide an option to export the report to PDF and burst the PDF by page, by bookmark, or by hidden tag formula. That approach may be easier for you to implement in your own code.

How to set Jasper to use XSSF?

In a existing system already use jasper 5.0 and as I know it use poi HSSF to generate xls data, but now as the application grow up, the report have a problem with a big count transaction to generate.
I have search for the solution and found POI with XSSF. Because jasper use POI HSSF too, I thinking about to use XSSF inside of JASPER.
Is that possible? and how I could do that? I need to use jasper because it's not possible for now to change the existing app.
To export jrxml generating ooxml XSSF, excel file xlxs
Use the net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter
Example:
JasperPrint jasperPrint = JasperFillManager.fillReport(report, paramMap, connection); //Example of how to get the jasper print
JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
File outputFile = new File("excelTest.xlsx");
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputFile));
SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration();
configuration.setOnePagePerSheet(false); //Set configuration as you like it!!
configuration.setDetectCellType(true);
configuration.setCollapseRowSpan(false);
exporter.setConfiguration(configuration);
exporter.exportReport();
Naturally you need related libraries (poi-ooxml.jar, poi-ooxml-schemas.jar, xmlbeans.jar) in your classpath, they are present in the distribution of jasper report.
The JRXlsxExporter is available since version 4.5 this is the jasper report 5.5.0 API. In version 4 parameters where set instead of properties please see jasperreports-export-to-xlsx-not-xls

Crystal Reports 2010 (V.13) shows no data in Visual Studio 2010

I'm a newbie to VS and CR, and been struggling with this issue for days:
I've installed CR 2010 and tried creating a report on my VB.Net project - the report loads, shows the headers but there is no data.
When browsing each field in Field Explorer they too are empty.
The database and dataset both have rows
The report is as simple as they get - just displaying data from one table
I created the report using the wizard, nothing was done manually
Any help would be appreciated.
Thanks!
Took a while, but apparently the dataset passed was empty.
Here's the code to add to the form that holds the viewer (in case you're using MyBase.Load):
Private Sub test() Handles MyBase.Load
Dim rpt As New TestReport
Dim adp As New TestDataSetTableAdapters.CountriesTableAdapter
Dim country As New TestDataSet.tblCountriesDataTable
Dim ds As New DataSet()
adp.Fill(country)
ds.Tables.Add(country)
CrystalReportViewer1.ReportSource = rpt
rpt.Load("TestReport.rpt")
rpt.SetDataSource(ds)
CrystalReportViewer1.Refresh()
End Sub

API to get Crystal RPT version

In the Crystal Studio, I can get to the version of an rpt file by going to Report|Performance Information|Report Definition|File Format Schema.
Is there a way of getting to this same information via the Crystal .NET API?
I can't find it for the life of me.
OLIVER
Check out ReportDocument.ReportClientDocument.MajorVersion and MinorVersion. You'll need to add a reference to CrystalDecisions.ReportAppServer.ClientDoc to access it.
using(var rptDoc = new ReportDocument())
{
rptDoc.Load(path);
Console.WriteLine(rptDoc.ReportClientDocument.MajorVersion);
}

Crystal Report .NET font changing

I've designed a crystal report that will be sent to a specific (barcode) printer through a web interface. Allowing the report to be generated in the standard crystal report viewer was causing issues, so I am now using the code-behind to send the report directly to the printer.
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();
When printed from the designer (CRXI) everything works fine but when the web interface sends the job to a printer (any printer) it changes the font to Times New Roman which messes up all of the field sizes. If I use the standard .NET report viewer it uses the correct font, so I'm pretty sure the change is being caused by creating/using the ReportDocument.
How can I send the report directly to a print without it defaulting the fonts back to Times New Roman?
This idea occured to me:
Instead of sending the report straight from Crystal to the printer, what if you use some kind of middleman, i.e. export the .rpt to .pdf first, then print the PDF?
(Yes, it would be a very "wooden tables" tables approach, but if it works, it works.)
While it seemed like the special font I was using had been included on every server imaginable, I was never able to get it to work through the web interface.
I ended up finding a standard windows font that mostly suited the needs of this project and have given up on trying to beat this problem.
You need use RAS SDK API. Crystal Reports for Visual Studio 2010 (v13) include this api. (This code don't work in Crystal Reports for Visual Studio 2005... I don't have info about other versions)
Add this references to your existing code:
CrystalDecisions.ReportAppServer.ClientDoc
CrystalDecisions.ReportAppServer.Controllers
CrystalDecisions.ReportAppServer.ReportDefModel
And use this code (VB... sorry)
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
I was trying to change Crystal Report Font according to data that will be shown on the report.
I use Formate Formula to change the font using flags Condition.
if({?vIsRightToLeft}=true)then
"Attari Font"
Else
"Arial"