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

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++のサンプルと解説

グラフィック追加 既存のPDF文書に新たなコンテンツを追加したPDFを作成するサンプルです。
左図のように既存PDFにグラフィック コンテンツを追加します。
拡大
#include <stdio.h>
#include "pdprep.h"

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

int main(int argc, char* argv[])
{
    PTError        TheError;
    Handle         doc;
    ContentHandle  h;
    int            iColumn, iRow;
    float          X, Y, s;
    float          xy[6];

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

    // 初期化
    PTInitialize();

    // 出力ファイルの生成とヘッダーハンドルの取得
    doc = PDocNew(argv[2], 0, 0, &TheError);
    h   = PDocGetHeaderHandle(doc);	
    
    // 入力ファイルをオープン
    TheError = PDocInputOpen(doc,argv[1]);
    if (TheError != PTSuccess)
    {
        printf("ファイル %s がオープンできません\n", argv[1]);
        return 1;
    }

    // 出力ファイルにセキュリティを設定
    PDocSecurity(doc, "pwd", "", "pcsa");

    // ベジェ曲線を描画し、透明な円に埋める
    PConSetFillAlpha(h, 0.15f);
    PConSetStrokeAlpha(h, 0.15f);
    PConDrawArea(h, 1);
    X = 100.0f;
    Y = 117.0f;
    s = 100.0f;
    PConMoveTo(h, X, Y);
    xy[0] = X;
    xy[1] = Y + s * 0.66f;
    xy[2] = X + s;
    xy[3] = Y + s * 0.66f;
    xy[4] = X + s;
    xy[5] = Y;
    PConCurveTo(h, xy, 0);
    xy[0] = X + s;
    xy[1] = Y - s * 0.66f;
    xy[2] = X;
    xy[3] = Y - s * 0.66f;
    xy[4] = X;
    xy[5] = Y;
    PConCurveTo(h, xy, 0);
    PConDrawArea(h, 0);
    
    // ヘッダに四角を描く
    PConSetFillAlpha(h, 1.0f);
    for (iRow = 0; iRow < 6; iRow++)
    {
        for (iColumn = 0; iColumn < 6; iColumn++)
        {
            // Yellow(1,1,0)  Green(0,1,0)
            // Red(1,0,0)     Blue(0,0,1)
            //
            PConFillColor(h, 1.0f - iColumn * 0.2f, iRow * 0.2f, (iColumn - iRow) * 0.2f);
            PConRectangle(h, 100.0f + iColumn * 11.0f, 100.0f + iRow * 11.0f, 9.0f, 9.0f, 0);
        }
    }

    // 矢印を描く
    PConFillColor(h, 1.0, 0.0f, 0.0f);
    PConSetStrokeAlpha(h, 1.0f);
    
    PConMoveTo(h, 110.0f, 90.0f);
    PConDrawTo(h, 150.0f, 90.0f);
    PConMoveTo(h, 145.0f, 93.0f);
    PConDrawTo(h, 150.0f, 90.0f);
    PConDrawTo(h, 145.0f, 87.0f);
    
    PConMoveTo(h, 175.0f, 155.0f);
    PConDrawTo(h, 175.0f, 115.0f);
    PConMoveTo(h, 178.0f, 120.0f);
    PConDrawTo(h, 175.0f, 115.0f);
    PConDrawTo(h, 172.0f, 120.0f);
    
    PConMoveTo(h, 180.0f, 85.0f);
    PConDrawTo(h, 170.0f, 95.0f);
    PConMoveTo(h, 171.0f, 89.0f);
    PConDrawTo(h, 170.0f, 95.0f);
    PConDrawTo(h, 176.0f, 94.0f);
    
    // テキストを書く
    PConSetFont(h, "Helvetica", 8);

    PConFillColor(h, 1.0f, 0.0f, 0.0f);    
    PConSetTm(h, 1.0f, 0.0f, 0.0f, 1.0f, 115.0f, 80.0f);
    PConPutText(h, "+ Red -"); 
    
    PConFillColor(h, 0.0f, 1.0f, 0.0f);
    // x度回転する:
    // TM = cos(x), sin(x), -sin(x), cos(x), 0, 0
    //
    PConSetTm(h, 0.0f, 1.0f, -1.0f, 0.0f, 185.0f, 117.0f);
    PConPutText(h, "- Green +");
    
    PConFillColor(h, 0.0f, 0.0f, 1.0f);
    PConSetTm(h, 0.707f, -0.707f, 0.707f, 0.707f, 168.0f, 105.0f);
    PConPutText(h, "- Blue +");

    // すべてをコピーして文書を閉じる
    PDocInputCopyAll(doc);
    PDocClose(doc);
    return 0;
}
このサンプルでは、以下の手順でPDFを作成します。
  1. 初期化
  2. 出力PDFのインスタンスを生成作成
  3. Headerレイヤー(最上位レイヤー)を取得
    このレイヤーは、パージがコピーもしくは作成されたときマージされ、すべてのページで共通です。
  4. 入力のPDFを開く
  5. PDFにセキュリティを設定
    Acrobatでの印刷を禁止や暗号化の方法などを設定します。
  6. Headerレイヤーに曲線、四角形、文字列や線を追加
  7. 文字列を回転
    行列を指定して回転の方向などを指定します。
  8. すべてのページをHeaderレイヤーとマージしてコピー
  9. 文書を閉じる
PTInitialize 初期化
PDocNew( ) 出力のPDF文書生成とそのハンドルを取得
引数に以下の値を設定します。
第一引数作成するPDF文書のファイル(パス)名
第二引数作成するPDF文書のページ幅(ポイント単位)
第三引数作成するPDF文書のページ高さ(ポイント単位)
第四引数エラーコードが格納されるインスタンス
PDocGetHeaderHandle( ) Headerレイヤーのインスタンスを取得
Headerは、出力PDFのレイヤーでページの最上層に位置します。すべてのページで共通のレイヤーです。引数には、出力PDFのハンドルを指定します。
PDocInputOpen( ) 入力PDFを開く
引数に以下の値を設定します。
第一引数PDF文書のハンドル
第二引数入力PDF文書ファイル(パス)名
PDocSecurity( ) PDF文書にセキュリティを設定
引数に以下の値を設定します。
第一引数PDF文書のハンドル
第二引数オーナーパスワード
第三引数ユーザーパスワード
第四引数セキュリティ・フラグ
以下の値を設定できます。
設定値セキュリティ
pAcrobatから印刷禁止
cAcrobatでの文書変更禁止
s文字列やグラフィックスの選択とコピーの禁止
a注釈とフォームへの変更禁止
iフォームフィールドの編集機能無効
eテキストとグラフィックスの取出機能無効
d文書組立機能無効
q高解像度印刷機能無効
5128ビット暗号化指定
i,e,d,q は128ビット暗号を指定した場合のみ
PConSetFillAlpha( ) 不透明度を設定
塗りつぶしの不透明度を設定します。
PConSetStrokeAlpha( ) 不透明度を設定
線の不透明度を設定します。
PConDrawArea( ) パスを閉じる
PConMoveTo( ) 線描画の開始位置に移動
PConCurveTo( ) ベジェ曲線を描く
PConFillColor( ) 塗りつぶしの色を指定
PConRectangle( ) 四角形を描く
PConSetFont( ) フォントを指定
ここでは、Headerレイヤーにテキスト文字を追加する(PConPutText)ためにフォントを指定します。PConPutTextをコールする前にフォントを指定しなければなりません。
引数に以下の値を設定します。
第一引数テキストの書き込み先インスタンス
第二引数フォントの名前
第三引数フォントのサイズ
Acrobatにビルトインされたフォント(Helvetica、Helvetica-Bold、Helvetica-Oblique、Times-Roman、Times-Italic、Times-Bold、Courier、Courier-Oblique、Courier-Bold、Symbol、ZapfDingbats)は、この例のように利用できます。 これ以外のフォントや日本語フォントを利用する場合は、日本語フォントのテンプレートを参照してください。
PConSetTm( ) テキスト配置の変換行列を指定
サンプルでは、ななめ45度(0.707f=sin(45))に傾けて文字を書き込みます。
引数に以下の値を設定します。
第一引数テキストの書き込み先インスタンス
第二引数注1参照
第三引数注1参照
第四引数注1参照
第五引数注1参照
第六引数テキストの書き出しX座標
第七引数テキストの書き出しY座標
注1)第二引数から第五引数の値でテキストの回転を指定します。[1 0 0 1]を指定すると、テキストを左から右へ横方向に書き出します。文字列を襷がけのように書き出す方法を参照してください。
PConPutText( ) 書き出す文字列を指定
引数に以下の値を設定します。
第一引数テキストの書き込み先インスタンス
第二引数書き出す文字列
PDocInputCopyAll( ) 入力PDFのすべてのページを出力PDFにコピー
引数に、出力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
株)トラスト・ソフトウェア・システム
暗号化・電子署名・タイムスタンプ ライブラリ作成します。
お問い合わせください。