See Also
Other Platforms
Features
Buy Now
Online Help
Demo
Licensing

Back

Using Barcode Professional for ASP.NET in Crystal Reports for .NET - PDF Support

Technologies used
  • Neodynamic Barcode Professional 2.0 (or greater) for ASP.NET (WebControl)
  • Crystal Reports for .NET (any version)
  • Microsoft .NET Framework (any version)
  • Microsoft Visual Studio .NET (any version)
  • Microsoft SQL Server Northwind Database
Now, you can deliver barcode images in your Crystal Reports web reports using Barcode Professional. Following this FAQ you can export your report to PDF format maintaining the barcode images into it!
In the following sample we're going to create an ASP.NET Web Application which includes a CR reports and which shows barcode images into that report using Barcode Professional.
In this sample, we're going to use the Microsoft's Northwind database shipped with SQL Server. If you don't have SQL Server, you could use MSDE and get the Northwind database sample from Microsoft Office CD too.
Follow these steps:
  • Open your .NET development tool � such as Visual Studio .NET � and create a new ASP.NET Web Application.
  • IMPORTANT NOTE:

    This Guide uses an XML Schema (XSD files) as data source for the report. Please note that this XML Schema will only be used to design the report in the Crystal Reports Designer.
    You can easily generate an XML Schema using an ADO.NET DataSet object. This object has the WriteXmlSchema() method that creates an XML Schema file for you.
    So, if you need to create a report for a Table in a SQL Server Database, you can create a DataSet object for that Table and then call the WriteXmlSchema() method to get the XML Schema file associated to it.
    REMEMBER that this is required to DESIGN the reports. Once created the report you won#&39;t need it at RUNTIME when you deploy your application.

    For sample demos using Typed DataSet or SQL Stored Procedures as Data Sources please refer to the following Guides instead:
  • Creating an XML Schema for our Report's DataSource. In this case we're going to create a simple SQL SELECT statement of the Northwind's Order Table. Please follow these steps:
    • Add a new "temporary" Webform called SchemaGen.aspx
    • In the Page_Load event procedure write the following code:
      Visual Basic .NET
      'Connection Info
      'CHANGE the values as you need

      Dim scnn As String = "server=(local);database=NorthwindCS;trusted_connection=true"
      Dim cnn As New SqlClient.SqlConnection(scnn)

      'Get Orders info
      Dim sqlOrders As String = "SELECT dbo.Orders.OrderID, dbo.Customers.CompanyName, dbo.Customers.Address, dbo.Customers.City, dbo.Customers.PostalCode, dbo.Customers.Country, dbo.Orders.OrderDate, dbo.Orders.RequiredDate, dbo.Orders.ShippedDate, dbo.Orders.ShipVia, dbo.Orders.Freight, dbo.Products.ProductID, dbo.Products.ProductName, dbo.[Order Details].UnitPrice, dbo.[Order Details].Quantity, dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity AS TotalLine, dbo.Customers.Region FROM dbo.Customers INNER JOIN dbo.Orders ON dbo.Customers.CustomerID = dbo.Orders.CustomerID INNER JOIN dbo.[Order Details] ON dbo.Orders.OrderID = dbo.[Order Details].OrderID INNER JOIN dbo.Products ON dbo.[Order Details].ProductID = dbo.Products.ProductID"
      Dim cmd As New SqlClient.SqlCommand(sqlOrders, cnn)

      'Create DataSet for Orders
      Dim da As New SqlClient.SqlDataAdapter(cmd)
      Dim ds As New DataSet
      da.Fill(ds)

      'Create the XML Schema for Orders
      'Be sure you give write permission to ASPNET account to Temp folder

      ds.WriteXmlSchema("C:\temp\orders.xsd")
      Visual C# .NET
      //Connection Info
      //CHANGE the values as you need

      string scnn = "server=(local);database=NorthwindCS;trusted_connection=true";
      System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection(scnn);

      //Get Orders info
      string sqlOrders = "SELECT dbo.Orders.OrderID, dbo.Customers.CompanyName, dbo.Customers.Address, dbo.Customers.City, dbo.Customers.PostalCode, dbo.Customers.Country, dbo.Orders.OrderDate, dbo.Orders.RequiredDate, dbo.Orders.ShippedDate, dbo.Orders.ShipVia, dbo.Orders.Freight, dbo.Products.ProductID, dbo.Products.ProductName, dbo.[Order Details].UnitPrice, dbo.[Order Details].Quantity, dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity AS TotalLine, dbo.Customers.Region FROM dbo.Customers INNER JOIN dbo.Orders ON dbo.Customers.CustomerID = dbo.Orders.CustomerID INNER JOIN dbo.[Order Details] ON dbo.Orders.OrderID = dbo.[Order Details].OrderID INNER JOIN dbo.Products ON dbo.[Order Details].ProductID = dbo.Products.ProductID";
      System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sqlOrders, cnn);

      //Create DataSet for Orders
      System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(cmd);
      DataSet ds = new DataSet();
      da.Fill(ds);

      //Create the XML Schema for Orders
      //Be sure you give write permission to ASPNET account to Temp folder

      ds.WriteXmlSchema("C:\\temp\\orders.xsd");

    • Set the SchemaGen.aspx page as the start page
    • Run the app. It should create the Orders.XSD file in the C:\Temp folder
    The SchemaGen.aspx is not more necessary. You could delete it or left it as is for future references.

    Now, we have the XML Schema needed to DESIGN the report.
  • Add the created XML Schema called Orders.XSD to the ASP.NET Web App Project.
  • Once we have the XML Schema file, we'll need to modify it and add a NEW element that will represent our barcode image.
    To do this, on the Solution Explorer, double-click on the Orders.xsd and add a new element whose name will be BarcodeImage and whose type will be base64Binary as is shown in the following figure:

    XML Schema to design the Report


    After that, save the XML Schema file!
  • Now it's time to create our CR report. So, add a new blank Crystal Reports to the project and name it as Orders.rpt
  • We're going to design our report specifying to it the XML Schema - Orders.xsd. So, with the report opened, in the Field Explorer right-click on Database Fields and go to Add/Remove Database

    Database Expert


    Click on ADO.NET (XML) data source and in the dialog box write Orders.XSD in the XML File Path textbox and click on Finish

    Database Expert


    In the left panel select the Table item and click on > button as is shown in the above figure. Click OK.
  • The Field Explorer should look something like this:

    Field Explorer


  • Create a Group in the report for the OrderID field.
  • Design the Order report as is shown in the next figure:

    Orders Report at design time


    IMPORTANT: right-click on the BarcodeImage Blob field, select Format and check Can Grow!

    Format Editor

    Save the report and close it.
  • Now, open the WebForm1.aspx of your project and drag & drop a CrystalReportViewer control onto it. Set the DisplayGroupTree property to False.
  • Add a reference to the Neodynamic.WebControls.BarcodeProfessional.dll assembly. We're going to use Barcode Professional as a component library.

  • In the code-behind class of the Form, add the following namespace reference:
    Visual Basic .NET
    Imports Neodynamic.WebControls.BarcodeProfessional
    Visual C# .NET
    using Neodynamic.WenControls.BarcodeProfessional;
  • Finally, write the following code in the Page_Load event procedure:
    Visual Basic .NET
    'Connection Info
    'CHANGE the values as you need

    Dim scnn As String = "server=(local);database=NorthwindCS;trusted_connection=true"
    Dim cnn As New SqlClient.SqlConnection(scnn)

    'Get Orders info
    'Only Country = USA

    Dim sqlOrders As String = "SELECT dbo.Orders.OrderID, dbo.Customers.CompanyName, dbo.Customers.Address, dbo.Customers.City, dbo.Customers.PostalCode, dbo.Customers.Country, dbo.Orders.OrderDate, dbo.Orders.RequiredDate, dbo.Orders.ShippedDate, dbo.Orders.ShipVia, dbo.Orders.Freight, dbo.Products.ProductID, dbo.Products.ProductName, dbo.[Order Details].UnitPrice, dbo.[Order Details].Quantity, dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity AS TotalLine, dbo.Customers.Region FROM dbo.Customers INNER JOIN dbo.Orders ON dbo.Customers.CustomerID = dbo.Orders.CustomerID INNER JOIN dbo.[Order Details] ON dbo.Orders.OrderID = dbo.[Order Details].OrderID INNER JOIN dbo.Products ON dbo.[Order Details].ProductID = dbo.Products.ProductID WHERE dbo.Customers.Country = 'USA'"
    Dim cmd As New SqlClient.SqlCommand(sqlOrders, cnn)

    'Create DataSet for Orders
    Dim da As New SqlClient.SqlDataAdapter(cmd)
    Dim ds As New DataSet
    da.Fill(ds)

    'The DataSet DOES NOT include the BarcodeImage "column"
    'or element we've included in the XML Schema file.
    'So, create the BarcodeImage column
    'WARNING: you must name it as you did in the XML Schema

    Dim dc As DataColumn = New DataColumn("BarcodeImage", GetType(Byte()))
    'Add the BarcodeImage column to the DataTable
    ds.Tables(0).Columns.Add(dc)
    'Create a BarcodeProfessional object to fill
    'the BarcodeImage column

    Dim bc As BarcodeProfessional = New BarcodeProfessional
    'We are going to use Code 128 Barcode Symbology
    'but you could use other

    bc.Symbology = Symbology.Code128
    'Set some properties of Barcode Professional. Play with them.
    bc.BarHeight = 0.5F 'Set System.Web.UI.WebControls.Unit.Pixel(50) if you use Barcode Professional 2.X
    bc.Text = ""
    bc.QuietZoneWidth = 0 'Set System.Web.UI.WebControls.Unit.Pixel(0) if you use Barcode Professional 2.X
    bc.DisplayCode = False

    'Now, generate and fill barcode images
    For Each dr As DataRow In ds.Tables(0).Rows
    'We're going to encode the OrderID column
    bc.Code = CStr(dr("OrderID"))
    dr("BarcodeImage") = bc.GetBarcodeImage(System.Drawing.Imaging.ImageFormat.Png)
    Next

    'Create a Orders report object
    'and set its data source with the DataSet

    Dim report As New Orders
    report.SetDataSource(ds)

    'Export report to PDF format
    'NOTE: Give write permission to ASPNET account to Temp folder

    Dim DiskOptions As CrystalDecisions.Shared.DiskFileDestinationOptions = New CrystalDecisions.Shared.DiskFileDestinationOptions
    DiskOptions.DiskFileName = "C:\TEMP\OrdersWithBarcodeImages.pdf"
    report.ExportOptions.DestinationOptions = DiskOptions
    report.ExportOptions.ExportDestinationType = CrystalDecisions.[Shared].ExportDestinationType.DiskFile
    report.ExportOptions.ExportFormatType = CrystalDecisions.[Shared].ExportFormatType.PortableDocFormat
    report.Export()

    'And Show it!
    CrystalReportViewer1.ReportSource = report
    Visual C# .NET
    //Connection Info
    //CHANGE the values as you need

    string scnn = "server=(local);database=NorthwindCS;trusted_connection=true";
    System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection(scnn);

    //Get Orders info
    //Only Country = USA

    string sqlOrders = "SELECT dbo.Orders.OrderID, dbo.Customers.CompanyName, dbo.Customers.Address, dbo.Customers.City, dbo.Customers.PostalCode, dbo.Customers.Country, dbo.Orders.OrderDate, dbo.Orders.RequiredDate, dbo.Orders.ShippedDate, dbo.Orders.ShipVia, dbo.Orders.Freight, dbo.Products.ProductID, dbo.Products.ProductName, dbo.[Order Details].UnitPrice, dbo.[Order Details].Quantity, dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity AS TotalLine, dbo.Customers.Region FROM dbo.Customers INNER JOIN dbo.Orders ON dbo.Customers.CustomerID = dbo.Orders.CustomerID INNER JOIN dbo.[Order Details] ON dbo.Orders.OrderID = dbo.[Order Details].OrderID INNER JOIN dbo.Products ON dbo.[Order Details].ProductID = dbo.Products.ProductID WHERE dbo.Customers.Country = 'USA'";
    System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sqlOrders, cnn);

    //Create DataSet for Orders
    System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);

    //The DataSet DOES NOT include the BarcodeImage "column"
    //or element we've included in the XML Schema file.
    //So, create the BarcodeImage column
    //WARNING: you must name it as you did in the XML Schema

    System.Data.DataColumn dc = new System.Data.DataColumn("BarcodeImage", typeof(byte[]));
    //Add the BarcodeImage column to the DataTable
    ds.Tables[0].Columns.Add(dc);
    //Create a BarcodeProfessional object to fill
    //the BarcodeImage column

    BarcodeProfessional bc = new BarcodeProfessional();
    //We are going to use Code 128 Barcode Symbology
    //but you could use other

    bc.Symbology = Symbology.Code128;
    //Set some properties of Barcode Professional. Play with them.
    bc.BarHeight = 0.5f; //Set System.Web.UI.WebControls.Unit.Pixel(50) if you use Barcode Professional 2.X
    bc.Text = "";
    bc.QuietZoneWidth = 0; //Set System.Web.UI.WebControls.Unit.Pixel(0) if you use Barcode Professional 2.X
    bc.DisplayCode = false;

    //Now, generate and fill barcode images
    foreach(System.Data.DataRow dr in ds.Tables[0].Rows)
    {
    //We are going to encode the OrderID column
    bc.Code = dr["OrderID"].ToString();
    dr["BarcodeImage"] = bc.GetBarcodeImage(System.Drawing.Imaging.ImageFormat.Png);
    }

    //Create a Orders report object
    //and set its data source with the DataSet

    Orders report = new Orders();
    report.SetDataSource(ds);

    //Export report to PDF format
    //NOTE: Give write permission to ASPNET account to Temp folder

    CrystalDecisions.Shared.DiskFileDestinationOptions DiskOptions = new CrystalDecisions.Shared.DiskFileDestinationOptions();
    DiskOptions.DiskFileName = "C:\\TEMP\\OrdersWithBarcodeImages.pdf";
    report.ExportOptions.DestinationOptions = DiskOptions;
    report.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;
    report.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
    report.Export();

    //And Show it!
    CrystalReportViewer1.ReportSource = report;
  • Set the WebForm1.aspx page as the start page

    That's it. Build the ASP.NET Web Application and run it. You'll see the following output.

    Barcode Professional in Crystal Reports .NET - Orders Report


    And you can find the exported PDF file under C:\Temp\OrdersWithBarcodeImages.pdf

    Barcode Professional in Crystal Reports .NET - PDF Orders Report


Sample Files Download
Here are a VB.NET and C# versions of this sample. Please, download the appropriate zip file. In it you'll find these files:
  • WebForm1.aspx + WebForm1.aspx.cs/vb
  • SchemaGen.aspx + SchemaGen.aspx.cs/vb
  • Orders.XSD
  • Orders.rpt
To reproduce this sample on your own machine, create a new ASP.NET Web Application. Name it as BCWebSampleCRPDF, add to it the downloaded files and review the steps described above.
Download the source code here:
If you need more information or assistance, please contact our .
 Copyright © 2003 - 2009 Neodynamic S.R.L. All rights reserved.