首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

C++ 使用 ActiveX 控件嵌入顯示 PDF:Acrobat Reader 控件完整整合指南

     編輯:關於VC++

Adobe Acrobat/Reader 提供 ActiveX 控件 (pdf.ocx / AcroPDF.dll) 供應用程式內嵌 PDF 檢視。本文詳細說明新舊版本控件的差異、自動化元件驅動類產生、控件建立與常用方法調用全流程。

版本差異與對應策略

版本控件檔案ProgID / CLSID整合方式
4.x 及之前pdf.ocx完整類型庫標準 ActiveX 導入:專案加入控件 → 產生 Wrapper 類
5.x / 6.xpdf.ocx缺少類型庫CWnd::CreateControl + IDispatch + 類型庫產生 COleDispatchDriver
7.x+AcroPDF.dll完整類型庫同 5.x/6.x 流程,ProgID 為 AcroPDF.PDF.1

核心實作步驟 (以 5.x/6.x 為例)

1. 產生自動化驅動類

  • 類嚮導 →「加入類別」→「從類型庫」→ 選擇 Acrobat 安裝目錄 ActiveX\pdf.tlb
  • 產生 _DPdf 類 (對應 IPDF 介面),頭文件 pdf.h

2. 對話框類成員宣告

#include "pdf.h"
class CViewPDFDlg : public CDialog {
protected:
    _DPdf m_drvPDF;   // 自動化驅動物件
    CWnd  m_wndPDF;   // 控件視窗
    // ...
};

3. OnInitDialog 初始化流程

BOOL CViewPDFDlg::OnInitDialog() {
    CDialog::OnInitDialog();

    // 關鍵:必須加入 WS_CLIPCHILDREN,否則控件繪製異常
    ModifyStyle(0, WS_CLIPCHILDREN);

    CRect rt; GetClientRect(&rt);

    // 建立控件視窗 (ProgID: "PDF.PdfCtrl.5")
    m_wndPDF.CreateControl(_T("PDF.PdfCtrl.5"), NULL,
        WS_CHILD | WS_VISIBLE, rt, this, 0);

    // 取得 IDispatch 指標並綁定驅動物件
    LPUNKNOWN lpUnk = m_wndPDF.GetControlUnknown();
    LPDISPATCH lpDisp;
    lpUnk->QueryInterface(IID_IDispatch, (void**)&lpDisp);
    m_drvPDF.AttachDispatch(lpDisp); // 驅動物件析構時自動 Release

    // 開啟檔案對話框並載入 PDF
    CFileDialog dlg(TRUE);
    if (dlg.DoModal() == IDOK) {
        m_drvPDF.LoadFile(dlg.GetPathName());
    } else {
        OnCancel();
    }
    return TRUE;
}

常用控制方法

方法功能參數範例
LoadFile(path)載入並顯示 PDFLoadFile("C:\\doc.pdf")
Print()列印目前文件無參數
setZoom(percent)設定縮放比例setZoom(100) (100%)
setShowToolbar(BOOL)顯示/隱藏工具列setShowToolbar(TRUE)
gotoFirstPage()跳至第一頁無參數
gotoLastPage()跳至最後一頁無參數
gotoNextPage()下一頁無參數
gotoPreviousPage()上一頁無參數

Acrobat 7.x+ 差異調整

// 類型庫:Acrobat\ActiveX\AcroPDF.dll → 產生 IAcroAXDocShim (acropdf.h)
// ProgID: "AcroPDF.PDF.1"
// 其餘流程完全相同

重要注意事項

  • 必須安裝 Acrobat/Reader:控件僅為 Proxy,實際渲染由本地 Reader 執行
  • WS_CLIPCHILDREN:缺少此樣式會導致控件區域繪製殘留/閃爍
  • x64 相容性:32-bit 應用需 32-bit Reader;64-bit 應用需 64-bit Acrobat (Reader 無 64-bit 版)
  • 保護模式:Reader 10+ 啟用 Protected Mode 可能阻擋 ActiveX,需在信任區加入應用路徑或關閉保護模式
  • 替代方案:現代專案建議使用 PDFium、MuPDF、Qt WebEngine 等無相依嵌入方案

PDF 顯示效果

圖一 程式運行效果:成功嵌入顯示 PDF 文件

本方案在 VC6 + Acrobat 5.x/6.x/7.x 驗證通過,為老專案快速加入 PDF 檢視功能提供了成熟可靠的路徑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved