How to bypass crystal login information, set parameters and print to pdf?
1) Create a page with a print button, a submitt button, and
a crytal report viewer we are naming it CVWSales
2)Create a Crystal report [.RPT] file with its SQL connection.
Here is the code.
Imports System.Data.SqlClient
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine.PrintOptions
Partial Class ReportViewer
Inherits System.Web.UI.Page
Dim cbsMAin3 As New ReportDocument
Dim Print As Boolean = False
Private Sub Dailysales()
Dim tbCurrent As CrystalDecisions.CrystalReports.Engine.Table
Dim tliCurrent As CrystalDecisions.Shared.TableLogOnInfo
Dim appPath As String
Dim reportPath As String
'***********
Dim crParameterDiscreteValue As New CrystalDecisions.Shared.ParameterDiscreteValue
Dim crParameterFieldDefinitions As ParameterFieldDefinitions
Dim crParameterFieldLocation As ParameterFieldDefinition
Dim crParameterValues As CrystalDecisions.Shared.ParameterValues
Dim ParametersS(11) As String
Dim RptDateValues As New BitArray(7)
Dim Fields(5) As String
Dim FldCnt As Integer
FldCnt = 0
RptDateValues = CType(Session("RptDateValues"), BitArray)
ParametersS = CType(Session("ParametersS"), Array)
appPath = MapPath(".")
reportPath = appPath + "\FOLDERNAMEIFANY\" + "YOURREPORT.rpt"
cbsMAin3.Load(reportPath)
'IF YOUR REPORT HAS ANY GROUPING THAT YOU MAY CHANGE DINAMICALLY ENTER IT HERE
'cbsMAin3.DataDefinition.SortFields(0).Field = cbsMAin3.Database.Tables(0).Fields("GROUP1")
'cbsMAin3.DataDefinition.SortFields(1).Field = cbsMAin3.Database.Tables(0).Fields("GROUP2") ' group by
'THIS IS THE LOGIN INFORMATION OF YOUR REPORT.
crParameterFieldDefinitions = cbsMAin3.DataDefinition.ParameterFields
For Each tbCurrent In cbsMAin3.Database.Tables
tliCurrent = tbCurrent.LogOnInfo
With tliCurrent.ConnectionInfo
.ServerName = "SERVERNAME"
.UserID = "DATABASEUSERNAME"
.Password = "DATABASEPASSWORD"
.DatabaseName = "DATABASENAME EX-NORTHWIND"
End With
tbCurrent.ApplyLogOnInfo(tliCurrent)
Next tbCurrent
'Parameter used by Crystal's Store procedure.
crParameterFieldLocation = crParameterFieldDefinitions.Item("@CUSTOMERID")
crParameterValues = crParameterFieldLocation.CurrentValues
crParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue
crParameterDiscreteValue.Value = "3" 'CUSTOMERID IT COULD BE A VB CONTROL
crParameterValues.Add(crParameterDiscreteValue)
crParameterFieldLocation.ApplyCurrentValues(crParameterValues)
If Print = False Then
Me.cvwSales.ReportSource = cbsMAin3
ElseIf Print = True Then
'This code will send directly to default printer-no good on server side
'cbsMAin3.PrintToPrinter(1, True, 1, 0)
'cvwSales.ReportSource = cbsMAin3
'this code prints to PDF
Dim oStream As System.IO.MemoryStream = DirectCast(cbsMAin3.ExportToStream(CrystalDecisions.[Shared].ExportFormatType.PortableDocFormat), System.IO.MemoryStream)
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/pdf"
Response.BinaryWrite(oStream.ToArray())
Response.[End]()
End If
End Sub
Protected Sub ButtonPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonPrint.Click
Print = True
Dailysales()
End Sub
Protected Sub Buttonsubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Buttonsubmit.Click
Dailysales()
End Sub
End Class