http://search.csdn.net/expert/topic/3/304/2003/2/14/1428024.htm
http://expert.csdn.net/Expert/topic/2169/2169143.xml?temp=.9781916

解决方案 »

  1.   

    将水晶报表导出成PDF文件,还需在客户端安装Acrobat Reader软件;下面我给一段关键代码,希望能给你些帮助。(说明:水晶报表样式用工具制定,本代码是针对数据集做数据填充的)'*******************************************************************************
    '
    '   模块名称:收文签打印
    '   功    能:收文签打印
        编 制 人:wzc
    '
    '*****************************************************************************
    Imports qyoa.WebApp.Func
    Imports qyoa.WebApp.Base
    Imports qyoa.WebApp.DbControl
    Imports qyoa.Root.Com.ModuleDataSet
    Imports CrystalDecisions.Web.Services.Enterprise.EnterpriseReportManager
    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.SharedNamespace Root.Com
        Public Class ArtiGetDealPrint
            Inherits DataControlBase
            Protected WithEvents LinkButtonPrint As System.Web.UI.WebControls.LinkButton
            Protected WithEvents LinkButtonBack As System.Web.UI.WebControls.LinkButton
            Protected WithEvents OleDbConnectionMe As System.Data.OleDb.OleDbConnection
            Protected WithEvents OleDbSelectCommandMe As System.Data.OleDb.OleDbCommand
            Dim DBLinkMe As DbLink = New DbLink() '数据库连接对象
            Protected WithEvents DataSetMe As qyoa.DatasetArtiGetPrint
            Protected WithEvents CrystalReportViewer1 As CrystalDecisions.Web.CrystalReportViewer
            Dim FuncCommMe As FuncComm = New FuncComm()#Region " Web 窗体设计器生成的代码 "        '该调用是 Web 窗体设计器所必需的。
            <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
                Me.OleDbConnectionMe = New System.Data.OleDb.OleDbConnection()
                Me.OleDbSelectCommandMe = New System.Data.OleDb.OleDbCommand()
                Me.DataSetMe = New qyoa.DatasetArtiGetPrint()
                CType(Me.DataSetMe, System.ComponentModel.ISupportInitialize).BeginInit()
                '
                'DataSetMe
                '
                Me.DataSetMe.DataSetName = "DatasetArtiGetPrint"
                Me.DataSetMe.Locale = New System.Globalization.CultureInfo("en-US")
                Me.DataSetMe.Namespace = "http://tempuri.org/DatasetArtiGetPrint.xsd"
                CType(Me.DataSetMe, System.ComponentModel.ISupportInitialize).EndInit()        End Sub        Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
                'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
                '不要使用代码编辑器修改它。
                InitializeComponent()
            End Sub#End Region        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                '在此处放置初始化页的用户代码            DBLinkMe.SetLinkInfo(OleDbConnectionMe)  '设置连接信息
                Me.OleDbSelectCommandMe.Connection = Me.OleDbConnectionMe            If Not Page.IsPostBack Then
                    viewstate("id") = Request.QueryString("id")
                End If            '***** 填充数据集 ********
                FillDataSet1()
                FillDataSet2()            '************ crystal printview *********
                Dim rptMe As qyoa.CrystalReportArtiGet = New qyoa.CrystalReportArtiGet()
                rptMe.SetDataSource(DataSetMe)
                CrystalReportViewer1.DisplayToolbar = False
                CrystalReportViewer1.BestFitPage = True            '设定水晶报表的ReportSource
                CrystalReportViewer1.ReportSource = rptMe
                '********* 导出 PDF 报表 *************
                Dim CrExportOptions As ExportOptions   '导出选项
                Dim CrDiskFileDestinationOptions As New DiskFileDestinationOptions()
                Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions()
                Dim strPrintViewFileName As String = FuncCommMe.FileNameTrans("Print") + ".pdf"            CrDiskFileDestinationOptions.DiskFileName = Server.MapPath(p.PREFIX_URL_UPLOAD_TEMP) + strPrintViewFileName            CrFormatTypeOptions.FirstPageNumber = 1
                CrFormatTypeOptions.LastPageNumber = 3
                CrFormatTypeOptions.UsePageRange = True            'Set export options
                CrExportOptions = rptMe.ExportOptions  '指定cr关联
                With CrExportOptions
                    'Set the destination to a disk file
                    .ExportDestinationType = ExportDestinationType.DiskFile
                    'Set the format to PDF
                    .ExportFormatType = ExportFormatType.PortableDocFormat
                    'Set the destination options to DiskFileDestinationOptions object
                    .DestinationOptions = CrDiskFileDestinationOptions
                    .FormatOptions = CrFormatTypeOptions
                End With
                rptMe.Export()  '****** 导出到PDF            '********  本模块不需要Crystalview显示  *********
                'CrystalReportViewerMe.Visible = False
                'Me.CrystalReportViewerMe.ReportSource = rptMe              '********  本模块不需要Crystalview显示  *********
                'Response.Redirect(p.PREFIX_URL_UPLOAD_TEMP + "Print.pdf", False)
                Response.Redirect("PrintViewFrame.aspx?FileName=" + strPrintViewFileName, False)            ''FuncCommMe.FileDel(p.PREFIX_URL_UPLOAD_TEMP + "Print.pdf")        End Sub        Private Sub FillDataSet1()  
            ..........
           End Sub        Private Sub FillDataSet2() 
             ..........
            End SubEnd Namespace