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

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

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

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

如果可以的话,最好将打开的文档显示在设计的表单中,不要另外在打开新的窗口.
...全文
833 15 打赏 收藏 转发到动态 举报
写回复
用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 将内容保存到一临时文件
然后再加载显示
第五章 项目管理器 5.1 项目管理器介绍 5.2 项目连编 5.3 项目信息和项目文档 5.1 项目管理器介绍 "项目管理器"是Visual FoxPro 6.0应用程序的文件、数据、 对象的组织管理心,利用"项目管理器"可以在项目添 加或移去文件、创建新文件或修改已有文件、查看表的内容 以及把文件与其他项目关联起来。 1. 项目管理器的组成 ( (1 1)选项卡: )选项卡:" "项目管理器 项目管理器" "有六个选项卡 有六个选项卡, ,其" "全部 全部" "选项卡显 选项卡显 示的是后面 示的是后面5 5个选项卡的全部内容,即 个选项卡的全部内容,即" "数据 数据" "、 、" "文档 文档" "、 、" "类 类 " "、 、" "代码 代码" "和 和" "其他 其他" "。这 。这5 5个选项卡独立管理相应文件对象。 个选项卡独立管理相应文件对象。 ( (2 2)分层结构视图: )分层结构视图:如果要在某个选项卡列出的文件找出某个文 如果要在某个选项卡列出的文件找出某个文 件对象,只需找到相应的文件大类,然后单击其左边的 件对象,只需找到相应的文件大类,然后单击其左边的" "+" +",就 ,就 会展开列出其下级文件类型。如果没有 会展开列出其下级文件类型。如果没有" "+" +"出现,那说明当前对 出现,那说明当前对 象并没有文件加入其。 象并没有文件加入其。 " "+" +"点击之后会变成 点击之后会变成" "- -" "标志,如果 标志,如果 这时点击 这时点击" "- -" ",那么就可以折叠展开的文件。 ,那么就可以折叠展开的文件。 ( (3 3)命令按钮: )命令按钮:在 在" "项目管理器 项目管理器" "窗口右边有 窗口右边有6 6个命令按钮, 个命令按钮, 即 即" "新建 新建" "、 、" "添加 添加" "、 、" "修改 修改" "、 、" "运行 运行" "或 或" "打开 打开" "或 或" "浏览 浏览 " "、 、" "移去 移去" "及 及" "连编 连编" ",其 ,其" "运行 运行" "或 或" "打开 打开" "或 或" "浏览 浏览" "分 分 别与所选文件对象有关,并且做相应的改变。 别与所选文件对象有关,并且做相应的改变。 n n 新建: 新建:在 在" "项目管理器 项目管理器" "新建并加入新的项目。单击不同的 新建并加入新的项目。单击不同的 对象,将建立不同的项目。 对象,将建立不同的项目。 n n 添加: 添加:是将一个已经创建的现成项目添加到 是将一个已经创建的现成项目添加到" "项目管理器 项目管理器" "。 n n 修改: 修改:当选一个项目,点击 当选一个项目,点击" "修改 修改" "按钮,则会打开相应的 按钮,则会打开相应的 设计器或编辑修改的对话框,可以在窗口内做任何操作和修改工作。 设计器或编辑修改的对话框,可以在窗口内做任何操作和修改工作。 n n 运行: 运行:运行一个程序文件或查询等。 运行一个程序文件或查询等。 n n 打开、关闭 打开、关闭:指将某个项目设置为打开或关闭状态。 :指将某个项目设置为打开或关闭状态。 n n 浏览: 浏览:浏览一个表或文件。 浏览一个表或文件。 n n 移去: 移去:选一个项目,点击 选一个项目,点击" "移去 移去" "按钮,将提示你将该项目 按钮,将提示你将该项目 从 从" "项目管理器 项目管理器" "移去,或者从磁盘上永久性的删除。选择删除 移去,或者从磁盘上永久性的删除。选择删除 一定要小心,文件删除后不能恢复。 一定要小心,文件删除后不能恢复。 n n 连编: 连编:打开一个 打开一个" "连编项目 连编项目" "对话窗口,其包括编译应用程 对话窗口,其包括编译应用程 序( 序(.app .app),编译可执行文件( ),编译可执行文件(.exe .exe),或者连编 ),或者连编" ".com" .com"和 和 " ". .dll dll" "文件,以及其他的操作选项。 文件,以及其他的操作选项。 2. 建立一个新项目 ( (1 1)从 )从" "文件 文件" "菜单选择 菜单选择" "新建 新建" "命令,打开 命令,打开" "新建 新建" "对话框。 对话框。 ( (2 2)选择 )选择" "项目 项目" ",有两种方式: ,有两种方式:" "新建文件 新建文件" "和 和" "向导 向导" "。这里选择 。这里选择" "新建 新建 文件 文件" "。 。 ( (3 3)打开打开" "创建 创建" "对话框。在 对话框。在" "项目文件 项目文件" "输入项目名称,在 输入项目名称,在" "保存在 保存在"
第四章 数据库和表的高级应用 4.1 数据库的使用 4.2 数据库的高级应用 4.3 设置表属性 4.4 建立表间的关系 4.5 使用多个表 4.1 数据库的使用 4.1.1 向数据库添加数据表 向数据库添加表有两种方法:菜单方式和命令方式。 菜单方式添加表 在"项目管理器",从"数据"选项卡选择 数据库,例如,"教师管理"数据库,如图4-1所示, 单击"修改"按钮,打开"数据库设计器",如图4- 2所示。 图4-1 选择数据库 图4-2 数据库设计器 图4-3 向数据库添加表 从"数据库"菜单选择"添加表"命令或单击" 数据库设计器"工具栏上的"添加表"按钮,在"打 开"对话框选定"jsqk.dbf",然后单击"确定" 按钮。这时"jsqk.dbf"表就添加到"教师管理"数 据库了。如图4-3所示。 2. 命令方式添加表 【格式】:ADD TABLE <数据表名> 【功能】:向已打开的数据库添加数据表。 在命令窗口输入如下代码: OPEN DATABASE "教师管理" ADD TABLE jsqk.dbf 只有明确地把一个表添加到数据库,才能使它成为 数据库的一部分。即使在打开数据库后,执行MODIFY STRUCTURE命令修改表的结构,也不能把表添加到数 据库。一个表只能加入到一个数据库,如果要把数 据库的表添加到另外一个数据库去,必须先把该表 从本数据库移去。 4.1.2从数据库移去表 从数据库移去一个表也可以采用菜单方式和命令 方式: 1. 菜单方式移去表 在"项目管理器",从"数据"选项卡选择表 所在数据库,单击"修改"按钮,打开"数据库设计 器"。 从"数据库设计器"菜单单击要移去的表,例如 jsqk.dbf表,此时该表标题变为深色,表明该表已被选 。 执行系统菜单的"数据库"下的"移去"命令, 或单击"数据库设计器"工具栏上的"移去表"按钮, 出现"把表从数据库移去还是从磁盘上删除"的对 话框。这里选"移去"按钮。 最后单击"确定"按钮。这时"jsqk.dbf"表就从 "教师管理"数据库移去了。 如果选择"删除", 则从当前数据库移去表的同时,还将其从磁盘上删 除了。 2. 命令方式移去表 【格式】:REMOVE TABLE <数据表名> 【功能】:从已打开的数据库移去数据表。 在命令窗口输入如下代码: OPEN DATABASE "教师管理" REMOVE TABLE jsqk.dbf 4.1.3 展开或折叠一个表 4.1.4 重排数据库的表 打开数据库设计器,从"数据库"菜单选择" 重排,再从"重排表和视图"对话框选择适当的 选项. 4.2 数据库的高级应用 4.2.1 使用其它数据库的表 若要访问其他数据库的表,我们可以使用USE命令 和"!"符号访问该表。使用"!"符号可以引用一个 不在当前数据库的表。例如:当前数据库为"教师管 理",打开数据库"学生管理"的STUDENT.DBF表, 可输入如下命令: USE 学生管理!STUDENT BROWSE 这里,将自动打开数据库"学生管理",但并不把它设 为当前数据库。当关闭表时,数据库也会自动关闭。 4.2.2创建存储过程 存储过程是存储在.DBC文件的Visual FoxPro代码, 是专门操作数据库数据的代码过程。存储过程可以提 高数据库的性能,因为在打开一个数据库时,它们便加 载到内存。 如要创建、修改或移去存储过程,可以在"项目管理 器",选择并展开一个数据库,选定"存储过程", 然后选择"新建"、"修改"或"移去"按钮。 使用存储过程主要是为了创建用户自定义函数,字段 级规则和记录级规则将引用这些函数,当把一个用户自 定义函数作为存储过程保存在数据库时,函数的代码 保存在.DBC文件,并且在移动数据库时,会自动随数 据库移动。使用存储过程能使应用程序更容易管理,因 为可以不必在数据库文件之外管理用户自定义函数。 4.2.3引用多个数据库 1. 打开多个数据库 打开一个数据库后,表和表之间的关系就由存储在该数据库 的信息来控制。您可以同时打开多个数据库。例如,在运行多个 应用程序时,可以使用多个打开的数据库,每个应用程序都以不 同的数据库为基础。也可能您想打开多个数据库,从而能使用应 用程序数据库之外的另一数据库的存储信息。 【方法】: 在"项目管理器",选定一个数据库,然后选择"修改"按 钮或"打开"按钮。 使用 OPEN DATABASE命令。 打开新的数据库并不关闭其他已经打开的数据库,这些已打开 的数据库仍然保持打开状态,而新打开的数据库成为当前数据库。 2. 设置当前数据库 当打开多个数据库时,Visual FoxPro 将最后打开的数据库 设置为当前数据库
第 1 页 (共 8 页) 学习心_________ 姓 名_____________ 学 号 西安电子科技大学网络与继续教育学院 《数据库应用系统》全真试题 (闭卷 90 分钟) 题号 一 二 三 四 五 总分 题分 30 30 4 12 24 得分 一、 选择一个正确的答案填空: (15*2=30 分) 1、___________ 不可以作为查询和视图的输出类型。 A、自由表 B、表单 C、临时表 D、数组 2、创建数据库后,系统自动生成扩展名为 ________ 的三个文件。 A、 .SCX、.SCT、.SPX B、 .DBC、.DCT、.DCX C、 .PJX、.PJT、.RPJ D、 .DBF、.DBT、.FPT 3、建立两张表之间的临时关系时,必须设置的是___________。 A、主表的主索引 B、主表的主索引和子表的主控索引 C、子表的主控索引 D、主表的主控索引和子表的主控索引 4、以下的四组函数,返回值的数据类型是一致的_____。 第 2 页 (共 8 页) A、DTOC(DATE()), DATE(), YEAR(DATE()) B、LEN("VFP 5.0"),CTOD("5/20/2006"), SPACE(8) C、EOF( ) , RECOUNT( ) , DBC( ) D、STR("3.14",3,1), DTOC(DATE()), SUBSTR("ABCD",3,1) 5、在命令窗口执行了命令 X=100 后,则默认该变量的作用域是 _________。 A、全局 B、局部 C、私有 D、不定 6.VFP 是一种 ________ 模型的数据库管理系统。 A、层次 B、网络 C、对象 D、关系 7.VFP 系统环境下,运行表单的命令为_______。 A、DO FORM <表单名> B、REPORT FORM <表单名> C、DO <表单名> D、只能在项目管理器运行 8.要求一个表的数值型字段数据精度具有 3 位小数,则该字段的宽度 至少定义为_________ 。 A、4 位 B、5 位 C、6 位 D、12 位 9.由计算机、操作系统、DBMS、数据库、应用程序等组成的整体称为 ___________。 A、数据库应用系统 B、数据库管理系统 C、文件系统 D、软件系统 10.创建数据库后,系统自动生成扩展名为 ________ 的三个文件。 A、 .SCX、.SCT、.SPX B、 .DBC、.DCT、.DCX C、 .PJX、.PJT、.RPJ D、 .DBF、.DBT、.FPT 11. 在 Visual FoxPro 创建含备注字段的表和表的结构复合索引文件后, 第 3 页 (共 8 页) 系统自动生成的三个文件的扩展名为 ___________ 。 A、.PJX、.PJT、.PRG B、.DBF、.CDX、.FPT C、.FPT、.FRX、.FXP D、.DBC、.DCT、.DCX 12.有关查询与视图,下列说法不正确的是______。 A、查询是只读型数据,而视图可以更新数据源 B、查询可以更新源数据,视图也有此功能 C、视图具有许多数据库表的必性,利用视图可以创建查询和视图 D、视图可以更新源表的数据,存在于数据库 13. 在 Visual FoxPro ,关于查询和视图的正确描述是 A、查询是一个预先定义好的 SQL SELECT 语句文件 B、视图是一个预先定义好的 SQL SELECT 语句文件 C、查询和视图是同一种文件,只是名称不同 D、查询和视图都是一个存储数据的表 14.下列说法正确的是___________。 A、视图文件的扩展名.vcx B、查询文件保存的是查询的结果 C、查询设计器实质上是 SELECT-SQL 命令的可视化设计方法 D、查询是基于表的并且是可更新的数据集合 15、如果一个数据库表的 append 触发器设置为.F.,则不允许对该表作 _________的操作。 A、修改记录 B、删除记录 C、增加记录 D、显示记录 二、填空题: (15*2=30 分) 1.打开一张空表,在不移动记录指针的情况下,函数 BOF()的值是 ;函数 EOF()的值是 。如果打开的表有一条记录, 第 4 页 (共 8 页) 在不移动记录指针的情况下,函数 BOF()的值是 ;函数 EOF() 的值是 ;函数 RECNO()的值是 。 2. 已知 Y="1",Z="2",X12="good",则表达式 X&Y&Z 的值为 。 3.学生表(XS.DBF)的表结构为:学号(XH,C,8),姓名(XM,C,8), 性别(XB,C,2)班级(BJ,C,6),写出用 Insert 命令向 XS 表添加一条 新记录,记录内容为: XH XM XB

2,723

社区成员

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

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