Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16499504
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:30:30

下载本文示例代码
教程推荐 ·轻松玩转MFC文档视图架构 ·深入浅出Visual C 串口 ·Visual C 动态链接库编程 ·Visual C 数据库编程   精彩专题 ·Win32多线程 ·VC入门 ·VC界面控件 ·VC高级技术 ·VC图像处理 ·VC网络编程 主题社区 ·VC源码 ·VC  PDF介绍  PDF是“Portable Document Format 可移植文档格式”的缩写,它是Adobe公司开发的一种电子文档格式,已经成为国际通用的电子文档交换事实标准。PDF文件可以在各种平台下阅读、编辑、发布。该文件格式支持字体、图像、甚至任何附件的嵌入。  Adobe公司提供了两种软件用于处理PDF文档,分别是Acrobat及Acrobat Reader:前者功能强大,不仅能阅读,还可以创建或编辑PDF文档,但要收费;后者只具备阅读功能,为免费软件。  用ActiveX控件显示PDF文件  Acrobat(Reader)提供了一个ActiveX控件pdf.ocx(7.x版本为AcroPDF.dll),可以在用户程序中实现PDF文件的显示。对于老版本的软件(4.x及以前的版本),只需按照ActiveX控件的标准编程步骤即可:  (1)把控件pdf.ocx加入VC项目,并生成控件类  (2)把控件放置在对话框上,或者调用控件类的成员函数Create创建控件对象  (3)调用控件的属性或方法打开PDF文件  由于这不属于本文要讨论的内容,详情请参考《Visual C 技术内幕》中“使用ActiveX控件”一章,这里不再赘述。  但是对于新版软件(5.x/6.x/7.x),上述方法不再适用:新版控件不是一个完整意义上的ActiveX控件,它缺少生成控件类所必需的类型库信息,无法把控件加入VC项目。  在这种情况下,需要调用函数CWnd::CreateControl来创建控件对象,然后获取控件的IDispatch接口指针,通过该指针访问控件的属性及方法。  直接用IDispatch指针调用控件的属性及方法是一件极其繁琐的工作,好在新版软件提供了类型库,可以用它生成一个自动化组件驱动类(从COleDispatchDriver派生)。借助该类,可以大大简化对控件属性及方法的调用。  虽然可以用控件显示PDF文件,但它只是一个代理,真正的工作还是由Acrobat(Reader)完成的,因此必须安装这两种软件中的一个。  实现步骤  以下以Acrobat(Reader)5.x/6.x为例,介绍如何用新版控件实现PDF文件的显示。  运行VC,新建一个基于对话框的MFC应用程序ViewPDF,在设置生成选项时,选中“ActiveX Controls”,其余使用缺省值即可。生成后,删除对话框中的所有控件。  接下来创建自动化组件驱动类:打开类向导,点击“Add Class”按钮,在弹出的菜单中选择“From a type library”,用类型库文件pdf.tlb产生所需的组件类,该文件位于Acrobat软件安装目录下的ActiveX子目录。  编辑ViewPDFDlg.h,为类CViewPDFDlg添加两个数据成员: #include "pdf.h" // 组件类的头文件class CViewPDFDlg : public CDialog{ protected:  _DPdf m_drvPDF; // PDF组件驱动对象,_DPdf是我们刚生成的组件类  CWnd m_wndPDF; // PDF控件窗口  ... ...  在类成员函数CViewPDFDlg::OnInitDialog中插入下列语句: // 为主窗口添加WS_CLIPCHILDREN风格,否则控件显示不正常ModifyStyle(0, WS_CLIPCHILDREN);// 获取对话框的客户区矩形CRect rt;GetClientRect(&rt);// 利用CWnd::CreateControl创建PDF控件窗口// Acrobat (Reader) 5.x/6.x的控件类ID为"PDF.PdfCtrl.5",7.x为"AcroPDF.PDF.1"m_wndPDF.CreateControl("PDF.PdfCtrl.5", NULL, WS_CHILD | WS_VISIBLE, rt, this, 0);// 获取IDispatch接口指针LPUNKNOWN lpUnknown = m_wndPDF.GetControl Unknown();LPDISPATCH lpDispatch;lpUnknown->QueryInterface(IID_IDispatch, (void**)&lpDispatch);// 把获得的接口指针传递给组件驱动对象m_drvPDF,通过它调用控件的属性和方法// 当m_drvPDF销毁时,会自动释放接口指针m_drvPDF.AttachDispatch(lpDispatch);// 弹出一个“打开”对话框,选择要显示的PDF文件CFileDialog dlg(TRUE);if (dlg.DoModal() == IDOK) // 利用控件的方法LoadFile读取并显示PDF文件 m_drvPDF.LoadFile(dlg.GetPathName());else OnCancel(); // 退出  编译运行程序,选择要显示的PDF文件,效果如图1所示。 图1  对于Acrobat(Reader)7.x,实现步骤基本与上相同,区别在于:  (1) 使用AcroPDF.dll生成自动化组件驱动类,得到的类名为IAcroAXDocShim,头文件为acropdf.h。  (2) 创建控件窗口时,类ID为AcroPDF.PDF.1。  除了上面用到的LoadFile外,控件还提供了许多有用的方法,常见的有:  Print 打印文件  setZoom 设置页面的百分比  setShowToolbar 显示/隐藏工具栏  gotoFirstPage 跳转到第一页  gotoLastPage 跳转到最后一页  gotoNextPage 跳转到下一页  gotoPreviousPage 跳转到上一页  由于用法很简单,这里不再一一叙述。  本文例程在Visual C 6、Acrobat(Reader)5.x/6.x/7.x上调试通过,为方便读者,已经把例程放在互联网上。 软件频道精品推荐 更多精彩点击体验>> 教程推荐 ·轻松玩转MFC文档视图架构 ·深入浅出Visual C 串口 ·Visual C 动态链接库编程 ·Visual C 数据库编程   精彩专题 ·Win32多线程 ·VC入门 ·VC界面控件 ·VC高级技术 ·VC图像处理 ·VC网络编程 主题社区 ·VC源码 ·VC  PDF介绍  PDF是“Portable Document Format 可移植文档格式”的缩写,它是Adobe公司开发的一种电子文档格式,已经成为国际通用的电子文档交换事实标准。PDF文件可以在各种平台下阅读、编辑、发布。该文件格式支持字体、图像、甚至任何附件的嵌入。  Adobe公司提供了两种软件用于处理PDF文档,分别是Acrobat及Acrobat Reader:前者功能强大,不仅能阅读,还可以创建或编辑PDF文档,但要收费;后者只具备阅读功能,为免费软件。  用ActiveX控件显示PDF文件  Acrobat(Reader)提供了一个ActiveX控件pdf.ocx(7.x版本为AcroPDF.dll),可以在用户程序中实现PDF文件的显示。对于老版本的软件(4.x及以前的版本),只需按照ActiveX控件的标准编程步骤即可:  (1)把控件pdf.ocx加入VC项目,并生成控件类  (2)把控件放置在对话框上,或者调用控件类的成员函数Create创建控件对象  (3)调用控件的属性或方法打开PDF文件  由于这不属于本文要讨论的内容,详情请参考《Visual C 技术内幕》中“使用ActiveX控件”一章,这里不再赘述。  但是对于新版软件(5.x/6.x/7.x),上述方法不再适用:新版控件不是一个完整意义上的ActiveX控件,它缺少生成控件类所必需的类型库信息,无法把控件加入VC项目。  在这种情况下,需要调用函数CWnd::CreateControl来创建控件对象,然后获取控件的IDispatch接口指针,通过该指针访问控件的属性及方法。  直接用IDispatch指针调用控件的属性及方法是一件极其繁琐的工作,好在新版软件提供了类型库,可以用它生成一个自动化组件驱动类(从COleDispatchDriver派生)。借助该类,可以大大简化对控件属性及方法的调用。  虽然可以用控件显示PDF文件,但它只是一个代理,真正的工作还是由Acrobat(Reader)完成的,因此必须安装这两种软件中的一个。  实现步骤  以下以Acrobat(Reader)5.x/6.x为例,介绍如何用新版控件实现PDF文件的显示。  运行VC,新建一个基于对话框的MFC应用程序ViewPDF,在设置生成选项时,选中“ActiveX Controls”,其余使用缺省值即可。生成后,删除对话框中的所有控件。  接下来创建自动化组件驱动类:打开类向导,点击“Add Class”按钮,在弹出的菜单中选择“From a type library”,用类型库文件pdf.tlb产生所需的组件类,该文件位于Acrobat软件安装目录下的ActiveX子目录。  编辑ViewPDFDlg.h,为类CViewPDFDlg添加两个数据成员: #include "pdf.h" // 组件类的头文件class CViewPDFDlg : public CDialog{ protected:  _DPdf m_drvPDF; // PDF组件驱动对象,_DPdf是我们刚生成的组件类  CWnd m_wndPDF; // PDF控件窗口  ... ...  在类成员函数CViewPDFDlg::OnInitDialog中插入下列语句: // 为主窗口添加WS_CLIPCHILDREN风格,否则控件显示不正常ModifyStyle(0, WS_CLIPCHILDREN);// 获取对话框的客户区矩形CRect rt;GetClientRect(&rt);// 利用CWnd::CreateControl创建PDF控件窗口// Acrobat (Reader) 5.x/6.x的控件类ID为"PDF.PdfCtrl.5",7.x为"AcroPDF.PDF.1"m_wndPDF.CreateControl("PDF.PdfCtrl.5", NULL, WS_CHILD | WS_VISIBLE, rt, this, 0);// 获取IDispatch接口指针LPUNKNOWN lpUnknown = m_wndPDF.GetControl Unknown();LPDISPATCH lpDispatch;lpUnknown->QueryInterface(IID_IDispatch, (void**)&lpDispatch);// 把获得的接口指针传递给组件驱动对象m_drvPDF,通过它调用控件的属性和方法// 当m_drvPDF销毁时,会自动释放接口指针m_drvPDF.AttachDispatch(lpDispatch);// 弹出一个“打开”对话框,选择要显示的PDF文件CFileDialog dlg(TRUE);if (dlg.DoModal() == IDOK) // 利用控件的方法LoadFile读取并显示PDF文件 m_drvPDF.LoadFile(dlg.GetPathName());else OnCancel(); // 退出  编译运行程序,选择要显示的PDF文件,效果如图1所示。 图1  对于Acrobat(Reader)7.x,实现步骤基本与上相同,区别在于:  (1) 使用AcroPDF.dll生成自动化组件驱动类,得到的类名为IAcroAXDocShim,头文件为acropdf.h。  (2) 创建控件窗口时,类ID为AcroPDF.PDF.1。  除了上面用到的LoadFile外,控件还提供了许多有用的方法,常见的有:  Print 打印文件  setZoom 设置页面的百分比  setShowToolbar 显示/隐藏工具栏  gotoFirstPage 跳转到第一页  gotoLastPage 跳转到最后一页  gotoNextPage 跳转到下一页  gotoPreviousPage 跳转到上一页  由于用法很简单,这里不再一一叙述。  本文例程在Visual C 6、Acrobat(Reader)5.x/6.x/7.x上调试通过,为方便读者,已经把例程放在互联网上。 软件频道精品推荐 更多精彩点击体验>> 下载本文示例代码


用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示用Visual C 实现PDF文件的显示
阅读(186) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~