vb6 中将水晶报表 存储为pdf 格式文件

yuantao_yt 2011-03-03 04:48:47
请教如何将 vb6 中的水晶报表 存储为 pdf 格式文件, 也就是说我想将报表转换为 pdf 文件存储起来。
...全文
285 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
一只狼 2013-07-08
9楼:在何处`添加何种代码,并且加上解释,可以吗 贡献贡献啊!!!跪求
回复
一只狼 2013-07-08
8楼能,将代码弄全点嘛,我是菜鸟,坐等答案,
回复
Tiger_Zhao 2011-03-04
安装一个 PDF 虚拟打印机(比如 PDF Factory 等),你系统的打印机中就多了一个打印机。
报表打印时选择这个打印机、或者出报表前直接将该打印机设为默认,打印。
然后虚拟打印机会出一个对话框让你选择一个 .pdf 文件的保存路径;或者有的虚拟打印机有自动命名规则,那么到自动保存目录下找最新的 .pdf 文件。

最后一步是有虚拟打印机完成,所以适用与任何支持打印的软件/报表。
回复
zhangfangp 2011-03-04
我用的方法是:
      1,安装PDF打印机,后台生成报表时另存为*.PDF
      2,生成PDF程序,要另写一个服务放在报务器实时运行.

回复
yuantao_yt 2011-03-04
谢谢各位的回复,我找到了一个以前的帖子,是类似的问题,我把代码贴出来,给大家分享!

================================================================================
注意:这个需要安装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
回复
补充下,我引用的是crystal report 的runtime
回复
我的一部分代码
crxRpt.ExportOptions.FormatType = crEFTPortableDocFormat
crxRpt.ExportOptions.DestinationType = crEDTDiskFile
crxRpt.EnableParameterPrompting = False
crxRpt.PaperSize = crPaperA4
crxRpt.Export False
回复
dbcontrols 2011-03-03
据说安装了Acrobat完整版,word就会有个插件,然后就可以另存为pdf了
楼主可以把相同的一份数据考虑写到Word里面,调用Word的另存功能
回复
gongxb123 2011-03-03
用汉王转换试试~~~偶曾经转过Word,不知道报表能不能~~
回复
yuantao_yt 2011-03-03
[Quote=引用 4 楼 ybh37 的回复:]
安装PDF打印机,打印另存为*.PDF
[/Quote]

能否说的详细点,谢谢!
回复
咸清 2011-03-03
安装PDF打印机,打印另存为*.PDF
回复
yuantao_yt 2011-03-03
请各位大侠出手相助
回复
dbcontrols 2011-03-03
坐等高手出手,求代码,求真相
回复
yuantao_yt 2011-03-03
没有人 :(
回复
相关推荐
发帖

1187

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2011-03-03 04:48
社区公告
暂无公告