トラスト・ソフトウェア・システム
トラスト・ソフトウェア・システム

PDF Prep Tool Suite リンク追加C++サンプル

「PDF Prep Tool Suite」ソフトは、PDF文書を作成、編集、分割、統合するためのAPI(ライブラリ)です。

PDF文書にテキスト・コンテント、画像、ベクタ・グラフィックスを追加します。 さらに、インターラクティブな要素(ハイパー・リンク、フォーム・フィールド、ブックマークなど)を追加し処理します。

PDF文書は、新たに生成することができます。プロパティ(位置、フォント、サイズ、色など)は自由に選択できます。 作成されたPDF文書には、暗号化やWebの表示用に最適化が施されます。

機能概要はこちらです。
無償評価版(リンク先は英語)はこちらです。 ダウンロード手順
他のC++サンプルC#サンプルを公開しています。
PDF Prep Tool Suite ソフト 購入(価格)

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

 ライブラリ(評価版API)は無償でダウンロード(試用)できますので、PDF Prep Tool Suiteダウンロード手順を参照してダウンロードください。
 ファイルをダウンロードしてから、インストールもしくは適当なフォルダーに解凍します。以下のようなフォルダーができあがりますので、適宜ご利用ください。
binライブラリやライセンスマネージャーなど
doc使用説明書やjavadocなど
includeC/C++用のヘッダー(.h)ファイル
jarPrepTool.jar、I2PA.jar(Javaのラッパー)
libC/C++用のlibファイル
ご注意ください:サンプル(英語版)はPDF Tools AG社のページからダウンロードできますが、それを動作させるためにはコードの変更が必要な場合があります。
以下のサンプルは、正しい動作を確認しています。ソースコードはこちらからダウンロードできます。

無償評価版と共にダウンロードしたライセンスキーをbin/LicenseManager.exeを使って登録してください。 ライセンスキーの登録方法はこちらです。

サンプルの実行前に、bin/pdprep32.dll、bin/Img2PdfAPI.dllをサンプル実行イメージと同じフォルダーにコピーしてください。文字化けする場合は、bin/pdcjk.dllも同様にコピーしてください。
COMインターフェースで利用する場合は、bin/pdprep32.dll、bin/Img2PdfAPI.dllをregsvr32.exeを使って登録してください。なお、64ビット版Windowsの場合は、WOW64/regsvr32.exeを使って登録してください。

リンクを追加するC++サンプルと解説

 Webリンクと文書内リンクを追加するサンプルです。
#include <stdio.h>
#include "pdprep.h"

#pragma comment(lib,"pdprep32.lib")

int main(int argc, char* argv[])
{
    PTError         Err;
    Handle          doc;
    InputHandle     in;
    ContentHandle   header;
    float           x1, y1, x2, y2;
    const float     rect1[] = { 20.0f,  20.0f, 215.0f, 16.0f};
    const float     rect2[] = { 20.0f,  60.0f, 180.0f, 16.0f};

    // 引数チェック
    if(argc < 3){
        printf("usage: annot PDF-InputFile PDF-OutputFile\n");
        return 1;
    }

    // 初期化
    PTInitialize();

    // ライセンスのチェック
        if(!PTGetLicenseIsValid()){
        printf("有効なライセンスがありません。\n");
        PTUninitialize();
        return 10;
    }

    // 出力のPDF文書生成とハンドルの取得
    doc = PDocNew(argv[2], 595, 842, &Err);
    if(Err != PTSuccess){
        printf("出力ファイルを生成できません %s\n", argv[2]);
        return 2;
    }
    header = PDocGetHeaderHandle(doc);
    
    // 入力PDFのオープン
    Err = PDocInputOpen(doc, argv[1]);
    if(Err != PTSuccess){
        printf("入力ファイルをオープンできません %s\n", argv[1]);
        return 1;
    }
    in = PDocGetInputHandle(doc);

    // フォント指定
    Err = PConSetFont(header, "Courier", 12);
    if(Err != PTSuccess){
        printf("フォントを設定できませんでした %s\n", "Courier");
        return 1;
    }


    // Webリンクの追加
    // ---------------
    // リンク先:http://www.pdf-tools.com
    //
    PConSetTm(header, 1, 0, 0, 1, rect1[0] + 2.0f, rect1[1] + 2.0f);
    PConPutText(header, "http://www.pdf-tools.trustss.co.jp/");
    PDocAddWebLink(doc, 1, rect1, "http://www.pdf-tools.trustss.co.jp/", 6);


    // 文書内リンクの追加
    // ------------------
    // 移動先:第1ページの先頭
    //
    PConSetTm(header, 1, 0, 0, 1, rect2[0] + 2.0f, rect2[1] + 2.0f);
    PConPutText(header, "Go to Top of 1st page");

    // 移動先のCropboxを取得
    IDocAcquirePage(in, 1);
    IDocPageBox(in, &x1, &y1, &x2, &y2);
    PDocAddGoToLink(doc, 1, rect2, 1, 0, (short)y2, 2, 0);


    // 最初のページをコピーする。このときテキストを含んだヘッダーがマージされる
    PDocInputCopyPages(doc, 1, 1);
    
    // ヘッダーをクリア(テキストを削除)する
    PDocHeaderClear(doc);

    // ページの残りをコピーして、文書を閉じる
    PDocInputCopyPages(doc, 2, -1);
    PDocClose(doc);
    PTUninitialize();

    return 0;
}
このサンプルでは、以下の手順でPDFを作成します。
  1. 初期化
  2. 結果のPDFファイルとしてPDFインスタンスを生成
  3. PDFインスタンスの最上位レイヤー(Header)を取得
    このレイヤーは、PDFインスタンスにページを生成(またはコピー)するごとにマージされます。そのため、このレイヤーはすべてのページで共通になります。
    マージの必要が無い場合は、レイヤーの内容をクリア(削除)しなければなりません。
  4. PDFインスタンスで入力PDFを開く
  5. 入力PDFを取り扱うハンドルを取得
    入力PDFのページを指定する場合などでこのハンドルを使います。
  6. フォントを指定する
    最上位レイヤーに追加する文字列のフォントを指定します。
    Acrobatにビルトインされたフォントの場合は、PDF Prep Tool Suiteがサポートしていますので、フォント名を指定するだけで利用できます。 しかし、それ以外のフォントや日本語フォントを利用する場合は、日本語フォントのテンプレートのようなPDFファイルが必要な場合があります。
  7. WebリンクをHeaderに追加
  8. 文書内リンクをHeaderに追加
  9. 最初のページを追加したリンクと共にコピー
  10. Headerをクリア(削除)
    2ページ以降には、リンクを追加しないのでHeaderをクリアします。
  11. 2ページ以降をすべてコピー
  12. PDFを閉じる
PTInitialize 初期化
PDocNew( ) 出力のPDF文書生成とそのハンドルを取得
引数に以下の値を設定します。
第一引数作成するPDF文書のファイル(パス)名
第二引数作成するPDF文書のページ幅(ポイント単位)
第三引数作成するPDF文書のページ高さ(ポイント単位)
第四引数エラーコードが格納されるインスタンス
PDocGetHeaderHandle( ) Headerレイヤーのインスタンスを取得
Headerは、PDFのレイヤーでページの最上層に位置します。すべてのページで共通のレイヤーです。透かし(ウォーターマーク)を追加する場合は、このレイヤーを利用します。
引数には、PDFのハンドルを指定します。
PDocInputOpen( ) 入力PDFを開く
引数に以下の値を設定します。
第一引数PDF文書のハンドル
第二引数入力PDF文書ファイル(パス)名
PDocGetInputHandle( ) 入力PDFのハンドル取得
引数にPDF文書のハンドルを設定します。
PConSetFont( ) フォントを指定
ここでは、Headerレイヤーにテキスト文字を追加(PConPutText)するためにフォントを指定します。PConPutTextをコールする前にフォントを指定しなければなりません。
引数に以下の値を設定します。
第一引数テキストの書き込み先インスタンス
第二引数フォントの名前
第三引数フォントのサイズ
Acrobatにビルトインされたフォント(Helvetica、Helvetica-Bold、Helvetica-Oblique、Times-Roman、Times-Italic、Times-Bold、Courier、Courier-Oblique、Courier-Bold、Symbol、ZapfDingbats)は、この例のように利用できます。 これ以外のフォントや日本語フォントを利用する場合は、日本語フォントのテンプレートを参照してください。
PConSetTm( ) テキスト配置の変換行列を指定
引数に以下の値を設定します。
第一引数テキストの書き込み先インスタンス
第二引数注1参照
第三引数注1参照
第四引数注1参照
第五引数注1参照
第六引数テキストの書き出しX座標
第七引数テキストの書き出しY座標
注1)第二引数から第五引数の値でテキストの回転を指定します。[1 0 0 1]を指定すると、テキストを左から右へ横方向に書き出します。文字列を襷がけのように書き出す方法を参照してください。
PConPutText( ) 書き出す文字列を指定
引数に以下の値を設定します。
第一引数テキストの書き込み先インスタンス
第二引数書き出す文字列
PDocAddWebLink( ) Webリンクを追加
引数に以下の値を設定します。
第一引数Webリンクを追加するPDF文書のハンドル
第二引数追加するページの番号
第三引数Webリンクの領域
第四引数リンク先URL
第五引数領域を示す枠線のスタイル
以下の値を指定できます。
設定値スタイル
-1非表示
0黒色実線
1赤色点線
2赤色実線
3緑色鎖線
4緑色実線
5青色鎖線
6青色実線
IDocAcquirePage( ) PDF内部の移動先ページを指定
入力PDFで移動先のページを指定します。引数に以下の値を設定します。
第一引数入力PDFのハンドル
第二引数移動先ページの番号
IDocPageBox( ) 移動先の領域(CropBox)を指定
引数に以下の値を設定します。
第一引数入力PDFのハンドル
第二引数領域のX-座標
第三引数領域のY-座標
第四引数領域の幅
第五引数領域の高さ
PDocAddGoToLink( ) 内部移動元を指定
引数に以下の値を設定します。
第一引数PDF文書のハンドル
第二引数内部リンクを配置するページ番号
第三引数内部リンクの領域を示す配列
第四引数移動先のページ番号
第五引数X-座標
第六引数Y-座標
第七引数領域を示す枠線のスタイル
第八引数ズーム値
PDocInputCopyPages( ) 入力PDFのページを出力にコピー
このこーピーの際に、Headerレイヤーがマージされます。引数に以下の値を設定します。
第一引数PDF文書のハンドル
第二引数コピーを開始するページ番号
第三引数コピーを終了するページ番号
-1を指定すると最終のページまでがコピーされます。
PDocHeaderClear( ) Headerレイヤーをクリアー
これ以降では、ページコピーの際にHeaderレイヤーがマージされてもページは変更されません。引数に、PDF文書のハンドルを設定します。

サンプルコード

 C++ PDF Prep Tool Suite サンプル (MS Visual Studio 2008 Project) PtsCppSamples.zip

ご質問、お問い合わせ

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

(記載の会社名および製品名は、各社の登録商標および商標です。)
PDF製品 C++サンプル
PDF Security
PDF Validator
PDF to PDF/A Converter
PDF to Image Converter
PDF Imager-LP
Image to PDF Converter
PDF Printer
PDF Viewer
PDF Viewer-L
PDF Prep Tool Suite
PDF Optimization
PDF Command Line Suite
PDF Extract
PDF Easy Parse
株)トラスト・ソフトウェア・システム
暗号化・電子署名・タイムスタンプ ライブラリ作成します。
お問い合わせください。