PDF Tools ホーム > PDF Tools ライト > PDF Viewer-L > C#サンプル > しおり表示

PDF Viewer-L 画面表示のために開くサンプルと解説 C#

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

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

PDF Viewer-L 購入(価格)

C++ によるPDFしおり表示サンプルは、こちらです。

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

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のしおり(outline)を表示するC#サンプル

PDF文書をしおり(outline)とともに表示するC#のアプリケーションのサンプルを記します。
サンプルは、Windowsフォーム アプリケーションです。あらかじめフォームを作成し、“PdfViewerL Control”を貼り付けておきます。

フォーム クラスのコンストラクタに以下のコードを追加します。

public OpenDocForm()
{
    InitializeComponent();
    axPdfViewerL1.InitCtrl("ライセンスキー");
    axPdfViewerL1.Open("PDF Viewer-L.pdf", "", "");
}

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

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

PDF文書に記載されたしおり(Outline)情報は、PDFが完全に読み込まれた後でなければ取得できません。そのため、PDFのオープン処理終了のイベントのハンドラーでしおり情報を取得します。
なお、他にも総ページやサムネール画像など、PDFを開いた後でなければ取得できない属性情報は、このイベントのハンドラーで取得します。

しおり情報をPDFファイルのオープン処理終了イベントで取得する

PDF Viewer-Lコントロールは、PDFファイルのオープンの後にイベントを発火させます。 しおり情報は、このイベントを捕捉するハンドラーで取得します。


以下では、PDFのしおり情報を取得し、C#のツリービュー(TreeView)で表示します。しおりツリーのためにTreeViewをフォームに貼り付け、名前を“outlineTree”としておきます。

PDF Viewer-LコントロールのOnOpenイベント ハンドラーを以下のように変更します。

//PDF Viewer-Lのオープンイベント
private void axPdfViewerL1_OnOpen(object sender, AxPdfViewerLLib._DPdfViewerLEvents_OnOpenEvent e)
{
    if (e.err != 0)
    {
        MessageBox.Show("PDF文書を開けませんでした。");
        return;
    }

    int outlineCount = axPdfViewerL1.GetOutlineCount();
    Outline[] outlines = new Outline[outlineCount]; //Outlineは、しおり情報を格納するための構造体です。
    TreeNode[] nodes = new TreeNode[outlineCount];  //ツリーのノードをインデックスごとに格納しておく
    outlineTree.Nodes.Clear();
    for (int i = 0; i < outlineCount; i++)
    {
        axPdfViewerL1.GetOutline(i, ref outlines[i].parentIndex, ref outlines[i].title, ref outlines[i].flag, ref outlines[i].x0, ref outlines[i].y0, ref outlines[i].x1, ref outlines[i].y1, ref outlines[i].count);

        //しおりのツリー
        if (outlines[i].parentIndex < 0)
        {
            //rootのしおり
            nodes[i] = outlineTree.Nodes.Add(outlines[i].title);
            nodes[i].Tag = i;   //ノードにインデックスを格納
        }
        else
        {
            //各階層のしおり
            nodes[i] = nodes[outlines[i].parentIndex].Nodes.Add(outlines[i].title);
            nodes[i].Tag = i;   //ノードにインデックスを格納
            if (outlines[outlines[i].parentIndex].count > 0)    //PDFにおいて、親しおりのcount値が0より大きいときはしおりを展開する。
            {
                //しおりを展開する
                nodes[outlines[i].parentIndex].Expand();
            }
        }
    }
}
GetOutline指定インデックスのしおりを取得します。
以下の引数を指定します。
第一引数取得するしおりのインデックス番号を指定します。
第二引数しおりツリーの親のインデックス番号が戻ります。
第三引数しおりの文字列が戻ります。
第四引数しおりに関連付けられたページを表示する方法を示すフラグが戻ります。
PDFのDestinationsで示された表示方法と同様のものです。
第五~八引数フラグに関連した位置や表示倍率を示す値が戻ります。
第九引数このしおりの子しおりの数が戻ります。

起動すると、以下のようなウィンドウが表示されます。
PDF Viewer-L Open Sample

しおりのフラグ情報

しおり(outline)情報の取得で戻るフラグは、PDF Reference(PDFの仕様)で説明されているDestinationsと同じで、以下のとおりです。

下記の表において、第五~八引数をx0, y0, x1, y1と記し、PDFの表示領域を“ウィンドウ”と記します。

フラグPDFのname構文意味
eFlag_XYZ/XYZx1倍に拡大されたページの領域をウィンドウの左上から座標(X=x0,Y=y0)に表示
eFlag_Fit/Fitウインドウにフィットするように表示
eFlag_FitH/FitHウインドウの上端からx0の位置に表示
eFlag_FitV/FitVウインドウの左端からx0の位置に表示
eFlag_FitR/FitRウインドウ内の位置(x0,y0)を左上、位置(x1,y1)を右下とする領域に表示
eFlag_FitB/FitBウインドウのバンディング領域にフィットするように表示
eFlag_FitBH/FitBHウインドウ上端からのx0位置でウインドウのバンディング幅にフィットするように表示
eFlag_FitBV/FitBVウインドウ左端からのx0位置でウインドウのバンディング高さにフィットするように表示

ただし、GotoOutlineメソッドを使って表示した場合に、上記のとおりに表示されない場合があります。

しおりの示すページを表示

しおりの情報は、PDF Viewer-Lコントロール内部でインデックス番号によって管理されています。そのため、しおりツリーがクリックされた場合に、ツリーのインデックス番号を指定するだけで表示を変更させることができます。
TreeViewのAfterSelectイベントハンドラに以下のようなコードを追加すれば、クリックされたツリーの項目のコンテンツを表示するようにできます。

//ツリー ノードの選択が変更された
private void outlineTree_AfterSelect(object sender, TreeViewEventArgs e)
{
    axPdfViewerL1.GotoOutline((int)e.Node.Tag);
}
GotoOutlineコントロール内部で管理されているしおりに移動します。
引数には、インデックスを指定します。
しおり情報は、PDF文書で定義された順に0,1,2,3...とインデックス番号が振付けられて管理されています。

なお、指定ページの表示指定でインデックスではなく、outlines構造体に格納されたフラグと位置情報を使う場合は、GoToメソッドを使います。
GoToメソッドを使うと、フラグを読み替えての表示など、より多彩な実装ができます。

サンプル ソースコード

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

   ソースコード: vwlSample_2_3.zip

ご質問、お問い合わせ

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