PDF Tools ホーム > PDF Tools ライト > PDF Viewer-L > C++サンプル > PDFサムネール画像表示

PDF Viewer-L サムネール画像表示のサンプルと解説 C++

「PDFViewer-L」は、PDF文書を表示するためのライブラリです。

PDF Viewer-L Package
機能を制限することでお求め安くしました。PDF Viewer-Lは、ライト(軽量)ではありますがPDFのもつ文書内リンクやWebリンクの情報はイベントを介して取得でき、サムネールやしおり情報もメソッドを介して取得できます。これらの情報を利用して独自のPDF表示アプリケーションを構築できます。

PDF Viewer-L 購入(価格)

C# による表示サンプルは、こちらです。

無償評価版のダウンロードとインストール

PDF Viewer-Lライブラリは、無償でダウンロードして試用できます。以下のリンクをクリックしてダウンロードしてください。なお、試用に際しては評価用のライセンスキーが必要ですので必ずダウンロードしてください。
評価用ライセンスキーには利用期限がありますが、何度ダウンロードしてもかまいません。

インストール

ダウンロードしたファイルは、適当なフォルダーに解凍します。以下のようなフォルダーができあがりますので、適宜利用します。

binライブラリ
doc使用説明書やライセンス契約書
includeC/C++用のヘッダー(.h)ファイル
samples各種開発言語によるサンプルコード

サンプルの実行前にライブラリ(OCX)を以下の手順に従って登録します。

  1. 「コマンド プロンプト」を管理者権限で起動します。
  2. ファイルを解凍したフォルダー内のbinフォルダーに移動します。
  3. "regsvr32 vwl.ocx"を実行して登録します。成功を示すダイアログが表示されます。
  4. Visual Studioを起動します。
  5. Visual Studioのツールボックス内で、右クリックしてコンテキストメニューの「アイテムの選択(I)...」を選択してツールボックス アイテムの選択ダイアログを表示させます。
  6. 表示したダイアログの「COMコンポーネント」タグをクリックして、コンポーネントの「PdfViewerL Control」をチェックします。これによって、PDF Viewer-Lツールがツールボックスに現れます。

PDFをサムネール画像と共に表示する

サムネール画像は画面に表示して、ユーザーが画像をクリックした場合にそのページを表示するような実装に利用します。サムネール画像については、「PDF構文 サムネール画像」を参照してください。

まず、PDF文書を表示します。あらかじめウィザードなどでダイアログ ベースのMFCウィンドウ作成し、フォームに“PdfViewerL Control”を貼り付けておきます。貼り付けたコントロールには、m_Viewerという変数名を追加しておきます。

ダイアログクラスのOnInitDialog()に以下のコードを追加します。

BOOL CopenDocDlg::OnInitDialog()
{
    ...
    // TODO: 初期化をここに追加します。
    m_Viewer.InitCtrl(_T("ライセンスキー"));
    m_Viewer.Open(_T("PDF Viewer-L.pdf"), _T(""), _T(""));

    return TRUE;  // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}

このアプリケーションを起動すると、PDF Viewer-Lコントロールを初期化し、指定されたPDFファイルを表示します。使用するメソッドは以下のとおりです。

InitCtrlコントロールを指定のライセンス・キーで初期化します。
引数にライセンスキー文字列を指定します。ライセンスキーは、こちらからダウンロードしてください。
Open指定のPDFをコントロールに表示します。
以下の引数を指定します。
第一引数表示するPDFのファイルパスを指定します。
第二引数PDFがパスワードで暗号化されている場合にオーナーパスワードを指定します。
暗号化されていない場合は、NULL文字を指定します。
第三引数PDFがパスワードで暗号化されている場合にオーナーパスワードを指定します。
暗号化されていない場合は、NULL文字を指定します。
暗号化されている場合で、多くの場合はオーナーパスワードのみの指定で復号できます。
暗号化されたPDFに正しいパスワードを指定しなかった場合は、エラーになりPDFは表示されません。このような場合は、暗号化したPDFを開くのようにしてください。

サムネール画像の取得と表示

PDF Viewer-Lでは、PDF文書を読み込んでからページごとにサムネール画像を取得します(サムネール画像がPDF文書に埋め込まれていない場合は、画像を取得できません)。

PDF文書の読み込み終了は、OnOpenイベントを捕捉します。サムネール画像は、このイベントハンドラーで取得し適当なコントロールに描画します。
サンプルでは、取得したサムネール画像をMFCのピクチャーコントロールに描画しますので、あらかじめウィンドウに貼り付けておき名前をm_ThumbImgとしておきます。

OnOpenのイベントハンドラーを以下のように変更します。

void CthumbnailDlg::OnOpenPdfviewerlctrl1(
  long   pageIndex, //表示されたページのインデックス
  float  zoomVal,   //表示の倍率
  long   err)       //エラーコード
{
    // TODO: ここにメッセージ ハンドラ コードを追加します。
    VARIANT       pix;
    long          w, h;
    unsigned char *pData = NULL;

    if(m_Viewer.GetThumbnailData(pageIndex, &w, &h, &pix)){
        //ページのサムネール画像がない場合
        AfxMessageBox(_T("ページのサムネール画像がありません。"));
        return;
    }
    SafeArrayAccessData(pix.parray, (void**)&pData);  //pDataはサムネールのポインター

    //画像表示
    CClientDC  pictDC(&m_ThumbImg);
    BITMAPINFO *bi;

    bi = (BITMAPINFO*)malloc(sizeof(BITMAPINFO));
    bi->bmiHeader.biSize = sizeof(bi->bmiHeader);
    bi->bmiHeader.biPlanes = 1;
    bi->bmiHeader.biBitCount = 32;
    bi->bmiHeader.biCompression = BI_RGB;
    bi->bmiHeader.biXPelsPerMeter = 2834;
    bi->bmiHeader.biYPelsPerMeter = 2834;
    bi->bmiHeader.biClrUsed = 0;
    bi->bmiHeader.biClrImportant = 0;
    bi->bmiHeader.biWidth = w;
    bi->bmiHeader.biHeight = -h;
    bi->bmiHeader.biSizeImage = w * h * 4;

    m_ThumbImg.SetWindowPos(NULL, 0, 0, w+2, h+2, SWP_NOMOVE|SWP_NOZORDER);
    SetDIBitsToDevice(pictDC.GetSafeHdc(),
                      1, 1, w, h, 0, 0, 0, h, pData, bi, DIB_RGB_COLORS);
    //後始末
    free(bi);
    SafeArrayUnaccessData(pix.parray);
    SafeArrayDestroy(pix.parray);
}
GetThumbnailData指定ページのサムネール画像の縦横サイズと画像のデータが戻ります。
サムネール画像がない場合は、エラーが戻ります。
引数は、以下を指定します。
第一引数サムネールを取得するページのインデックス番号
第二引数画像の幅を格納する変数のポインター
第三引数画像の高さを格納する変数のポインター
第四引数画像データを格納するVARIANNT型のポインター

サンプルでは、
SafeArrayAccessDataで画像データを8ビット単位のデータとして扱えるようにし、
BITMAPINFOをしてから、SetDIBitsToDeviceによって画像を表示しています。
SetWindowPosは、ピクチャーコントロールの大きさを画像のサイズに合わせます。


以下のようなウインドウが表示されます。ウインドウの右上に開いたページのサムネール画像が表示されています。
PDF Viewer-L Thumb Image Sample

サンプル ソースコード

PDF Viewer-Lのサンプル ソースコードは、以下からダウンロードしてください。

   ソースコード: vwlSample_2_3.zip


ご質問、お問い合わせ

メールで support@TrustSS.co.jp 宛てにお送りください。
または、質問のページからお送りいただくようお願いします。ご要望も承っております。