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

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を追加しています。
#include <stdio.h>
#include <stdlib.h>
#include "pdprep.h"

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

int main(int argc, char* argv[]){
    PTError         TheError;
    Handle          pdoc;
    InputHandle     idoc;
    ContentHandle   pcontent;
    PDBSTR          Author[50];
    PDBSTR          DocTitle[50];
    int             NumPages[50];
    int             i;
    int             pages = 1;
    float           rect[4] = {100, 700, 400, 15};

    // 引数チェック
    if(argc < 4){
        printf("複数の PDF ファイルを統合し、目次(Table of Contents)を生成します。\n");
        printf("concattoc PDF-InputFile1 PDF-InputFile2 ... PDF-OutputFile\n");
        return 1;
    }
    else if(argc > 52){
        printf("引数が多すぎます。50ファイルまで指定できます。\n");
        return 1;
    }

    // 初期化
    PTInitialize();

    // 出力ファイルと共にインスタンスを生成
    pdoc  = PDocNew(argv[argc-1], 0, 0, &TheError);
    if(PDocLastError(pdoc) != PTSuccess){
        printf("出力ファイルが生成できません。\n");
        return 2;
    }
    
    for(int i=0; i<50; i++){
        Author[i].len = 0;
        Author[i].buf = NULL;
        DocTitle[i].len = 0;
        DocTitle[i].buf = NULL;
    }

    // すべての入力ファイルからタイトルと作成者情報を取り出しコピーしたページ数と共に記憶する
    for(i = 1; i <= argc-2; i++){
        // 入力ファイルをオープンしインスタンスにAttachする
        idoc = IDocOpen(argv[i], &TheError);
        if(IDocLastError(idoc) != PTSuccess){
            printf("Could open file\n");
            PDocClose(pdoc);
            return 2;
        }
        PDocAttach(pdoc, idoc);
        // 属性情報を取得する
        IDocGetInfoAttrU(idoc, "Author", &Author[i-1]);
        IDocGetInfoAttrU(idoc, "Title", &DocTitle[i-1]);
        // 総ページ数を取得して次の文書の開始ページとする
        pages = pages + IDocNumPages(idoc);
        NumPages[i] = pages; 
        // ページをコピー
        PDocInputCopyAll(pdoc);
    }
    // 最初のページ
    NumPages[0] = 1;

    // 目次のためのページを新たに作成
    PDocNewPage(pdoc);

    // フォントテンプレートを開き、対象のページハンドルにアタッチする
    // このPDFに目的の文字が無い場合は、ASCII 32(space)に置き換わる。
    TheError = PDocInputOpen(pdoc, "msfonts.pdf");

    // ページレイヤーのハンドルを取得し、ページサイズをA4(595x842)に設定
    pcontent = PDocGetContentHandle(pdoc);
    PDocPageSize(pdoc, 595, 842);
    PConSetTm(pcontent, 1, 0, 0, 1, 100, 710);
    PConSetFont(pcontent, "Helvetica", 18);
    PConPutText(pcontent, "Table of Contents");
    // すべての入力ファイルに...
    for(i = 1; i <= argc-2; i++){
        // 作成者と文書タイトルを追加
        TheError=PConSetFont(pcontent, "MS-Gothic", 14);
        PConSetTm(pcontent, 1, 0, 0, 1, 100, 700-15*(float)i);
        PConPutTextU(pcontent, Author[i-1]);
        PConSetTm(pcontent, 1, 0, 0, 1, 250, 700-15*(float)i);
        PConPutTextU(pcontent, DocTitle[i-1]);
        // リンクを追加
        rect[1] = 700-15*(float)i;
        PDocAddGoToLink(pdoc, NumPages[argc-2], rect, NumPages[i-1], 0, 0, 0, 0);
    }

    for(int i=0; i<50; i++){
        PTFreePDBSTR(Author[i]);
        PTFreePDBSTR(DocTitle[i]);
    }

    // 出力ファイルを閉じる
    PDocClose(pdoc);
    return 0;
}
PTInitialize 初期化
PDocNew( ) 出力のPDF文書生成とそのハンドルを取得
引数に以下の値を設定します。
第一引数作成するPDF文書のファイル(パス)名
第二引数作成するPDF文書のページ幅(ポイント単位)
第三引数作成するPDF文書のページ高さ(ポイント単位)
第四引数エラーコードが格納されるインスタンス
IDocOpen( ) 入力PDFのハンドルを取得
この手順では、開いたPDFは独立に存在しています。引数に以下の値を設定します。
第一引数入力PDFのファイル(パス)名
第二引数エラーコードを格納するインスタンス
PDocAttach( ) 指定のPDFを出力となるPDFに関連付ける
引数に以下の値を設定します。
第一引数出力となるPDFのハンドル
第二引数指定PDFのハンドル
IDocGetInfoAttrU( ) PDFの/Info属性を取得
引数に以下の値を設定します。
第一引数入力PDFのハンドル
第二引数属性のキー
第三引数属性値
IDocNumPages( ) ページ数を取得
ページ数を取得するPDFのハンドル
PDocInputCopyAll( ) 入力PDFのすべてのページを出力PDFにコピー
引数に、出力PDFのハンドルを設定します。
PDocNewPage( ) 新しいページを生成
PDocInputOpen( ) 入力PDFを開く
引数に以下の値を設定します。
第一引数PDF文書のハンドル
第二引数入力PDF文書ファイル(パス)名
PDocGetContentHandle( ) 生成されたページのハンドルを取得する
PDocPageSize( ) 生成されるページのサイズを指定
引数に以下の値を設定します。
第一引数ページのハンドル
第二引数ページの幅
第三引数ページの高さ
PConSetTm( ) テキスト配置の変換行列を指定
引数に以下の値を設定します。
第一引数テキストの書き込み先インスタンス
第二引数注1参照
第三引数注1参照
第四引数注1参照
第五引数注1参照
第六引数テキストの書き出しX座標
第七引数テキストの書き出しY座標
注1)第二引数から第五引数の値でテキストの回転を指定します。[1 0 0 1]を指定すると、テキストを左から右へ横方向に書き出します。文字列を襷がけのように書き出す方法を参照してください。
PConPutText( ) 書き出す文字列を指定
引数に以下の値を設定します。
第一引数テキストの書き込み先インスタンス
第二引数書き出す文字列
PDocAddGoToLink( ) 内部移動元を指定
引数に以下の値を設定します。
第一引数PDF文書のハンドル
第二引数内部リンクを配置するページ番号
第三引数内部リンクの領域を示す配列
第四引数移動先のページ番号
第五引数X-座標
第六引数Y-座標
第七引数領域を示す枠線のスタイル
以下の値を指定できます。
設定値スタイル
-1非表示
0黒色実線
1赤色点線
2赤色実線
3緑色鎖線
4緑色実線
5青色鎖線
6青色実線
第八引数ズーム値

サンプルコード

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