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

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文書を作成するサンプルです。
 日本語のウォーターマークを追加するには、フォントのテンプレートファイルmsfonts.pdfが必要な場合があります。 このテンプレートファイルには、MS-Mincho,MS-PMincho,MS-Gothic,MS-PGothicの4フォントが含まれています。これらのフォントに含まれている文字すべてを使えるようにしてあります。 そのため、ファイルサイズが14MBを超えるサイズになっています。このファイルのサイズを小さくするには、利用しないフォントや文字を削除します。 このような(フォントを削除したり、文字を削除したりする)処理は、PDF Optimizationなどが利用できます。無償で利用できる評価版を使って作成したPDFでもテンプレートファイルとして利用できます。
#include <stdio.h>
#include <math.h>
#include "pdprep.h"

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

int main(int argc, char* argv[])
{
    PTError       TheError;
    Handle        doc;
    InputHandle   idoc;
    ContentHandle header;
    double        angle;
    float         s;
    float         c;

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

    // 初期化
    PTInitialize();

    // 出力ファイルをオープン
    doc = PDocNew(argv[2], 0, 0, &TheError);

    // ヘッダーハンドルを取得
    header = PDocGetHeaderHandle(doc);

    // フォントテンプレートを開く
    // このPDFに目的の文字が無い場合は、ASCII 32(space)に置き換わる。
    PDocInputOpen(doc, "msfonts.pdf");

    // フォントを指定
    PConSetFont(header, "MS-Mincho", 120);
    PConSetGray(header, 0.5f, 0.0f);
    PConSetLineWidth(header, 0.5f);

    // 入力ファイルをオープン
    idoc   = IDocOpen(argv[1], &TheError);
    PDocAttach(doc, idoc);

    // rotation-matrix計算
    angle  = 60.0;
    s      = (float) sin(angle * 3.14159 * 2.0 / 360.0);
    c      = (float) cos(angle * 3.14159 * 2.0 / 360.0);
    PConSetTm(header, c, s, -s, c, 100.0, 100.0);

    // "outline"オペレータを指定
    PConPutText(header, " ");
    PConTextOp(header, "1 Tr");

    // テキストをヘッダーレイヤーに書く
    PDBSTR  txt;
    txt.buf = L"日本語";
    txt.len = wcslen(txt.buf);
    PConPutTextU(header, txt);

    // コピーして文書を閉じる
    PDocInputCopyAll(doc);
    PDocClose(doc);
    return 0;
}
PTInitialize 初期化
PDocNew( ) 出力のPDF文書生成とそのハンドルを取得
引数に以下の値を設定します。
第一引数作成するPDF文書のファイル(パス)名
第二引数作成するPDF文書のページ幅(ポイント単位)
第三引数作成するPDF文書のページ高さ(ポイント単位)
第四引数エラーコードが格納されるインスタンス
PDocGetHeaderHandle( ) Headerレイヤーのインスタンスを取得
Headerは、PDFのレイヤーでページの最上層に位置します。すべてのページで共通のレイヤーです。引数には、PDFのハンドルを指定します。
PDocInputOpen( ) 日本語フォントのテンプレートPDFを開く
標準で用意されていないフォント(日本語フォントなど)を指定する場合必要な文字およびフォントが含まれているPDF文書をテンプレートとして利用します。 引数に以下の値を設定します。
第一引数PDF文書のハンドル
第二引数入力PDF文書ファイル(パス)名
サンプルで利用しているmsfonts.pdfは、MS-MinchoやMS-Gothicなどのすべての文字を含んだPDF文書です。このPDF文書は、フォントをすべてPDFに埋め込む(著作権を侵害しない)正しい方法で作成しています。 なお、このテンプレートに含まれていない文字をPDFに追加しようとすると、その文字はスペース(ASCII32)に置き換わります。
PConSetFont( ) フォントを指定
ここでは、Headerレイヤーにテキスト文字を追加する(PConPutText)ためにフォントを指定します。PConPutTextをコールする前にフォントを指定しなければなりません。
引数に以下の値を設定します。
第一引数テキストの書き込み先インスタンス
第二引数フォントの名前
第三引数フォントのサイズ
この例では、日本語フォントのテンプレートを開いていますので、 Acrobatにビルトインされたフォント(Helvetica、Helvetica-Bold、Helvetica-Oblique、Times-Roman、Times-Italic、Times-Bold、Courier、Courier-Oblique、Courier-Bold、Symbol、ZapfDingbats)以外の、日本語フォントを利用できます。
PConSetGray( ) 線および塗りつぶしのグレーレベルを設定
引数に以下の値を設定します。
第一引数PDFのハンドル
第二引数線のグレーレベル
第三引数塗りつぶしのグレーレベル
PConSetLineWidth( ) 線を描画する際の太さを設定
IDocOpen( ) 入力PDFのハンドルを取得
この手順では、開いたPDFは独立に存在しています。引数に以下の値を設定します。
第一引数入力PDFのファイル(パス)名
第二引数エラーコードを格納するインスタンス
PDocAttach( ) 指定のPDFを出力となるPDFに関連付ける
引数に以下の値を設定します。
第一引数出力となるPDFのハンドル
第二引数指定PDFのハンドル
PConSetTm( ) テキスト配置の変換行列を指定
例では、文字列を斜めに襷がけのように表示します。引数に以下の値を設定します。(PDF構文 変換行列参照)
第一引数テキストの書き込み先インスタンス
第二引数注1参照
第三引数注1参照
第四引数注1参照
第五引数注1参照
第六引数テキストの書き出しX座標
第七引数テキストの書き出しY座標
注1)第二引数から第五引数の値でテキストの回転を指定します。
例のように、[cos( ) sin( ) -sin( ) cos( )]を指定すると、文字列が左下から右上に向かって襷がけのように表示されます。出力の例を参照してください。
PConPutTextU( ) テキストをヘッダーレイヤーに書く
引数に以下の値を設定します。
第一引数ヘッダーのハンドル
第二引数書き込む文字列
PConTextOp( ) 文字のレンダリングモードをPDFのコマンドで指定します。
サンプルでは、縁取りの文字を指定しています。 このメソッドで追加されるコマンドはチェックされません。しかし、“BT”と“ET”に囲まれることを確認します(PDFのテキスト構文)。レンダリングモードは以下の値を指定できます。
モードサンプルサンプル
0塗りつぶし
1縁取り(パスを描く)
2縁取りと塗りつぶし
3縁取りも塗りつぶしも行わない(非表示)
4塗りつぶしとパスでクリップしたものを追加
5縁取りとパスでクリップしたものを追加
6塗りつぶし、縁取り、クリップしたものを追加
7パスでクリップしたものを追加
“BT”と“ET”に囲まれなければなりませんので、サンプルの場合は先行してPConPutText( )を実行します。

サンプルコード

 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
株)トラスト・ソフトウェア・システム
暗号化・電子署名・タイムスタンプ ライブラリ作成します。
お問い合わせください。