易捷 > PDF教程 > PDF开发/编程技术 >

利用 Adobe Acrobat 制作开发PDF格式阅读器方法

分享到:
发布时间:2013-05-20 18:00   浏览次数:

源码下载地址:http://www.pdfhome.com.cn/article/article/pdfreader.rar

摘要
通过PDF控件做一个PDF格式电子图书浏览器,学习一类控件的使用方法。

关键词 PDF控件 电子图书浏览器 控件使用

  首先声明,做这个PDF格式电子图书浏览器,其目的并不仅仅是教你如何做这个浏览器,而是教你如何正确使用控件进行编程。要提醒你的是,如果你想进行这个实验,那么你的机器上面必须安装有 Adobe Acrobat 4.0(或者更低版本),经笔者实验,Adobe Acrobat 5.0 和 Adobe Acrobat 6.0 所提供的控件都是无法添加到我们的工程中去的。
要新建一个基于对话框的工程。需要注意的是,一定要在第二步中选中ActiveX Controls,否则在以后的步骤中还需要手动添加一些代码,挺麻烦的。下面的步骤按其默认既可。

 

图1

在下面出现的对话框中,可以把附加的控件删除。
下面,我们要往项目里面加入PDF控件。Project- >Add To Project- >Components and Controls- >Registerded ActiveX Controls,双击,在下面的控件窗口中找到"Acrobat Control 用于ActiveX",选择下面的按钮"Insert",下面点击确定,正确插入后,我们可以在下面的框架里看到"Acrobat Control for ActiveX"然后"Close"。

 

图2


为了能够利用这个刚刚加入的控件,我们还需要在"ResourceView"加入一个Menu(菜单),具体做法为"PdfReader resource"右健选择"Insert",下面的就是新建一个"Menu"。但是,我们只是插入了这么个菜单,在程序中还是没有法调用的。这时返回到主对话框中,右健单击,选择"Properties"(属性),在"Menu"中选择刚才加入的Menu的ID。
现在,为了使我们的这个PdfReader工作,我们要在菜单中加入"打开",其ID可为ID_OPEN_PDFFILE,我们选择把"Pop-up"前的钩去除(注:如无说明,在菜单内加入其它选项,都是按照把"Pop-up"前钩去掉处理)。

 

图3


下面要用到ClassWizard(类向导)为刚刚加入的ID映射函数OnOpenPdffile()。

 

图4


此时需要在CPdfReaderDlg加入:

public:CPdf m_PdfFile;
响应ID_OPEN_PDFFILE"打开"代码:
void CPdfReaderDlg::OnOpenPdffile()
{
char szFileFilter[]="PDF File(*.pdf)|*.pdf|All File(*.*)|*.*||";
CFileDialog FileDialog(true,"","",OFN_EXPLORER,szFileFilter,this);
if(FileDialog.DoModal()==IDOK)
{
CString FilePath=FileDialog.GetPathName();
m_PdfFile.LoadFile(FilePath);
}
}
因为在上面的代码中我们直接引用PDF控件所产生类的函数的LoadFile(),很显然我们需要在"PdfReaderDlg.h"中加入"#include "pdf.h"."也许心情迫切的你想编译现在的程序,行啊。运行一下,没有什么错误。选择"打开",找到具有".pdf"格式的文件,可是会出现系统的警告错误。是什么原因呢,请想一想啊。对,我们还没有给控件在对话框内分配其存在空间呢。下面就是我们要做的。 利用Classwizard(类向导),为WM_CREATE消息映射个函数OnCtreate().其代码如下:
int CPdfReaderDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rect;
GetWindowRect(&rect);
m_PdfFile.Create(NULL,WS_VISIBLE,rect,this,0);
return 0;
}
这时候你再编译,是不是可以观看PDF格式电子图书了?但是,细心的你,是不是发现,我们的窗口既没有最大化、最小化按钮,也不能在对话框边角位置拖动其大小。不用急,下面我们就准备做这些工作。
返回到主对话框,右键单击,选择"Properties"(属性),在"Styles"里"Border:"选择"Resizing",在"Minimize box"和"Maximize box"前选择打钩。那么我们的问题就算解决了。

 

图5


在下面的拖拉对话框大小的时候,你也许会发现,我们的阅读pdf电子图书那部分窗口却没有发生什么变化,是不是感到美中不足呢。对于这个问题,用一个函数就可以完美解决。我们需要用WM_SIZE映射一个函数OnSize()。

void CPdfReaderDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
m_PdfFile.MoveWindow(0,0,cx,cy); //我们就需要加入这么一行就行了。
}
在我们的菜单里就"打开"这么一个选择未免太单调,我们可以自己手动加入一些东西。比如,"上页""下页""首页""末页""退出",其对应ID分别为:ID_PREVIOUS_PAGE,ID_NEXT_PAGE,ID_FIRST_PAGE,ID_LAST_PAGE,IDCANCEL(这里要说的是,在其菜单属性里把"Pop-up"前钩去掉),其对应函数分别为:
void CPdfReaderDlg::OnFirstPage()
{
m_PdfFile.gotoFirstPage();
}

void CPdfReaderDlg::OnLastPage()
{
m_PdfFile.gotoLastPage();

}

void CPdfReaderDlg::OnNextPage()
{
m_PdfFile.gotoNextPage();
}

void CPdfReaderDlg::OnPreviousPage()
{
m_PdfFile.gotoPreviousPage();

}

void CPdfReaderDlg::OnCancel()
{
CDialog::OnCancel();
}
我们能不能控制PDF格式电子图书显示的大小呢,答案是肯定的。在菜单中加入"视图",其子项为"放大","缩小",对应ID为ID_CHANG_BIG,ID_CHANG_SMALL。相应函数可为:
void CPdfReaderDlg::OnChangBig()

相关文章推荐

易捷服务大全

在线PDF转换工具

Word

在线Word转PDF

http://wordtopdf.yjpdf.com
 
Excel

在线Excel转PDF

http://exceltopdf.yjpdf.com
 
PPT

在线PPT转PDF

http://ppttopdf.yjpdf.com

本类最新文章

本类本月热门

大家在关注…