请教如何将 vb6 中的水晶报表 存储为 pdf 格式文件, 也就是说我想将报表转换为 pdf 文件存储起来。

解决方案 »

  1.   

    安装PDF打印机,打印另存为*.PDF
      

  2.   

    用汉王转换试试~~~偶曾经转过Word,不知道报表能不能~~
      

  3.   

    据说安装了Acrobat完整版,word就会有个插件,然后就可以另存为pdf了
    楼主可以把相同的一份数据考虑写到Word里面,调用Word的另存功能
      

  4.   

    我的一部分代码
            crxRpt.ExportOptions.FormatType = crEFTPortableDocFormat
            crxRpt.ExportOptions.DestinationType = crEDTDiskFile
            crxRpt.EnableParameterPrompting = False
            crxRpt.PaperSize = crPaperA4
            crxRpt.Export False
      

  5.   

    补充下,我引用的是crystal report 的runtime
      

  6.   

    我用的方法是:
          1,安装PDF打印机,后台生成报表时另存为*.PDF
          2,生成PDF程序,要另写一个服务放在报务器实时运行.
      

  7.   

    安装一个 PDF 虚拟打印机(比如 PDF Factory 等),你系统的打印机中就多了一个打印机。
    报表打印时选择这个打印机、或者出报表前直接将该打印机设为默认,打印。
    然后虚拟打印机会出一个对话框让你选择一个 .pdf 文件的保存路径;或者有的虚拟打印机有自动命名规则,那么到自动保存目录下找最新的 .pdf 文件。最后一步是有虚拟打印机完成,所以适用与任何支持打印的软件/报表。
      

  8.   

    谢谢各位的回复,我找到了一个以前的帖子,是类似的问题,我把代码贴出来,给大家分享!================================================================================
    注意:这个需要安装Adobe   PDF   虚拟打印机(装完后应该在你的打印机列表中出现一个名称为Adobe   PDF的打印机 Option   Explicit '---------------------------------------------------------------------------------------- 

    Const   HWND_BROADCAST   =   &HFFFF& 
    Const   WM_WININICHANGE   =   &H1A 
    Private   Declare   Function   GetProfileString   Lib   "kernel32 "   Alias   "GetProfileStringA "   (ByVal   lpAppName   As   String,   ByVal   lpKeyName   As   String,   ByVal   lpDefault   As   String,   ByVal   lpReturnedString   As   String,   ByVal   nSize   As   Long)   As   Long 
    Private   Declare   Function   WriteProfileString   Lib   "kernel32 "   Alias   "WriteProfileStringA "   (ByVal   lpszSection   As   String,   ByVal   lpszKeyName   As   String,   ByVal   lpszString   As   String)   As   Long 
    Private   Declare   Function   SendMessage   Lib   "user32 "   Alias   "SendMessageA "   (ByVal   hwnd   As   Long,   ByVal   wMsg   As   Long,   ByVal   wParam   As   Long,   lParam   As   Any)   As   Long 
    '--------------------------------------------------------------------------------------- 
    Private   Sub   cmdExportToPdf_Click() 
    Dim   i   As   Long 
    Dim   gFlag   As   Boolean 
    Dim   strDefaultPrinterName   As   String 
    Dim   PrinterName   As   String 
    strDefaultPrinterName   =   Printer.DeviceName 
    '判断有没有安装打印机 
    If   strDefaultPrinterName   =   " "   Then 
            MsgBox   "没有安装打印机! "   vbExclamation   +   vbOKOnly,   Me.Caption 
            Exit   Sub 
    End   If '----------------------------------------------------------------------- 
    '判断所有打印机列表中有没有Adobe   PDF   打印机 
    gFlag   =   False 
    For   i   =   0   To   Printers.count   -   1 
        If   Printers(i).DeviceName   =   "Adobe   PDF "   Then 
            gFlag   =   True 
            Exit   For 
        End   If 
    Next   i If   gFlag   =   False   Then 
            MsgBox   "没有安装   Adobe   PDF   打印机!! ",   vbExclamation   +   vbOKOnly,   Me.Caption 
            Exit   Sub 
    End   If '----------------------------------------------------------------------- '*********************************************************************** 
    '把默认打印机设置为Adobe   PDF 
    PrinterName   =   "Adobe   PDF " 
    Dim   S   As   String,   length   As   Long,   hKey   As   Long 
    S   =   String(80,   Chr(0)) 
    length   =   GetProfileString( "devices ",   PrinterName,   " ",   S,   Len(S)) 
    S   =   Left(S,   length) 
    Call   WriteProfileString( "windows ",   "device ",   PrinterName   &   ", "   &   S) 
    Call   SendMessage(HWND_BROADCAST,   WM_WININICHANGE,   &H7FFF&,   ByVal   "windows ")             
    CsRpt.ReportFileName=   "你的水晶报表的路径 "   PrintPreview.ReportFileName CsRpt.PrintReport 
                          
    '****************************************************************************** 
    '打印结束后再把默认打印机设置为最初的那个打印机 
    PrinterName   =   strDefaultPrinterName 
    S   =   String(80,   Chr(0)) 
    length   =   GetProfileString( "devices ",   PrinterName,   " ",   S,   Len(S)) 
    S   =   Left(S,   length) 
    Call   WriteProfileString( "windows ",   "device ",   PrinterName   &   ", "   &   S) 
    Call   SendMessage(HWND_BROADCAST,   WM_WININICHANGE,   &H7FFF&,   ByVal   "windows ") '****************************************************************************** 
    End   Sub