VS2003下水晶報表的列印比較麻煩,看到有些朋友在為此而苦惱,分享一下偶的做法:
如果是局域網內中,可參考下面的步驟:
1.增加列印按鈕,其代碼如下
2.增設列印設定頁面,包括印表機名稱及邊界,列印頁數等的設定,當點列印按鈕後秀出該列印設定頁面並將值返回至報表頁面的TextBox1中
P.S.值得注意:
1.服務器上要安裝所需用的印表機,建議印表機位址設成IP或用PrintServer
2.印表機盡可能選用功能完備的,偶之前有遇到過用HP1022對有些報表印不出,有些卻正常,而換用HP1200或HP3300,HP3390,EPSON LQ-680K等均正常
如果是局域網內中,可參考下面的步驟:
1.增加列印按鈕,其代碼如下
Dim rpt As ReportDocument = Session("report")
Dim pv() As String = Split(TextBox1.Text, ";")'TextBox1.text為點列印按鈕時返回的印表機及邊界的設定值,以;分隔
Dim margins As CrystalDecisions.Shared.PageMargins
If pv(0) > pv(1) Then
If Not IsStartupScriptRegistered("Startup") Then
Page.RegisterStartupScript("Startup", "<script language=javascript>window.alert('列印頁數設定錯誤!@_@')</script>")
End If
Exit Sub
End If
' 取得 PageMargins 結構並設定
' 報表的邊界。
margins = rpt.PrintOptions.PageMargins
margins.leftMargin = pv(6)
margins.rightMargin = pv(7)
margins.topMargin = pv(4)
margins.bottomMargin = pv(5)
' 套用頁面邊界。
rpt.PrintOptions.ApplyPageMargins(margins)
' 選取印表機。
rpt.PrintOptions.PrinterName = pv(3)
' 列印報表。將 startPageN 及 endPageN
' 參數設定為 0 即可列印所有頁面。
Try
rpt.PrintToPrinter(pv(2), False, pv(0), pv(1))
Catch exp As LoadSaveReportException
If Not IsStartupScriptRegistered("Startup") Then
Page.RegisterStartupScript("Startup", "<script language=javascript>window.alert('開啟報表檔時發生錯誤!@_@')</script>")
End If
Catch exp As PrintException
If Not IsStartupScriptRegistered("Startup") Then
Page.RegisterStartupScript("Startup", "<script language=javascript>window.alert('列印時發生錯誤,請檢查印表機相關設定!@_@')</script>")
End If
Catch exp As Exception
If Not IsStartupScriptRegistered("Startup") Then
Page.RegisterStartupScript("Startup", "<script language=javascript>window.alert('錯誤來源:" & exp.Source & "!@_@')</script>")
End If
End Try
Dim pv() As String = Split(TextBox1.Text, ";")'TextBox1.text為點列印按鈕時返回的印表機及邊界的設定值,以;分隔
Dim margins As CrystalDecisions.Shared.PageMargins
If pv(0) > pv(1) Then
If Not IsStartupScriptRegistered("Startup") Then
Page.RegisterStartupScript("Startup", "<script language=javascript>window.alert('列印頁數設定錯誤!@_@')</script>")
End If
Exit Sub
End If
' 取得 PageMargins 結構並設定
' 報表的邊界。
margins = rpt.PrintOptions.PageMargins
margins.leftMargin = pv(6)
margins.rightMargin = pv(7)
margins.topMargin = pv(4)
margins.bottomMargin = pv(5)
' 套用頁面邊界。
rpt.PrintOptions.ApplyPageMargins(margins)
' 選取印表機。
rpt.PrintOptions.PrinterName = pv(3)
' 列印報表。將 startPageN 及 endPageN
' 參數設定為 0 即可列印所有頁面。
Try
rpt.PrintToPrinter(pv(2), False, pv(0), pv(1))
Catch exp As LoadSaveReportException
If Not IsStartupScriptRegistered("Startup") Then
Page.RegisterStartupScript("Startup", "<script language=javascript>window.alert('開啟報表檔時發生錯誤!@_@')</script>")
End If
Catch exp As PrintException
If Not IsStartupScriptRegistered("Startup") Then
Page.RegisterStartupScript("Startup", "<script language=javascript>window.alert('列印時發生錯誤,請檢查印表機相關設定!@_@')</script>")
End If
Catch exp As Exception
If Not IsStartupScriptRegistered("Startup") Then
Page.RegisterStartupScript("Startup", "<script language=javascript>window.alert('錯誤來源:" & exp.Source & "!@_@')</script>")
End If
End Try
2.增設列印設定頁面,包括印表機名稱及邊界,列印頁數等的設定,當點列印按鈕後秀出該列印設定頁面並將值返回至報表頁面的TextBox1中
P.S.值得注意:
1.服務器上要安裝所需用的印表機,建議印表機位址設成IP或用PrintServer
2.印表機盡可能選用功能完備的,偶之前有遇到過用HP1022對有些報表印不出,有些卻正常,而換用HP1200或HP3300,HP3390,EPSON LQ-680K等均正常