浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » EDA/PLD

用Visual C++實現(xiàn)PDF文件的顯示

發(fā)布時間:2008/8/23 0:00:00 訪問次數(shù):590

pdf介紹

  pdf是“portable document format 可移植文檔格式”的縮寫,它是adobe公司開發(fā)的一種電子文檔格式,已經(jīng)成為國際通用的電子文檔交換事實標(biāo)準(zhǔn)。pdf文件可以在各種平臺下閱讀、編輯、發(fā)布。該文件格式支持字體、圖像、甚至任何附件的嵌入。

  adobe公司提供了兩種軟件用于處理pdf文檔,分別是acrobat及acrobat reader:前者功能強大,不僅能閱讀,還可以創(chuàng)建或編輯pdf文檔,但要收費;后者只具備閱讀功能,為免費軟件。

用activex控件顯示pdf文件

  acrobat(reader)提供了一個activex控件pdf.ocx(7.x版本為acropdf.dll),可以在用戶程序中實現(xiàn)pdf文件的顯示。對于老版本的軟件(4.x及以前的版本),只需按照activex控件的標(biāo)準(zhǔn)編程步驟即可:

  (1)把控件pdf.ocx加入vc項目,并生成控件類

  (2)把控件放置在對話框上,或者調(diào)用控件類的成員函數(shù)create創(chuàng)建控件對象

  (3)調(diào)用控件的屬性或方法打開pdf文件

  由于這不屬于本文要討論的內(nèi)容,詳情請參考《visual c++技術(shù)內(nèi)幕》中“使用activex控件”一章,這里不再贅述。

  但是對于新版軟件(5.x/6.x/7.x),上述方法不再適用:新版控件不是一個完整意義上的activex控件,它缺少生成控件類所必需的類型庫信息,無法把控件加入vc項目。

  在這種情況下,需要調(diào)用函數(shù)cwnd::createcontrol來創(chuàng)建控件對象,然后獲取控件的idispatch接口指針,通過該指針訪問控件的屬性及方法。

  直接用idispatch指針調(diào)用控件的屬性及方法是一件極其繁瑣的工作,好在新版軟件提供了類型庫,可以用它生成一個自動化組件驅(qū)動類(從coledispatchdriver派生)。借助該類,可以大大簡化對控件屬性及方法的調(diào)用。

  雖然可以用控件顯示pdf文件,但它只是一個代理,真正的工作還是由acrobat(reader)完成的,因此必須安裝這兩種軟件中的一個。

實現(xiàn)步驟

  以下以acrobat(reader)5.x/6.x為例,介紹如何用新版控件實現(xiàn)pdf文件的顯示。

  運行vc,新建一個基于對話框的mfc應(yīng)用程序viewpdf,在設(shè)置生成選項時,選中“activex controls”,其余使用缺省值即可。生成后,刪除對話框中的所有控件。

  接下來創(chuàng)建自動化組件驅(qū)動類:打開類向?qū)Вc擊“add class”按鈕,在彈出的菜單中選擇“from a type library”,用類型庫文件pdf.tlb產(chǎn)生所需的組件類,該文件位于acrobat軟件安裝目錄下的activex子目錄。

  編輯viewpdfdlg.h,為類cviewpdfdlg添加兩個數(shù)據(jù)成員:
#include "pdf.h" // 組件類的頭文件
class cviewpdfdlg : public cdialog
{
 protected:
  _dpdf m_drvpdf; // pdf組件驅(qū)動對象,_dpdf是我們剛生成的組件類
  cwnd m_wndpdf; // pdf控件窗口
  ... ...
  在類成員函數(shù)cviewpdfdlg::oninitdialog中插入下列語句:
// 為主窗口添加ws_clipchildren風(fēng)格,否則控件顯示不正常
modifystyle(0, ws_clipchildren);
// 獲取對話框的客戶區(qū)矩形
crect rt;
getclientrect(&rt);
// 利用cwnd::createcontrol創(chuàng)建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);
// 把獲得的接口指針傳遞給組件驅(qū)動對象m_drvpdf,通過它調(diào)用控件的屬性和方法
// 當(dāng)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,實現(xiàn)步驟基本與上相同,區(qū)別在于:

  (1) 使用acropdf.dll生成自動化組件驅(qū)動類,得到的類名為iacroaxdocshim,頭文件為acropdf.h。

  (2) 創(chuàng)建控件窗口時,類id為acropdf.pdf.1。

  除了上面用到的loadfile外,控件還提供了許多有用的方法,常見的有:

  print 打印文件
  setzoom 設(shè)置頁面的百分比
  setshowtoolbar 顯示/隱藏工具欄
  gotofirstpage 跳轉(zhuǎn)到第一頁
  gotolastpage 跳轉(zhuǎn)到最后一頁
  

pdf介紹

  pdf是“portable document format 可移植文檔格式”的縮寫,它是adobe公司開發(fā)的一種電子文檔格式,已經(jīng)成為國際通用的電子文檔交換事實標(biāo)準(zhǔn)。pdf文件可以在各種平臺下閱讀、編輯、發(fā)布。該文件格式支持字體、圖像、甚至任何附件的嵌入。

  adobe公司提供了兩種軟件用于處理pdf文檔,分別是acrobat及acrobat reader:前者功能強大,不僅能閱讀,還可以創(chuàng)建或編輯pdf文檔,但要收費;后者只具備閱讀功能,為免費軟件。

用activex控件顯示pdf文件

  acrobat(reader)提供了一個activex控件pdf.ocx(7.x版本為acropdf.dll),可以在用戶程序中實現(xiàn)pdf文件的顯示。對于老版本的軟件(4.x及以前的版本),只需按照activex控件的標(biāo)準(zhǔn)編程步驟即可:

  (1)把控件pdf.ocx加入vc項目,并生成控件類

  (2)把控件放置在對話框上,或者調(diào)用控件類的成員函數(shù)create創(chuàng)建控件對象

  (3)調(diào)用控件的屬性或方法打開pdf文件

  由于這不屬于本文要討論的內(nèi)容,詳情請參考《visual c++技術(shù)內(nèi)幕》中“使用activex控件”一章,這里不再贅述。

  但是對于新版軟件(5.x/6.x/7.x),上述方法不再適用:新版控件不是一個完整意義上的activex控件,它缺少生成控件類所必需的類型庫信息,無法把控件加入vc項目。

  在這種情況下,需要調(diào)用函數(shù)cwnd::createcontrol來創(chuàng)建控件對象,然后獲取控件的idispatch接口指針,通過該指針訪問控件的屬性及方法。

  直接用idispatch指針調(diào)用控件的屬性及方法是一件極其繁瑣的工作,好在新版軟件提供了類型庫,可以用它生成一個自動化組件驅(qū)動類(從coledispatchdriver派生)。借助該類,可以大大簡化對控件屬性及方法的調(diào)用。

  雖然可以用控件顯示pdf文件,但它只是一個代理,真正的工作還是由acrobat(reader)完成的,因此必須安裝這兩種軟件中的一個。

實現(xiàn)步驟

  以下以acrobat(reader)5.x/6.x為例,介紹如何用新版控件實現(xiàn)pdf文件的顯示。

  運行vc,新建一個基于對話框的mfc應(yīng)用程序viewpdf,在設(shè)置生成選項時,選中“activex controls”,其余使用缺省值即可。生成后,刪除對話框中的所有控件。

  接下來創(chuàng)建自動化組件驅(qū)動類:打開類向?qū),點擊“add class”按鈕,在彈出的菜單中選擇“from a type library”,用類型庫文件pdf.tlb產(chǎn)生所需的組件類,該文件位于acrobat軟件安裝目錄下的activex子目錄。

  編輯viewpdfdlg.h,為類cviewpdfdlg添加兩個數(shù)據(jù)成員:
#include "pdf.h" // 組件類的頭文件
class cviewpdfdlg : public cdialog
{
 protected:
  _dpdf m_drvpdf; // pdf組件驅(qū)動對象,_dpdf是我們剛生成的組件類
  cwnd m_wndpdf; // pdf控件窗口
  ... ...
  在類成員函數(shù)cviewpdfdlg::oninitdialog中插入下列語句:
// 為主窗口添加ws_clipchildren風(fēng)格,否則控件顯示不正常
modifystyle(0, ws_clipchildren);
// 獲取對話框的客戶區(qū)矩形
crect rt;
getclientrect(&rt);
// 利用cwnd::createcontrol創(chuàng)建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);
// 把獲得的接口指針傳遞給組件驅(qū)動對象m_drvpdf,通過它調(diào)用控件的屬性和方法
// 當(dāng)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,實現(xiàn)步驟基本與上相同,區(qū)別在于:

  (1) 使用acropdf.dll生成自動化組件驅(qū)動類,得到的類名為iacroaxdocshim,頭文件為acropdf.h。

  (2) 創(chuàng)建控件窗口時,類id為acropdf.pdf.1。

  除了上面用到的loadfile外,控件還提供了許多有用的方法,常見的有:

  print 打印文件
  setzoom 設(shè)置頁面的百分比
  setshowtoolbar 顯示/隱藏工具欄
  gotofirstpage 跳轉(zhuǎn)到第一頁
  gotolastpage 跳轉(zhuǎn)到最后一頁
  
相關(guān)IC型號

熱門點擊

 

推薦技術(shù)資料

聲道前級設(shè)計特點
    與通常的Hi-Fi前級不同,EP9307-CRZ這臺分... [詳細(xì)]
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13751165337  13692101218
粵ICP備09112631號-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!