在VFP中打开PDF文件的一些问题

zhoud_j 2009-06-06 11:48:11
请教各位:

我用VFP+SQL做了一个小程序,我将文件的内容(PDF)保存在SQL的表的一个字段中.

我想在VFP的表单中打开这个PDF的文档,要求:打开时,不要显示adobe reader的菜单,如"文件","编辑"......等.

如果可以的话,最好将打开的文档显示在设计的表单中,不要另外在打开新的窗口.
...全文
943 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yttv8 2012-01-11
  • 打赏
  • 举报
回复
正好需要用到vfp中打开pdf文件,仔细看了楼上的解决方案,我这这么做的:
我把1楼的代码放到了cmdbutton1的click代码中,单击按钮时,弹出一个对话框,让我选择pdf文件所在的路径。
因为pdf文件的路径是已经存在了dbf数据表一个字段中,能不能通过该字段的内容直接找到pdf文件打开,不需要我自己找路径。
pl893 2011-07-18
  • 打赏
  • 举报
回复
顶顶顶顶顶
RH2588 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 apple_8180 的回复:]!

你的机子上安装 Adobe Reader 6了吗?
[/Quote]

我的机器上安装了Adobe Reader 6, 运转很正常 ,问题是同事们的机器上安装的版本各不相同,有7.0 和9.0的,该怎么办,如果以后他们各自再升级或安装其他的版本又该怎么办?
RH2588 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhoud_j 的帖子:]

我想在VFP的表单中打开这个PDF的文档,要求:打开时,不要显示adobe reader的菜单,如"文件","编辑"......等.

如果可以的话,最好将打开的文档显示在设计的表单中,不要另外在打开新的窗口.
[/Quote]

经反复调试,我采用了10楼的建议:
1 新建 form b.scx 加了个CmdBottom ,Click 事件用1楼的
Thisform.Newobject('pdf', 'Olecontrol', '', '', 'PDF.PdfCtrl.6')
Thisform.pdf.Move( 10, 10, Thisform.Width - 40, Thisform.Height - 40)
Thisform.pdf.SetShowToolbar(.f.)
Thisform.pdf.LoadFile( Getfile('pdf') )
Thisform.pdf.Visible = .T.
Thisform.pdf.SetFocus()
2 在原来的 form b.scx 的grid存储PDF的路径和文件名处 DoubleClick 调用b.scx, 基本上能浏览PDF 的图片了。
3 结论:还是没有能实现楼主和我的要求 《打开时,不要显示adobe reader的菜单。。。》
请老师们帮我想想办法,如何能实现这个功能 , 当然能在新的 FORM 中显示也可以。
补充:
在 Grid 的AfterRowColChange 事件 Thisform.pdf.LoadFile( Getfile('pdf') ) ,效果不理想。


Thisform.pdf.LoadFile(getfile('d:\tybox\图纸\2-20001-322-01-(无锡博普)'))
RH2588 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 apple_8180 的回复:]

你的机子上安装 Adobe Reader 6了吗?
[/Quote]

安装了 Adobe Reader 6 后,眼睛一亮,果然灵验了。非常感谢。
接下来的问题是能否把该程序变成函数,点击grid中的一个对象,就能显示该pdf文件,搞了几天,还是一筹莫展,能否请老师再指点一下。
RH2588 2009-07-02
  • 打赏
  • 举报
回复
谢谢!我试试看。
十豆三 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 RH2588 的回复:]
接下来的问题是能否把该程序变成函数,点击grid中的一个对象,就能显示该pdf文件,搞了几天,还是一筹莫展,能否请老师再指点一下。
[/Quote]

你的Grid的数据源表存储是PDF的路径吧
那在 Grid 的AfterRowColChange 事件写相应代码

主要要有这句Thisform.oleControl1.LoadFile([&cFile])

你也可以用1楼的代码,将前3行放到表单 Init 事件,然后 在 Grid 的AfterRowColChange 事件改变 Thisform.pdf.LoadFile( Getfile('pdf') )
RH2588 2009-06-30
  • 打赏
  • 举报
回复
谢谢。
我疏忽了,我装的是PDF阅读器 v3.1
我马上安装 Adobe Rreader 6,再试试看
十豆三 2009-06-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 RH2588 的回复:]
请教十豆三老师,我在运行您提供的程序时,执行到
oform1=Newobject("form1")

出现以下的错误提示

OLE 错误码 0x800401f3 Invalid class string
不知为什么?该怎样解决? 谢谢!
[/Quote]

你的机子上安装 Adobe Reader 6了吗?
RH2588 2009-06-30
  • 打赏
  • 举报
回复
请教十豆三老师,我在运行您提供的程序时,执行到
oform1=Newobject("form1")

出现以下的错误提示

OLE 错误码 0x800401f3 Invalid class string
不知为什么?该怎样解决? 谢谢!
十豆三 2009-06-08
  • 打赏
  • 举报
回复
没错,要把SQL表中的PDF还原是PDF文件,然后再显示即可。
十豆三 2009-06-08
  • 打赏
  • 举报
回复
*VFP如何打开PDF文件并显示在表单中?(先安装Adobe Reader 5.0或6.0)

*---------------------------------------------------------------------------------------

*将下面程序代码保存为一个prg文件,传入PDF文件名作为参数即可。

Lparameters tFile

Public oform1

oform1=Newobject("form1")

If Vartype(cFile) # "U"
oForm1.cmdFile.Visible = .F.
oForm1.cmdExit.Visible = .F.
oForm1.oleControl1.Top = 12
oForm1.oleControl1.LoadFile([&cFile])
Endif

oform1.Show
*RETURN
**********************************************************
Define Class form1 As Form

DoCreate = .T.
Caption = "pdfForm"
Name = "Form1"

Add Object cmdfile As CommandButton With ;
Top = 12, ;
Left = 12, ;
Height = 27, ;
Width = 144, ;
Caption = "Select File", ;
Name = "cmdFile"

Add Object cmdexit As CommandButton With ;
Top = 12, ;
Left = 168, ;
Height = 27, ;
Width = 84, ;
Caption = "E\<xit", ;
Name = "cmdExit"

Add Object olecontrol1 As OleControl With ;
OLEClass = "PDF.PdfCtrl.6", ; &&如果是Adobe Reader 5.0,此处的6为5
Top = 48, ;
Left = 12, ;
Height = 192, ;
Width = 348, ;
Name = "Olecontrol1"

Procedure Init
Thisform.Resize()
Endproc

Procedure Resize
Thisform.Olecontrol1.Height = Thisform.Height - 60
Thisform.Olecontrol1.Width = Thisform.Width - 24
Thisform.Olecontrol1.Refresh()
Endproc

Procedure cmdfile.Click
Local cFile
cFile = Getfile([PDF])
If !Empty(cFile)
Thisform.oleControl1.LoadFile([&cFile])
Endif
Endproc

Procedure cmdexit.Click
Thisform.Release()
Endproc

Enddefine
zhoud_j 2009-06-07
  • 打赏
  • 举报
回复
谢谢都市夜猫.

但是我想将SQL表中一字段(保存文件内容)的内容直接在窗口中打开,而不是打开一个文件,怎么处理?
都市夜猫 2009-06-07
  • 打赏
  • 举报
回复
我在我的机器上做了如下试验,可以达到你的要求

新建一个表单,放一个按钮,按钮的 click 事件中写下面的代码

Thisform.Newobject('pdf', 'Olecontrol', '', '', 'AcroPDF.PDF.1')
Thisform.pdf.Move( 10, 10, Thisform.Width - 20, Thisform.Height - 20)
Thisform.pdf.SetShowToolbar(.f.)
Thisform.pdf.LoadFile( Getfile('pdf') )
Try
Thisform.pdf.Visible = .T.
Catch
Endtry
Thisform.pdf.SetFocus()


我的机器上安装了 Acrobat9
都市夜猫 2009-06-07
  • 打赏
  • 举报
回复 1
这个控件没有找到有直接绑定数据的功能
所以只能在显示前
先用 strtofile 将内容保存到一临时文件
然后再加载显示

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧