Professional Documents
Culture Documents
チ ュ ー ト リ アル
C ・ C++ ・ Java ・ .NET ・ .NET Core ・ Objective-C ・
Perl ・ PHP ・ Python ・ RPG ・ Ruby 用
Copyright © 1997–2022 PDFlib GmbH and Thomas Merz. All rights reserved.
PDFlib ユーザーは本マニ ュ アルを内部利用のために印刷または電子的に複製する こ と を許諾 さ れます。
PDFlib GmbH
Franziska-Bilek-Weg 9, 80339 München, Germany
www.pdflib.com
電話 +49 • 89 • 452 33 84-0
jp.sales@pdflib.com
jp.support@pdflib.com (ラ イ セ ン ス番号をお知らせ く だ さ い)
1 は じ めに 15
1.1 PDFlib と は 15
1.3 構成の必要事項 19
1.5 廃止 ・ 削除 し た メ ソ ッ ド と オプ シ ョ ン 23
1.9 製品別機能一覧 30
2 PDFlib の言語バイ ンデ ィ ング 31
2.1 C バイ ンデ ィ ン グ 31
2.2 C++ バイ ンデ ィ ン グ 35
2.3 Java バイ ンデ ィ ング 37
2.4 .NET バイ ンデ ィ ング 39
2.5 Objective-C バイ ンデ ィ ン グ 42
2.6 Perl バイ ンデ ィ ン グ 44
2.7 PHP バイ ンデ ィ ング 46
2.8 Python バイ ンデ ィ ン グ 48
2.9 RPG バイ ンデ ィ ング 49
2.10 Ruby バイ ンデ ィ ング 51
3 PDF 文書を作成 55
目次 3
3.1.6 PDF 文書の最大サ イ ズ と その他の制限 65
3.1.7 Web 最適化 (線形) PDF 66
3.1.8 マルチ ス レ ッ ド プ ロ グ ラ ミ ン グ 66
3.1.9 EBCDIC ベース のプ ラ ッ ト フ ォームで PDFlib を使 う 66
3.2 ページ記述 68
3.2.1 座標系 68
3.2.2 ページ寸法 70
3.2.3 直接パ ス 71
3.2.4 パ ス オブジ ェ ク ト 72
3.2.5 テ ンプ レー ト (フ ォーム XObject) 74
3.4 XMP メ タ デー タ 79
3.5 連携フ ァ イル 80
4 色 と 透過 83
4.5 DeviceN カ ラ ー 94
4.6 シ ェ ーデ ィ ング と シ ェ ーデ ィ ングパ タ ーン 98
5 Unicode と レ ガシ エ ン コ ーデ ィ ング 109
4 目次
5.2.2 UTF-8 対応のあ る 言語バ イ ンデ ィ ン グ 111
5.2.3 デフ ォ ル ト UTF-8 対応のあ る 言語バ イ ンデ ィ ン グ 111
6 フォン ト 127
6.1 フ ォ ン ト 形式 127
6.1.1 TrueType フ ォ ン ト 127
6.1.2 OpenType フ ォ ン ト 127
6.1.3 SVG ・ COLR ・ sbix 形式の OpenType カ ラ ーフ ォ ン ト 128
6.1.4 WOFF ・ WOFF2 フ ォ ン ト 130
6.1.5 PostScript Type 1 フ ォ ン ト (廃止済) 131
6.1.6 SING フ ォ ン ト (グ リ フ レ ッ ト ) 131
6.1.7 Type 3 フ ォ ン ト 131
7 テキス ト 出力 155
目次 5
7.2 フ ォ ン ト メ ト リ ッ ク と テキス ト ス タ イル 157
7.2.1 フ ォ ン ト と グ リ フ の メ ト リ ッ ク 157
7.2.2 カーニ ン グ 157
7.2.3 テ キ ス ト ス タ イ ル 158
6 目次
8.2.6 SVG カ ラ ー拡張 205
8.2.7 ベ ク ト ルグ ラ フ ィ ッ ク ・ テ キ ス ト 以外の SVG 内容 208
8.2.8 対応 し ていない SVG 機能 209
目次 7
9.3 表の組版 259
9.3.1 単純な表を配置 260
9.3.2 表セルの さ ま ざ ま な内容 263
9.3.3 表 と 列の幅 265
9.3.4 さ ま ざ ま な種類の内容を持っ た表 266
9.3.5 表 イ ン ス タ ン ス 269
9.3.6 表組版のアルゴ リ ズ ム 271
10 イ ン タ ラ ク テ ィ ブ機能 279
10.1 リ ン ク ・ し お り ・ 注釈 279
8 目次
11.3 タ グ付き PDF ページ を PDI で取 り 込む 330
目次 9
13.2.1 文書デザ イ ン と プ ロ グ ラ ム コ ー ド の分離 378
13.2.2 ブ ロ ッ ク のプ ロ パテ ィ 378
13.2.3 なぜ PDF の フ ォーム フ ィ ール ド を使わないの 379
A 改訂履歴 423
索引 425
10 目次
0 PDFlib のラ イ セ ン スキーを適用
評価版の制約 PDFlib GmbH に よ っ て提供 さ れ る PDFlib ・ PDFlib+PDI ・ PPS のすべてのバ
イ ナ リ ーバージ ョ ンは、 商用 ラ イ セ ン ス を取得 し たか否かにかかわ ら ず、 完全に動作す る
評価版 と し て利用で き ます。 ただ し 非 ラ イ セ ン ス版は、 すべての生成 さ れ る ページ上に、
www.pdflib.com と い う デモ ス タ ンプを横断印字 し 、 ま た、 内蔵の pCOS イ ン タ ーフ ェ イ ス
は小容量の文書 (10 ページ以下、 フ ァ イ ルサ イ ズ 1 MB 以下) に制限 さ れます。 非 ラ イ セ
ン ス のバ イ ナ リ ーは、 業務目的に使用 し てはな ら ず、 こ の製品を評価す る ためにのみ使用
で き ます。 PDFlib GmbH 製品はいずれ も 、 業務目的に使用す る には有効な ラ イ セ ン ス が必
要です。
PDFlib ラ イ セ ン ス の取得を ご検討いただいてい る 企業で、 評価段階やプ ロ ト タ イ プの
デモ期間中に評価制約の除去を ご希望の場合は、sales@pdflib.com 宛に企業情報・プ ロ ジ ェ
ク ト 内容を簡単に ご説明いただければ、 一時的な ラ イ セ ン ス キーを ご提供 し ま す (評価
キーの提供要請をお断 り す る 権利を私達は保持いた し ます。た と えば匿名に よ る ご希望の
場合な ど)。
PDFlib ・ PDFlib+PDI ・ PDFlib Personalization Server (PPS) は、 1 つのパ ッ ケージ と し て
頒布 さ れてはい ますが、 それぞれ異な る 製品であ り 、 別々の ラ イ セ ン ス キーを必要 と し ま
す。 PDFlib+PDI の ラ イ セ ン ス キーは PDFlib に対 し て も 有効ですが、 その逆は無効であ り 、
ま た、 PPS の ラ イ セ ン ス キーは PDFlib+PDI と PDFlib に対 し て有効です。 すべての ラ イ セ
ン ス キーはプ ラ ッ ト フ ォーム依存であ り 、購入 さ れた対象のプ ラ ッ ト フ ォームで し か使用
で き ません。
PDFlib ま たは PDI の ラ イ セ ン ス キーを ご購入いただいた ら 、 それを適用 し てデモ ス タ
ンプを除去 し て く だ さ い。 ラ イ セ ン ス キーを設定す る にはい く つかの方法があ り ます。 以
下にそれを解説 し ます。
p.set_option("license=...あなたのライセンスキー ...")
> C の場合 :
$p->set_option("license=...あなたのライセンスキー ...")
c callp PDF_set_option(p:%ucs2('license=...あなたのライセンスキー
...')
11
ラ イ セ ン ス フ ァ イ ルを使用 実行時の呼び出 し で ラ イ セ ン ス キー を 与え る のではな く 、
その ラ イ セ ン ス キーを テ キ ス ト フ ァ イ ルに入力 し てお く と い う 方法 も あ り ます。以下の形
式に従っ て く だ さ い (PDFlib のデ ィ ス ト リ ビ ュ ーシ ョ ンにはすべて、 ラ イ セ ン ス フ ァ イ ル
テ ンプ レー ト licensekeys.txt が入っ てい る ので、 それを利用す る こ と も で き ます)。 1 個の
「#」 キ ャ ラ ク タ ーで始ま る 行は、 注釈を内容 と し てお り 、 無視 さ れます。 2 行目は、 ラ イ
セ ン ス フ ァ イ ル自体のバージ ョ ン情報を内容 と し てい ます :
# Licensing information for PDFlib GmbH products
PDFlib license file 1.0
PDFlib 10.0.0 ...あなたのライセンスキー ...
p.set_option("licensefile={/ファイルへの/パス/licensekeys.txt}");
12 第 0 章 : PDFlib のラ イ セ ン スキーを適用
%systemroot%\syswow64\regedit
ラ イ セ ン ス フ ァ イ ル と リ ソ ース フ ァ イ ルに対す る デ フ ォ ル ト フ ァ イ ル名 デ フ ォ ル ト
で、 以下の フ ァ イ ル名が、 デフ ォ ル ト 検索パ スデ ィ レ ク ト リ ー群の中で検索 さ れます :
licensekeys.txt (ライセンスファイル)
pdflib.upr (リソースファイル)
ま だ ラ イ セ ン ス さ れていない機能を評価 いずれの機能 も 、 ソ フ ト ウ ェ ア に対 し て ラ イ
セ ン ス キーを一切適用せずに完全に評価で き ます。 し か し 、 あ る 特定製品に対す る 有効な
ラ イ セ ン ス キーの適用後は、 それ よ り も 高いカ テ ゴ リ ーの機能は利用で き な く な り ます。
た と えば、 有効な PDFlib の ラ イ セ ン ス キーを イ ン ス ト ールす る と 、 PDI の機能を試用で き
な く な り ます。 同様に、 PDFlib+PDI の ラ イ セ ン ス キーを イ ン ス ト ール し た後は、 パー ソ ナ
ラ イ ゼーシ ョ ン機能 (ブ ロ ッ ク 関数群) を利用で き な く な り ます。
あ る 製品に対す る ラ イ セ ン ス キーがすでに イ ン ス ト ール さ れてい る 時は、 そのかわ り
にダ ミ ーの ラ イ セ ン ス文字列 「0」 (数字のゼ ロ ) を設定すれば、 それ よ り も 高い製品 ク ラ
ス の機能を試用で き る よ う にな り ます。 そ う す る こ と に よ り 、 それ以前に無効に さ れた関
数が有効にな り 、 ま た、 すべてのページ を横断す る デモ ス タ ンプが再び有効にな り ます。
13
14 第 0 章 : PDFlib のラ イ セ ン スキーを適用
1 は じ めに
1.1 PDFlib と は
PDFlib は、 PDF 文書を生成 ・ 操作す る 、 定評あ る 開発者向け コ ン ポーネ ン ト です。 PDFlib
の主要 タ ーゲ ッ ト は、 Web サーバー上での動的な PDF 生成 と 、 あ ら ゆ る 種類のサーバー ・
デス ク ト ッ プ ・ モバ イ ルアプ リ ケーシ ョ ンにおけ る PDF 生成です。 PDFlib を利用すれば、
デー タ ベース の内容か ら 動的に PDF 文書を生成で き ます。 すなわち動的な Web ページ と
同様の こ と がで き る のです。 1997 年以来、 PDFlib は幅広いユース ケース と 開発環境にお
いて実力を証明 し てい ます。 アプ リ ケーシ ョ ンのプ ロ グ ラ マーが、 PDFlib を用いて、 テ キ
ス ト ・ 画像 ・ グ ラ フ ィ ッ ク ・ イ ン タ ラ ク テ ィ ブ要素を有す る PDF 出力を生成 し ます。
PDFlib は、 世界 じ ゅ う の何万 も のユーザー様に現にご利用いただいてい ます。 こ の よ
う な大ス ケールでデプ ロ イ し ていただいてい る おかげ も あ り 、 当社は API と 、 内部実装
と 、 生成する PDF 出力を さ ら に改良 ・ フ ァ イ ンチ ュ ーンで き てい ます。 関連する PDF ・
PDF/A ・ PDF/X ・ PDF/UA ・ PDF/VT の ISO 規格に準拠する こ と と 、 普及 し てい る PDF
ビ ュ ーアー と の互換を と る こ と に高い優先度を与え てい ます。PDFlib は、PDF 形式が提供
し てい る すべての機能に対応 し てい ます。
PDFlib の製品フ ァ ミ リ ーは、 3 つの種類 と し て提供 し てい ます : PDFlib と 、 PDFlib+PDI
(PDF Import) と 、PDFlib Personalization Server (PPS) (Adobe Acrobat 用 PDFlib Block Plugin
が付属) です。
1.1 PDFlib と は 15
> 既存のページに企業 ロ ゴ な ど画像を貼 り 付け
> 複数の PDF ページ を並べ替え た り 、組み合わせた り 、修正 し た り し なが ら も 、PDF/A ・
PDF/X ・ PDF/UA への準拠を維持
16 第 1 章 : は じ めに
1.2 説明書 と サン プルの案内
当社では、 PDFlib 製品の有効活用を支援す る ため、 以下に挙げ る 資料を提供 し てい ます。
18 第 1 章 : は じ めに
1.3 構成の必要事項
以前のバージ ョ ン と 異な り 、 PDFlib 10 では、 特定の操作をす る 際に外部フ ァ イ ルが必要
と な る 場合があ り ます。 こ の必要 と な る フ ァ イ ルは PDFlib のパ ッ ケージに含まれてい ま
す。 こ れ ら の フ ァ イ ルを適切なデ ィ レ ク ト リ ーへ コ ピー し て こ れ ら のデ ィ レ ク ト リ ーへの
ア ク セ ス を構成す る のはユーザー側の役割です。外部フ ァ イ ルへのア ク セ ス を構成す る 方
法は searchpath な どい く つかあ り ますので、 詳 し く は 59 ページ 「3.1.4 リ ソ ース構成 と
フ ァ イ ル検索」 を参照 し て く だ さ い。外部フ ァ イ ルが必要にな る 操作を表 1.1 に挙げます。
表 1.1 構成の必要事項
フ ァ イル 必要な場合
resource/codepage/*.cpg PDF_load_font( ) と 暗黙的フ ォ ン ト 読み込みで レ ガシー 8 ビ ッ ト エ ン コ ーデ ィ ング
iso8859-2 ~ iso8859-16、 cp1250 ~ cp1251、 cp1253 ~ cp1258 のいずれかを用いる
場合 (116 ページ 「5.3.3 シ ングルバイ ト (8 ビ ッ ト ) エ ン コ ーデ ィ ング」 を参照)
resource/font/*.ttf PDF_create_annotation( ) で type=Caret ・ FreeText ・ Line ・ Stamp のいずれかを用い、
し か も font オプ シ ョ ン も template オプ シ ョ ン も与え ない場合。
PDF_fit_pdi_page( ) で useannots (デ フ ォ ル ト で有効です) か usefields を用いて、
フ ォ ーム フ ィ ール ド か上記いずれかの種別の注釈を含んでいるページ を取 り 込み、
し か も その注釈か フ ィ ール ド に体裁ス ト リ ームがない場合。
resource/cmap/* PDF_load_font( ) と 暗黙的フ ォ ン ト 読み込みでいずれかのレ ガシー日中韓エ ン コ ー
デ ィ ング (CMap) を用いる場合。 なお、 こ れら のエ ン コ ーデ ィ ングは廃止済です
(118 ページ 「5.3.4 日本語 ・ 中国語 ・ 韓国語 CMap (廃止済)」 を参照)
1.3 構成の必要事項 19
1.4 PDFlib/PDFlib+PDI/PPS 10.0 の新機能
PDFlib/PDFlib+PDI/PPS 10.0 と Block Plugin 6 の最 も 重要な新機能 と 改良機能を以下概観 し
ます。 他に も 多 く の新機能があ り ますので、 詳 し く は表 1.2 と PDFlib API リ フ ァ レ ン ス を
参照 し て く だ さ い。
PDF 2.0 に対応 PDFlib は、 ISO 32000-2:2017 と 年月入 り 改訂版 ISO 32000-2:2020 に従っ
て PDF 2.0 に対応 し ま し た。 こ れに よ る 新機能は、 タ グ付 き PDF のための新たな構造エ
レ メ ン ト 種別 と ネ ス テ ィ ン グ規則や、 グ ラ フ ィ ッ ク 機能、 暗号化、 イ ン タ ラ ク テ ィ ブ要
素、 文書レベル と ページ レベルの出力 イ ン テ ン ト な ど多岐にわた り ます。 PDFlib+PDI と
PPS も PDF 2.0 文書を処理 し ます。 PDF 2.0 で廃止済 と さ れた機能は PDFlib で も 廃止ま た
は削除 し て あ り ます。
20 第 1 章 : は じ めに
PDF 出力の最適化 PDF の ICC プ ロ フ ァ イ ルな ど オブジ ェ ク ト を キ ャ ッ シ ュ し 、 重複を
検出す る よ う に し ま し た。 こ れに よ り 、 内容ス ト リ ームの演算子を減 ら す最適化 と も あい
ま っ て、 PDF の フ ァ イ ルサ イ ズがかな り 小 さ く な り ます。 10 GB を超え る 大 き な PDF 文
書を最適化 ・ 線形化 し つつ生成で き る よ う に し ま し た。
フ ォ ン ト 対応 と テキス ト 処理 カ ラ ーフ ォ ン ト 対応以外の改良点
> WOFF2 形式の フ ォ ン ト を使え る よ う に し ま し た。
> OpenType レ イ ア ウ ト 機能への対応を改良 し ま し た。
> Type 3 フ ォ ン ト の生成を改良 し ま し た。
PDFlib Personalization Server (PPS) と Block Plugin Acrobat 用 PDFlib Block Plugin につ
いて、 使いやす く す る さ ま ざ ま な改良を行い ま し た。 た と えば、 画面 と プ レ ビ ュ ーで見え
る ブ ロ ッ ク の数を フ ィ ル タ ーで一時的に減 ら せます。ブ ロ ッ ク を小刻みに動かすか大幅に
動かすかを簡単に切 り 替え ら れます。ブ ロ ッ ク のプ ロ パテ ィ を追加 し てオーバープ リ ン ト
設定な ど あ ら ゆ る グ ラ フ ィ ッ ク ス テー ト オプシ ョ ン に対応 さ せ ま し た。 構造エ レ メ ン ト
( タ グ) をブ ロ ッ ク プ ロ パテ ィ と し て利用で き 、 プ レ ビ ュ ーが PDF/UA の転写に対応 し て
い ます。
その他改良 さ ま ざ ま な領域の新機能 :
> Type 3 フ ォ ン ト 内に着色あ り のグ リ フ と な し のグ リ フ を混用可能。
> パ ス オブジ ェ ク ト に書式オプシ ョ ン を追加。
22 第 1 章 : は じ めに
1.5 廃止 ・ 削除 し た メ ソ ッ ド と オ プ シ ョ ン
PDFlib 9 や も っ と 前のバージ ョ ンでは、 数多 く の PDFlib の API メ ソ ッ ド を廃止済 と 宣言
し てお り ま し たが、 API メ ソ ッ ド を削除 し た こ と は こ れま で全 く な く 、 マ イ グ レーシ ョ ン
を考慮 し て残 し て あ り ま し た。 PDFlib 10 では、 PDFlib 9 ない し それ以前のバージ ョ ンで
廃止済 と 宣言 し ていた API メ ソ ッ ド をすべて削除 し ま し た。たいていの場合は単純に 1 対
1 の置き 換え をすれば よ い よ う に し て あ り ます。
同様に、 廃止済のオプシ ョ ン を削除 し て あ り ます。 たいていの場合は機能自体は残 し
て あ り 、 単純に移行先のオプシ ョ ンへ置 き 換えれば よ い よ う に し て あ り ます。
完全にな く し た機能 も あ り ます。 市場で需要がないか (一例 と し て参照 XObject)、 OPI
や Flash な ど PDF 2.0 で廃止済 と 宣言 さ れてい る こ と が理由です。
PDFlib 9 のアプ リ ケーシ ョ ンは、 も し 廃止済の機能を全 く 使用 し ていなければ、 修正
せずに PDFlib 10 で使用で き ます。 御自身のアプ リ ケーシ ョ ンが廃止済の機能を使用 し て
い る 場合には、 PDFlib Migration Guide を御一読下 さ い。 こ の文書には、 廃止 ・ 削除 さ れた
API メ ソ ッ ド と オプシ ョ ンの具体的な一覧 と 、 アプ リ ケーシ ョ ン コ ー ド を ど う 変更す る 必
要があ る かに関す る 説明があ り ます。
PDFlib Migration Guide では、PDFlib 10 へ移行す る 前に PDFlib 9 で廃止済の機能を特定
す る 方法 も 説明 し てい ます。
1.5 廃止 ・ 削除 し た メ ソ ッ ド と オプ シ ョ ン 23
1.6 PDFlib の機能
表 1.2 に挙げ る PDF 生成機能があ り ます。新たな機能 と 改良 し た機能には脚注を付 し てい
ます。 ただ し PDF 出力の改良 (フ ァ イ ルが小 さ く な っ たな ど) と プ ロ グ ラ ミ ン グ便利機
能については個別に挙げてい ません。
ユーザー定義 (Type 3) フ ォ ン ト によ る ビ ッ ト マ ッ プ ・ ロ ゴ ・ カ ラ ー フ ォ ン ト
フ ォ ン ト の埋め込み と サブ セ ッ ト 化
カ ーニ ン グによ る文字間隔の改善
異体字セ レ ク タ ー と 絵文字異体字シーケ ン ス 1
パス上テキス ト
柔軟なス タ ン プ メ ソ ッ ド
柔軟な画像貼 り 付け ・ 組版
24 第 1 章 : は じ めに
表 1.2 PDFlib の機能一覧
分類 機能
画像または画像の ク リ ッ ピ ングパスにテキス ト を回 り 込み
ページ遷移効果 (シ ェ ー ド ・ モザイ ク な ど)
リ ン ク ・ し お り ・ 文書を開 く ア ク シ ョ ンに名前付き移動先
ア ラ ビ ア語 ・ ヘブ ラ イ語な どの右書き用字系の双方向テキス ト 組版
SVG ベ ク ト ル SVG 形式のベ ク ト ル画像を取 り 込み。 SVG ・ CSS1 ・ ネ ッ ト ワー ク リ ソ ース 1 内の ICC プ ロ
グラ フ ィ ッ ク フ ァ イル、 CMYK ・ スポ ッ ト カ ラ ー
画像 BMP ・ GIF ・ PNG ・ TIFF ・ JBIG2 ・ JPEG ・ JPEG 2000 ・ CCITT ラ ス タ ー画像を読み込み
ユーザー定義スポ ッ ト カ ラ ー
テキス ト ・ 図形 ・ ラ ス タ ー画像のレ ン ダ リ ング イ ン テ ン ト
ア ク セシ ビ リ テ ィ ー タ グ付き PDF に よ る ア ク セシ ビ リ テ ィ ー
注釈 ・ フ ォ ーム フ ィ ール ド な ど イ ン タ ラ ク テ ィ ブ要素の タ グ付け 1
表 1 ・ ページ装飾の自動 タ グ付け
PDF/UA-1 に よ るユニバーサルア ク セシ ビ リ テ ィ ー
ベク ト ル 一般的な基本ベ ク ト ルグ ラ フ ィ ッ ク 要素 1 : 線 ・ 曲線 ・ 円弧 ・ 楕円 ・ 長方形な ど
グラ フ ィ ッ ク
透過 (不透明) ・ ブ レ ン ド モー ド
注釈 ・ フ ォ ーム フ ィ ール ド を レ イ ヤー上に配置可
セキ ュ リ テ ィ ー PDF 文書または添付を暗号化
Unicode パスワー ド
ユーザー定義のカ ス タ ム XMP メ タ デー タ
26 第 1 章 : は じ めに
表 1.2 PDFlib の機能一覧
分類 機能
プ ログ ラ ミ ング C ・ C++ ・ Java ・ .NET ・ Objective-C ・ Perl ・ PHP ・ Python ・ RPG ・ Ruby の言語バイ ンデ ィ ン
グ1
1
イ ン タ ーネ ッ ト か ら コ ン テ ン ツ を ダウ ン ロー ド するヘルパー メ ソ ッ ド
取 り 込んだ フ ォ ーム フ ィ ール ド に流 し 込み 1
暗号化文書を取 り 込み
複数の取 り 込まれた PDF 文書にわた る冗長なオブ ジ ェ ク ト (同一フ ォ ン ト な ど) を削除
1. PDFlib+PDI 10 の新機能
28 第 1 章 : は じ めに
1.8 PPS と Block Plugin の追加的機能
PDFlib Personalization Server (PPS) でのみ、 表 1.2 に示 し た基本的な PDF 生成機能 と 、 表
1.3 に示 し た PDF 取 り 込み機能に加えて、 表 1.4 に挙げ る 機能 も 利用可能です。
取 り 込まれた文書から PDFlib ブ ロ ッ ク を コ ピー
PDFlib Block Plugin PDFlib Block Plugin で、 Windows ・ macOS 版 Acrobat 上で PDFlib ブ ロ ッ ク を対話的に作成
ブ ロ ッ ク を プ レ ビ ュ ー フ ァ イルへコ ピー
ブ ロ ッ クの内容に タ グ付け 1
表 1.5 製品別機能一覧
PDFlib+PDI
PDFlib
PPS
機能 API メ ソ ッ ド ・ オプ シ ョ ン
基本的な PDF 生成 以下に挙げる もの以外すべて ○ ○ ○
1
線形化 (Web 最適化) PDF PDF_begin_document( ) の linearize オプ シ ョ ン ○ ○ ○
ブ ロ ッ ク に可変デー タ を流 し 込み PDF_fill_*block( ) ― ― ○
ブ ロ ッ ク を プ ログ ラ ム的に作成 PDF_poca_new( ) : オプ シ ョ ン usage=blocks ― ― ○
PDF_begin/end_page_ext( ) : オプション blocks
ブ ロ ッ ク を生成出力へ コ ピー PDF_process_pdi( ) : オプ シ ョ ン ― ― ○
action=copyblock ま たは action=copyallblocks
30 第 1 章 : は じ めに
2 PDFlib の言語バイ ンデ ィ ング
注 すべての PDFlib パ ッ ケージに入 っ てい る ス タ ー タ ーサン プルに目を通す こ と を強 く 推奨
し ます。 ア プ リ ケーシ ョ ン開発の出発点 と し て有用であ り 、 PDFlib プ ログ ラ ミ ングの重要
な点を多数網羅 し ています。
2.1 C バ イ ン デ ィ ン グ
PDFlib は、C 言語にい く つかの C++ モジ ュ ールを加えた も ので書かれてい ます。PDFlib の
C バ イ ンデ ィ ン グ を利用す る には、 静的ま たは共有 ラ イ ブ ラ リ ー (Windows ・ MVS 上の
DLL) を使 う こ と がで き 、 中心 と な る PDFlib イ ン ク ルー ド フ ァ イ ル pdflib.h を PDFlib の
ク ラ イ ア ン ト の ソ ー ス モ ジ ュ ー ル に イ ン ク ル ー ド す る 必要 が あ り ま す。 あ る い は、
pdflibdl.h を用いて PDFlib DLL を実行時に動的に読み込ませる こ と も で き ます (詳 し く は
次項参照)。
/* 新規PDFlibオブジェクトを作成 */
if ((p = PDF_new()) == (PDF *) 0)
{
printf("PDFlibオブジェクトを作成できませんでした(メモリー不足)\n");
return(2);
}
PDF_TRY(p)
{
...PDFlib命令群...
}
PDF_CATCH(p)
{
printf("PDFlib例外が発生しました:\n");
printf("[%d] %s: %s\n",
PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
PDF_delete(p);
return(2);
}
PDF_delete(p);
2.1 C バイ ンデ ィ ング 31
PDF_TRY/PDF_CATCH は ト リ ッ キーなプ リ プ ロ セ ッ サーマ ク ロ と し て実装 さ れてい ます。こ
の う ちのど ち ら か を う っか り 入れ忘れ る と 、 コ ンパ イ ラ ーか ら 出る エ ラ ー メ ッ セージは原
因理解が困難な も のにな っ て し ま う 可能性があ り ます。マ ク ロ は上記 と 正確に同 じ よ う に
用い る よ う に し て く だ さ い。TRY 節 と CATCH 節の間には一切コ ー ド を入れてはいけ ません
(PDF_CATCH( ) 以外)。
catch 節の重要な仕事は、PDF_delete( ) と PDFlib オブジ ェ ク ト へのポ イ ン タ ー と を用い
て PDFlib の内部構造を解放す る こ と です。PDF_delete( ) は必要に応 じ て出力フ ァ イ ル も 閉
じ ます。 例外の後は PDF 文書は使用不能であ り 、 不完全 ・ 不整合な状態で取 り 残 さ れま
す。 も ち ろん、 例外発生時に ど の よ う な動作を さ せる のが適切かはアプ リ ケーシ ョ ンに依
存 し ます。
C と C++ の ク ラ イ ア ン ト で例外を キ ャ ッ チ し ない場合、 例外発生時のデフ ォ ル ト 動作
は、 適切な メ ッ セージ を標準エ ラ ー出力な ど に出力 し て抜け る と い う も のです。 PDF 出力
フ ァ イ ルは未完成の状態で残 さ れ ます! こ れは ラ イ ブ ラ リ ーのルーチン と し て適切では
あ り ませんので、 エ ラ ー処理が重要な アプ リ ケーシ ョ ンでは PDFlib の例外処理機能を活
用する こ と を強 く 推奨 し ます。 ユーザー定義の catch 節ではた と えば、 エ ラ ー メ ッ セージ
を GUI ダ イ ア ロ グボ ッ ク ス に表示 し 、 停止以外の措置を と る こ と がで き る で し ょ う 。
PDF_TRY(p) /* 内側のtryブロック */
{
/* ... */
}
PDF_CATCH(p) /* 内側のcatchブロック */
{
/* エラーをクリーンアップ */
PDF_RETHROW(p);
}
/* ... */
}
PDF_CATCH(p) /* 外側のcatchブロック */
{
/* さらにエラーをクリーンアップ */
32 第 2 章 : PDFlib の言語バイ ンデ ィ ング
PDF_delete(p);
}
if (error_condition)
{
PDF_EXIT_TRY(p);
return -1;
}
}
PDF_CATCH(p)
{
/* エラーをクリーンアップ */
PDF_RETHROW(p);
}
2.1 C バイ ンデ ィ ング 33
C で Unicode 文字列 文字列を初期化す る には以下の方法があ り ます :
> 対応す る サ ロ ゲー ト ペア(UTF-16 符号単位が 2 つ)を 4 バ イ ト と し て ビ ッ グエンデ ィ ア
ンのバ イ ト 順序で与え る :
PDF_fit_textline(p, "\x3C\xD8\xCF\xDC", 4, 100, 100,
"fontname=EmojiOneColor textformat=utf16be fontsize=50");
> PDFlib 文字参照 (122 ページ 「5.4.2 文字参照」 を参照) は、 開発環境か ら 独立であ り 、
以下の よ う に charref オプシ ョ ン を用いて有効化で き ます :
PDF_fit_textline(p, "🃏", 0,
100, 100, "charref=true fontname=EmojiOneColor fontsize=50");
34 第 2 章 : PDFlib の言語バイ ンデ ィ ング
2.2 C++ バ イ ン デ ィ ン グ
C++ のためのオブジ ェ ク ト 指向な ラ ッ パーを PDFlib ク ラ イ ア ン ト か ら 利用可能です。 こ
れは pdflib.hpp ヘ ッ ダーフ ァ イ ルを必要 と し てお り 、 ま た こ の フ ァ イ ルは pdflib.h を イ ン
ク ルー ド し てい ます。 テ ンプ レー ト 駆動な PDFlib イ ン タ ーフ ェ イ ス は、 PDFlib と デー タ
をや り 取 り す る ための文字列型を複数サポー ト し てい ます。
2.2 C++ バイ ンデ ィ ング 35
string に基づ く オ プ シ ョ ナルな UTF-8 イ ン タ ー フ ェ イ ス C++ のすべてのバージ ョ ンが
std::string 型をサポー ト し てい ます。 こ の イ ン タ ーフ ェ イ ス を有効化する には、 pdflib.hpp
を イ ン ク ルー ド す る 前に、PDFLIB_CPP_STRING マ ク ロ を設定 し ます。u8string イ ン タ ーフ ェ
イ ス と 異な り 、 こ の文字列型には UTF-8 コ ンパ イ ラ ーサポー ト があ り ません。 UTF-8 列
を持つ文字列を適切に作成 ・ 解釈す る のは ク ラ イ ア ン ト コ ー ド 側の役割です。
こ の UTF-8 ベース の std::string イ ン タ ーフ ェ イ ス の使用例を hello_string サンプルで示
し てい ます。
36 第 2 章 : PDFlib の言語バイ ンデ ィ ング
2.3 Java バ イ ン デ ィ ン グ
PDFlib Java 版を イ ン ス ト ール PDFlibバ イ ンデ ィ ン グが動作す る には、Java VMが、PDFlib
Java ラ ッ パー と PDFlib Java パ ッ ケージ を利用で き る よ う にする 必要があ り ます。 PDFlib
は以下のパ ッ ケージ名を持つ Java パ ッ ケージ と し て ま と め ら れてい ます :
com.pdflib.pdflib
こ のプ ロ パテ ィ の値をチ ェ ッ ク す る には以下の よ う に し ます :
System.out.println(System.getProperty("java.library.path"));
} catch (PDFlibException e) {
System.err.println("PDFlib例外が発生しました:");
System.err.println("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.get_errmsg());
} catch (Exception e) {
System.err.println(e);
} finally {
if (p != null) {
p.delete(); /* PDFlibオブジェクトを削除 */
}
}
2.3 Java バイ ンデ ィ ング 37
PDFlib は適切な throws 節を宣言 し ますので、 ク ラ イ ア ン ト の コ ー ド では、 起 こ り う る す
べての PDFlib 例外を キ ャ ッ チす る か、 それ ら を自分で宣言 し なければな り ません。
38 第 2 章 : PDFlib の言語バイ ンデ ィ ング
2.4 .NET バ イ ン デ ィ ン グ
注 こ の .NET バイ ンデ ィ ングは、対応 し てい るすべてのプ ラ ッ ト フ ォ ームのための汎用のパ ッ
ケージ と し て提供 さ れます。 ただ し 、 それで も、 プ ラ ッ ト フ ォ ームご と の ラ イ セ ン スキー
が必要であ り 、 こ のラ イ セ ン ス を他のプ ラ ッ ト フ ォ ームへ転用する こ と はで き ません。
.NET 対応 .NET Standard 2.0 以上。 例 : .NET Core 2/3, ・ .NET 5/6
バージ ョ ニ ング方式 バージ ョ ニ ング方式は .NET の規則に準拠。 .NET バージ ョ ン番号は、 NuGet
キ ャ ッ シ ュや .csproj プ ロ ジ ェ ク ト フ ァ イルの中で見る こ と がで き ます。 こ
れは製品の メ ジ ャ ー と マ イ ナーの リ リ ース番号 と は異な っ ています。 両方の
バージ ョ ニ ング方式の間のマ ッ ピ ン グは compatibility.txt にあ り ます。
2.4 .NET バイ ンデ ィ ング 39
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
> ( こ の ス テ ッ プ は、 提 供 し て い る サ ン プ ル 群 で は 必 要 あ り ま せ ん。 ロ ー カ ル の
NuGet.Config フ ァ イ ルを用いてパ ッ ケージ を参照 し てい る か ら です) NuGet パ ッ ケー
ジ を、 アプ リ ケーシ ョ ンのプ ロ ジ ェ ク ト デ ィ レ ク ト リ ーへ複製 し ます :
<installdir>/bind/dotnet/PDFlib_dotnet.X.Y.Z.nupkg
40 第 2 章 : PDFlib の言語バイ ンデ ィ ング
.NET におけ る エ ラ ー処理 .NET バ イ ンデ ィ ン グは .NET の例外に対応 し てお り 、 実行時
に問題が発生す る と 、 詳細なエ ラ ー メ ッ セージ を持っ た例外を発生 さ せます。 こ う し た例
外を キ ャ ッ チ し て適切に対処す る のは ク ラ イ ア ン ト 側の役目です。 そ う し ない場合、.NET
Framework が例外を キ ャ ッ チ し て、 たいていはアプ リ ケーシ ョ ン を停止 さ せます。
PDFlib は、 例外関連情報 を 伝 え る た め に、 メ ン バー get_errnum ・ get_errmsg ・ get_
apiname を持つ自前の例外 ク ラ ス PDFlib_dotnet.PDFlibException を定義 し てい ます。PDFlib
は IDisposable イ ン タ ーフ ェ イ ス を実装 し てい る ので、 ク ラ イ ア ン ト は Dispose( ) メ ソ ッ ド
を呼び出 し て ク リ ーン ア ッ プが可能です。
ク ラ イ ア ン ト コ ー ド では、 PDFlib が発生 さ せ る .NET の例外を、 通常の try ~ catch 構
造を用いて処理で き ます :
try {
p = new PDFlib();
...PDFlib命令群...
catch (PDFlibException e) {
// pdflibが投げた例外をキャッチした
Console.WriteLine("PDFlib例外が発生しました:\n");
Console.WriteLine("[{0}] {1}: {2}\n",
e.get_errnum(), e.get_apiname(), e.get_errmsg());
} finally {
if (p != null) {
p.Dispose();
}
}
2.4 .NET バイ ンデ ィ ング 41
2.5 Objective-C バ イ ン デ ィ ン グ
C ・ C++ 言語バ イ ンデ ィ ン グ を Objective-C で使 う こ と も で き ますが、 Objective-C 用の真
正な言語バ イ ンデ ィ ン グ も あ り ます。 こ の PDFlib フ レーム ワ ー ク は、 macOS で使え る も
の と iOS で使え る も のがあ り ます。
こ れ ら の フ レーム ワー ク は C ・ C++ ・ Objective-C 用の言語バ イ ンデ ィ ン グ を含んでい
ます。
42 第 2 章 : PDFlib の言語バイ ンデ ィ ング
PDFlib p = NULL;
@try {
PDFlib *pdflib = [[PDFlib alloc] init];
...PDFlib命令群...
}
@catch (PDFlibException *ex) {
NSLog(@"Error %ld in %@(): %@\n",
[ex get_errnum], [ex get_apiname], [ex get_errmsg]);
}
@catch (NSException *ex) {
NSLog(@"%@: %@", [ex name], [ex reason]);
}
@finally {
if (pdflib)
[pdflib release];
}
2.5 Objective-C バイ ンデ ィ ング 43
2.6 Perl バ イ ン デ ィ ン グ
Perl 用 PDFlib ラ ッ パーは、 C ラ ッ パーフ ァ イ ル 1 個 と Perl パ ッ ケージモジ ュ ール 2 個で
構成 さ れてい ます。 こ のモジ ュ ールの う ち 1 個は各 PDFlib API メ ソ ッ ド の Perl 版を提供
し 、 も う 1 個は PDFlib オブジ ェ ク ト のための も のです。 C モジ ュ ールは、 Perl イ ン タ プ リ
タ ーが実行時に読み込む共有 ラ イ ブ ラ リ ーを ビル ド する ために使われます。 こ の処理には
Perl パ ッ ケージモジ ュ ール も 使用 さ れます。 Perl ス ク リ プ ト では use ス テー ト メ ン ト で共
有 ラ イ ブ ラ リ ーモジ ュ ールを参照 し ます。
上記 コ マ ン ド の一般的な出力は次の よ う にな り ます。
C:\Program Files\Perl5.32\site\lib
44 第 2 章 : PDFlib の言語バイ ンデ ィ ング
Perl で Unicode 文字列 文字列を初期化す る には以下の方法があ り ます :
> Unicode コ ー ド 点を 16 進値 と し て与え る (サ ロ ゲー ト ペアには対応 し てい ません) :
$unistring="\x{1F0CF}";
2.6 Perl バイ ンデ ィ ング 45
2.7 PHP バ イ ン デ ィ ン グ
PDFlib PHP 版を イ ン ス ト ール PDFlib を PHP で使 う 際の さ ま ざ ま な方式やオプシ ョ ンに
関す る 詳細な情報は、 PDFlib-in-PHP-HowTo.pdf 文書に記載 し て あ り ます。 こ の文書はデ ィ
ス ト リ ビ ュ ーシ ョ ンパ ッ ケージに含まれてお り 、 ま た、 PDFlib ウ ェ ブサ イ ト に も 掲載 し て
あ り ます。
PDFlib ラ イ ブ ラ リ ーについて PHP が認識す る よ う PHP を構成する 必要があ り ます。
php.ini に以下の行を追加 し て く だ さ い :
extension=php_pdflib
46 第 2 章 : PDFlib の言語バイ ンデ ィ ング
try {
$p = new PDFlib();
...PDFlib命令群...
Eclipse と Zend Studio を用いて開発 PHP Development Tools (PDT) は Eclipse と Zend
Studio に よ る PHP 開発に対応 し てい ます。 PDT は、 以下に示す手順で、 状況依存ヘルプ
に対応す る よ う 設定す る こ と がで き ます。
PDFlib を Eclipse 設定に追加 し て、すべての PHP プ ロ ジ ェ ク ト に知 ら れ る よ う に し ます:
> 「Window」 → 「Preferences」 → 「PHP」 → 「Source Paths」 → 「PHP Libraries」 → 「New...」
を選択 し て ウ ィ ザー ド を起動 し ます。
> 「User library name」 に PDFlib と 入力 し 、 「Add External folder...」 を ク リ ッ ク し て フ ォ ル
ダー bind\php\Eclipse PDT を選びます。
2.7 PHP バイ ンデ ィ ング 47
2.8 Python バ イ ン デ ィ ン グ
PDFlib Python 版を イ ン ス ト ール Pythonの拡張機構は共有 ラ イ ブ ラ リ ーを実行時に読み
込む こ と に よ っ て動作 し ます。 PDFlib バ イ ンデ ィ ン グ を動作 さ せる には、 以下の よ う に、
Python イ ン タ プ リ タ ーが Python 用 PDFlib ラ イ ブ ラ リ ーを利用で き る よ う にする 必要があ
り ます。 こ の ラ ッ パーは、 PYTHONPATH 環境変数に列挙 さ れたデ ィ レ ク ト リ ー内で検索
さ れます。 Python ラ ッ パーの名前はプ ラ ッ ト フ ォームに よ っ て異な り ます :
> Unix ・ macOS : pdflib_py.so
> Windows : pdflib_py.pyd
PDFlib ラ イ ブ ラ リ ーのほかに、以下の フ ァ イ ル も ラ イ ブ ラ リ ー と 同 じ デ ィ レ ク ト リ ーに入
れてお く 必要があ り ます :
> PDFlib/PDFlib.py
> PDFlib/__init__.py (Python 2.7 の場合のみ)
...PDFlib命令群...
except PDFlibException:
print("PDFlib例外が発生しました:
print("[%d] %s: %s" % (ex.errnum, ex.apiname, ex.errmsg))
except Exception:
print(ex)
finally:
if p:
p.delete()
48 第 2 章 : PDFlib の言語バイ ンデ ィ ング
2.9 RPG バ イ ン デ ィ ン グ
PDFlib は、 PDFlib 関数を埋め込まれた ILE-RPG プ ロ グ ラ ム を コ ンパ イ ルす る ために必要
なすべてのプ ロ ト タ イ プ と い く つかの有用な定数 と を定義 し た /copy モジ ュ ールを提供 し
てい ます。
PDFlib ソ ース フ ァ イ ル ラ イ ブ ラ リ ーが ラ イ ブ ラ リ ー リ ス ト の先頭にない場合は、その ラ イ
ブ ラ リ ー も 指定 し なければな り ません :
d/copy PDFsrclib/QRPGLESRC,PDFLIB
2.9 RPG バイ ンデ ィ ング 49
ADDLIBLE LIB(PDFLIB)
CRTBNDRPG PGM(PDFLIB/HELLO) SRCFILE(PDFLIB/QRPGLESRC) SRCMBR(*PGM) DFTACTGRP(*NO)
BNDDIR(PDFLIB/PDFLIB)
バイ ナ リ ーデー タ data
型
50 第 2 章 : PDFlib の言語バイ ンデ ィ ング
2.10 Ruby バ イ ン デ ィ ン グ
PDFlib Ruby 版を イ ン ス ト ール Ruby の拡張機構、共有 ラ イ ブ ラ リ ーを動作時に読み込む
こ と に よ っ て動作 し ます。 PDFlib バ イ ンデ ィ ン グが動作する には、 Ruby 用の PDFlib 拡張
ラ イ ブ ラ リ ーの場所を Ruby イ ン タ プ リ タ ーが知っ ていて利用で き る 必要があ り ます。 た
い て いの場合、 こ の ラ イ ブ ラ リ ー (Windows ・ Unix の場合 : PDFlib.so。 macOS の場合 :
PDFlib.bundle) が イ ン ス ト ール さ れ る 場所は、 ロ ーカル ruby イ ン ス ト ールデ ィ レ ク ト リ ー
の site_ruby ブ ラ ンチの中であ り 、 すなわち、 次の よ う な名前のデ ィ レ ク ト リ ーの中に イ
ン ス ト ール さ れます :
/usr/local/lib/ruby/site_ruby/<バージョン>/
2.10 Ruby バイ ンデ ィ ング 51
Ruby on Rails Ruby on Rails は、 Ruby に よ る Web 開発を実現する オープン ソ ース フ レー
ム ワ ー ク です。Ruby 用 PDFlib 拡張は Ruby on Rails で利用可能です。Ruby on Rails 用 PDFlib
作成例を実行す る には以下の手順に従っ て く だ さ い :
> Ruby と Ruby on Rails を イ ン ス ト ール。
> コ マ ン ド ラ イ ンか ら 新規 コ ン ト ロ ー ラ ーを セ ッ ト ア ッ プ :
$ rails new pdflibdemo
$ cd pdflibdemo
$ cp <PDFlibディレクトリー >/bind/ruby/<バージョン>/PDFlib.so vendor/ # .so/.dll/.bundleを使
用
$ rails generate controller home demo
$ rm public/index.html
52 第 2 章 : PDFlib の言語バイ ンデ ィ ング
2.10 Ruby バイ ンデ ィ ング 53
54 第 2 章 : PDFlib の言語バイ ンデ ィ ング
3 PDF 文書を作成
3.1 PDFlib プ ロ グ ラ ミ ン グの一般的特徴
ク ッ ク ブ ッ ク プ ログ ラ ミ ングの一般的な諸側面に関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの
general カ テ ゴ リ ーにあ り ます。
3.1.1 例外処理
あ る 種のエ ラ ーは、 多 く の言語で例外 と 呼ばれてい ます。 こ の呼び方は理にかな っ てい ま
す。 そ う し たエ ラ ーは ま さ に例外であ っ て、 プ ロ グ ラ ムの動作中にそんなに頻繁には起 こ
ら ないだろ う と 予想 さ れ る 類の も のだか ら です。 一般に採 ら れ る 方針 と し ては、 エ ラ ーが
頻繁に起 き そ う な呼び出 し については従来型のエ ラ ー伝達方式 (すなわち、 -1 な ど特殊
な戻 り 値でエ ラ ーを示す) を用い る けれど も 、 まれに し か起 こ ら ないエ ラ ーで、 こ んな特
例に ま で場合分け を増や し て コ ー ド をやや こ し く す る の も ど う か と 思われ る よ う な場合
については例外方式を用い る 、 と い う のが普通です。 PDFlib のや り 方 も ま さ に こ れ と 同 じ
です : た と えば、 かな り の頻度でエ ラ ーが起 き そ う な操作 と し ては :
> 出力フ ァ イ ルを、 権限がないのに開 こ う と す る
> PDF を読み込みたい と き 、 間違っ た フ ァ イ ル名で開 こ う と す る
> 画像フ ァ イ ルが壊れてい る のに開 こ う と す る
56 第 3 章 : PDF 文書を作成
ではな く 、状況の説明が ロ グ記録 さ れます( ロ グ記録機能について さ ら に詳 し く は 57 ペー
ジ 「3.1.2 ロ グ記録」 を参照)。 警告に関 し ては以下のアプ ロ ーチを推奨 し ます :
> 開発局面では警告の ロ グ記録を有効に し て、 その ロ グ フ ァ イ ル内のすべての警告 メ ッ
セージ を注意深 く 研究 し ます。 こ う し た警告は、 コ ー ド やデー タ にひそむ問題を示 し
てい る 可能性があ り ますか ら 、 その原因を理解ない し 除去す る よ う 努めなければな り
ません。
> 運用局面では警告の ロ グ記録を無効に し て、 問題が起 き た と き だけ再び有効に し ます。
3.1.2 ロ グ記録
PDFlib は、 以下の項目を記録す る ロ グ フ ァ イ ルを生成で き ます :
> すべての API 呼び出 し 、お よ びその引数群 と オプシ ョ ン群。 なお、PDFlib 言語 ラ ッ パー
に よ っ て発 さ れた さ ら な る API 呼び出 し も ロ グ記録に含まれ る 場合があ り ます (文字
列変換のためな ど)。
> API メ ソ ッ ド に よ っ て返 さ れた戻 り 値 と ハン ド ル。
> 各呼び出 し に対す る タ イ ム ス タ ンプ。
> 廃止済の API メ ソ ッ ド ・ オプシ ョ ンの使用に関す る 情報。
> 例外を発生 さ せ る ほ ど ではないが、 アプ リ ケーシ ョ ンの開発フ ェ ーズの間に調べ る べ
き 警告 メ ッ セージ。
> サポー ト ケース の調査に有用であ り う る 内部動作に関す る 詳細。
PDF_end_document(p_0x2201c20, "")
[Full product name: "PDFlib Personalization Server"]
[Document ID: <C98301CB2D4EAC2972D34CAAAE929021> <C98301CB2D4EAC2972D34CAAAE929021>]
[Size of document: 34842 bytes]
[End document #1]
58 第 3 章 : PDF 文書を作成
> メ モ リ ー使用を最小にす る : API 呼び出 し で仮想フ ァ イ ル名を用いた ら 、 その直後に
PDF_delete_pvf( ) を呼ぶのが よ いで し ょ う 。 そ し て、 PDF_end_document( ) の後に ま た
PDF_delete_pvf( ) を呼ぶ こ と を推奨 し ます。こ の 2 度目の呼び出 し が ど う し て必要か と
い う と 、 最初の呼び出 し の時点では ま だ PDFlib か ら デー タ へア ク セ ス が必要だっ たか
も し れず、 その よ う な場合はその時点では仮想フ ァ イ ルの ロ ッ ク 解除が拒否 さ れて し
ま っ てい る ためです。 し か し 、 最初の呼び出 し ですでにデー タ が解放で き てい る 場合
も あ る わけで、 その よ う な場合で も 2 度目の呼び出 し は何 も 害にはな り ません。 ク ラ
イ ア ン ト が フ ァ イ ルの内容を解放で き る のは PDF_delete_pvf( ) が成功 し た時だけなの
です。
> 仮想フ ァ イ ルを再利用 し て速度を向上 さ せ る : ク ラ イ ア ン ト に よ っ ては、 同 じ デー タ
(た と えばフ ォ ン ト 定義) を複数の出力文書に対 し て使い ま わ し たい こ と も あ る で し ょ
う 。 その よ う な場合には、 同 じ フ ァ イ ル内容に対 し て何度 も 作成 ・ 削除を繰 り 返すの
は賢明ではあ り ません。 その仮想フ ァ イ ルを使っ てほかに も ま だ PDF 出力文書を生成
し たい う ちは、 PDF_delete_pvf( ) は呼び出 さ ないでお く のが よ いで し ょ う 。
> 手抜 き プ ロ グ ラ ミ ン グ : メ モ リ ー使用量が気にな ら なければ、 ク ラ イ ア ン ト が PDF_
delete_pvf( ) を全然呼ばない よ う に し て も か ま い ま せん。 こ の場合 PDFlib は、 PDF_
delete( ) が呼ばれた時点で、すべての開かれた ま ま の仮想フ ァ イ ルを内部的に削除 し ま
す。
UPR フ ァ イ ルは以下の部分か ら 成っ てい ます :
> フ ァ イ ルの種類を示すおま じ ない行。 次の形を と り ます :
PS-Resources-1.0
60 第 3 章 : PDF 文書を作成
> フ ァ イ ル中で記述 さ れ る すべての リ ソ ース カ テ ゴ リ ーを一覧に し たセ ク シ ョ ン。 省略
可能です。 各行に 1 つずつ リ ソ ース カ テ ゴ リ ーを記述 し ます。 こ の一覧は、 ピ リ オ ド
1 個だけの行に よ っ て終了 し ます。利用可能な リ ソ ース カ テ ゴ リ ーについては後述 し ま
す。 こ の省略可能なセ ク シ ョ ンが存在 し ない場合であ っ て も 、1 個の ピ リ オ ド キ ャ ラ ク
タ ーは存在す る 必要があ り ます。
> フ ァ イ ルのは じ めに挙げ ら れた リ ソ ース カ テ ゴ リ ーそれぞれについてセ ク シ ョ ンが 1
つずつ。 各セ ク シ ョ ンは、 リ ソ ース カ テ ゴ リ ーを示す 1 行で始ま り 、 その後に、 利用
可能な リ ソ ース を記述す る 行が任意の行数つづ き ます。 こ の一覧は、 ピ リ オ ド 1 個だ
けの行に よ っ て終了 し ます。 各 リ ソ ースデー タ 行には リ ソ ース の名前を書 き ます (等
号は ク ォ ー ト す る 必要があ り ます) 。 その リ ソ ース が フ ァ イ ル名を必要 と す る 場合に
は、 等号の後に こ の名前を付け加え る 必要があ り ます。 リ ソ ース エ ン ト リ ーに列挙 さ
れた フ ァ イ ルを PDFlib が さ がす時には SearchPath (以下を参照) が適用 さ れます。
デ フ ォ ル ト フ ァ イ ル名 と ラ イ セ ン ス フ ァ イ ル ・ リ ソ ース フ ァ イ ル デフ ォ ル ト では、 以
下のフ ァ イ ル名が、 デフ ォ ル ト 検索パスデ ィ レ ク ト リ ー群の中で検索 さ れます :
licensekeys.txt (ライセンスファイル。MVSの場合: license)
pdflib.upr (リソースファイル。MVSの場合: upr)
62 第 3 章 : PDF 文書を作成
索 さ れます。 UPR フ ァ イ ルを検索 し て読み取 る 前に、 以下のデ ィ レ ク ト リ ーが検索 さ
れます ( こ の順に) :
<rootpath>/PDFlib/PDFlib/10.0/resource/icc
<rootpath>/PDFlib/PDFlib/10.0/resource/fonts
<rootpath>/PDFlib/PDFlib/10.0/resource/cmap
<rootpath>/PDFlib/PDFlib/10.0
<rootpath>/PDFlib/PDFlib
<rootpath>/PDFlib
buf = p.get_buffer();
... バッファー内のPDFデータを利用 ...
p.delete();
64 第 3 章 : PDF 文書を作成
こ れは 「能動」 モー ド と 捉え ら れます。 なぜな ら 、 バ ッ フ ァ ー内容をいつ取 り 出 し たいか
を ク ラ イ ア ン ト 側で決めてい る か ら です。能動モー ド はすべての対応言語バ イ ンデ ィ ン グ
で利用可能です。
3.1.8 マルチ ス レ ッ ド プ ロ グ ラ ミ ン グ
PDFlib その も のはシ ン グルス レ ッ ド ですが、マルチ ス レ ッ ド アプ リ ケーシ ョ ンで安全に使
用する こ と がで き ます。1 つの PDFlib オブジ ェ ク ト が 1 つの ス レ ッ ド 内でのみ使用 さ れ る
と い う よ く あ る 状況においては、マルチ ス レ ッ デ ィ ン グに関する 特別な注意は一切必要あ
り ません。 同一のオブジ ェ ク ト が複数の ス レ ッ ド で使用 さ れ る 場合には、 その PDFlib オ
ブジ ェ ク ト が複数の ス レ ッ ド に よ っ て同時にア ク セ ス さ れ る こ と のない よ う 、アプ リ ケー
シ ョ ンはそれ ら の ス レ ッ ド を同期 さ せ る 必要があ り ます。 典型的なシナ リ オは PDFlib オ
ブジ ェ ク ト 群のプールを利用する も ので、 そ こ では各ス レ ッ ド が、 新規 PDFlib オブジ ェ
ク ト を作成す る のではな く 、 既存の PDFlib オブジ ェ ク ト を 1 つ取 り 出 し て、 そ し て文書
を作成 し た後に、 そのオブジ ェ ク ト が も う 必要ない場合には、 それを プールへ返 し ます。
同一の PDFlib オブジ ェ ク ト を、 その出力文書が完了する 前に別の ス レ ッ ド で使用する こ
と は、 いかな る 利点を も 与え る こ と はめ っ たにな く 、 推奨 さ れません。
66 第 3 章 : PDF 文書を作成
PDFlib を利用すれば、 ASCII ベース の PDF オペレー タ ー と EBCDIC の (ま たはそれ以外
の) テ キ ス ト 出力 と を混ぜ る こ と がで き ます。 こ う し た EBCDIC セーフ なバージ ョ ンの
PDFlib は、さ ま ざ ま なオペレーテ ィ ン グ シ ス テ ムやマシ ン アーキ テ ク チ ャ ーで利用可能で
す。
PDFlib の さ ま ざ ま な機能を EBCDIC ベース のプ ラ ッ ト フ ォームで活用す る ためには、
以下のア イ テ ムは EBCDIC テ キ ス ト 形式で与え ら れ る こ と が期待 さ れます( よ り 具体的に
は、 IBM System i では コ ー ド ページ 037 で、 IBM Z では コ ー ド ページ 1047 で) :
> UPR 構成フ ァ イ ル
> エン コ ーデ ィ ン グ フ ァ イ ル ・ コ ー ド ページ フ ァ イ ル
> PDFlib 関数の文字列引数
> 入出力フ ァ イ ル名
> 環境変数 (実行環境が対応 し てい る 場合)
> PDFlib のエ ラ ー メ ッ セージ も EBCDIC 形式で生成 さ れます (Java 以外)。
68 第 3 章 : PDF 文書を作成
座標を視覚化 PDFlib のユーザーが PDF の座標系を扱 う のを支援する ために、 PDFlib の
デ ィ ス ト リ ビ ュ ーシ ョ ンには grid.pdf と い う PDF フ ァ イ ルが含まれてい ます。 こ の PDF
フ ァ イ ルは、 よ く 使われ る い く つかのページ寸法の座標を視覚化す る も のです。 望みの寸
法のページ を何か透明な も のに印刷すれば、PDFlib での開発のために有用な道具にな る か
も し れません。
Acrobat DC でページ座標を視覚化す る には以下の と お り 操作 し ます :
> カー ソ ル座標を表示す る には以下を用い ます :
「表示」 → 「表示切 り 替え」 → 「カ ー ソ ル座標」
> 座標は、Acrobat で現在選択 さ れてい る 単位で表示 さ れます。表示単位を変更す る には、
次の と お り 操作 し ます : 「編集」 → 「環境設定」 (→ 「一般 ...」) → 「単位 と ガ イ ド 」 を
選択 し て、 ポ イ ン ト ・ イ ンチ ・ ミ リ ・ パ イ カ ・ セ ンチ メ ー ト ルの う ちのいずれか を選
びます。
3.2 ページ記述 69
下向 き 座標が簡単に利用で き る よ う にす る ため、 PDFlib では、 あ る 特殊なモー ド に対
応 し てい ます。 こ のモー ド では、 すべての関連する 座標に対 し てそれぞれ異な る 解釈が適
用 さ れます。 こ の topdown 機能は、 PDFlib ユーザーが下向き 座標系でご く 自然に作業が
行え る よ う にす る ために設け ら れてい ます。 具体的には、 ページの左下隅に原点 (0, 0) が
あ っ て y 座標が上向 き に増加す る デフ ォ ル ト PDF 座標系を扱 う のではな く 、 ページの左
上隅に原点があ っ て y 座標が下向 き に増加する 修正座標系を用い ます。ページで こ の下向
き 座標系を利用す る には、 PDF_begin_page_ext( ) で topdown オプシ ョ ン を指定 し ます :
p.begin_page_ext(595.0, 842.0, "topdown");
3.2.2 ページ寸法
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルがク ッ ク ブ ッ ク の pagination/page_sizes ト ピ ッ ク にあ り ます。
70 第 3 章 : PDF 文書を作成
表 3.2 Acrobat の最小 ・ 最大ページ寸法
PDF 表示 ソ フ ト 最小ページ寸法 最大ページ寸法
3.2.3 直接パス
パ ス と は、 任意の数の直線 ・ 長方形 ・ 円 ・ ベジ エ曲線 ・ 楕円弧でで き た輪郭です。 パ ス
は、 つながっ ていない部分を複数含む こ と がで き ます。 こ う し た部分をサブパ ス と いい ま
す。 パ ス に対 し て適用で き る 操作はい く つかあ り ます :
> 描線。 パ ス に沿っ て線を描 き ます。 ク ラ イ ア ン ト が与え た、 描画に関す る オプシ ョ ン
(た と えば色や線幅) を用い ます。
> 塗 り 。 パ ス で囲われた領域全体を塗 り ます。 ク ラ イ ア ン ト が与え た、 塗 り に関す る オ
プシ ョ ン を用い ます。
> 切 り 抜 き 。 以後の描画の可視領域を限定 し ま す。 具体的には、 カ レ ン ト 切 り 抜 き 領域
(デフ ォ ル ト では無限定) が、 カ レ ン ト 切 り 抜 き 領域 と パ ス で囲われた領域 と の交差部
分に と っ て替わ ら れます。
> ただパ ス を終了。 見えないパ ス がで き ます。 それで も PDF フ ァ イ ルの中には存在 し て
い ます。 こ れが有用な場合は稀です。
3.2 ページ記述 71
直接パ ス を作成 し ておいて上記の操作を何 も 適用 し ない と エ ラ ーにな り ま す。 PDFlib
の ス コ ープ体系に従えば、 ク ラ イ ア ン ト は こ の制約に自然に従 う こ と にな り ます。 パ ス の
書式属性 (色 ・ 線幅な ど) を変えたい場合はかな ら ず、 描画操作の開始前に行 う 必要があ
り ます。 こ の規則を一言で言えば 「パス記述の途中で、 書式を変えてはいけ ません」。
パ ス を ただ作成 し ただけではページには何 も 現れ ません。 塗 り か描線をパ ス に適用 し
なければ目に見え る 結果は得 ら れません :
p.set_graphics_option("strokecolor=red");
p.moveto(100, 100);
p.lineto(200, 100);
p.stroke();
3.2.4 パス オ ブ ジ ェ ク ト
パ ス オブジ ェ ク ト は、 直接パ ス よ り も 便利で強力な も のです。 パ ス を構築する ためのすべ
ての描画操作を カプセル化 し ます。 直接パ ス と 異な り 、 パス オブジ ェ ク ト は、 PDF_delete_
path( ) を用いて明示的に破棄す る ま で複数回使用で き ます。パ ス に関する 情報については
PDF_info_path( ) を用いて取得で き ます。 パ ス オブジ ェ ク ト を作成す る 方法は複数あ り ま
す:
p.draw_path(path, 0, 0, "stroke");
p.draw_path(path, 400, 500, "stroke");
p.delete_path(path);
p.draw_path(path, 0, 0, "stroke");
72 第 3 章 : PDF 文書を作成
こ れは、 任意のパ ス 群を取 り 込むための簡便な方式を提供 し ま す。 画像本体の ピ ク セル
デー タ が必要ない場合には、 infomode オプシ ョ ン を用いて画像を読み込む こ と に よ っ て
出力フ ァ イ ルサ イ ズ を減 ら す こ と も 可能です。
/* 上記のSVGパス記述からパスオブジェクトを作成 */
int path = p.add_path_point(-1, 0, 0, "addpath", "svgpath = {" + svgPath + "} close");
String mirroropt = "scale= {1 -1}";
/* 選択した隅を、望む位置に配置。「topdown」ページオプションを用いている場合には
(target_x-corner_x, target_y+corner_y)をかわりに使用。
*/
p.draw_path(path, target_x-corner_x, target_y-corner_y,
mirroropt + " stroke linewidth=3");
3.2 ページ記述 73
> PDF_fit_textflow( ) を用いてそのパ ス に複数行テ キ ス ト を回 り 込ませる : テ キ ス ト が任
意の形状の内部ま たは外部を回 り こ む よ う に組まれます (255 ページ 「9.2.11 テ キ ス ト
をパ ス ・ 画像に回 り 込ませ る 」 参照)。
> PDF_fit_textline( ) を用いてそのパス の上にテ キ ス ト を配置、すなわち、キ ャ ラ ク タ ー群
がそのパ ス の曲線に沿っ て並びます (235 ページ 「9.1.7 パ ス上テ キ ス ト 」 参照)。
> PDF_add_table_cell( ) を用いてパ ス オブジ ェ ク ト 群を表セル内に配置。
3.2.5 テ ン プ レ ー ト ( フ ォ ーム XObject)
テ ン プ レ ー ト (PDF 内の フ ォ ーム XObject) PDFlib では、 技術用語で フ ォ ーム XObject
と 呼ばれ る PDF の機能に対応 し てい ます。 し か し こ の用語は、 対話的な フ ォーム と ま ぎ
ら わ し いため、 私達は こ の機能を 「テ ン プ レー ト 」 と 呼び ま す。 PDFlib のテ ン プ レ ー ト
は、 ページ外のバ ッ フ ァ ー と 捉え る こ と がで き 、 そ こ ではテ キ ス ト ・ ベ ク ト ル ・ 画像の操
作が行え ます (ページ上で直接操作す る のではな く ) 。 テ ンプ レー ト がで き た ら 、 それは
ラ ス タ ー画像の よ う に使 う こ と がで き 、 任意の回数、 任意のページに貼 り 付け る こ と が可
能です。 画像同様、 テ ンプ レー ト には拡縮や斜形化な ど の幾何学的変形を施す こ と がで き
ます。 1 つのテ ンプ レー ト を複数のページで使っ た場合には (ない し は同 じ ページで複数
回)、 テ ンプ レー ト を構成す る PDF オペレー タ ーは実際には PDF フ ァ イ ル中に 1 回 し か
書かれていないので、 PDF 出力フ ァ イ ルサ イ ズの節約にな り ます。 テ ンプ レー ト は、 複数
のページに繰 り 返 し 現れ る も のに対 し て推奨 さ れ ます。 た と えば、 毎ページ同 じ 背景や、
企業 ロ ゴや、 CAD ソ フ ト ・ 地図作成 ソ フ ト の吐 き 出す図記号な ど です。 テ ンプ レー ト は、
ク リ ッ ピ ン グパ ス を持っ た ラ ス タ ー画像を複数回配置する 場合に も 推奨 さ れます。テ ンプ
レー ト を作成す る には以下の方法があ り ます :
> PDF_begin_template_ext( ) で直接。
> ベ ク ト ルグ ラ フ ィ ッ ク か ら PDF_load_graphics( ) と templateoptions オプシ ョ ンで間接的
に。
> ラ ス タ ー画像か ら PDF_load_image( ) と templateoptions オプシ ョ ンで間接的に。こ のオ
プシ ョ ンがない と 、 PDF_load_image( ) は、 画像 XObject と い う 同様の PDF 構造を作成
し ます。
テ ンプ レー ト は以下の よ う に利用で き ます :
> PDF_fit_image( ) を用いてそのテ ンプ レー ト をページ上ま たは他の コ ン テ ン ツ ス ト リ ー
ム上に配置 (後述) :
> そのテ ン プ レー ト に よ っ て定義 し た輝度 ソ フ ト マ ス ク を用いて グ ラ フ ィ ッ ク ス テー ト
を作成 (PDF_create_gstate( ) のオプシ ョ ン softmask のサブオプシ ョ ン template、 105
ページ 「4.9.2 ソ フ ト マ ス ク を用いて色を変え る 」 参照)。
> SVG グ ラ フ ィ ッ ク を読み込む際の フ ォールバ ッ ク (背景) と し て (PDF_load_graphics( )
のオプシ ョ ン fallbackimage)。
> 注釈の体裁 と し て (PDF_create_annotation( ) のオプシ ョ ン template のサブオプシ ョ ン
normal/rollover/down)。
> 押 し ボ タ ン フ ォーム フ ィ ール ド の体裁 と し て (PDF_create_field( ) のオプシ ョ ン icon/
icondown/iconrollover)。
74 第 3 章 : PDF 文書を作成
ます (221 ページ 「8.4 画像 ・ グ ラ フ ィ ッ ク ・ 取 り 込み PDF ページ を配置」 参照)。 一般
に、 PDFlib でテ ンプ レー ト を作成 ・ 活用す る 場合には以下の よ う な コ ー ド にな り ます :
/* テンプレートを定義 */
template = p.begin_template_ext(template_width, template_height, "");
...いろいろなテキスト・ベクトル・グラフィック関数を用いてテンプレート上に描画...
p.end_template_ext(0, 0);
...
p.begin_page(page_width, page_height);
/* テンプレートを利用 */
p.fit_image(template, 0.0, 0.0, "");
...いろいろなページ描画操作を追加...
p.end_page();
...
p.close_image(template);
3.2 ページ記述 75
3.3 PDF のパス ワー ド セキ ュ リ テ ィ ー
3.3.1 PDF におけ るパスワー ド セキ ュ リ テ ィ ー
PDF のパ ス ワ ー ド セキ ュ リ テ ィ ーは、 以下の保護機能を提供 し ます :
> ユーザーパ ス ワ ー ド (開 く パ ス ワ ー ド と も 呼ばれ ます) が、 フ ァ イ ルを閲覧す る ため
に開 く ために必要。 ユーザーパ ス ワ ー ド を持つフ ァ イ ルのみが、 ク ラ ッ キ ン グか ら 安
全です!
> マ ス タ ーパ ス ワ ー ド (所有者ま たは権限パ ス ワ ー ド と も 呼ばれ ます) が、 権限、 ユー
ザーま たはマ ス タ ーパ ス ワ ー ド と い っ たセ キ ュ リ テ ィ ー設定を変更す る ために必要で
す。 ユーザーパ ス ワ ー ド と マ ス タ ーパ ス ワ ー ド を持っ た フ ァ イ ルは、 いずれかのパ ス
ワー ド を与え る こ と に よ っ て、 閲覧す る ために開 く こ と がで き ます。
> 権限設定が、 PDF 文書に対す る 、 印刷やテ キ ス ト 抽出 と いっ た特定の操作を制限 し ま
す。
> 添付パ ス ワ ー ド を、 文書自体の本体内容ではな く 、 フ ァ イ ル添付だけ を暗号化す る た
めに与え る こ と がで き ます。
ページの挿入、削除、回転
フォームフィールドへの入力と既存の署名フィールドに署名
注釈の作成、フォームフィールドの入力と既存の署名フィールドに署名
ページの抽出を除くすべての操作
76 第 3 章 : PDF 文書を作成
テ ィ を pCOS イ ン タ ーフ ェ イ ス で ク エ リ ーす る 際には、 pCOS モー ド で制御 さ れます。 た
と えば、 XMP 文書デー タ ・ 文書情報フ ィ ール ド ・ し お り ・ 注釈内容は、 その文書がユー
ザーパ ス ワ ー ド を必要 と し ない場合には (ま たはユーザーパ ス ワー ド のみが与え ら れた場
合には)、 マ ス タ ーパ ス ワ ー ド な し で取得で き ます。 こ れについては pCOS パ ス リ フ ァ レ
ン ス で さ ら に詳 し く 説明 し てい ます。
注 PDFlib GmbH 製品で PDF 文書を Reader 有効化する (た と えば Acrobat Reader で注釈を許
す) こ と はで き ません。
キーワー ド 解説
noprint Acrobat が、 フ ァ イルの印刷を拒みます。
nomodify Acrobat が、 ユーザーによ る フ ォ ーム フ ィ ール ド の追加やその他あ ら ゆる変更を拒みます。
nocopy Acrobat が、 テキス ト やグ ラ フ ィ ッ クの コ ピーや抽出を拒み、 ア ク セ シ ビ リ テ ィ ー イ ン タ ー
フ ェ イ ス を無効に し ます。
noannots Acrobat が、 コ メ ン ト やフ ォ ーム フ ィ ール ド の追加 ・ 変更を拒みます。
noforms (noannots を暗黙に前提 し ます) Acrobat が、 noannots が指定 さ れていな く て も、 フ ォ ーム
フ ィ ール ド への記入を拒みます。
noaccessible (PDF 2.0 では廃止済であ り 利用で き ません) Acrobat が、 ア ク セ シ ビ リ テ ィ ーを目的 と し た
テキス ト やグ ラ フ ィ ッ ク の抽出を拒みます。
noassemble (nomodify を暗黙に前提 し ます) Acrobat が、 nomodify が指定 さ れていな く て も、 ページの
挿入 ・ 削除 ・ 回転や し お り ・ サムネールの作成を拒みます。
nohiresprint Acrobat が、 高解像度印刷を拒みます。 noprint が指定 さ れていない場合は、 印刷は 「画像
と し て印刷」 機能に制限 さ れます。 すなわち その場合、 ページが低解像度に変換 さ れた も
のを印刷する こ と し かで き ません。
plain- 暗号化文書で も、 文書の メ タ デー タ を暗号化 し ないま まに し ます。 これは XMP メ タ デー タ
metadata にのみ影響 し 、 文書情報 フ ィ ール ド には影響 し ません。
78 第 3 章 : PDF 文書を作成
3.4 XMP メ タ デー タ
文書情報フ ィ ール ド のかわ り と し て、 あ る いはそれに加え る も の と し て、 PDFlib は メ タ
デー タ を指定する ための フ レーム ワ ー ク と し て、 XMP (Extensible Metadata Platform) に
対応 し てい ます。 XMP は ISO 16684-1:2012 と し て標準化 さ れてい ます。 PDFlib におけ る
XMP 対応にはい く つかの側面があ り ますので、 以下説明 し ます。
p.end_document(optlist);
p.delete_pvf("/xmp/document.xmp");
3.4 XMP メ タ デー タ 79
3.5 連携 フ ァ イ ル
注 連携フ ァ イルに関する さ ら な る情報が、 PDF 協会が発行 し た Application Note 0002 にあ
り ます (www.pdfa.org/resource/pdf-2-0-application-note-002-associated-files/)。
80 第 3 章 : PDF 文書を作成
表 3.4 associatedfiles オプ シ ョ ン またはサブオプ シ ョ ンに対応 し ている API メ ソ ッ ド
ク ッ ク ブ ッ ク 連携 フ ァ イ ル を 文書内の さ ま ざ ま な オ ブ ジ ェ ク ト に つ な ぐ 完全 な コ ー ド サ ン プ ルが、
PDFlib ク ッ ク ブ ッ クの ト ピ ッ ク interchange/associated_files 内にあ り ます。 PDF 文書か
ら 連 携 フ ァ イ ル を 取 得 す る コ ー ド サ ン プ ル が、 PDFlib ク ッ ク ブ ッ クの ト ピ ッ ク
interchange/retrieve_associated_files 内にあ り ます。
if (af == -1) {
throw new Exception("エラー : " + p.get_errmsg());
}
3.5 連携フ ァ イル 81
82 第 3 章 : PDF 文書を作成
4 色 と 透過
ク ッ ク ブ ッ ク 色空間は、塗 り 操作 と 描線操作に対 し てそれぞれ別個に指定で き ます。 た と えば fillcolor ・
strokecolor オプシ ョ ン を使用 し ます。PDF において色空間は画像に対 し て も 使用 さ れます
が、 PDFlib は通常、 画像の色空間を自動的に決定 し ます。 ただ し カ ラ ー関連のオプシ ョ ン
が PDF_load_image( ) で与え ら れた場合を除 き ます。
4.1 デバ イ ス色空間
デバ イ ス独自の色空間は、 おそ ら く 、 色を記述す る ために最 も 広 く 用い ら れ る 手段です。
名前の と お り 、 こ れは、 あ る 特定のデバ イ ス に よ っ て解釈 さ れ る も の と し て色を記述 し ま
す。 デバ イ ス の例 と し てはモニ タ ーやプ リ ン タ ーや印刷機な ど です。 デバ イ ス独自カ ラ ー
は、 ど のデバ イ ス で出力を行 う かに よ っ て、 見た目が異な り ます。 こ の望ま し く ない性質
があ る ので、 デバ イ ス カ ラ ーは、 PDF/A と PDF/X においては、 直接的には許 さ れてお ら
ず、然 る べ き 出力 イ ン テ ン ト ICC プ ロ フ ァ イ ルかデフ ォ ル ト 色空間 と と も にのみ使用が許
さ れます。
84 第 4 章 : 色 と 透過
4.2 ICC プ ロ フ ァ イ ルに よ る色管理
イ ン タ ーナシ ョ ナル カ ラ ー コ ン ソ ーシ ア ム (ICC) は、 入力デバ イ スや出力デバ イ ス の
色の特徴を指定する ための フ ァ イ ル形式を定義 し ま し た。 PDFlib は、 ICC プ ロ フ ァ イ ル と
レ ン ダ リ ン グ イ ン テ ン ト に よ る 色管理に対応 し てい ます。 ICC プ ロ フ ァ イ ルは、 色管理 さ
れた ワ ー ク フ ロ ー と 、 PDF/X ・ PDF/A と い っ た多 く の PDF 規格において、 重要な役割を
担い ます。
86 第 4 章 : 色 と 透過
表 4.2 ICC プ ロ フ ァ イルの さ ま ざ ま な用途
用途 関係する API メ ソ ッ ド ・ オプ シ ョ ン
4.2.3 高度な色管理制御
PDFlib アプ リ ケーシ ョ ンはデバ イ ス独立な カ ラ ー値を指定で き ますが、あ る 特定の出力デ
バ イ ス において、 その色を正確に再現で き ない こ と が あ る か も し れ ま せん。 こ の場合に
は、 何 ら かの妥協が行われ る 必要があ り ます。 こ の処理を色域圧縮 と いい ます。 こ れは、
色の範囲を、 そのデバ イ ス に よ っ て再現可能な、 よ り 狭い範囲へ縮め る 処理です。 PDF は
こ の処理を細か く 調整す る 制御をい く つか提供 し てい ます。
レ ン ダ リ ン グ イ ン テ ン ト レ ン ダ リ ン グ イ ン テ ン ト は、 個別の画像に対 し て、 PDF_load_
image( ) に renderingintent オプシ ョ ン を与え る こ と に よ っ て指定で き ます。 レ ン ダ リ ン グ
イ ン テ ン ト は、 テ キ ス ト と ベ ク ト ル グ ラ フ ィ ッ ク に対 し て も 、 PDF_create_gstate( ) に
renderingintent オプシ ョ ン を与え る こ と に よ っ て指定で き ます。 利用可能なすべての レ ン
ダ リ ン グ イ ン テ ン ト を表 4.3 に挙げます。
表 4.3 利用可能な レ ン ダ リ ング イ ン テ ン ト
インテン ト 説明 典型的用途
Auto レ ン ダ リ ング イ ン テ ン ト を PDF フ ァ イル内で一切指定 ページ内容に関 し て充分な情報が
せず、 デバイ スのデ フ ォ ル ト イ ン テ ン ト をかわ り に使 得られません
用
AbsoluteColorimetric デバイ スの白色点 (紙色の白な ど) に対 し 補正を一切 ベ タ 色の正確な再現。 それ以外の
行わない。 色域外の色は、 デバイ スの色域の中で最も 用途には推奨 さ れません
近い値へマ ッ プ さ れます。
RelativeColorimetric 色デー タ をデバイ スの色域へ圧縮。 白色点を互いに ベ ク ト ルグ ラ フ ィ ッ ク
マ ッ プ し ます (すなわち、 最も 明るい色はたいてい白
紙色によ っ て実現 さ れます)。 それ以外の色は若干シ フ
ト さ れる こ と にな り ます。
Saturation 色の彩度を温存。 カ ラ ー値はシ フ ト さ れる場合があ り ビ ジネスグ ラ フ ィ ッ ク
ます。
88 第 4 章 : 色 と 透過
表 4.3 利用可能な レ ン ダ リ ング イ ン テ ン ト
イ ンテン ト 説明 典型的用途
PerceptualColor 色の関係を温存。 見た目の美 し さ を優先 し て、 色域内 現実画像
の色 も色域外の色 も変更 し ます。
90 第 4 章 : 色 と 透過
4.4 Pantone ・ HKS ・ カ ス タ ムスポ ッ ト カ ラ ー
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが、 starter_color サン プル と ク ッ ク ブ ッ ク の color/spot_color ト
ピ ッ ク にあ り ます。
92 第 4 章 : 色 と 透過
表 4.5 PDFlib に内蔵の HKS スポ ッ ト カ ラ ー ラ イ ブ ラ リ ー
カ ラ ー ラ イ ブ ラ リ ー名 カ ラ ー名の例 注
/* 塗りにスポットカラーを設定 */
p.set_graphics_option("fillcolor={spotname {CompanyRed} 0.7 }");
94 第 4 章 : 色 と 透過
PDF/X-4/5 モー ド においては、 PDF_create_devicen( ) の前に、 その DeviceN 色空間にお
いて使用 さ れ る すべてのカ ス タ ム ス ポ ッ ト カ ラ ーについて、 PDF_makespotcolor( ) を呼び
出す必要があ り ます。 こ れは一般に画面表示を向上 さ せますので、 PDF/X-4-5 を生成 し
ない場合であ っ て も 推奨 さ れます。
4.5 DeviceN カ ラ ー 95
表 4.6 CMYK プ ロ セ ス イ ンキの部分集合群に対する、 alternate=devicecmyk の場合の DeviceN PostScript 変換関数
% L値どうしを混ぜ合わせ
7 index 6 index mul % t1*L1
7 index 4 index mul % t2*L2
add 9 1 roll % ボトム: L = t1*L1 + t2*L2
% a値どうしを混ぜ合わせ
7 index 5 index mul % t1*a1
7 index 3 index mul % t2*a2
add 9 1 roll % ボトム: a = t1*a1 + t2*a2
% b値どうしを混ぜ合わせ
7 index 4 index mul % t1*b1
7 index 2 index mul % t2*b2
add 9 1 roll % ボトム: b = t1*b1 + t2*b2
% 2個の濃度値と2×3個の入力カラー値をポップ
pop pop pop pop pop pop pop pop
% 結果: 混ぜ合わされた色のLab値群
96 第 4 章 : 色 と 透過
上記の PostScript 関数 transformFunc2 を用いて、 2 個の Pantone ス ポ ッ ト カ ラ ーに基づい
て DeviceN 色空間を作成す る には、 以下の よ う に し ます :
devicen = p.create_devicen(
"names={{PANTONE 123 U} {PANTONE 289 U}} alternate=lab " +
"transform={{" + transformFunc2 + "}}");
4.5 DeviceN カ ラ ー 97
4.6 シ ェ ーデ ィ ン グ と シ ェ ーデ ィ ン グパ タ ー ン
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが、 starter_color サン プル と ク ッ ク ブ ッ クの color/color_gradient
ト ピ ッ ク にあ り ます。
図 4.2
2 色の間の直線状シ ェ ーデ ィ ングの主なパラ メ ー タ ー
開始色=赤 終了色=青
98 第 4 章 : 色 と 透過
2 個のプ ロ セ ス カ ラ ーの間のシ ェ ーデ ィ ン グ 以下の コ ー ド は、 RGB 色空間におけ る 赤
か ら 青ま での直線状シ ェ ーデ ィ ン グ を作成 し 、 それを使っ て円を塗 り ます :
sh = p.shading("axial", 100, 100, 500, 500, 0, 0, 0, 0, "startcolor=red endcolor=blue");
shp = p.shading_pattern(sh, "");
p.set_graphics_option("fillcolor={pattern " + shp + "}");
複数のスポ ッ ト カ ラ ーの間のシ ェ ーデ ィ ン グ シ ェ ーデ ィ ン グ を 使 っ て 作成 で き る の
は、 同一の色空間に属す る 色の間の遷移だけですので、 開始色 と 終了色 と し て、 任意の ス
ポ ッ ト カ ラ ー群を使っ た り 、 1 個の ス ポ ッ ト カ ラ ー と 1 個のプ ロ セ ス カ ラ ーを使っ た り す
る こ と はで き ません。 ただ し 、 Lab 代替値を持っ た ス ポ ッ ト カ ラ ー群に対 し ては、 96 ペー
ジ 「Lab 代替空間を持っ た ス ポ ッ ト カ ラ ー群に基づ く DeviceN 色空間」 で示 し てい る の と
同様の適切な DeviceN 色空間を用いてシ ェ ーデ ィ ン グ を実現で き ます。特定の条件が満た
さ れていれば (PDFlib API リ フ ァ レ ン ス参照)、 ス ト ッ プカ ラ ー と し ての ス ポ ッ ト カ ラ ー
群に対 し て こ の よ う な DeviceN 色空間を PDFlib は自動生成 し ます。 以下の コ ー ド 断片は、
2 個の ス ポ ッ ト カ ラ ーの間のシ ェーデ ィ ン グ を作成 し ます :
sh = p.shading("axial", 100, 100, 500, 500, 0, 0, 0, 0,
"stopcolors={ 0% {spotname {PANTONE 123 U} 1} 100% {spotname {PANTONE 289 U} 1}}"
shp = p.shading_pattern(sh, "");
p.set_graphics_option("fillcolor={pattern " + shp + "}");
図 4.3
2 色の間の放射状シ ェ ーデ ィ ン グの主なパラ メ ー タ ー。
開始円は縮んで点にな っ ています。 2 つの円の中心は同
中心0 (x0, y0) = 一です。
中心1 (x1, y1)
r0=0 r1
開始色=黄色 終了色=赤
t=0 t=0.5 t=1
4.6 シ ェ ーデ ィ ング と シ ェ ーデ ィ ングパ タ ーン 99
4.7 タ イ リ ン グパ タ ー ン
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが、 starter_color サン プル と ク ッ ク ブ ッ クの graphics/fill_
pattern ・ images/tiling_pattern ト ピ ッ ク にあ り ます。
図 4.4
タ イ リ ングパ タ ーン を使っ て円 と テキス ト を塗る。 さ ら に強調のためにテキス ト の輪郭を描線 し ています。
100 第 4 章 : 色 と 透過
4.8 透過ブ レ ン ド モー ド
ク ッ ク ブ ッ ク コ ー ド サン プルがク ッ ク ブ ッ ク の color/blendmode ト ピ ッ ク にあ り ます。
ブ レ ン ド 効果のないブ レ ン ド モー ド
None PDFlib 独自のブ レ ン ド モー ド 。 ブ レ ン ド モー ド 指定のない gstate を作成 し ます。 外側の gstate
で設定 さ れている ブ レ ン ド モー ド を確実に効かせます。
Normal ソ ース色を採 り 、 バ ッ ク ド ロ ッ プ を無視 し ます。
暗 く する ブ レ ン ド モー ド
明る く する ブ レ ン ド モー ド
コ ン ト ラ ス ト を強める ブ レ ン ド モー ド
HardLight ソ ース カ ラ ー値が 0.5 よ り 小 さ ければ 2 色を乗算 し 、 0.5 よ り 大き ければス ク リ ーン し ます。
バ ッ ク ド ロ ッ プに き ついスポ ッ ト ラ イ ト をあてた よ う な効果にな り ます。
差分ブ レ ン ド モー ド
HSL ブ レ ン ド モー ド
102 第 4 章 : 色 と 透過
ブ レ ン ド 色空間 PDF ビ ュ ーアーは、 すべての透過計算を ブ レ ン ド 色空間において行い
ます。 こ の色空間は重要な役割を果た し ます。 なぜな ら 、 ど の色空間を選択す る かに よ っ
てブ レ ン ド の結果が変わっ て く る か ら です。 こ れは以下の と お り 決定 さ れます :
> transparencygroup ページオプシ ョ ンの colorspace サブオプシ ョ ンがあ る 場合には、そ こ
で指定 さ れてい る 色空間。
> ない場合には、PDF/X ま たは PDF/A 出力 イ ン テ ン ト ICC プ ロ フ ァ イ ルが も し あ る な ら 、
それが使用 さ れます。 PDF/X では出力 イ ン テ ン ト は必ずあ り ます。 PDF/A 文書が出力
イ ン テ ン ト を含んでいない場合には、 それは transparencygroup ページオプシ ョ ン の
colorspace サブオプシ ョ ン を指定す る 必要があ り ます。
> ないな ら 、 出力デバ イ ス ( ソ フ ト プルーフ/出力プ レ ビ ュ ーの場合には、 シ ミ ュ レー
ト さ れた出力デバ イ ス) のネ イ テ ィ ブ色空間が使用 さ れ ます。 ブ レ ン ド 色空間を明示
的に指定す る こ と に よ っ て こ の状況を避け る こ と を推奨 し ます。 なぜな ら 、 そ う でな
い と 透過オブジ ェ ク ト の視覚表現が出力デバ イ ス に依存 し て し ま う か ら です。
以下の コ ー ド 断片は、DeviceRGB をブ レ ン ド 色空間 と し て指定 し 、ブ レ ン ド モー ド Multiply
を指定 し てい ます :
p.begin_page_ext(0, 0, "width=a4.width height=a4.height " +
"transparencygroup={colorspace=DeviceRGB}");
gstate = p.create_gstate("blendmode=Multiply");
p.set_gstate(gstate);
4.9.1 ブ レ ン ド モー ド を用いて色を変え る
ク ッ ク ブ ッ ク こ の項で述べるすべての効果のための コ ー ド サン プルがク ッ ク ブ ッ クの color/blendmode_
effects ト ピ ッ ク にあ り ます。
// ラスター画像か取り込みPDFページかSVGグラフィックを配置
p.fit_image(image, 200, 150, optlist);
// 望む色とブレンドすることにより既存内容を着色または脱色または色反転
p.save();
// 望むブレンドモードを持ったgstateを作成
gs_blendmode = p.create_gstate("blendmode=Color");
p.set_graphics_option("fillcolor=red gstate=" + gs_blendmode);
p.rect(0, 0, width, height);
p.fill();
p.restore();
104 第 4 章 : 色 と 透過
ジ ェ ク ト か ら グ レース ケール出力を作成す る こ と です。 その際に、 その各部分のグ レーレ
ベルは、 そのオブジ ェ ク ト の各部分の も と も と の色の、 知覚 さ れ る 明 る さ (輝度) に対応
す る よ う にす る こ と です。 こ れを実現す る には、 ブ レ ン ド モー ド Color を用いて、 そのオ
ブジ ェ ク ト の上に白い領域を重ねます。
ラ ス タ ー画像の色は invert 画像オプシ ョ ン を用いて反転で き ます。 任意のオブジ ェ ク
ト の色を反転す る こ と も 可能です。 そのためには、 ブ レ ン ド モー ド Difference を用いて、
そのオブジ ェ ク ト の上に白を重ねます。
4.9.2 ソ フ ト マ ス ク を用いて色を変え る
ク ッ ク ブ ッ ク コ ー ド サン プルがク ッ ク ブ ッ ク の color/softmask_effects ト ピ ッ ク にあ り ます。
p.end_template_ext(0, 0);
// このテンプレートをベースにした、反転したソフトマスクを用いたgstateを作成
// 「invert」オプションで黒を透過させています。すなわち暗い領域と明るい領域を維持
gstate_softmask = p.create_gstate(
"softmask={type=luminosity template=" + tpl + " backdropcolor=transparent }");
106 第 4 章 : 色 と 透過
4.10 オーバープ リ ン ト 制御
ク ッ ク ブ ッ ク コ ー ド サン プルがク ッ ク ブ ッ ク の color/overprint ト ピ ッ ク にあ り ます。
108 第 4 章 : 色 と 透過
5 Unicode と レ ガシエ ン コ ーデ ィ ング
こ の章では、 Unicode やその他のエン コ ーデ ィ ン グ方式に関す る 基礎的な情報を提供 し ま
す。 PDFlib におけ る テ キ ス ト 処理は Unicode 規格に大 き く 依存 し てい ますが、 さ ま ざ ま な
レ ガシエン コ ーデ ィ ン グに も 対応 し てい ます。
図 5.1
グリ フ とキャ ラ ク
タ ーの関係
UTF-8 EF BB BF 
UTF-16 ビ ッ グエ ンデ ィ ア ン FE FF þÿ
UTF-16 リ ト ルエ ンデ ィ ア ン FF FE ÿþ
UTF-32 ビ ッ グエ ンデ ィ ア ン 00 00 FE FF þÿ
UTF-32 リ ト ルエ ンデ ィ ア ン FF FE 00 00 ÿþ
110 第 5 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング
5.2 Unicode 対応言語バ イ ン デ ィ ン グ
PDFlib API の機能のなかには、 使用す る 言語バ イ ンデ ィ ン グが Unicode 対応か ど う かに
よ っ て変化す る も のがあ り ます。 こ の概念を こ の節 と 次の節で解説 し ます。
112 第 5 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング
5.3 非 Unicode 対応言語バ イ ン デ ィ ン グ
5.3.1 ネ イ テ ィ ブ な Unicode 文字列のない言語バ イ ン デ ィ ン グ
レ ガ シー文字列対応のあ る言語バ イ ン デ ィ ン グ 以下の PDFlib の言語バ イ ンデ ィ ン グは
デフ ォ ル ト で UTF-8 を使用 し ますが (上述)、 stringformat=legacy を設定す る こ と に よ っ
て、 レ ガシーな 8 ビ ッ ト エン コ ーデ ィ ン グの文字列 と と も に使用す る よ う 構成す る こ と も
可能です :
> Perl
> PHP
> Ruby
C バ イ ン デ ィ ン グの レ ガ シーな文字列へのデ フ ォ ル ト 対応 C バ イ ンデ ィ ン グは、デフ ォ
ル ト 設定 stringformat=legacy を通 じ て 8 ビ ッ ト エン コ ーデ ィ ン グの文字列 と と も に動作
し ます。
ただ し C イ ン タ ーフ ェ イ ス は、関数の引数 と し て受け渡 さ れた文字列について、length
引数に 0 よ り 大 き な値が与え ら れた場合には、 UTF-16 と し て解釈 し ます。
表 5.2 さ ま ざ ま な文字列種別に対する文字列処理の概要
文字列種別 サン プル引数 ・ オプ シ ョ ン 関連オプ シ ョ ン / 解釈
114 第 5 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング
表 5.3 textformat ・ hypertextformat オプ シ ョ ンに対する値
[hyper]textformat 説明
bytes 文字列の 1 バイ ト が 1 キ ャ ラ ク タ ーに対応 し ます。 こ れは 8 ビ ッ ト エ ン コ ーデ ィ ング と 記
号フ ォ ン ト で有用です。 文字列の先頭に UTF-8 BOM があ る と きは、 評価 さ れたのち除去 さ
れます。
utf8 文字列は UTF-8 形式である と 期待 さ れます。 不正な UTF-8 列があ っ た と きは、
glyphcheck=error な ら例外が発生 し 、 そ う でなければ削除 さ れます。
すべての文字列種別 :
auto 117 ページ 「自動エ ン コ ーデ ィ ング」 の項を参照
unicode 8 ビ ッ ト コ ー ド は U+0000 ~ 選ばれた テキス ト 形式に従っ て エ ン コ ー ド さ れた任意
U+00FF の Unicode 値 の Unicode 値 1
内容文字列のみ :
オ プ シ ョ ン リ ス ト オプシ ョ ン リ ス ト 内の文字列については、特別な注意が必要です。 な
ぜな ら 非 Unicode 対応の言語バ イ ンデ ィ ン グでは、 それは UTF-16 形式の Unicode 文字列
と し て 表現 で き ず、 バ イ ト 文字列 と し て し か表現で き な い か ら です。 こ の理由か ら 、
Unicode のオプシ ョ ンに対 し ては UTF-8 が用い ら れます。 PDFlib はオプシ ョ ンの先頭の
BOM を見 る こ と で、 それを ど う 解釈す る か を決定 し ます。 BOM を用いて文字列の形式が
決定 さ れ、 そ し て文字列の種類 (内容文字列 ・ ハ イ パーテ キ ス ト 文字列 ・ 名前文字列) を
用いてエン コ ーデ ィ ン グが決定 さ れます。 具体的には、 文字列オプシ ョ ンの解釈は以下の
よ う に動作 し ます :
> オプシ ョ ンの先頭に UTF-8 BOM (0xEF 0xBB 0xBF) があ る な ら 、 それは UTF-8 と し て
解釈 さ れます。 EBCDIC ベース のシ ス テ ムの場合 : オプシ ョ ンの先頭に EBCDIC UTF-
8 BOM (0x57 0x8B 0xAB) があ る な ら 、 それは EBCDIC UTF-8 と し て解釈 さ れます。
> BOM が見つか ら ない と き は、 文字列の解釈は文字列の種類に依存 し ます :
> 内容文字列は、適用可能な encoding オプシ ョ ンか、その対応する フ ォ ン ト のエン コ ー
デ ィ ン グ (ど ち ら か存在す る ほ う ) に従っ て解釈 さ れます。
> ハ イ パーテ キ ス ト 文字列は、 hypertextencoding オプシ ョ ンに従っ て解釈 さ れます。
> 名前文字列は、 usehypertextencoding=true な ら hypertext の設定に従っ て、 そ う でな
ければ auto エン コーデ ィ ン グで解釈 さ れます。
キ ャ ラ ク タ ー{ } はオプシ ョ ン リ ス ト 内の文字列内では特別な扱い を要 し 、文字列オプシ ョ
ン内で用い る と き はキ ャ ラ ク タ ー \ を前につけ る 必要があ り ます。
5.3.3 シ ン グルバ イ ト (8 ビ ッ ト ) エ ン コ ーデ ィ ン グ
8 ビ ッ ト エン コ ーデ ィ ン グは、 バ イ ト 値を それぞれ、 BMP 内の Unicode 値を持つ 1 つの
キ ャ ラ ク タ ーへマ ッ プ し ます。 そ こ でキ ャ ラ ク タ ーは 255 種類ま でです。 なぜな ら コ ー ド
0 (ゼ ロ ) は .notdef キ ャ ラ ク タ ーのために予約 さ れてい る か ら です。 PDFlib は、 以下のエ
ン コ ーデ ィ ン グ を内蔵 し てい ます :
winansi (cp1252と等しい。iso8859-1のスーパーセット),
cp1252
iso8859-1
macroman (オリジナルのMacintoshの文字集合),
ebcdic (EBCDICコードページ1047),
ebcdic_37 (EBCDICコードページ037),
pdfdoc (PDFDocEncoding)
116 第 5 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング
ホ ス ト エ ン コ ーデ ィ ン グ 特殊なエン コ ーデ ィ ン グ host は固定 し た意味を持たず、 環境
のプ ラ ッ ト フ ォームに よ っ て、 以下の 8 ビ ッ ト エン コ ーデ ィ ン グへマ ッ プ さ れます :
> MVS か USS を持つ IBM System Z では ebcdic へマ ッ プ さ れます。
> IBM System i では ebcdic_37 へマ ッ プ さ れます。
> Windows では winansi へマ ッ プ さ れます。
> それ以外のすべてのシ ス テ ム では iso8859-1 へマ ッ プ さ れます。
ホ ス ト エン コ ーデ ィ ン グが有用なのは何 と いっ て も 、プ ラ ッ ト フ ォーム非依存のテ ス ト プ
ロ グ ラ ムや、 その他の単純なプ ロ グ ラ ム を書 く と き です。 製品版でのホ ス ト エン コ ーデ ィ
ン グ の使用は推奨 し ま せんので、 何 ら かの適切なエ ン コ ーデ ィ ン グに置 き 換え る べ き で
す。
> USS か MVS を持つ IBM System Z では、任意の Coded Character Set Identifier (CCSID) が
使え ます。CCSID は文字列 と し て与え る 必要があ り 、PDFlib は、与え ら れた コ ー ド ペー
ジ名に一切変更を加えずその ま ま シ ス テ ムに渡 し ます。
font = p.load_font("Helvetica", "IBM-273", "");
118 第 5 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング
PDFlib は、 表 5.5 に挙げ る CMap を通 じ て日中韓レ ガシーエン コ ーデ ィ ン グに対応 し てい
ます。 レ ガシーエン コ ーデ ィ ン グは、 非 Unicode 対応の言語バ イ ンデ ィ ン グでのみ使用で
き ます。 すなわち C の場合か、 ま たは Perl ・ PHP ・ Ruby で stringformat=legacy の場合に
のみ使用で き ます。
ネ イ テ ィ ブ な日中韓 レ ガ シー コ ー ド を維持 埋 め 込 ん で い な い フ ォ ン ト に 対 し て
keepnative フ ォ ン ト オプシ ョ ン を true に設定す る と 、選択 し た CMap に従っ たネ イ テ ィ ブ
な レ ガシーコ ー ド (た と えば Shift-JIS) が PDF 出力へ書 き 込まれます。 そ う でない場合に
はテ キ ス ト は CID 値へ変換 さ れます。 その利点は、 その よ う な フ ォ ン ト を埋め込みな し に
フ ォーム フ ィ ール ド で使用で き る こ と です。
keepnative=false の場合には、 PDF 出力が生成 さ れ る 際に、 レ ガシーな コ ー ド 列は CID
値群へ変換 さ れます。 その利点は、 OpenType 機能 と テ キ ス ト フ ロ ー整形機能を使用で き
る こ と です。
120 第 5 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング
5.4 キ ャ ラ ク タ ー を指定
環境に よ っ てはプ ロ グ ラ マーは、 ソ ース コ ー ド を 8 ビ ッ ト エン コ ーデ ィ ン グ (winansi ・
ebcdic な ど) で書 く こ と を要求 さ れます。 こ の場合、 8 ビ ッ ト 符号化 さ れた テ キ ス ト の中
へ、 一部分だけ Unicode キ ャ ラ ク タ ー群を含め る のは厄介な問題です。 こ の状況か ら 開発
者を救 う ため、 PDFlib では、 テ キ ス ト を表す補助手段がい く つか使え ます。
5.4.2 文字参照
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルがク ッ ク ブ ッ ク の fonts/character_references ト ピ ッ ク にあ り ま
す。
例:
­ U+00AD ソフトハイフン
€ U+00AD ユーログリフ (実体名)
< U+00AD 小なり記号
> U+00AD 大なり記号
& U+00AD アンパサンド記号
Α U+0391 ギリシャ文字?
122 第 5 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング
数値文字参照 Unicode キ ャ ラ ク タ ーに対す る 数値文字参照 も HTML 4.0 で定義 さ れてい
ます。 こ れはハ ッ シ ュ キ ャ ラ ク タ ー 「#」 と 10 進ま たは 16 進の数値を必要 と し 、 16 進数
値のは小文字か大文字の 「X」 キ ャ ラ ク タ ーを頭につけ ます。 例 :
­ U+00AD ソフトハイフン(10進)
­ U+00AD ソフトハイフン
å U+00AD 文字aの上に小さな丸 (10進)
å U+00E5 文字aの上に小さな丸 (16進、小文字x)
å U+00E5 文字aの上に小さな丸 (16進、大文字X)
€ U+20AC ユーログリフ (16進)
😂 U+1F602 FaceにTears of Joyを加えたもの
例:
&linefeed; U+000A ラインフィード制御キャラクター
&hortab; U+0009 水平タブ
&ZWNJ; U+200C ゼロ幅非接合子
文字参照を使 う う えでのその他の注意点を挙げます :
> 文字参照は、 内容文字列 ・ ハ イ パーテ キ ス ト 文字列 ・ 名前文字列のいずれで も 使え ま
す。 例外 と し て、 フ ォ ン ト 独自グ リ フ名参照は上述の よ う に内容文字列でのみ動作 し
ます。
> 文字参照はbuiltin エン コーデ ィ ン グのテ キ ス ト 内では置換 さ れません。し か し 、unicode
エ ン コ ーデ ィ ン グ を用い る こ と に よ っ て記号フ ォ ン ト に対 し て文字参照を使 う こ と は
で き ます。
> 文字参照はオプシ ョ ン リ ス ト 内では置換 さ れません。 ただ し 、 Unichar デー タ 型のオプ
シ ョ ン内では認識 さ れます。 こ の場合、 「&」 ・ 「;」 修飾は外す必要があ り ます。 こ の認
識はつねに有効であ り 、 charref オプシ ョ ンには従い ません。
> 非 Unicode 対応言語バ イ ンデ ィ ン グでは、 textformat=utf16 ・ utf16be ・ utf16le の と き は
文字参照は 2 バ イ ト 値で表す必要があ り ます。encoding=unicode かつ textformat=bytes
の と き は文字参照は ASCII で表す必要があ り ます (EBCDIC ベース のプ ラ ッ ト フ ォー
ムで も )。
> 1 個のア ンパサン ド キ ャ ラ ク タ ーは、 文字参照の開始 と 見な さ れます。 ただ し 、 その後
にセ ミ コ ロ ン 「;」 が見つか り 、 かつ 「&」 と 「;」 の間のキ ャ ラ ク タ ー群が文字参照 と
し て有効であ る 場合に限 り ます。そ う でない場合には、そのア ンパサン ド キ ャ ラ ク タ ー
「
&」 は変更 さ れない ま ま と な り ま す。 文字参照を開始 さ せずにア ンパサ ン ド キ ャ ラ ク
ター
「&」 を表 し たい場合には、 文字参照 & を使用す る こ と が推奨 さ れます。
124 第 5 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング
> 文字参照の可能性のあ る 文字列が無効の場合(た と えば&# の後に無効な 10進値群が続
いてい る 場合や、 「&」 の後に未知の実体名が続いてい る 場合) には、 その動作はオプ
シ ョ ン glyphcheck に依存 し ます :
glyphcheck=none : その文字列はその ま ま保たれます。
glyphcheck=replace : その文字列は置換キ ャ ラ ク タ ーで置換 さ れます。
glyphcheck=error:エ ラ ーが発生 し 、テ キ ス ト 処理は停止 さ れます。errorpolicy=exception
の場合には例外が発生 し ます。
6.1.2 OpenType フ ォ ン ト
OpenType フ ォ ン ト 形式 (ISO 14496-22 に従っ て Open Font Format と も い う )
は、 PostScript と TrueType 技術を結合 し た も のです。 こ れは TrueType フ ァ イ ル
形式の拡張 と し て実装 さ れてい ます。 OpenType フ ォ ン ト は、 合字やス ワ ッ シ ュ
キ ャ ラ ク タ ーな ど、 テ キ ス ト 出力の改善に利用で き る オプシ ョ ナルなテーブル
(163 ページ 「7.4 OpenType レ イ ア ウ ト 機能」 参照) のほか、 複雑用字系シ ェ ー
ピ ン グのためのテーブルを含む こ と も で き ます(170 ページ「7.5 複雑用字系の出力」参照)。
OpenType フ ォ ン ト は、TrueType と PostScript のいずれをベース と し た グ リ フ記述 も 内
容 と し て持つ こ と がで き ます。 PostScript ベース のほ う は Compact Font Format (CFF) や
Type 2 と も 呼ばれ、 たいてい *.otf 接尾辞をつけて用い ら れます。
> CID (キ ャ ラ ク タ ー ID) アーキ テ ク チ ャ ーが日中韓フ ォ ン ト に対 し て用い ら れてい ま
す。 現代の CID フ ォ ン ト は、 PostScript ア ウ ト ラ イ ン を持つ OpenType *.otf フ ォ ン ト と
し てパ ッ ケージ さ れてい ます。
> OpenType コ レ ク シ ョ ンは、 OpenType 1.7 仕様で導入 さ れま し た。 こ れは、 関連す る
OpenType フ ォ ン ト 群を 1 個の合体フ ァ イ ル内へま と め る と い う 点において、TrueType
コ レ ク シ ョ ン と 似てい ます。 OpenType コ レ ク シ ョ ンは *.ttf ま たは *.otc 接尾辞を用い
ます。
> バ リ アブルフ ォ ン ト は、 OpenType フ ォ ン ト バ リ エーシ ョ ン と い う 機構を用いてお り 、
こ れを用い る と 、 同一の フ ォ ン ト フ ァ ミ リ ーに属す る 複数の フ ォ ン ト フ ェ ー ス ( ラ イ
6.1 フ ォ ン ト 形式 127
ト ・ レ ギ ュ ラ ー ・ ボール ド な ど) を、 ただ 1 つの フ ォ ン ト リ ソ ース の中へパ ッ ケージ
す る こ と がで き ます。 PDF はフ ォ ン ト バ リ エーシ ョ ンに対応 し てい ませんので こ の機
構を利用で き ません。TrueType ア ウ ト ラ イ ン を持っ た OpenType フ ォ ン ト バ リ エーシ ョ
ン を PDFlib で読み込む こ と はで き ますが、 バ リ エーシ ョ ンのないデフ ォ ル ト フ ォ ン ト
イ ン ス タ ン ス のみが利用可能 と な り ます。 CFF2 テーブル内に PostScript ア ウ ト ラ イ ン
を持っ た OpenType フ ォ ン ト バ リ エーシ ョ ンは、 PDF が対応 し てい ませんので、 拒否
さ れます。
128 第 6 章 : フォン ト
さ ま ざ ま な カ ラ ー フ ォ ン ト 処理モー ド カ ラ ーフ ォ ン ト に対 し て意図す る 用途 と その性
質に応 じ て、 colormode フ ォ ン ト オプシ ョ ン を使っ て カ ラ ーフ ォ ン ト の処理モー ド を選択
す る こ と がで き ます。 カ ラ ーフ ォ ン ト モー ド の比較を表 6.1 に示 し ます。 1 つの フ ォ ン ト
のカ ラ ーモー ド を後か ら 変え る こ と はで き ませんので、その フ ォ ン ト を再度読み込んだ場
合には、 その colormode オプシ ョ ンは無視 さ れて、 最初の読み込み操作のカ ラ ーモー ド が
使用 さ れます。
利点 モ ノ グ リ フ と カ ラ ーグ リ フ の扱いを一本 モ ノ グ リ フ によ る不要な 望ま ない カ ラ ーグ リ フ ・ 透
化で き ます。 カ ラ ーグ リ フ も モ ノ グ リ フ OpenType フ ォ ン ト がス 過がな く な り ます
も元の OpenType フ ォ ン ト と 同 じ グ リ フ キ ッ プ さ れます
ID を持つ こ と にな り ます。
COLR フ ォ ン ト のレ イ ヤーグ リ フ も
encoding=glyphid を用いて使用で き ま
す。
制約 ― モ ノ グ リ フ ・ OpenType 機 カ ラ ーグ リ フ な し
能 ・ 合字 ・ シ ェ ーピ ングな
し
6.1 フ ォ ン ト 形式 129
カ ラ ー フ ォ ン ト を使用 OpenType カ ラ ーフ ォ ン ト を各種アプ リ ケーシ ョ ンで使用する 際
の注意点です :
> 多 く の絵文字キ ャ ラ ク タ ーが BMP 外に符号化 さ れてい ます。すなわち Unicode コ ー ド 点
が U+FFFF よ り 大 き いです。 お使いの開発環境に よ っ て、 こ の よ う な Unicode 値を表
現す る 方法は さ ま ざ ま です。 さ ら な る 情報 と 例が、 31 ページ 「2 章 PDFlib の言語バ イ
ンデ ィ ン グ」 の言語ご と の各節にあ り ます。
> 絵文字キ ャ ラ ク タ ーは さ ま ざ ま に修飾 ・ 結合で き ます。 161 ページ 「7.3 絵文字シーケ
ン ス」 を参照。
> 絵文字キ ャ ラ ク タ ーを持っ てい る OpenType カ ラ ーフ ォ ン ト はフ ォールバ ッ ク フ ォ ン
ト 機能を利用で き ます。 例は 147 ページ 「カ ラ ー絵文字キ ャ ラ ク タ ーを テ キ ス ト フ ォ
ン ト に追加」 を参照 し て く だ さ い。
> 他の フ ォ ン ト 形式 と 異な り 、 カ ラ ーフ ォ ン ト に対 し てはサブセ ッ ト 化はデフ ォ ル ト で
有効化 さ れます。 サブセ ッ ト 化を無効化する にはオプシ ョ ン subsetting=false を用い ま
す。
> OpenType カ ラ ーフ ォ ン ト のカ ラ ーグ リ フは色 と 透過を内蔵 し てい ますので、そのフ ォ
ン ト を使用す る さ いにそれ ら を変え る こ と はで き ません。 同様に、 テ キ ス ト 書式オプ
シ ョ ン textrendering は カ ラ ー グ リ フ に対 し て は何 ら 効力 を 持 ち ま せん が、 た だ し
textrendering=3 (不可視テ キ ス ト ) と 7 ( ク リ ッ ピ ン グ) の場合にはテ キ ス ト が不可視
にな り ます。
> OpenType カ ラ ーフ ォ ン ト のグ リ フは透明な要素を含んでい る こ と があ り ます。 PDF/
A-1 と PDF/X-3 では透過は許 さ れ ませんので こ の こ と がひっ かか っ て き ます。 サブ
セ ッ ト 化が有効化 さ れてい る 場合には、 透過グ リ フは、 使用 さ れ る 際には検出 さ れず、
PDF_end_document( ) で フ ォ ン ト のサブセ ッ ト が生成 さ れ る 時に初めて検出 さ れます。
ですので、 ページオプシ ョ ン transparencygroup=auto は、 サブセ ッ ト 化が有効化 さ れ
てい る 場合には、 カ ラ ーフ ォ ン ト 内の透過を検出 し ません。
> Unicode 異体字シーケ ン ス を使っ て、キ ャ ラ ク タ ーに対する テ キ ス ト ま たは絵文字ス タ
イ ルグ リ フ を選択で き ます(179 ページ「7.7 Unicode 異体字セ レ ク タ ー(UVS)」を参照)。
130 第 6 章 : フォン ト
6.1.5 PostScript Type 1 フ ォ ン ト (廃止済)
注 PostScript Type 1 フ ォ ン ト 対応は廃止 さ れま し た。
6.1.6 SING フ ォ ン ト (グ リ フ レ ッ ト )
SING フ ォ ン ト (Smart Independent Glyphlets) は OpenType フ ァ イ ル形式の拡張です。SING
フ ォ ン ト は、 日中韓テ キ ス ト におけ る 外字問題、 すなわち Unicode で符号化 さ れていない
カ ス タ ム な グ リ フ に対す る 解決策 と し て開発 さ れた も のです。
SING フ ォ ン ト は 1 個のグ リ フ だけ を内容 と し て持ち ます (あわせて縦書 き 字体 も 含む
こ と も あ り ます)。 こ の 「 メ イ ン」 グ リ フ の Unicode 値は、 PDFlib で取得す る こ と がで き 、
それにはグ リ フ ID を要求 し 、 ついで こ のグ リ フ ID に対す る Unicode 値を要求 し ます :
maingid = (int) p.info_font(font, "maingid", "");
uv = (int) p.info_font(font, "unicode", "gid=" + maingid);
6.1.7 Type 3 フ ォ ン ト
他のすべての フ ォ ン ト 形式 と は異な り 、Type 3 フ ォ ン ト はフ ァ イ ルか ら 取得 さ れ る のでは
な く 、 標準 PDFlib グ ラ フ ィ ッ ク メ ソ ッ ド 群を用いて実行時に定義 さ れます。 Type 3 フ ォ
ン ト は以下の用途で有用です :
> ビ ッ ト マ ッ プフ ォ ン ト 。
> 色ま たは透過を内蔵 し てい る フ ォ ン ト 。
> ロ ゴ な ど のカ ス タ ム グ ラ フ ィ ッ ク を、 シ ンプルなテ キ ス ト 操作命令で簡単に印刷可能。
> いずれの フ ォ ン ト やエ ン コ ーデ ィ ン グで も 入手で き ない日本語の外字 (ユーザー定義
キ ャ ラ ク タ ー)。
> カ ラ ーフ ォ ン ト に対 し ては内部的に Type3 フ ォ ン ト が生成 さ れます (128 ページ 「6.1.3
SVG ・ COLR ・ sbix 形式の OpenType カ ラ ーフ ォ ン ト 」 を参照)。
6.1 フ ォ ン ト 形式 131
Type 3 フ ォ ン ト の定義の中では、 PDFlib のベ ク ト ルグ ラ フ ィ ッ ク ・ ラ ス タ ー画像の機能
がすべて使え ます し 、 テ キ ス ト 出力の機能で さ えすべて使 う こ と がで き る ので (上述の色
の制約が課 さ れます) 、 Type 3 フ ォ ン ト のグ リ フ の内容に関 し て制約は何 も あ り ません。
Type 3 フ ォ ン ト が最 も 頻繁に利用 さ れ る のはビ ッ ト マ ッ プグ リ フ のためです。 以下の例
は、 単純な Type 3 フ ォ ン ト を定義 し てい ます :
p.begin_font("Fuzzyfont", 0.001, 0.0, 0.0, 0.001, 0.0, 0.0, "");
p.end_font();
132 第 6 章 : フォン ト
6.2 Unicode のキ ャ ラ ク タ ー と グ リ フ
6.2.1 グ リ フ ID
フ ォ ン ト は グ リ フ の集合です。 そ こ で各グ リ フ は可視の形状を定義 し ま す。 PDFlib は、
フ ォ ン ト 内の各グ リ フ に番号を割 り 当て ます。 こ の番号を グ リ フ ID ま たは GID と いい ま
す。 GID 0 (ゼ ロ ) は .notdef グ リ フ を指 し ます。 .notdef グ リ フ の見た目はフ ォ ン ト 形式
やベン ダーに よ っ て異な り ますが、 よ く あ る 実装は空白グ リ フ か白四角か四角バ ッ テ ンで
す。 最高の GID は、 その フ ォ ン ト 内のグ リ フ数 よ り 1 少ない数であ り 、 こ れは PDF_info_
font( ) の numglyphs キーワ ー ド で ク エ リ ーする こ と がで き ます。
グ リ フ ID の割 り 当て方はフ ォ ン ト 形式に よ っ て異な り ます :
> TrueType・OpenType フ ォ ン ト はすでに内部 GID を含んでい ますので、PDFlib は こ の GID
を用い ます。
> CID キー付 き OpenType 日中韓フ ォ ン ト では、 CID が GID と し て用い ら れます。
> それ以外の フ ォ ン ト 種別については、 PDFlib がグ リ フ に、 フ ォ ン ト 内のその対応す る
ア ウ ト ラ イ ン記述の順番に従っ て付番 し ます。
マ ッ プ な し グ リ フ と 私用領域 (PUA) 場 合 に よ っ て は、 あ る 特 定 の グ リ フ に 対 す る
Unicode 値を フ ォ ン ト が提供 し ていない こ と があ り ます。 こ の場合には、PDFlib は Unicode
私用領域 (109 ページ 「5.1 Unicode の重要な諸概念」 参照) 内の値を そのグ リ フ に割 り 振
り ます。 こ の よ う な グ リ フ を マ ッ プ な し グ リ フ と いい ます。 フ ォ ン ト 内のマ ッ プな し グ リ
フ の数は、 PDF_info_font( ) の unmappedglyphs キーワ ー ド で ク エ リ ーする こ と がで き ま
す。 マ ッ プな し グ リ フは、 フ ォ ン ト の検索性 と テ キ ス ト 抽出を制御する ToUnicode CMap
内では Unicode 置換キ ャ ラ ク タ ー U+FFFD で表 さ れます。 結果 と し てマ ッ プな し グ リ フ
は、 生成 さ れた PDF か ら テ キ ス ト と し て正 し く 抽出で き な く な り ます。 ただ し 、 こ の動
作は変更す る こ と も で き 、 それは特に日中韓キ ャ ラ ク タ ーに対 し て有用です。 詳 し く は
177 ページ 「外字キ ャ ラ ク タ ーに対す る PUA 値を温存」 を参照 し て く だ さ い。
PDFlib が PUA 値を マ ッ プな し グ リ フ に割 り 振っ てい く 際には、 以下のプール内の若い
値か ら 順に用いてい き ます :
> 基本 と な る のは基本多言語面 (BMP) 内の Unicode PUA 領域、 すなわち範囲 U+E000 ~
U+F8FF です。 必要であれば こ れに加え、 第 15 面 (U+F0000 to U+FFFFD) 内の PUA
値 も 用い ら れます。
> その フ ォ ン ト が内部的にすでに割 り 振っ てい る PUA 値は、新たな PUA 値を作成する 際
には用い ら れません。
> Adobe 領域 U+F600 ~ F8FF 内の PUA 値は用い ら れません。
134 第 6 章 : フォン ト
6.3 フ ォ ン ト を読み込む
6.3.1 テキス ト フ ォ ン ト に対す る エ ン コ ーデ ィ ン グ を選ぶ
フ ォ ン ト は、 明示的に PDF_load_font( ) メ ソ ッ ド で読み込む こ と も で き 、 あ る いは暗黙的
に、 PDF_add/create_textflow( ) や PDF_fill_textblock( ) と い っ た メ ソ ッ ド に fontname ・
encoding オプシ ョ ン を与え る こ と で読み込む こ と も で き ま す。 ど の よ う な方式を用いて
フ ォ ン ト を読み込むのかにかかわ ら ず、適切なエン コ ーデ ィ ン グ を指定す る 必要があ り ま
す。 エン コ ーデ ィ ン グは以下を決定 し ます :
> PDFlib が与え ら れ る テ キ ス ト を ど のテ キ ス ト 形式であ る と 見なすか。
> フ ォ ン ト 内の ど のグ リ フ が使え る か。
> ページ上のテ キ ス ト と フ ォ ン ト 内のグ リ フデー タ が PDF 出力内に ど の よ う に格納 さ れ
る か。
136 第 6 章 : フォン ト
65,565 の値を と れます。 最大グ リ フ ID 値は PDF_info_font( ) で maxcode キーを用いて ク
エ リ ーで き ます。
非 Unicode 対応の言語バ イ ンデ ィ ン グでは、 PDFlib はデフ ォ ル ト (textformat=utf16)
ではテ キ ス ト がダブルバ イ ト バ イ ト エン コ ー ド さ れてい る と 見な し ます。
PDFlib は、 与え ら れた グ リ フ ID が フ ォ ン ト 内で有効であ る か ど う かをチ ェ ッ ク し ま
す。 複雑用字系のシ ェ ーピ ン グ と OpenType レ イ ア ウ ト 機能が使え ます。
グ リ フ ID はフ ォ ン ト 固有であ り 、 場合に よ っ ては PDFlib に よ っ て作成 さ れ る こ と も
あ る ので、 encoding=glyphid は一般に通常のテ キ ス ト 出力には適 し ません。 こ のエン コ ー
デ ィ ン グの主な用途は、アプ リ ケーシ ョ ンがすでにグ リ フ ID を使用 し てい る 場合 と 、フ ォ
ン ト のグ リ フ一覧を印刷 し たい場合です。
138 第 6 章 : フォン ト
図 6.1
Windows の文字 コ ー ド 表
で Wingdings フ ォ ン ト
エン コー
デ ィ ング 追加オプ シ ョ ン 入力文字列 ページ上の印字結果
1
\uF04A
charref 
unicode charref &.#x4A;
charref &.smileface;
2
J (スペースか .notdef)
エン コー
デ ィ ング textformat 追加オプ シ ョ ン 入力文字列 ページ上の印字結果
1
utf16 \xF0\x4A
charref 
charref &.#x4A;
charref &.smileface;
utf8, bytes
unicode
textformat=utf8 な
ら : ï•ã 2
escapesequence4 textformat=utf8 な
ら:\xEF\x81\x8A5
140 第 6 章 : フォン ト
5. U+F04A に対する 3 バイ ト UTF-8 列
6.3.4 フ ォ ン ト を検索
フ ォ ン ト デー タ の ソ ース 先述の よ う に、 フ ォ ン ト は明示的に PDF_load_font( ) メ ソ ッ ド
で 読み込む こ と も で き ま す し 、 あ る い は暗黙的 に、 さ ま ざ ま な テ キ ス ト 出力関数 に
fontname オプシ ョ ン を与え て読み込む こ と も で き ます。 フ ォ ン ト のネ イ テ ィ ブな名前を
使 う こ と も で き ます し 、 フ ォ ン ト デー タ の場所を決定す る ために用い ら れ る 任意のカ ス タ
ム名を扱 う こ と も で き ます。 カ ス タ ム フ ォ ン ト 名は文書内で一意であ る 必要があ り ます。
PDF_info_font( ) で、 こ のフ ォ ン ト 名は apiname キーで ク エ リ ーす る こ と がで き ます。
同 じ フ ォ ン ト 名で PDF_load_font( ) を続けて呼び出す と 、すべてのオプシ ョ ンが こ の メ
ソ ッ ド を最初に呼び出 し た際に与え た も の と 等 し ければ、同 じ フ ォ ン ト ハン ド ルが返 さ れ
ます (扱いが異な る オプシ ョ ンが若干あ り ますので、 詳 し く は PDFlib API リ フ ァ レ ン ス を
参照) 。 そ う でなければ、 同 じ フ ォ ン ト 名に対 し て新規の フ ォ ン ト ハン ド ルが作成 さ れま
す。 PDFlib ではフ ォ ン ト デー タ の ソ ース と し て以下に対応 し てい ます :
> デ ィ ス ク ベース ま たは仮想の フ ォ ン ト フ ァ イ ル
> Windows か macOS オペレーテ ィ ン グ シ ス テ ムか ら 持っ て来た フ ォ ン ト (ホ ス ト フ ォ ン
ト)
> PDF 標準フ ォ ン ト : こ れ ら は、 よ く 知 ら れた名前の少数の欧文フ ォ ン ト です
> PDF_begin_font( ) お よ び関連関数群で定義 さ れた Type 3 フ ォ ン ト
/* 検索パス上のすべてのフォントをなめてUPRファイルを作成 */
p.set_option("enumeratefonts saveresources={filename=C:/pdflib.upr}");
す る と 、 指定 し たデ ィ レ ク ト リ 群の中にあ る すべての利用可能な フ ォ ン ト が、 生成 さ れ る
UPR フ ァ イ ルの中に リ ス ト さ れますので、 以後使用可能 と な り ます。
142 第 6 章 : フォン ト
p.set_option("FontOutline={MS-Gothic=msgothic.ttc}");
font = p.load_font("MS-Gothic", "unicode", "");
フ ォ ン ト 名が リ ソ ー ス を 通 じ て い か な る フ ァ イ ル名へ も 紐づ け ら れ て い な い と き は、
PDFlib はその フ ォ ン ト を標準 Type 1 フ ォ ン ト の リ ス ト の中で探 し ます。
コ ア フ ォ ン ト のいずれかの名前で ホ ス ト フ ォ ン ト を読み込むためには、 その フ ォ ン ト 名
を、 ほ し いホ ス ト フ ォ ン ト の名前に対 し て、 HostFont リ ソ ース カ テ ゴ リ ーを通 じ て紐づけ
る 必要があ り ます。以下の コ ー ド 断片は、内蔵 コ ア フ ォ ン ト デー タ を使わずに Symbol フ ォ
ン ト のデー タ を ホ ス ト シ ス テ ムか ら 取っ て来る よ う 指示 し てい ます :
p.set_option("HostFont={Symbol=Symbol}");
font = p.load_font("Symbol", "unicode", "embedding");
と
p.set_option("SearchPath={{/usr/fonts}}");
font = p.load_font("Arial", "unicode", "");
...
p.end_font();
...
font = p.load_font("PDFlibLogoFont", "logoencoding", "");
144 第 6 章 : フォン ト
Windows 上のホ ス ト フ ォ ン ト 名 イ ン ス ト ール さ れてい る フ ォ ン ト の名前は、 その フ ォ
ン ト フ ァ イ ルを ダブル ク リ ッ ク し て、現れ る ウ ィ ン ド ウ の ウ ィ ン ド ウ タ イ ト ルに表示 さ れ
る 完全フ ォ ン ト 名を見れば知 る こ と がで き ます。フ ォ ン ト に よ っ ては、使っ てい る Windows
のバージ ョ ンに従っ てその名前の一部が ロ ーカ ラ イ ズ さ れてい る こ と も あ り ます。た と え
ば、 フ ォ ン ト 名の一部 と し て広 く 使われてい る Bold は、 ド イ ツ語シ ス テ ム上では翻訳 さ
れた単語 Fett と し て表示 さ れ る こ と があ り ます。 Windows シ ス テ ムか ら ホ ス ト フ ォ ン ト
デー タ を取得す る には、 変換 さ れた形の フ ォ ン ト 名 (Arial Fett な ど) を PDFlib で用い る
か、 あ る いは フ ォ ン ト ス タ イ ル名 (後述) を用い る 必要が あ り ま す。 し か し 、 フ ォ ン ト
デー タ を フ ァ イ ルか ら 直接取得す る には、 正規の ( ロ ーカ ラ イ ズ さ れていない) 形の フ ォ
ン ト 名 (Arial Bold な ど) を用い る 必要があ り ます。
フ ォ ン ト の太 さ の数値はフ ォ ン ト ス タ イ ル名 と 等価です :
0 (none), 100 (thin), 200 (extralight), 300 (light), 400 (normal), 500 (medium), 600
(semibold), 700 (bold), 800 (extrabold), 900 (black)
6.3.6 フ ォ ールバ ッ ク フ ォ ン ト
注 フ ォ ールバ ッ ク フ ォ ン ト は、 encoding=glyphid の場合には使用で き ません。
146 第 6 章 : フォン ト
PDF_info_font( ) を利用す る と 、 フ ォールバ ッ ク フ ォ ン ト 機構の結果を ク エ リ ーす る こ
と がで き ます (153 ページ 「6.5.3 コ ー ド ページ網羅性 と フ ォ ールバ ッ ク フ ォ ン ト を ク エ
リ ー」 参照)。
注意 フ ォールバ ッ ク フ ォ ン ト を扱 う 際には以下に留意 し て く だ さ い :
> フ ォ ン ト の組み合わせは必ず し も 、 タ イ ポ グ ラ フ ィ ー的に美 し い結果を生み出すわけ
ではあ り ません。 ベー ス フ ォ ン ト のグ リ フデザ イ ン に整合す る グ リ フデザ イ ン を持つ
フ ォールバ ッ ク フ ォ ン ト だけ を使 う よ う 注意を払 う 必要があ り ます。
> フ ォールバ ッ ク フ ォ ン ト に対す る フ ォ ン ト オプシ ョ ンは、fallbackfonts オプシ ョ ン リ ス
ト 内で別途指定す る 必要があ り ます。
> 用字系固有のシ ェーピ ン グ (オプシ ョ ン shaping ・ script ・ locale) と OpenType 機能 (オ
プシ ョ ン features ・ script ・ language) は、 同一フ ォ ン ト 内のグ リ フ群に対 し てのみ適
用 さ れ、 ベース フ ォ ン ト と フ ォ ールバ ッ ク フ ォ ン ト と にわた る グ リ フ群に対 し ては適
用 さ れません。
> 下線 / 上線 / 取 り 消 し 線機能は、フ ォールバ ッ ク フ ォ ン ト を扱 う 際には注意 し て使 う 必
要があ り ます。アセ ン ダーな ど の タ イ ポグ ラ フ ィ ー値について も 同様です。ベース フ ォ
ン ト 内で決定 さ れ る 下線の太 さ ・ 位置は、 フ ォ ールバ ッ ク フ ォ ン ト 内の値 と は一致 し
ない可能性があ り ます。 その場合、 下線の位置 ま たは太 さ が見苦 し く ガ タ つ く こ と に
な り ます。 こ の問題に対す る 単純な回避策は、 統一的な値を、 PDF_fit_textline( ) ・ PDF_
add/create_textflow( ) の underlineposition ・ underlinewidth オプシ ョ ンで指定す る こ と
です。 こ の値は、 ベー ス フ ォ ン ト と すべての フ ォ ールバ ッ ク フ ォ ン ト において う ま く
い く よ う に選ぶ必要があ り ます。
拡大 し た ピ ク ト グ ラ ム を追加 fallbackfonts オ プ シ ョ ン に 対 し て 以下 の フ ォ ン ト オ プ
シ ョ ン を用いて、 ZapfDingbats フ ォ ン ト か ら 記号を持っ て来 る こ と がで き ます :
fallbackfonts={
{fontname=ZapfDingbats forcechars=.a12 fontsize=150% textrise=-15%}
}
148 第 6 章 : フォン ト
6.4 フ ォ ン ト の埋め込み と サブ セ ッ ト 化
6.4.1 埋め込み
Acrobat におけ る PDF の フ ォ ン ト 埋め込み と フ ォ ン ト 置換 PDF 文書は、 正 し いテ キ ス
ト 表現を確保す る ために、 フ ォ ン ト デー タ を さ ま ざ ま な形式で含む こ と がで き ます。 あ る
いは、 グ リ フ の メ ト リ ッ ク と い く つかの一般的な フ ォ ン ト 情報だけ を含む (グ リ フ のア ウ
ト ラ イ ン本体を含ま ない) フ ォ ン ト 記述子を埋め込む こ と も で き ま す。 フ ォ ン ト が PDF
文書に埋め込まれていない場合、 PDF ビ ュ ーアはそれが タ ーゲ ッ ト シ ス テ ムで得 ら れ、 か
つ構成 さ れていればそれを取 り (Acrobat では 「ロー カルフ ォ ン ト を用いる」)、 あ る いは
フ ォ ン ト 記述子に従っ て代替フ ォ ン ト を組み立て よ う と 試みます。代替フ ォ ン ト が使われ
る こ と に よ っ てテ キ ス ト は読め る よ う にな り ますが、そのグ リ フは元の フ ォ ン ト と は異な
る 可能性があ り ます。 同様に、 代替フ ォ ン ト は、 複雑用字系のシ ェ ーピ ン グか OpenType
レ イ ア ウ ト 機能が使われてい る と き には働 き ません。 こ う し た理由か ら 、 一般にはフ ォ ン
ト の埋め込みを推奨 し ます。 ただ し 、 文書が フ ォ ン ト を埋め込んでいな く て も タ ーゲ ッ ト
シ ス テ ム上での表示が許容範囲内にな る と わかっ てい る 場合は例外です。その よ う な PDF
フ ァ イ ルは本質的に非可搬ですが、すべての ワー ク ス テーシ ョ ン上で必要フ ォ ン ト が得 ら
れ る と わか っ てい る 企業ネ ッ ト ワ ー ク な ど の制御 さ れた環境においては役に立つか も し
れません。 一般に、 フ ォ ン ト の埋め込みは、 推奨 さ れ、 PDFlib ではデフ ォ ル ト の動作です。
フ ォ ン ト を PDFlib で埋め込む フ ォ ン ト の 埋 め 込 み は、 デ フ ォ ル ト で 有 効 で す が、
embedding フ ォ ン ト オプシ ョ ン を用いて制御す る こ と も で き ます :
font = p.load_font("WarnockPro", "winansi", "noembedding");
6.4.2 サブ セ ッ ト 化
PDF 出力のサ イ ズ を減 ら すために、PDFlib は、 あ る フ ォ ン ト の中で実際にその文書の中で
使われてい る グ リ フ だけ を埋め込む こ と がで き ます。 こ の処理を フ ォ ン ト のサブセ ッ ト 化
と いい ます。 サブセ ッ ト 化を行 う と 新 し い フ ォ ン ト が作成 さ れ、 その中ではグ リ フ の数が
元の フ ォ ン ト よ り も 少な く 、 PDF の表示に必要ない フ ォ ン ト 情報 も 省略 さ れてい ま す。
Type 3 フ ォ ン ト はサブセ ッ ト 化について特別な処理を要 し ます (150 ページ 「Type 3 フ ォ
ン ト のサブセ ッ ト 化」 を参照)。
サブセ ッ ト 化を要求 さ れてい る フ ォ ン ト が文書内で使われてい る 場合、 PDFlib は実際
にテ キ ス ト 出力に使われてい る グ リ フ を調べます。サブセ ッ ト 化の動作を制御す る にはい
く つかの方法があ り ます :
> デフ ォ ル ト のサブセ ッ ト 化の動作は autosubsetting オプシ ョ ンで制御 さ れます。それが
true な ら サブセ ッ ト 化が有効にな り ます。 デフ ォ ル ト 値は true です。
> autosubsetting=true の場合:subsetlimit オプシ ョ ンはパーセ ン ト 値を持ち ます。文書内
で用い ら れてい る 、 あ る フ ォ ン ト 内のグ リ フ の数が こ の割合を超え る 場合には、 サブ
セ ッ ト 化は無効 と な り 、 フ ォ ン ト 全体が埋め込 ま れ ます。 こ れに よ っ て処理時間があ
る 程度短縮で き ますが、 そのかわ り に出力フ ァ イ ルの容量は大 き く な り ます。 以下の
フ ォ ン ト オプシ ョ ンはサブセ ッ ト 限界を 75% に設定 し ます :
subsetlimit=75%
150 第 6 章 : フォン ト
6.5 フ ォ ン ト 情報を ク エ リ ー
PDF_info_font( ) を利用す る と 、 フ ォ ン ト ・ エン コ ーデ ィ ン グ ・ Unicode ・ グ リ フ に関 し て
有用な情報を ク エ リ ーす る こ と がで き ます。 ク エ リ ーの種類に よ っ ては、 有効な フ ォ ン ト
ハン ド ルが こ の メ ソ ッ ド の引数 と し て必要な場合 も あ り ます。 以下すべての例で、 表 6.4
に挙げ る 変数を用い る こ と に し ます。
/* 文字列番号を用いて実際のグリフ名を取得 */
gn = p.get_string(gn_idx, "");
/* 文字列番号を用いて実際のグリフ名を取得 */
gn = p.get_string(gn_idx, "");
152 第 6 章 : フォン ト
タ ーの数をチ ェ ッ ク す る こ と も で き ます。 以下の コ ー ド 断片は、 ユー ロ キ ャ ラ ク タ ー (グ
リ フ名参照で表現) 1 個だけ を内容 と す る 文字列についての結果を ク エ リ ー し ます。 も し
も マ ッ プな し キ ャ ラ ク タ ーが 1 個見つかれば、 こ れはすなわちその フ ォ ン ト がユー ロ 記号
に対す る グ リ フ を一切含んでいない こ と を意味 し ます :
String optlist = "font=" + font + " charref";
if (result == -1)
System.err.println("コードページ網羅性不明");
else if (result == 0)
System.err.println("コードページはこのフォントでは対応していません");
else
System.err.println("コードページはこのフォントで対応しています");
if (cp_idx == -1)
System.err.println("コードページリスト不明");
else
{
System.err.println("コードページリスト:");
System.err.println(p.get_string(cp_idx, ""));
}
154 第 6 章 : フォン ト
7 テキス ト 出力
7.1 テ キス ト 出力方式
PDFlib は、 テ キ ス ト 出力にい く つかの レベルで対応 し てい ます :
> PDF_show( ) や類似の関数群に よ る 低レベルテ キ ス ト 出力。
> PDF_fit_textline( ) に よ る 一行に組まれた テ キ ス ト 出力。こ の メ ソ ッ ド はパ ス上テ キ ス ト
に も 対応 し てい ます。
> テ キ ス ト フ ロ ーに よ る 複数行テ キ ス ト 組版出力 (PDF_fit_textflow( ) お よ び関連す る 関
数群)。 テ キ ス ト フ ロ ー組版機能は、 ベ ク ト ルベース の形状の内側ま たは外側にテ キ ス
ト を回 り こ ませ る こ と も で き ます。
> 表内のテ キ ス ト 。 表組版機能は、 表セル内のテ キ ス ト 行 ・ テ キ ス ト フ ロ ー内容に対応
し てい ます。
p.setfont(font, 12);
p.set_text_pos(50, 700);
p.show("Hello world!");
p.continue_text("(says Java)");
156 第 7 章 : テキス ト 出力
7.2 フ ォ ン ト メ ト リ ッ ク と テ キス ト ス タ イ ル
7.2.1 フ ォ ン ト と グ リ フ の メ ト リ ッ ク
テキス ト 位置 PDFlib はテ キ ス ト 位置を、 グ ラ フ ィ ッ ク 描画のカ レ ン ト 点 と は独立に保
持 し ます。 前者は textx/texty オプシ ョ ン で ク エ リ ーで き 、 後者は currentx/currenty で ク
エ リ ーで き ます。
7.2.2 カ ーニ ン グ
さ ま ざ ま な文字の組み合わせのなかには、望ま し く ない見ばえにな っ て し ま う も のがあ り
ます。 た と えば、 2 つの V が隣 り 合 う と W の よ う に見え て し ま い ます し 、 T と e の間の間
隔は縮めない と 広 く あ き すぎ て不恰好にな っ て し ま い ます。 こ の よ う な補正の こ と を カー
ニ ン グ と いい ます。 多 く の フ ォ ン ト が、 問題 と な る 文字の組み合わせそれぞれに対す る 間
7.2.3 テキス ト ス タ イ ル
擬似ボール ド フ ォ ン ト PDFlib は、 個別のテ キ ス ト 文字列について、 fakebold オプシ ョ
ン を通 じ て擬似的な ボール ド テ キ ス ト を作成す る 機構を サポー ト し てい ま す。 こ の方式
は、 グ リ フ の輪郭 を 描線す る こ と に よ っ て ボール ド フ ォ ン ト を 擬似表現 し て い ま す :
Type 3 フ ォ ン ト の場合には、 テ キ ス ト が さ ま ざ ま な変位で複数回配置 さ れます。 強調のた
めには本当のボール ド フ ォ ン ト を使用す る こ と を強 く 推奨 し ます。fakeboldオプシ ョ ンは、
本当のボール ド テ キ ス ト よ り も 劣 る テ キ ス ト 出力を作成 し ます し 、 ま た、 テ キ ス ト 抽出を
阻害す る おそれ も あ り ます。
図 7.1 カ ーニ ング
ࠞ࠾ࡦࠣߥߒ
ࠞ࠾ࡦࠣㆡ↪
ࠞ࠾ࡦࠣߦࠃࠆᢥሼ⒖േ
158 第 7 章 : テキス ト 出力
擬似斜体 フ ォ ン ト italicangle オプシ ョ ン を使っ て、 レ ギ ュ ラ ーフ ォ ン ト し か利用で き な
い と き に イ タ リ ッ ク フ ォ ン ト の よ う な効果を出す こ と も で き ま す。 こ の方式は、 偽 イ タ
リ ッ ク フ ォ ン ト を作成す る ために、 レ ギ ュ ラ ーフ ォ ン ト を ユーザーか ら 与え ら れた角度だ
け傾け る も のです。 負の値でテ キ ス ト は右に傾 き ます。 も ち ろん、 本物の イ タ リ ッ ク や斜
体フ ォ ン ト を使っ たほ う がは る かに き れいな出力が得 ら れ る こ と を忘れてはいけ ません。
し か し イ タ リ ッ ク フ ォ ン ト が入手で き ない と き に italicangle オプシ ョ ン を使えば、簡単に
そ れ に似 た 効果 を 出す こ と が で き ま す。 こ の機能は特に日中韓 フ ォ ン ト で便利です。
italicangle オプシ ョ ンの値は普通 -12 か ら -15 度の範囲です。
160 第 7 章 : テキス ト 出力
7.3 絵文字シーケ ン ス
ク ッ ク ブ ッ ク 絵文字シーケ ン スの例がク ッ ク ブ ッ ク の text_output/emoji_sequences ト ピ ッ ク にあ り ま
す。
シーケ ン スの種類
sequence type 絵文字シーケ ンス
emoji sequence 単離状態のキ ャ ラ ク タ ー 合体されたキャ
isolated characters ラ ク ター
combined characters
ZWJ
ZWJ grouping
のグループ化 👨‍👩‍👧
skin
肌の色 tone 👦🏻 👦🏽
👦🏿
emoji flag
絵文字の旗 🇲🇹 🇬🇧
emoji keycap ッ プ
絵文字のキーキャ 0️⃣ 9️⃣ ⃣ ⃣
🧜‍♂ 🧜‍
ZWJ gender
絵文字の性別
♀ 7.
6
5
4
3
2
1
0 /0
7,
6
5
4
3
2
1 - G8
F
E
D
C
B
A
@ ?
>
=
<
;
:
9
skin肌の色
tone and gender 🧜🏿‍♂ 🧜
と 性別 7
6
5
4
3
2
1
0 .
/0
7
6
5
4
3
2
1 ,
- G8
F
E
D
C
B
A
@ ?
>
=
<
;
:
9
🏿‍♀
👨‍🦰 👨‍
ZWJ hair components
絵文字の髪構成要素
🦳
H
L
K
J
I
M
Q
P
O
N VW
U
T
S
R [
Z
Y
X
ZWJの役割
ZWJ role: male
: 男性 👨‍🌾
+
*
)
(
'
&
%
$
#
"
!
ZWJの役割
ZWJ role: female
: 女性 👩‍🌾
162 第 7 章 : テキス ト 出力
7.4 OpenType レ イ ア ウ ト 機能
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルがク ッ ク ブ ッ ク の fonts/starter_opentype ・ fonts/opentype_feature
_tester ト ピ ッ ク にあ り ます。
7.4.1 対応 し てい る OpenType レ イ アウ ト 機能
PDFlib は、い く つかの フ ォ ン ト 内の追加情報に従っ た高度なテ キ ス ト 出力に対応 し てい ま
す。 こ れ ら の フ ォ ン ト 拡張を OpenType レ イ ア ウ ト 機能 と いい ます。 た と えば、 フ ォ ン ト
が liga 機能を含んでい る か も し れません。 こ の機能は、 f ・ f ・ i グ リ フは結合 し て合字を
形作れ る と い う 情報を含んでい ます。 他に よ く 利用 さ れ る 例 と し ては、 smcp 機能に よ る
ス モールキ ャ ッ プ ス、 すなわち通常の大文字キ ャ ラ ク タ ー よ り も 小 さ な大文字キ ャ ラ ク
タ ーや、 onum 機能に よ る オール ド ス タ イ ル数字、 すなわち アセ ン ダー と デ ィ セ ン ダーを
持つ数字 (ベース ラ イ ン上にすべて配置 さ れ る 横並びの数字 と は異な る ) な ど が挙げ ら れ
ます。 合字は非常に広 く 利用 さ れ る OpenType 機能ではあ り ますが、 多数の機能の う ちの
1 つにすぎ ません。 PDFlib は以下のグループの OpenType 機能に対応 し てい ます :
> 欧文 タ イ ポグ ラ フ ィ ーのためのOpenType機能群を表7.2に挙げます。こ れ ら はfeatures・
script ・ language オプシ ョ ンで制御 さ れます。
> 複雑用字系のための OpenType 機能群。 こ れ ら は shaping・script オプシ ョ ンで制御 さ れ
ます (170 ページ 「7.5 複雑用字系の出力」 を参照)。
> カーニ ン グのためのOpenType機能テーブル群。PDFlibはkerningをOpenType機能 と し て
は扱い ません。 なぜな ら カーニ ン グデー タ は OpenType 機能テーブル以外の手段で も
表現す る こ と がで き る か ら です。 カーニ ン グ を制御する には、 readkerning フ ォ ン ト オ
プシ ョ ン と kerning テ キ ス ト オプシ ョ ン を用いて く だ さ い (157 ページ 「7.2.2 カーニ
ン グ」 を参照)。
> 以上に加え、 日中韓テ キ ス ト のための OpenType 機能については 177 ページ 「7.6.4
OpenType レ イ ア ウ ト 機能 と 日中韓テ キ ス ト 出力」 で解説 し ます。
合字 ・ 字体
aalt すべての字体にア 選択 し た 1 つのキ ャ ラ ク タ ーのすべての異体字を ア ク セス可能に し ます。 た と え
ク セス ば、 通常の置き換えによ っ てサポー ト さ れる コ ン テキス ト の外にあ るグ リ フ をユー
ザーが必要 と するか も し れず、 あ るいは、 ほ し いグ リ フ を印字 さ せるのは何の機能
かをユーザーが知ら ないか も し れません。
calt1 コ ン テキス ト 字体 デ フ ォ ル ト グ リ フ を、 よ り 良い連結動作を与え る字体へ置き換え。 一部ない し 全部
のグ リ フ を連結 さ せる よ う デザイ ン さ れた用字系書体で使用 さ れます。
clig1 コ ン テキス ト 合字 グ リ フ 列を、 タ イ ポグ ラ フ ィ ー的観点か ら よ り 好ま し い 1 個のグ リ フへ置き換え。
他の合字機能群 と 異な り 、 clig は、 その合字が推奨 さ れる コ ン テキス ト を指定 し
ます。 こ の能力は、 い く つかの用字系デザイ ン において、 またスワ ッ シ ュ合字に対
し て重要です。
cswh コ ン テキス ト デ フ ォ ル ト グ リ フ を、 指定 さ れた コ ン テキス ト において、 スワ ッ シ ュへ置き換え。
スワ ッ シ ュ
cv01 キ ャ ラ ク タ ーの異 フ ォ ン ト の中で、 1 つない し 複数のキ ャ ラ ク タ ーに対 し て様式的異体字群がある
~ 体字 01-99 が、 1 つのキ ャ ラ ク タ ーに対する異体字群が他のキ ャ ラ ク タ ー群に対する異体字群
cv99 と シ ス テ マチ ッ ク に関連 し ていない こ と があ り ます。 あるいは、 1 つの大文字キ ャ
ラ ク タ ー と その小文字 (または、 1 つのキ ャ ラ ク タ ー と それにダ イ ア ク リ テ ィ カル
マー ク を あ ら か じ めつけたキ ャ ラ ク タ ー) に対 し て 1 つの異体が存在するが、 それ
は他の無関係なキ ャ ラ ク タ ー群には該当 し ない こ と があ り ます。
dlig 随意合字 グ リ フ 列を、 タ イ ポグ ラ フ ィ ー的観点か ら よ り 好ま し い 1 個のグ リ フへ置き換え。
dlig は、 ユーザーの好みに よ っ て、 特殊効果のために用いる こ と がで き る合字を
カバー し ます。
hist 歴史的字体 デ フ ォ ル ト の字体を歴史的字体へ置き換え。 い く つかの字の字体は過去には広 く 用
い られていま し たが、 現在では時代遅れに見え ます。
hlig 歴史的合字 デ フ ォ ル ト の合字を歴史的合字へ置き換え。
liga1 標準合字 グ リ フ 列を、 タ イ ポグ ラ フ ィ ー的観点か ら よ り 好ま し い 1 個のグ リ フへ置き換え。
liga は、 通常の条件において用い られるべき合字を カバー し ます。
数字 ・ 数学
afrc 別形式分数 ス ラ ッ シ ュ で区切ら れた数字群を別形式へ置き換え。
164 第 7 章 : テキス ト 出力
表 7.2 対応 し ている、 欧文 タ イ ポグ ラ フ ィ ー と 絵文字のための OpenType 機能 (日中韓テキス ト 用の OpenType 機
能は表 7.9 に挙げます)
タグ 名前 説明
dnom 分母 ス ラ ッ シ ュの直後の数字を分母数字へ置き換え
frac 分数 ス ラ ッ シ ュ で区切 られた数字群を、 通用の、 斜め線に よ る分数へ置き換え
lnum 横並び数字 数字を オール ド ス タ イルから デ フ ォ ル ト の横並び字体へ変え ます。
mgrk 数学ギ リ シ ャ 文字 ギ リ シ ャ 文字グ リ フの標準 タ イ ポグ ラ フ ィ ー字体を、 数学的表記で広 く 用い られて
いる字体へ置き換え。
numr 分子 ス ラ ッ シ ュの直前の数字を分子数字へ置き換え、 タ イ ポグ ラ フ ィ ース ラ ッ シ ュ を分
数ス ラ ッ シ ュへ置き換え。
onum オール ド ス タ イル 数字を、 デ フ ォ ル ト の横並び形式から オール ド ス タ イル字体に変え ます。
数字
pnum プ ロポーシ ョ ナル 等幅 (表形式) 数字を、 プ ロポーシ ョ ナル幅を持つ数字へ置き換え。
数字
sinf 科学的下付き 横並びまたはオール ド ス タ イル数字を、 主に化学や数学表記用の下付き数字 (よ り
小 さ なグ リ フ) へ置き換え。
tnum 等幅数字 プ ロポーシ ョ ナル数字を等幅 (表形式) 数字へ置き換え。
zero ス ラ ッ シ ュ付きゼ 数字ゼロ に対するグ リ フ を、 中空部に斜め線を引いた字体へ置き換え。
ロ
大文字 / 小文字 ・ 序数
c2pc 大文字からのプ 大文字キ ャ ラ ク タ ーを プ テ ィ ッ ト キ ャ ピ タ ルに変え ます。
テ ィ ッ ト キャ ピ タ
ル
c2sc 大文字からのス 大文字キ ャ ラ ク タ ーを ス モールキ ャ ッ プ スに変え ます。
モールキ ャ ッ プ ス
case ケースセ ン シ テ ィ さ ま ざ ま な ア ク セ ン ト 記号を上へず ら し て、 全大文字シーケ ン スや横並び数字 と の
ブ字体 調和を高めます。 ま た、 オール ド ス タ イル数字を横並び数字に変え ます。
ordn 序数 デ フ ォル ト のアルフ ァ ベ ッ ト グ リ フ を、 数字の後に用いる ための序数字体へ置き換
え。 通常、 Numero キ ャ ラ ク タ ー U+2116 も 作成 し ます。
pcap プテ ィ ッ ト キャ ピ 小文字キ ャ ラ ク タ ーを プ テ ィ ッ ト キ ャ ピ タ ルに、 すなわち通常のスモールキ ャ ッ プ
タル よ り 背の低い大文字に変え ます。
smcp ス モールキ ャ ッ プ 小文字キ ャ ラ ク タ ーを ス モールキ ャ ッ プ スに変え ます。
ス
unic ユニケース 大文字 と 小文字を、 小文字 と ス モールキ ャ ッ プ ス字体の混在する集合へマ ッ プ し
て、 高 さ 一定のアルフ ァ ベ ッ ト に し ます。
位置によ る字体
falt 改行箇所語尾グ リ 行末グ リ フ を代替字体 (必要に応 じ て前幅が短か っ た り 長かっ た り する もの) へ置
フ き換え る こ と に よ っ て、 テキス ト の均等割 り 付けを助けます。
isol2 独立形 ・ 語頭形 ・ 続け書きされる用字系、とりわけアラビア語に対して、単語の外(独立して)・先
init 語中形 ・ 語末形 頭・途中・末尾に出現するグリフを、各字体へ置き換え。
medi
fina
その他
_none 全機能無効化 すべての OpenType 機能を無効化。
1. こ の機能はデ フ ォル ト で有効です。
2. こ れ ら の機能は、 shaping=true の場合には自動的に有効化 さ れます。
166 第 7 章 : テキス ト 出力
> 必ず、 必要な場面でそのつど各機能を有効 ・ 無効を切 り 替え て く だ さ い。 OpenType 機
能を う っ か り 全テ キ ス ト に対 し て有効な ま ま に し てお く と 、 予期 し ない結果が生 じ る
こ と があ り ます。
> 以下の機能はデフ ォ ル ト で有効化 さ れます : calt ・ ccmp ・ clig ・ liga ・ locl。
セルビア語用キャラクター字体:
<features={locl} script=cyrl language=SRB charref>б
ウルドゥー語用数字字体:
<features={locl} script=arab language=URD charref>٢٣٤٥
特殊 南 ・ 中央ア ジ アⅠ : イ ン ド 公用用字系
欧州 テルグ telu
欧文 latn ベン ガル beng
中東 グルムキー guru
ヘブ ラ イ hebr タ ミル taml
アラ ビア arab マ ラ ヤー ラ ム mlym
東ア ジ ア 南 ・ 中央ア ジ アⅡ : その他現代用字系
彝 yi ラ ーオ lao
カ タ カナ kana 点字 brai
168 第 7 章 : テキス ト 出力
表 7.4 language オプ シ ョ ンに対するキーワー ド 。 対応 し ているすべての言語を挙げているわけではあ り ま
せん。
キー キー キー
ワー ワー ワー
ド 言語 ド 言語 ド 言語
_none 言語指定な し ELL ギ リ シ ャ語 PLK ポー ラ ン ド 語
ARA ア ラ ビ ア語 GUJ グジ ャ ラ ー ト 語 ROM ルーマニア語
BEN ベン ガル語 IWR ヘブ ラ イ語 RUS ロ シ ア語
BGR ブルガ リ ア語 HIN ヒ ンデ ィ ー SRB セルビ ア語
CAT カ タ ルーニ ャ 語 HUN ハン ガ リ ー語 SND シン ド語
ZHP 中国語注音符号 IND イ ン ド ネシ ア語 SNH シ ンハ ラ語
ZHS 中国語簡体字 JAN 日本語 ESP スペ イ ン語
ZHT 中国語繁体字 KAN カ ンナダ語 TAM タ ミ ル語
NLD オ ラ ン ダ語 KSH カ シ ミ ール語 TEL テルグ語
ENG 英語 KHM ク メ ール語 THA タ イ語
FAR ペルシ ア語 KOR 韓国語 TIB チベ ッ ト 語
FRA フ ラ ン ス語 ORI オ リ ヤー語 TRK ト ル コ 語1
DEU ド イ ツ語 PAS パシ ュ ト ー語 URD ウル ド ゥ ー語
7.5.1 複雑用字系
欧文用字系では左か ら 右へ、 1 つのキ ャ ラ ク タ ーの後に次のキ ャ ラ ク タ ーを配 し てい き ま
す。 他の用字系 (書記系) では他に も テ キ ス ト 出力のための必要事項があ り ます。 こ の よ
う な書記系を複雑用字系 と 呼ぶ こ と に し ます。 PDFlib は、 さ ま ざ ま な現代 と 昔の用字系の
ためのテ キ ス ト 処理を実行 し ます。 こ の項では こ の処理を さ ら に詳 し く 解説 し ます。 用字
系に よ っ ては他に も 処理が必要な も のがあ り ます :
> ア ラ ビ ア語 と ヘブ ラ イ 語では、 テ キ ス ト を右か ら 左へ置いてい き ま す。 混合テ キ ス ト
(ア ラ ビ ア文の中に欧文がは さ ま っ た) は、 右書き の部分 と 左書き の部分の両方を含み
ます。 こ れ ら の部分は並べ替えの必要があ り 、 こ れを双方向 (Bidi) 問題 と いい ます。
> い く つかの用字系、 と り わけア ラ ビ ア語では、 キ ャ ラ ク タ ーの位置 (単独、 語頭 / 語中
/ 語尾) に よ っ て異な る キ ャ ラ ク タ ー形状を用い ます。
> キ ャ ラ ク タ ー列を必須合字へ置 き 換え ます。
> グ リ フ の位置を縦 ・ 横へ調整す る 必要があ り ます。
> イ ン ド 系用字系では、 い く つかのキ ャ ラ ク タ ーの並べ替えが必要です。すなわち、 キ ャ
ラ ク タ ーはテ キ ス ト 内での位置が変わ る こ と があ り ます。
注意 複雑用字系のシ ェ ーピ ン グ を扱 う 際には以下に留意 し て く だ さ い :
> PDFlib は shaping・script オプシ ョ ン を自動的には設定せず、ユーザーがそれ ら を与え る
と 前提 し てい ます。
> 用字系固有のシ ェーピ ン グ (オプシ ョ ン shaping ・ script ・ language) は、 同一フ ォ ン ト
か ら のグ リ フ群に対 し てのみ適用 さ れ、 複数の フ ォ ン ト にわた る グ リ フ群には適用 さ
れ ません。 フ ォ ールバ ッ ク フ ォ ン ト を使っ てい る 場合は、 シ ェ ーピ ン グは同一 (ベー
ス ま たは予備) フ ォ ン ト のテ キ ス ト 区間内でのみ適用 さ れます。
> シ ェ ーピ ン グはテ キ ス ト 内のキ ャ ラ ク タ ーの順番を変え る こ と があ り ますので、 単語
内の属性変更については注意を払 う 必要があ り ます。 た と えば、 テ キ ス ト フ ロ ー内で
イ ン ラ イ ンオプシ ョ ン を用いて単語内の 2 番目のキ ャ ラ ク タ ーに色をつけ よ う と し て
い る 場合に、 シ ェーピ ン グが 1 番目 と 2 番目のキ ャ ラ ク タ ーを入れ替え た ら ど う な る
ので し ょ う か。 こ の理由か ら 、 シ ェーピ ン グ さ れた テ キ ス ト の中での書式の変更は、単
語の途中では行わずに、 単語の境界でのみ行 う 必要があ り ます。
170 第 7 章 : テキス ト 出力
> 選択 し た用字系に対 し て必要な OpenType 機能テーブルを フ ォ ン ト が持っ てい る 必要
があ り ます。
> フ ォ ン ト を encoding=unicode か glyphid で読み込む必要があ り ます。
> PDF_load_font( ) の vertical オプシ ョ ンは用いてはいけ ません。 ま た、 readshaping オプ
シ ョ ン を false に設定 し てはいけ ません。
7.5.2 シ ェ ー ピ ン グ処理を制御
用字系の選択 複雑用字系の処理 (shaping オプシ ョ ン) には script オプシ ョ ンが必須で
す。 さ ら に language オプシ ョ ン を与え る こ と も で き ます。 こ れはシ ェーピ ン グの言語独
自の側面を制御 し ます。 た と えばア ラ ビ ア語 と ウ ル ド ゥ ー語で数字を変え る な ど です。 し
か し 、 言語独自のシ ェーピ ン グ テーブルを持っ てい る フ ォ ン ト はかな り 少ないので、 多 く
の場合には script オプシ ョ ン を与えれば充分であ り 、language オプシ ョ ン を用いてシ ェー
ピ ン グ を向上 さ せる こ と はで き ません。 こ のシ ェ ーピ ン グ処理は、 表 7.5 に挙げ る 用字系
に対応 し てい ます。 以下のオプシ ョ ン リ ス ト は、 ア ラ ビ ア語テ キ ス ト に対 し てシ ェーピ ン
グ ( と 双方向処理) を有効化 し ます :
shaping script=arab
地域 対応 し ている用字系 と そのキーワー ド
中東 ア ラ ビ ア (arab) ・ ヘブ ラ イ (hebr)
7.5.3 双方向組版
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルがク ッ ク ブ ッ ク のcomplex_scripts/bidi_formatting ト ピ ッ ク にあ り
ます。
172 第 7 章 : テキス ト 出力
表 7.7 双方向アルゴ リ ズムを オーバー ラ イ ド する ための方向組版 コ ー ド
組版 コ ー ド 実体名 Unicode 名 機能
U+202C PDF 方向組版ポ ッ プ (PDF) 直前の LRE ・ RLE ・ RLO ・ LRO の前の双
方向ス テー タ スへ復帰
7.5.4 ア ラ ビ ア語テキス ト 組版
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルがク ッ ク ブ ッ ク の complex_scripts/arabic_formatting ト ピ ッ ク にあ
り ます。
174 第 7 章 : テキス ト 出力
7.6 日本語 ・ 中国語 ・ 韓国語テ キス ト 出力
7.6.1 TrueType ・ OpenType 日中韓 フ ォ ン ト を用い る
PDFlib は、 TrueType ・ TrueType/OpenType Collections (TTC/OTC) ・ OpenType 形式の日
中韓フ ォ ン ト に対応 し てい ます。 日中韓フ ォ ン ト は以下の よ う に処理 さ れます :
> embedding オプシ ョ ンが true な ら ば、フ ォ ン ト は CID フ ォ ン ト に変換 さ れて、PDF 出力
に埋め込まれます。
> Windows 上の日中韓ホ ス ト フ ォ ン ト 名は、BOM 付 き UTF-8 形式か UTF-16 形式で PDF_
load_font( ) に与え る こ と がで き ます。 macOS では非欧文ホ ス ト フ ォ ン ト 名に対応 し て
い ません。
176 第 7 章 : テキス ト 出力
fallbackfonts={
{fontname=PDFlibWing encoding=unicode forcechars=gaiji}
}
178 第 7 章 : テキス ト 出力
7.7 Unicode 異体字セ レ ク タ ー (UVS)
1 つの Unicode キ ャ ラ ク タ ーを表現す る グ リ フ が何種類 も 存在す る こ と も あ り ます。通常、
そ う し た視覚的差異は、 適切な フ ォ ン ト (レ ギ ュ ラ ーか イ タ リ ッ ク かな ど) か、 OpenType
機能で選択 さ れ る フ ォ ン ト 内の代替グ リ フ (ス ウ ォ ッ シ ュ キ ャ ラ ク タ ーな ど) を使っ て実
現 さ れます。 場面に よ っ ては、 グ リ フ の選択がセマ ン テ ィ ッ ク に意味を持ち、 フ ォ ン ト 関
連の組版情報一切 な し で プ レ ー ン テ キ ス ト 内で も そ れ を 明確にす る 必要が あ り ま す。
Unicode は こ の目的のために異体字セ レ ク タ ーを提供 し てい ます。
7.7.1 各種の異体字シーケ ン ス
1 つの Unicode 異体字シーケ ン ス (UVS) は、 1 つのベース Unicode キ ャ ラ ク タ ー と 、 その
後の 1 つの異体字セ レ ク タ ーか ら 成っ てい ます。 こ のシーケ ン ス は こ のベース キ ャ ラ ク
タ ーの異体字を選択 し ます。Unicode規格は各種のシーケ ン ス を定義 し てい ます。OpenType
フ ォ ン ト は、 異体字グ リ フ と その異体字セ レ ク タ ーを指定する UVS テーブルを持つ こ と
がで き ます。 こ の UVS テーブルは、 その フ ォ ン ト 内でデフ ォ ル ト ではど のグ リ フ異体字
が使用 さ れ、 ど の代替グ リ フ群が利用可能かを指定 し ます。
180 第 7 章 : テキス ト 出力
こ の ク エ リ ーは、 異体字が得 ら れ る か ど う か をチ ェ ッ ク す る こ と だけ を意図 し てい ます。
得 ら れ る Unicode 自体は、 PDFlib は異体字に PUA Unicode 値を割 り 当て ますので、 おそ ら
く 有用ではないで し ょ う 。
182 第 7 章 : テキス ト 出力
> その他、 範囲 U+0001 ~ U+0019 と U+007F ~ U+009F の Unicode 制御キ ャ ラ ク タ ーは
replacementchar キ ャ ラ ク タ ーで置 き 換え ら れます。
7.8.3 グ リ フ ID を転換
決定 さ れた グ リ フ ID は ま だ最終的な も のではあ り ません。 なぜな ら 最終出力を作成す る
前に、 い く つかの転換を行わなければな ら ない可能性があ る か ら です。 具体的に ど の よ う
な転換が必要かは、 フ ォ ン ト やい く つかのオプシ ョ ンに よ っ て異な り ます。
184 第 7 章 : テキス ト 出力
163 ページ 「7.4 OpenType レ イ ア ウ ト 機能」 で解説 し てい ます。 OpenType レ イ ア ウ ト 機
能は、 適切な フ ォ ン ト に対 し てのみ有効であ り (166 ページ 「OpenType レ イ ア ウ ト 機能
のための要件」 参照)、 かつ features オプシ ョ ンに従っ て適用 さ れます。 デフ ォ ル ト で有
効化 さ れ る レ イ ア ウ ト 機能 も あ り ます。
JPEG 2000 画像 JPEG 2000 画像 (ISO 15444-2) には PDF 1.5 以上が必要です。 PDFlib
は、 JPEG 2000 画像を、 以下の条件に従っ て受け付け ます :
> JP2・JPX ベース ラ イ ン画像 (通常 *.jp2 ま たは *.jpf) に対応 し てい ます。ただ し 以下の色
空間条件に従 う 必要があ り ます。 範囲 1 ~ 38 ビ ッ ト のすべての色深度値に対応 し てい
ます。
次の色空間に対応 し てい ま す : sRGB ・ sRGB グ レー ・ ROMM-RGB ・ sYCC ・ e-sRGB ・
e-sYCC ・ CIELab ・ ICC ベース色空間群 ・ CMYK。 PDFlib は、 JPEG 2000 画像フ ァ イ ル
内の元の色空間に変更を加え ません。
PDF/X-4/5 に対す る 追加の JPEG 2000 の制約 (JPEG 2000 は、 PDF 1.4 に基づいた PDF/
X-3 では許 さ れません) :
> カ ラ ーチ ャ ン ネルの数は 1 ・ 3 ・ 4 の う ちのいずれかであ る 必要があ り ます。
> 各カ ラ ーチ ャ ン ネルのビ ッ ト 深度は 1・8・16 の う ちのいずれかであ る 必要があ り ます。
> すべてのカ ラ ーチ ャ ン ネルが同一の ビ ッ ト 深度を持っ てい る 必要があ り ます。
> ち ょ う ど 1 個の色空間定義が JPEG 2000 画像フ ァ イ ル内に存在す る 必要があ り ます。
> CMYK 画像は、出力条件が CMYK デバ イ ス であ る 場合、ま たは defaultcmyk オプシ ョ ン
が与え ら れてい る 場合にのみ使用で き ます。
PDF/A-2 に対す る 追加の JPEG 2000 の制約 (JPEG 2000 は、 PDF 1.4 に基づいた PDF/A-
1 では許 さ れません) :
> カ ラ ーチ ャ ン ネルの数は 1 ・ 3 ・ 4 の う ちのいずれかであ る 必要があ り ます。
> すべてのカ ラ ーチ ャ ン ネルが同一の ビ ッ ト 深度を持っ てい る 必要があ り ます。
> そのJPEG 2000画像内の色空間指定の数が1 よ り 大き い場合には、APPROX フ ィ ール ド 内
に値 0x01 を持つ色空間指定がち ょ う ど 1 個存在す る 必要があ り ます。
8.1.3 ク リ ッ ピ ン グパス
PDFlib は、 Adobe Photoshop や互換 ソ フ ト で作成 さ れた TIFF ・ JPEG 画像の中の ク リ ッ ピ
ン グパ ス に対応 し てい ます。 1 つの画像フ ァ イ ルには、 複数の名前付き パ ス を含む場合が
あ り ます。 PDF_load_image( ) の clippingpathname オプシ ョ ン を使えば、 名前付き パ ス の
う ちの 1 つを選ぶ こ と がで き 、 それが ク リ ッ ピ ン グパ ス と し て使われ ます : 画像は、 ク
リ ッ ピ ン グパ ス の内部だけが可視 と な り 、 それ以外の部分は不可視にな り ます。 こ れは背
景 と 前景を分離 し た り 、 画像の不要部分を除去 し た り する のに有用です。
あ る いは、画像フ ァ イ ルはデフ ォ ル ト ク リ ッ ピ ン グパ ス を含む場合があ り ます。PDFlib
は、 画像フ ァ イ ル内に ク リ ッ ピ ン グパ ス を見つけた場合、 それを自動的にその画像に適用
し ます (図 8.1 参照)。デフ ォ ル ト ク リ ッ ピ ン グパ ス が適用 さ れない よ う にす る には、PDF_
load_image( ) で honorclippingpath オプシ ョ ン を false に設定 し ます。同 じ 画像の イ ン ス タ
図 8.1
ク リ ッ ピ ン グパス を利用 し て
前景 と 背景を分離
8.1.4 画像透過
画像透過は、 さ ま ざ ま な芸術的効果な ど に有用です。 た と えば、 画像の中の不要な部分を
無視 し て、 関心の対象であ る 人物や物だけ を見せ る こ と がで き ます。 PDFlib は、 画像透過
のためのい く つかの手法に対応 し てい ます :
> アルフ ァ チ ャ ン ネル ( ソ フ ト マ ス ク と も 呼ばれ る ) は、 各画像ピ ク セルに対 し て透過
値を指定す る も のです。 こ のアルフ ァ チ ャ ン ネルは、 取 り 込む画像フ ァ イ ルに含ま れ
てい る こ と も あ り ます し 、別のグ レース ケール画像 と し て指定す る こ と も で き ます。ピ
ク セルあ た り 1 ビ ッ ト よ り 多い ソ フ ト マ ス ク は PDF/A-1 ・ PDF/X-3 では許 さ れてい ま
せん。
> ク ロ マキーマ ス ク 処理は、 単色値ま たはカ ラ ー値範囲を透過 と 指定 し ます。 こ の透過
カ ラ ー値 (1 つない し 複数) は、 取 り 込む画像か ら 来 る こ と も あ り ます し 、 chromakey
オプシ ョ ン を通 じ て指定す る こ と も で き ます。
> ス テ ン シルマ ス ク 処理は、 透過領域を指定す る 別のビ ッ ト マ ッ プ画像を用い ます。
colorize オプ シ ョ ン を用いた画像着色
// ベース画像を読み込んでそれをマスク
image = p.load_image(type, filename, "masked=" + mask)
if (image == -1)
throw new Exception("エラー:" + p.get_errmsg());
p.fit_image(image, x, y, "");
ク ロ マキーオプ シ ョ ン 画像の色空間 効果
chromakey={255 255 255} RGB 白ピ ク セルを透過 と し て扱 う
chromakey={0 255 128 255 0 255} RGB 50% を超え るグ リ ーン を持つすべてのピ ク セルを透過
と し て扱 う
chromakey={242 255 242 255 242 255} RGB 95% よ り 明るいすべての色を透過 と し て扱 う
chromakey={242 255 242 255 242 255} RGB 95% よ り 明るいすべての色を透過 と し て扱い、 かつ、
decode={0 0.95 0 0.95 0 0.95} 95% で急に切 り 落 と さ れるのを防ぐ ために残 り の色を
拡散 さ せる
p.set_graphics_option("fillcolor=red);
p.fit_image(mask, x, y, "");
ク ッ ク ブ ッ ク コ ー ド サン プルがク ッ ク ブ ッ ク の color/colorize_image_with_DeviceN_color ト ピ ッ ク にあ
り ます。
復号オプ シ ョ ン 画像の色空間 効果
decode={1 0 1 0 1 0} RGB 画像の色を反転。 invert と 同 じ
p.close_graphics(graphics);
8.2.4 フ ォ ン ト 選択
フ ォ ン ト 選択アルゴ リ ズム SVG におけ る フ ォ ン ト 選択は、 以下のプ ロ パテ ィ に よ っ て
制御 さ れます :
font-family
font-style
font-weight
font-stretch
font-variant
font-size
font-size-adjust
こ こ で <font-normweight> は
Regular, Thin, Extralight, Light, Medium, Semibold, Bold, Extrabold, Black
の う ちのいずれか一つであ り 、 ま た <font-normstyle> は
Italic
こ れ ら の オ プ シ ョ ン を オ ー バー ラ イ ド す る に は、 PDF_load_graphics( ) の オ プ シ ョ ン
defaultfontoptions を用い ます。
sans Helvetica
sans,Bold Helvetica-Bold
sans,Italic Helvetica-Oblique
sans,Bold,Italic Helvetica-BoldOblique
sans-serif Helvetica
sans-serif,Bold Helvetica-Bold
sans-serif,Italic Helvetica-Oblique
sans-serif,Bold,Italic Helvetica-BoldOblique
serif Times-Roman
serif,Bold Times-Bold
serif,Italic Times-Italic
serif,Bold,Italic Times-BoldItalic
フ ォ ン ト 属性は自動的に追加 さ れ な い こ と に留意 し て く だ さ い。 た と え ば、 も し こ の
Trebuchet MS フ ォ ン ト が属性 font-weight="bold" で使われてい る な ら ば、 こ の フ ォ ン ト の
ボール ド 版へのエ イ リ ア ス を作成す る 必要があ り ます :
p.set_option("FontnameAlias={ {Trebuchet MS,Bold}={Arial Unicode MS} }");
デバイ ス独立色空間
デバイ ス依存色空間
> フ ィ ル タ ーのためのエ レ メ ン ト 群 :
feBlend, feColorMatrix, feComponentTransfer, feComposite, feConvolveMatrix,
feDiffuseLighting, feDisplacementMap, feDistantLight, feFlood, feFuncA, feFuncB,
feFuncG, feFuncR, feGaussianBlur, feImage, feMerge, feMergeNode, feMorphology,
feOffset, fePointLight, feSpecularLighting, feSpotLight, feTile, feTurbulence, filter
> その他のエ レ メ ン ト 群 :
cursor, foreignObject, vkern
/* 入力文書内のページ数。全ページを取り込むのに有用 */
pagecount = (int) p.pcos_get_number(doc, "length:pages");
/* ダミーのページ寸法。この後adjustpageオプションによって変更される */
p.begin_page_ext(20, 20, "");
p.fit_pdi_page(page, 0, 0, "adjustpage");
p.close_pdi_page(page);
...ページに内容を追加するPDFlib関数群...
p.end_page_ext("");
p.close_pdi_document(doc);
8.3.4 注釈 ・ フ ォ ーム フ ィ ール ド ・ ア ク シ ョ ン を取 り 込む
注釈を取 り 込む デフ ォ ル ト では PDI は、 取 り 込まれ る ページに存在 し てい る ページ内
容 と すべての注釈を取 り 込みます。 PDF_fit_pdi_page( ) の useannots オプシ ョ ン を与え る
と 、 リ ン ク 注釈な ど 選択 し た種類の注釈だけ を取 り 込め ま す。 注釈に紐付いてい る ア ク
シ ョ ン も 取 り 込まれます。 文書内の リ ン ク の移動先は、 ページの新 し い配置に合わせた も
のにな り ます。 た と えば、 取 り 込んだページの順序を変え て も 文書内の リ ン ク はなお動作
し ます。 リ ン ク の移動先は、 その タ ーゲ ッ ト ページが拡縮か回転 さ れてい る 場合な ど には
再計算 さ れます。 し か し 、 生成す る 出力文書の内容 と 構造に よ っ ては、 イ ン タ ラ ク テ ィ ブ
要素を再現で き ない こ と も あ り ます。 た と えば、 取 り 込んだページに次ページへの リ ン ク
があ っ た と し て、 なのにその タ ーゲ ッ ト ページ を取 り 込ま なか っ た ら 、 その リ ン ク はど こ
を指せば よ いで し ょ う か? 一般に PDFlib は、 で き る だけ多 く の イ ン タ ラ ク テ ィ ブ要素が
「シ ュ ラ ッ グ」 機能には以下の効果があ り ます :
> マ ス タ ーパ ス ワー ド が与え ら れていな く て も ページ を取 り 込む こ と がで き る 。
> pCOS 擬似オブジ ェ ク ト shrug が true/1 に設定 さ れ る 。
ポー ト フ ォ リ オ /Root/Collection PDF_begin/end_document( ) :
portfolio オプ シ ョ ン、
PDF_add_portfolio_file( )、
PDF_add_portfolio_folder( )
レ イ ヤー /Root/OCProperties/OCGs PDF_open_pdi_document( ) :
uselayers オプ シ ョ ン
8.4.2 オ ブ ジ ェ ク ト を点上か線上か枠内に配置
オブジ ェ ク ト を位置付け る ために、あ ら か じ め定義 し た幅 と 高 さ の枠を あわせて使 う こ と
も で き ます。 以下の図内の灰色の枠 と 線は、 枠の大 き さ を視覚化す る ために描 き 足 し て あ
る だけで、 実際の出力にはあ り ません。
オブジ ェ ク ト を枠内に配置す る こ と は、fitmethod=nofit の場合には意味があ り ません。
なぜな ら こ の場合、 そのオブジ ェ ク ト は位置付け ら れ る だけであ り 、 拡縮は行われないか
ら です。 boxsize オプシ ョ ン を用いて、 オブジ ェ ク ト 配置のための横線か縦線、 あ る いは
実際の枠を指定す る こ と がで き ます :
8.4.3 オ ブ ジ ェ ク ト の向 き を変え る
画像の向 き を変え て配置 今度の例 と し ては、 画像の向 き を西向 き に変え てみ ま し ょ う
(orientate=west)。 こ れはすなわち、 画像が 90° 反時計回 り に回転 さ れ、 その回転後のオ
ブジ ェ ク ト の左下隅が参照点 (0, 0) へ並行移動 さ れ る こ と を意味 し ます。 画像はその場で
回転 し ます (図 8.5a 参照)。 はめ込み方式を指定 し ていないので、 画像は元の大 き さ の ま
ま出力 さ れて、 枠か ら はみ出 し ます。
8.4.4 オ ブ ジ ェ ク ト を回転
rotate オプシ ョ ンは、 参照点を中心に座標系を回転 さ せ る こ と に よ っ て、 オブジ ェ ク ト を
回転 さ せます。 結果 と し て、 はめ込み枠 も 回転 さ れます。 図 8.3 に、 rotate オプシ ョ ンの
一般的な動作を図示 し ます。
図 8.6 画像を回転
生成 さ れる出力 PDF_fit_image に与え るオプ シ ョ ン リ ス ト
(x, y)
(x, y)
(x, y)
(x, y)
8.4.5 ページ寸法の調整
ページ寸法を画像に合わせる 今度の例 と し ては、 ページの大 き さ を オブジ ェ ク ト の大
き さ に自動的に合わせま し ょ う 。 こ れはた と えば、 さ ま ざ ま な画像を PDF 形式でアーカ
イ ブ し てお き たい と き な ど に有用です。 参照点 (x, y) を使えば、 ページ を オブジ ェ ク ト の
寸法 と ち ょ う ど同 じ にす る か、 それ と も 多少大 き めや小 さ めにす る か を、 指定す る こ と が
で き ます。 ページ寸法を大 き めにす る と (図 8.7 参照)、 画像の ま わ り にふちが残 り ます。
ページ寸法を画像 よ り 小 さ く す る と 、 画像の一部は切 り 落 と さ れます。 まずは、 ページ寸
法を オブジ ェ ク ト の大き さ と ち ょ う ど同 じ に し ま し ょ う :
p.fit_image(image, 0, 0, "adjustpage");
/* ページを開き、ページ枠エントリー群を転写 */
inpage = p.open_pdi_page(indoc, 1, "cloneboxes");
...
/* 出力ページをダミーページ寸法で開く */
p.begin_page_ext(10, 10, "");
...
/*
* 取り込みページを出力ページ上に配置し、入力ページ内にある
* すべてのページ枠を転写。これは、begin_page_ext()で用いた
* ダミー寸法をオーバーライドします。
*/
p.fit_pdi_page(inpage, 0, 0, "cloneboxes");
図 9.1 図 9.2
Kraxi
テキス ト の 西向きの
中央揃え 単純な テキス ト
y Kraxi y
x x
Kraxi ᨒߩ50㜞ߐ22
Kraxi
ᨒߩਅ┵ਛᄩߦ࠹ࠠࠬ࠻
20 20 ᨒߩ50㜞ߐ0
30 20
g)
Kraxi Systems boxsize={100 35} position=center fontsize=12
fitmethod=entire
127.123
12.01 boxsize={70 8} position={center bottom} alignchar=.
a)
123.0
4025.20
127.123
12.01 boxsize={70 8} position={left bottom} alignchar=.
b)
123.0
4025.20
ng
Giant Wi
fontsize=8 boxsize={160 50} stamp=ll2ur showborder=true
9.1.7 パス上テキス ト
テ キ ス ト を 直線上に配置す る の で は な く 、 任意のパ ス 上に配置す る こ と も で き ま す。
PDFlib は個々のキ ャ ラ ク タ ーをパス上に、テ キ ス ト がそのパ ス の曲線に沿 う よ う に配置 し
ます。 パ ス上テ キ ス ト を作成す る には PDF_fit_textline( ) の textpath オプシ ョ ン を用い ま
す。 パ ス はそれ以前に作成済みであ る 必要があ り 、 パ スハン ド ルで表 し ます。 パ スハン ド
ルは、PDF_add_path_point( ) お よ び関連す る パ ス オブジ ェ ク ト 関数群で明示的にパ ス を構
築す る か、あ る いは既存の ラ ス タ ー画像内の ク リ ッ ピ ン グパ ス のハン ド ルを取得す る こ と
に よ っ て作成で き ます。 以下の コ ー ド 断片は、 1 個のパ ス を作成 し 、 テ キ ス ト を そのパ ス
上に配置 し ます (図 9.10 参照) :
/* パスを原点に定義 */
path = p.add_path_point( -1, 0, 0, "move", "");
path = p.add_path_point(path, 100, 100, "control", "");
path = p.add_path_point(path, 200, 0, "circular", "");
/* テキストをパス上に配置 */
p.fit_textline("Long Distance Glider with sensational range!", x, y,
"textpath={path=" + path + "} position={center bottom}");
/* 例ですのでパスも描いてみせましょう */
p.draw_path(path, x, y, "stroke strokecolor=dodgerblue");
er with sen
Glid
図 9.10
e sa パス上テキス ト
nc tio
a
na
t
Dis
l ra
Long
nge !
/* 画像のクリッピングパスからパスオブジェクトを作成 */
path = (int) p.info_image(image, "clippingpath", "");
if (path == -1)
throw new Exception("エラー : クリッピングパスが見つかりません!");
/* テキストをパス上に配置 */
p.fit_textline("Long Distance Glider with sensational range!", x, y,
"textpath={path=" + path + "} position={center bottom}");
li d e r w it h s e n 図 9.11
e G sa パス上テキス ト で、 パス と テキ
nc ti o ス ト の間を あけた
ta
na
Di s
l ra
Long
nge!
p.fit_textline("Preliminary", 0, 0,
"fontsize=12 fontname=Helvetica-Bold fillcolor=red " +
"boxsize={595 842} stamp=ll2ur");
p.end_template_ext(0, 0);
図 9.12
テキス ト フ ロー
Kraxi Systems, Inc.
の組版
Paper Planes
17, Aviation Road
Paperfield
Phone 7079-4301
Fax 7079-4302
info@kraxi.com
Kraxi Systems, Inc. 17, Aviation Road Paperfield www.kraxi.com
John Q. Doe
255 Customer Lane
Suite B
12345 User Town
Everland
INVOICE 14.03.2004
hortabmethod ruler
tabalignment right left right right right
ruler 30 45 275 375 475
ITEM DESCRIPTION QUANTITY PRICE AMOUNT
1 Super Kite 2 20,00 40,00
2 Turbo Flyer 5 40,00 200,00
3 Giga Trash 1 180,00 180,00
4 Bare Bone Kit 3 50,00 150,00
5 Nitty Gritty 10 20,00 200,00
6 Pretty Dark Flyer 1 75,00 75,00
7 Free Gift 1 0,00 0,00
845,00
leftindent Terms of payment: 30 days net. 30 days warranty starting at the day of sale. This
warranty covers defects in workmanship only. Kraxi Systems, Inc., at its option, repairs or alignment
= 55 replaces the product under warranty. This warranty is not transferable. Returns or = left
exchanges are not possible for wet products.
fillcolor, charspacing,
fontsize, fontname
aerobatics. But it is best suited to gliding.
3. C one H ea d R oc ke t
This paper arrow can be thrown with big swing. We launched it from
the roof of a hotel. It stayed in the air a long time and covered a
considerable distance.
4. Super Dart
The super dart can fly giant loops with a radius of 4 or 5 meters and
cover very long distances. Its heavy cone point is slightly bowed
upwards to get the lift required for loops.
5. German Bi-Plane
Brand-new and ready for take-off. If you have lessons in the history of 図 9.13
aviation you can show your interest by letting it land on your teacher's テキス ト フ ロー
desk. の組版
/* テキストを標準フォントで追加 */
tf = p.add_textflow(tf, text2, "fontname=Helvetica fontsize=9");
if (tf == -1)
throw new Exception("エラー:" + p.get_errmsg());
p.delete_textflow(tf);
/* テキスト全部が配置されるまで回る。配置するべきテキストがまだあるなら新規ページを作成。
* 全ページに2段組を作成。
*/
do
{
String optlist = "verticalalign=justify linespreadlimit=120%";
/* 1段目に流し込み */
result = p.fit_textflow(tf, llx1, lly1, urx1, ury1, optlist);
/* まだテキストがあるなら2段目に流し込み */
p.end_page_ext("");
/* 「_boxfull」ならまだテキストがあるので続ける必要がある。
* 「_nextpage」は「新規段組を開始」と解釈
*/
} while (result.equals("_boxfull") || result.equals("_nextpage"));
/* エラーかどうかをチェック */
if (!result.equals("_stop"))
{
/* 枠がとても小さくてテキストが全然入らないときは「_boxempty」が起こる。
*/
if (result.equals( "_boxempty"))
throw new Exception("エラー:" + p.get_errmsg());
else
{
/* それ以外の戻り値は「return」オプションによるユーザー終了。
* これを扱うにはそのためのコードが必要。
*/
}
}
p.delete_textflow(tf);
9.2.2 段落の組版のオ プ シ ョ ン
上の例では段落に、 デフ ォ ル ト の設定を用い ま し た。 デフ ォ ル ト は左揃え、 行送 り 100%
(文字サ イ ズその ま ま)、 な ど と な っ てい ます。
段落の組版を調整 し たいな ら 、 PDF_add_textflow( ) にオプシ ョ ン を追加で き ます。 た
と えばテ キ ス ト を左余白か ら 15 単位、 右余白か ら 10 単位、 イ ンデン ト し たい と し ます。
各段落の先頭行は さ ら に 20 単位 イ ンデン ト し ま し ょ う 。 テ キ ス ト を両端揃え と し 、 行送
り は 140% に拡げま し ょ う 。 そ し て文字サ イ ズ を 8 ポ イ ン ト に下げます。 こ れを実現す る
には、PDF_add_textflow( ) のオプシ ョ ン リ ス ト を以下の よ う に拡張 し ます (図 9.15 参照):
図 9.14
eiusmod tempor incididunt ut labore et nulla pariatur. Excepteur sint occaecat Ut enim ad minim veniam, quis nostrud sunt in culpa qui officia deserunt mollit anim
dolore magna aliqua. Ut enim ad minim cupidatat non proident, sunt in culpa qui exercitation ullamco laboris nisi ut aliquip ex id est laborum. 26 Lorem ipsum dolor sit
veniam, quis nostrud exercitation ullamco officia deserunt mollit anim id est laborum. ea commodo consequat. Duis aute irure amet, consectetur adipisicing elit, sed do
laboris nisi ut aliquip ex ea commodo con- 13 Lorem ipsum dolor sit amet, consectetur dolor in reprehenderit in voluptate velit esse eiusmod tempor incididunt ut labore et
テキス ト フ ローを
sequat. Duis aute irure dolor in reprehenderit adipisicing elit, sed do eiusmod tempor cillum dolore eu fugiat nulla pariatur. Excep- dolore magna aliqua. Ut enim ad minim
in voluptate velit esse cillum dolore eu fugiat incididunt ut labore et dolore magna aliqua. teur sint occaecat cupidatat non proident, veniam, quis nostrud exercitation ullamco
nulla pariatur. Excepteur sint occaecat Ut enim ad minim veniam, quis nostrud sunt in culpa qui officia deserunt mollit anim laboris nisi ut aliquip ex ea commodo con-
cupidatat non proident, sunt in culpa qui exercitation ullamco laboris nisi ut aliquip ex id est laborum. 20 Lorem ipsum dolor sit sequat. Duis aute irure dolor in reprehenderit
2 つのはめ込み枠
officia deserunt mollit anim id est laborum. ea commodo consequat. Duis aute irure amet, consectetur adipisicing elit, sed do in voluptate velit esse cillum dolore eu fugiat
7 Lorem ipsum dolor sit amet, consectetur dolor in reprehenderit in voluptate velit esse eiusmod tempor incididunt ut labore et nulla pariatur. Excepteur sint occaecat
adipisicing elit, sed do eiusmod tempor cillum dolore eu fugiat nulla pariatur. Excep- dolore magna aliqua. Ut enim ad minim cupidatat non proident, sunt in culpa qui
incididunt ut labore et dolore magna aliqua. teur sint occaecat cupidatat non proident, veniam, quis nostrud exercitation ullamco officia deserunt mollit anim id est laborum.
sunt in culpa qui officia deserunt mollit anim
に配置
Ut enim ad minim veniam, quis nostrud laboris nisi ut aliquip ex ea commodo con- 27 Lorem ipsum dolor sit amet, consectetur
exercitation ullamco laboris nisi ut aliquip ex id est laborum. 14 Lorem ipsum dolor sit sequat. Duis aute irure dolor in reprehenderit adipisicing elit, sed do eiusmod tempor
ea commodo consequat. Duis aute irure amet, consectetur adipisicing elit, sed do in voluptate velit esse cillum dolore eu fugiat incididunt ut labore et dolore magna aliqua.
String optlist =
"leftindent=15 rightindent=10 parindent=20 alignment=justify " +
"leading=140% fontname=Helvetica fontsize=8";
9.2.3 イ ン ラ イ ン オ プ シ ョ ン リ ス ト と マ ク ロ
図 9.15 のテ キ ス ト は ま だ完璧ではあ り ません。 見出 し 「Have a look at our new paper plane
models!」 を独立 し た行に し て、 フ ォ ン ト も も っ と 大き く し て、 そ し て中央揃えに し ま し ょ
う 。 こ れを実現す る にはい く つかの方法があ り ます。
イ ン ラ イ ン オ プ シ ョ ン リ ス ト こ こ ま では組版オプシ ョ ン は、 メ ソ ッ ド に直接与え る オ
プシ ョ ン リ ス ト 内で指定 し て き ま し た。 今回 も こ れ と 同 じ や り 方を続け る な ら ば、 テ キ ス
ト を分割 し て二度の呼び出 し に分け る 必要があ り ます。 一度目で見出 し を、 二度目で残 り
のテ キ ス ト を配置す る わけです。 ですが、 場合に よ っ ては、 た と えば書式変更箇所が多い
と き な どは、 こ の方法は面倒か も し れません。
オプ シ ョ ン の取 り 扱い を 楽にす る た めに、 テ キ ス ト フ ロ ーに対 し て イ ン ラ イ ン オプ
シ ョ ン を与え る こ と も で き ます。 すなわち、 テ キ ス ト 内容 と 組版オプシ ョ ン を必要に応 じ
て混在 さ せ る のです。 PDF_create_textflow( ) と PDF_add_texflow( ) で inlineoptions オプ
シ ョ ン を用い る と 、 テ キ ス ト と 、 そのテ キ ス ト の中に直接入れ込 ま れた イ ン ラ イ ン オプ
シ ョ ン が解釈 さ れ ま す。 こ れは単純にオプシ ョ ン を テ キ ス ト 内に入れ込む と い う こ と で
す。 イ ン ラ イ ン オプシ ョ ン リ ス ト はテ キ ス ト 本体の一部 と し て与え ら れます。 デフ ォ ル ト
では、 イ ン ラ イ ンオプシ ョ ンはキ ャ ラ ク タ ー 「<」 と 「>」 では さ みます。 それでは次の よ
う に、見出 し と 残 り の段落に対す る オプシ ョ ン を テ キ ス ト 本体の中に入れ込んでみま し ょ
う。
9.2.4 タ ブ位置
次の例では タ ブキ ャ ラ ク タ ーを用いて左寄せ ・ 右寄せの列のあ る 簡単な表を配置 し ます。
表は以下の よ う な複数行のテ キ ス ト を持ち、個々のエン ト リ ーが互いに タ ブキ ャ ラ ク タ ー
(矢印で示す) で区切っ て あ り ます :
swing. We launched it from the roof of a hotel. It stayed in the air a long time and
covered a considerable distance.
1. Long Distance Glider: With this paper rocket you can send all your 図 9.18
messages even when sitting in a hall or in the cinema pretty near the 番号付き リ ス ト
back.
2. Giant Wing: An unbelievable sailplane! It is amazingly robust and can
even do aerobatics. But it is best suited to gliding.
3. Cone Head Rocket: This paper arrow can be thrown with big swing. We
launched it from the roof of a hotel. It stayed in the air a long time and
covered a considerable distance.
1. Long Distance Glider: With this paper rocket you can send all your messages
even when sitting in a hall or in the cinema pretty near the back.
<nextline leading=80%><nextparagraph leading=100%>2. Giant Wing: An unbelievable
sailplane! It is amazingly robust and can even do aerobatics. But it is best suited to
gliding.
9.2.6 制御キ ャ ラ ク タ ー と キ ャ ラ ク タ ーマ ッ ピ ン グ
テキス ト フ ロ ー内で制御キ ャ ラ ク タ ー テ キ ス ト フ ロ ーの中で は さ ま ざ ま な キ ャ ラ ク
タ ーが特別な扱いを受け ます。 PDFlib はシ ン ボ リ ッ ク キ ャ ラ ク タ ー名に対応 し てお り 、 こ
れはその対応す る 文字 コ ー ド のかわ り と し て charmapping オプシ ョ ン(テ キ ス ト を処理す
る 前にその中の キ ャ ラ ク タ ーを置換で き る オプシ ョ ン。 後述) 内で用い る こ と がで き ま
す。 表 9.1 に、 テ キ ス ト フ ロ ー関数群が評価す る すべての制御キ ャ ラ ク タ ーを、 それぞれ
のシ ン ボ リ ッ ク 名 と 意味説明 と と も に挙げて あ り ます。 1 つのオプシ ョ ン リ ス ト の中で同
じ オプシ ョ ン を複数回使 う こ と はで き ませんが、複数のオプシ ョ ン リ ス ト を連続 し て与え
る こ と は可能です。 た と えば以下の並びは空行を作成 し ます :
<nextline><nextline>
U+000A LF, linefeed next- (next paragraph) nextline と 同効果。 それに加え、 parindent
U+000D CR, return paragraph オプ シ ョ ンが次の行に影響 し ます
U+000D ・ U+000A CRLF
U+0085 NEL, newline
U+2029 PS, parasep
To fold the famous rocket looper proceed as follows: Take a sheet of 下 : charmapping オプ シ ョ ン で
paper. Fold it lengthwise in the middle. Then, fold down the upper 改行を置換 し た もの
corners. Fold the long sides inwards that the points A and B meet on
the central fold.
/* オプションリストを組み立て */
String optlist = "fontname=Helvetica fontsize=9 alignment=justify "
"charmapping {CRLF {space -1}}"
/* テキストフローをはめ込み枠に配置 */
textflow = p.add_textflow(-1, text, optlist);
if (textflow == -1)
throw new Exception("エラー:" + p.get_errmsg());
p.delete_textflow(textflow);
9.2.7 ハ イ フ ネーシ ョ ン
PDFlib は自動的にテ キ ス ト のハ イ フ ネーシ ョ ン を行 う 能力は持ち ませんが、テ キ ス ト 内で
ソ フ ト ハ イ フ ン キ ャ ラ ク タ ーに よ っ て明示的にハ イ フ ネーシ ョ ン機会が示 さ れてい る 場
合にはそ こ で単語を分割す る こ と がで き ます。 ソ フ ト ハ イ フ ン キ ャ ラ ク タ ーは Unicode で
は位置 U+00AD にあ り ます。 あ る いは文字実体を用い る こ と も で き ます : ­
グ リ フ U+00AD がその フ ォ ン ト 内で得 ら れ る 場合にはそれが、 そ う でない場合には
U+002D がハ イ フ ン キ ャ ラ ク タ ー と し て使われ ま す。 ソ フ ト ハ イ フ ン で示 さ れたハ イ フ
ネーシ ョ ン機会でな く て も 、 単語は強制的にハ イ フ ネーシ ョ ン さ れ る こ と があ り ます。 こ
れは単語間隔伸縮や長体な ど、他の調整手段が う ま く いかなかっ た極端な場合に起 こ り ま
す。
Our paper planes are the ideal way of pas sing the time. We offer revolu tionary
brand new dev elop ments of the tradi tional common paper planes. If your lesson,
confe rence, or lecture turn out to be deadly boring, you can have a wonder ful time
with our planes. All our models are folded from one paper sheet. They are exclu sively
folded without using any adhe sive. Several models are equip ped with a folded
landing gear enab ling a safe landing on the intended loca tion provided that you
図 9.21 図 9.22
テキス ト 両端揃えで ソ フ ト ハイ フ ンあ り 。 テキス ト 両端揃えで ソ フ ト ハイ フ ン な し 。
デ フ ォ ル ト 設定 と 広いはめ込み枠を使用。 デ フ ォル ト 設定 と 広いはめ込み枠を使用。
have aimed well. Other models are able to fly loops or cover long dist ances. Let them
start from a vista point in the mount ains and see where they touch the ground.
9.2.8 ウ ィ ド ー行 ・ オー フ ァ ン行
1 つの段落の先頭の 1 行 (ない し 複数行) だけが段ま たはページの下端に現れ る と き 、 こ
れをオーフ ァ ン と いい ます。 同様に、 1 つの段落の末尾の 1 行 (ない し 複数行) が次の段
ま たはページの先頭に現れ る と き 、 こ れを ウ ィ ド ー と いい ます。 高品質な文字組版におい
て、 孤立 し たオーフ ァ ン行ま たは ウ ィ ド ー行は望ま し く ない と 考え ら れてい ます。
縦書 き はテ キ ス ト フ ロ ーでは対応 し てい ません。
9.2.10 高度な用字系固有の改行
PDFlib は、 標準の改行アルゴ リ ズ ム に加え て、 追加の改行アルゴ リ ズ ム を実装 し てい ま
す。 こ の高度な改行アルゴ リ ズ ムは、 い く つかの用字系では必須であ り 、 ま た、 必須でな
いその他の用字系 / ロ ケールの組み合わせのなかに も 、 こ れに よ り 改行動作が改善 さ れ る
も のがあ り ます。 こ れは advancedlinebreak オプシ ョ ンで有効にする こ と がで き ます。 改
行はテ キ ス ト の言語に依存 し ますので、 高度な改行アルゴ リ ズ ムは script オプシ ョ ン (表
7.3 参照) と locale オプシ ョ ン (PDFlib API リ フ ァ レ ン ス参照) に従い ます。 高度な改行
は、 以下の状況において正 し い改行機会を決定 し ます :
図 9.25 図 9.26
範囲枠を持つ画像にテキス ト を回 り 込ませる 三角形の輪郭にテキス ト を回 り 込ませる
Have a look at our new paper plane models! Our Our paper planes are50% 80%
the ideal way of passing the time.
paper planes are the ideal way of passing the time. We offer a lot of revolutionary brand-new developments
We offer revolutionary new of the traditional common paper planes. If your
developme- nts of the traditi- lesson, conference, or lecture turn out to be
deadly boring, you can have a wonderful
onal com- mon paper planes. time with our planes. All our models are
If your les- son, conference, folded from one paper sheet. They
or lecture turn out to be are exclusively folded without
deadly bor- ing, you can using
20% 30% any 80% 30%
adhesive.
have a wonderful time with our planes. All our Several models are equipped with a folded landing gear.
enabling a safe landing on the intended location provided
models are folded from one paper sheet. They are that you have aimed well. Other models are able to fly
exclusively folded without using any adhesive. loops or cover long distances.
p.delete_path(path);
/* 画像のクリッピングパスからパスオブジェクトを作成 */
path = (int) p.info_image(image, "clippingpath", "");
if (path == -1)
throw new Exception("エラー : クリッピングパスが見つかりません!");
p.delete_path(path);
/* 画像を何らかのはめ込みオプション群でページ上に配置 */
String imageoptlist = "scale=2";
p.fit_image(image, x, y, imageoptlist);
/* 同じオプションリストを用いて、画像からパスオブジェクトを作成 */
path = (int) p.info_image(image, "clippingpath", imageoptlist);
if (path == -1)
throw new Exception("エラー : クリッピングパスが見つかりません!");
p.delete_path(path);
50% 0%
な お、 こ こ で も showborder=true オ プ シ ョ ン を 使 っ て 輪郭 を 図示 し て あ り ま す。 も し
addfitbox オプシ ョ ン をつけなければ、 ひ し 形は空の ま ま、 その ま わ り にテ キ ス ト が回 り
込む こ と にな り ます。
9.3.1 単純な表を配置
表の概念を さ ら に詳 し く 説明す る 前に、 単純な表作成の例を示 し ます。 表には 6 つのセル
があ り 、 3 表行 ・ 2 列に配 さ れてい ます。 4 つのセルにはテ キ ス ト 行があ り 、 1 つのセルに
は複数行のテ キ ス ト フ ロ ーがあ り ます。 セルの内容はすべて、 余白を 1 単位 と っ て横方向
に左寄せ、 縦方向に中央揃えにな っ てい ます。
こ の表を作成す る ために、 まずはテ キ ス ト 行セルに対す る オプシ ョ ン リ ス ト を作 る た
めに、 その fittextline サブオプシ ョ ン リ ス ト で、 必要なオプシ ョ ン font ・ fontsize と 位置
{left center} を定義 し ま し ょ う 。 さ ら に、 1 単位のセル余白を定義 し ま し ょ う 。 そ し て、 テ
キ ス ト 行セルを 1 つずつそれぞれの列 ・ 表行に追加 し 、 その際に中身のテ キ ス ト も 、 PDF_
add_table_cell( ) への呼び出 し に直接与え ます。
次に、 テ キ ス ト フ ロ ーを作成 し 、 そのテ キ ス ト フ ロ ーのハン ド ルを使っ て テ キ ス ト フ
ロ ー表セルに対す る オプシ ョ ン リ ス ト を構築 し た後、 そのセルを表に追加 し ま し ょ う 。
最後に、 PDF_fit_table( ) を使っ て表を配置 し 、 その際に、 表の外枠 と セルの各辺を黒
い罫線で視覚化 し ま し ょ う 。 列の幅は一切与え ませんで し たので、 与え たテ キ ス ト 行 と 余
白か ら 自動的に計算 さ れます。
/* 1列目と2列目の列幅を定義 */
int c1 = 80, c2 = 120;
/* 表インスタンスの左下隅と右上隅を定義(はめ込み枠)*/
double llx=100, lly=500, urx=300, ury=600;
/* エラー時には抜け出す */
p.set_option("errorpolicy=exception");
/* フォントを読み込む */
font = p.load_font("Helvetica", "unicode", "");
/* 1列目に配置するテキスト行セルに用いるオプションリストを定義 */
optlist = "fittextline={position={left center} font=" + font + " fontsize=8} margin==4" +
colwidth=" + c1;
/* 列1表行1にテキスト行セルを追加 */
tbl = p.add_table_cell(tbl, 1, 1, "Our Paper Planes", optlist);
/* 列1表行2にテキスト行セルを追加 */
tbl = p.add_table_cell(tbl, 1, 2, "Material", optlist);
/* 列1表行3にテキスト行セルを追加 */
tbl = p.add_table_cell(tbl, 1, 3, "Benefit", optlist);
/* 2列目に配置するテキスト行に用いるオプションリストを定義 */
optlist = "fittextline={position={left center} font=" + font + " fontsize=8} " +
"colwidth=" + c2 + " margin=4";
/* 列2表行2にテキスト行セルを追加 */
tbl = p.add_table_cell(tbl, 2, 2, "Offset print paper 220g/sqm", optlist);
/* テキストフローを追加 */
optlist = "font=" + font + " fontsize=8 leading=110%";
tf = p.add_textflow(-1, tf_text, optlist);
/* 上で取得したハンドルを使ってテキストフローセルに用いるオプションリストを定義 */
optlist = "textflow=" + tf + " margin=4 colwidth=" + c2;
/* 列2表行3にテキストフロー表セルを追加 */
tbl = p.add_table_cell(tbl, 2, 3, "", optlist);
/* 表をはめ込むためのオプションリストを表枠とセル罫線つきで定義 */
optlist = "stroke={{line=frame linewidth=0.8} {line=other linewidth=0.3}}";
/* 表インスタンスを配置 */
result = p.fit_table(tbl, llx, lly, urx, ury, optlist);
/* これは、表内で使われたテキストフローハンドル群も一緒に削除します */
p.delete_table(tbl, "");
࠹ࠠࠬ࠻ⴕ
࠹ࠠࠬ࠻ⴕ
࠹ࠠࠬ࠻ⴕ ࠹ࠠࠬ࠻ⴕ
࠹ࠠࠬ࠻ⴕ
࠹ࠠࠬ࠻ⴕ ࠹ࠠࠬ࠻ࡈࡠ ....................
.............................................. 図 9.31
.............................................. 表セルの さ ま ざ ま
な内容
࡞ౝᨒ
Ꮐ⊕ ฝ⊕
図 9.32
内容を セル内枠に
࡞ᨒ はめ込み
ਅ⊕
9.3.3 表 と 列の幅
セルを表に追加す る 際には、 そのセルが ま たが る 列か表行、 ま たは両方の数を、 colspan ・
rowspan オプシ ョ ン で定義 し ます。 デフ ォ ル ト ではセルの列は 1 つ、 表行 も 1 つです。 表
の列 と 表行の総数は、 セルを追加す る ご と に、 それぞれの値だけ自動的に加算 さ れ ます。
図 9.33 に、 3 列 ・ 4 表行の表の例を示 し ます。
ⴕ1
1 1
㧟ߟߩ ............ ߦ ............ ࠊߚࠆ ............ ࡞ 図 9.33
1 2 3 2
単純セル と 、 複数の表行や
ⴕ2 㧞ߟߩ ...... ߦ ...... ࠊߚࠆ ...... ࡞ 㧟ߟߩ .... 列を連結 し たセル
1 3 2 3
ⴕ3 න⚐࡞ න⚐࡞ .... ⴕߦ ....
1 4 2 4
ⴕ4 න⚐࡞ න⚐࡞ .... ࠊߚࠆ࡞
1 2 3
1 1
colspan=3 図 9.34
colwidth=50 列幅を足 し 合わせる
1 2 colspan=2 3 2
と 表全体の幅に
colwidth=50
1 3
colspan=1 2 3
colspan=1 rowspan=3
colwidth=50 colwidth=100 colwidth=90
1 4 2 4
colspan=1 colspan=1
colwidth=50 colwidth=100
50 100 90
ߩో 240
ᄢ❗ዊࠣ࡞ࡊ
図 9.35
Max. Load
Speed
り ます。
9.3.4 さ ま ざ ま な種類の内容を持 っ た表
以下のい く つかの項では、 図 9.36 に示す よ う な、 さ ま ざ ま な種類の内容を持っ た表の例
を、 一歩ずつ作成 し てい き ま し ょ う 。
図 9.36 さ ま ざ ま な内容の表セルを一歩ずつ追加
生成 さ れる表 生成手順
手順 6 : 表をはめ込む 最後 の 手順 と し て、 表 を PDF_fit_table( ) で 配置 し ま し ょ う 。
header=1 を用い る と 、 1 行目が表のヘ ッ ダーにな り ます。 fill オプシ ョ ン と area=header ・
fillcolor={rgb 0.8 0.8 0.87} サブオプシ ョ ンは、 与え た色でヘ ッ ダー行を塗 る よ う 指定 し て
い ます。 stroke オプシ ョ ン と line=frame linewidth=0.8 サブオプシ ョ ン を用いて、 表の外枠
の線幅を 0.8 と し て定義 し ま し ょ う 。 line=other linewidth=0.3 を用い る と 、 すべてのセル
の罫が線幅 0.3 と し て指定 さ れます :
optlist = "header=1 fill={{area=header fillcolor={rgb 0.8 0.8 0.87}}} " +
"stroke={{line=frame linewidth=0.8} {line=other linewidth=0.3}}";
if (result.equals("_error"))
throw new Exception("エラー:" + p.get_errmsg());
p.end_page_ext("");
9.3.5 表 イ ン ス タ ン ス
1 つのはめ込み枠に配置 さ れた表行群は、 表 イ ン ス タ ン ス を構成 し ます。 表全体を表現す
る には、 複数の表 イ ン ス タ ン ス が必要な こ と も あ り ます。 PDF_fit_table( ) は、 1 回呼び出
さ れ る ご と に、 1 つのはめ込み枠に 1 つの表 イ ン ス タ ン ス を配置 し ます。 こ れ ら のはめ込
み枠は、 同 じ ページに多段組レ イ ア ウ ト な ど で配置 し てお く こ と も 、 ま たは複数のページ
に配置 し てお く こ と も で き ます。
図 9.37 の表は、 3 つのページにわた っ てい ます。 各ページに 1 つずつあ る はめ込み枠
に、 各表 イ ン ス タ ン ス が 1 つずつ配置 さ れます。 PDF_fit_table( ) を呼び出すたびに、 最初
の行はヘ ッ ダー と し て定義 さ れ、 最後の行はフ ッ タ ー と し て定義 さ れます。
図 9.37
表は複数の表イ ン ス タ
Our Paper Plane Models ン スに分解 さ れ、 各は
3 Cone Head Rocket め込み枠に 1 つずつ配
Material Kent paper 200g/sqm
置 さ れます。
With big swing!
BenefitOur Paper Plane
This paper Models
arrow can be
thrown with big swing. It
2 Long Distance Glider
stays in the air a long time.
Material Drawing paper 180g/sqm
ࡋ࠶࠳ Benefit Our PaperWith this Plane Models
paper rocket you
ࠗࡦࠬ࠲ࡦࠬ
ࡍࠫ2
ߩߪㄟߺᨒ
ࡍࠫ1
/* 最初の行をヘッダーとして使い、すべての表セルに線をひく */
optlist = "header=1 stroke={{line=other}}";
/* 表インスタンスを配置 */
result = p.fit_table(tbl, llx, lly, urx, ury, optlist);
if (result.equals("_error"))
throw new Exception("エラー:" + p.get_errmsg());
p.end_page_ext("");
} while (result.equals("_boxfull"));
/* 結果をチェック。 「_stop」はすべてOKを意味します */
if (!result.equals("_stop")) {
if (result.equals( "_error"))
throw new Exception("エラー:" + p.get_errmsg());
else {
/* これ以外の戻り値はすべて「return」オプションによるユーザー終了。
* これを扱うには専用のコードが必要です。*/
throw new Exception ("テキストフロー内でユーザーリターンを検出しました");
}
}
/* 表内で使ったテキストフローハンドルも削除されます */
p.delete_table(tbl, "");
表行の連動 い く つ か の 表 行 を 必 ず 同 じ 表 イ ン ス タ ン ス に 入 れ さ せ た い と き は、
rowjoingroup オプシ ョ ン を使っ て、それ ら を同 じ 表行連動グループに割 り 当て る こ と がで
き ます。 表行連動グループは、 連続す る 複数の表行を持ち ます。 こ のグループの表行は、
複数の表 イ ン ス タ ン ス に別れ さ せ ら れ る こ と がな く な り ます。
セルで複数表行を連結 し て も 、 それ ら の表行は自動的に連動グループにはな り ません。
ࠗࡦࠬ
Benefit it is best suited to gliding.
࠲ࡦࠬ2
9.3.6 表組版のアルゴ リ ズム
こ の項では、 表組版機能が表を配置す る 際に行 う ス テ ッ プ を詳説 し ます。 以下、 横書 き テ
キ ス ト の場合について述べ ます。 し か し 、 「表行高 さ 」 と 「列幅」 と い う 言葉を互いに入
れ替えれば、 縦書 き や回転テ キ ス ト に も あ ては ま り ます。
PDF_fit_table( ) へ の 最 初 の 呼 び 出 し の 際 に は、 オ プ シ ョ ン colwidth ・ rowheight ・
fittextline ・ fittextflow がすべてのセルについて吟味 さ れ、 表全体の幅 と 高 さ が、 列幅、 表
行高 さ 、 テ キ ス ト 行 ・ テ キ ス ト フ ロ ー内容、 先頭はめ込み枠の幅に基づいて算出 さ れ ま
す。 はめ込み枠の高 さ は無限 と 見な さ れます。 先頭表 イ ン ス タ ン ス (すなわち先頭はめ込
み枠内の表先頭部分の配置) は PDF_fit_table( ) の fitmethod オプシ ョ ンに従っ て算出 さ れ
ます。
/* 範囲枠「kraxi」を含んだテキストフローを作成してはめ込み */
String tftext =
"For more information about the Giant Wing Paper Plane see the Web site of " +
/* URIアクションを作成 */
optlist = "url={http://www.kraxi.com}";
act = p.create_action("URI", optlist);
/* 範囲枠「kraxi」上にLink注釈を作成 */
optlist = "action={activate " + act + "} linewidth=0 usematchbox={kraxi}";
p.create_annotation(0, 0, 0, 0, "Link", optlist);
9.4.3 範囲枠 と 画像
画像に リ ン ク を追加 画像で覆われた領域に Web リ ン ク を追加す る には、 画像の範囲枠
が使え ます。 コ ー ド は先述の 276 ページ 「テ キ ス ト フ ロ ーの範囲枠に Web リ ン ク を追加」
と 同 じ です。 ただ し 、 テ キ ス ト フ ロ ーを配置す る のでな く 、 画像を以下のオプシ ョ ン リ ス
ト を使っ てはめ込みます :
String optlist = "boxsize={130 130} fitmethod=meet matchbox={name=kraxi}";
p.fit_image(image, 10, 10, optlist);
/* 画像を読み込んではめ込む */
/* 範囲枠の右下(第二)隅の座標を取得 */
if ((int) p.info_matchbox("giantwing", 1, "exists") == 1)
{
x2 = p.info_matchbox("giantwing", 1, "x2");
y2 = p.info_matchbox("giantwing", 1, "y2");
}
/* その隅から2だけ間隔をあけてテキスト行を開始 */
p.fit_textline("Foto: Kraxi", x2+2, y2+2, "font=" + font + " fontsize=8 orientate=west");
手順 1 : 画像を範囲枠 と と も にはめ込み
Foto: Kraxi
10.1 リ ン ク ・ し お り ・ 注釈
こ の項では、 し お り ・ フ ォーム フ ィ ール ド ・ 注釈 と いっ た さ ま ざ ま な イ ン タ ラ ク テ ィ ブ要
素の作成方法を説明 し ます。以下の イ ン タ ラ ク テ ィ ブ要素を持つ文書を作成 し てみま し ょ
う :
> 右上には、テ キ ス ト www.kraxi.com の所に、www.kraxi.com への非表示の Web リ ン ク が
あ り ます。 こ の領域を ク リ ッ ク す る と 、 その対応す る Web ページが表示 さ れます。
> 灰色の フ ォーム フ ィ ール ド が、 種類はテ キ ス ト で、 Web リ ン ク の下に作っ て あ り ます。
JavaScript を使っ て こ こ には今日の日付が自動的に記入 さ れます。
> 赤い押 し ピ ンは添付を持っ た注釈です。 ク リ ッ ク す る と フ ァ イ ル添付が開 き ます。
> 左下には フ ォーム フ ィ ール ド があ り 、 種類はボ タ ン で、 プ リ ン タ ーのア イ コ ン を表示
し てい ます。 こ のボ タ ン を ク リ ッ ク す る と Acrobat の メ ニ ュ ー項目 「フ ァ イル」 → 「印
刷」 が実行 さ れます。
> ナビ ゲーシ ョ ンパネルには し お り 「Our Paper Planes Catalog」 があ り ます。 こ の し お り
を ク リ ッ ク す る と 、 別の PDF 文書のページが表示 さ れます。
/* URIアクションを作成 */
optlist = "url={http://www.kraxi.com}";
int act = p.create_action("URI", optlist);
10.1 リ ン ク ・ し お り ・ 注釈 279
/* 範囲枠「kraxi」上にLink注釈を作成 */
optlist = "action={activate " + act + "} linewidth=0 usematchbox={kraxi}";
/* 長方形座標の0は範囲枠の座標に置き換えられる */
p.create_annotation(0, 0, 0, 0, "Link", optlist);
p.end_page_ext("");
こ の し お り を ク リ ッ ク す る と 、 文書内のページの指定部分が表示 さ れます。
280 第 10 章 : イ ン タ ラ ク テ ィ ブ機能
iconname で定義 し た ア イ コ ンの大 き さ は変化 し ません。 ア イ コ ンはその標準寸法の ま ま、
指定 し た長方形の左上隅に表示 さ れます。
10.1 リ ン ク ・ し お り ・ 注釈 281
10.2 フ ォ ーム フ ィ ール ド と JavaScript
印刷のためのボ タ ン フ ォ ーム フ ィ ール ド 以 下 の 例 は、 文 書 の 印 刷 に 使 え る ボ タ ン
フ ォーム フ ィ ール ド を作成 し ます。最初のバージ ョ ンではボ タ ンに ラ ベルをつけておき ま
す。 そ の後で ラ ベル を やめ て プ リ ン タ ーの ア イ コ ン を 使い ま し ょ う 。 ま ず Named 型
(Acrobat では : 「 メ ニ ュ ー項目を実行」) のア ク シ ョ ン を作成 し ま し ょ う 。 ま た、 ラ ベルの
フ ォ ン ト も 指定 し てお く 必要があ り ます :
print_action = p.create_action("Named", "menuname=Print");
button_font = p.load_font("Helvetica-Bold", "unicode", "");
282 第 10 章 : イ ン タ ラ ク テ ィ ブ機能
ド ルを取得 し 、 textfield 型の フ ォーム フ ィ ール ド を作成 し て名前を date、 背景を灰色 と し
ます :
textfield_font = p.load_font("Helvetica-Bold", "unicode", "");
String optlist = "backgroundcolor={gray 0.8} font=" + textfield_font;
p.create_field(left_x, left_y, right_x, right_y, "date", "textfield", optlist);
format_action = p.create_action("JavaScript",
"script={AFNumber_Format(2, 0, 0, 0, \"EUR \", true); }");
284 第 10 章 : イ ン タ ラ ク テ ィ ブ機能
10.3 ス ク リ ー ン注釈 と 表現ア ク シ ョ ン を用いた マル
チメディ ア
一般 マルチ メ デ ィ ア を、PDF 文書内で ス ク リ ーン注釈 と 表現ア ク シ ョ ン を使っ て再生で
き ま す。 こ の メ デ ィ アのデー タ は、 PDF 文書内に埋め込む こ と も で き ま す し 、 別の外部
フ ァ イ ルか ら 取っ て来 る こ と も で き ます し 、 リ モー ト のサーバーか ら 引っ張 る こ と も で き
ます。 こ の メ デ ィ ア (表現 と 呼びます) は、 ページ上で注釈に よ っ て定義 さ れた固定の位
置で も 、 別の フ ロ ーテ ィ ン グ ウ ィ ン ド ウ内で も 、 フルス ク リ ーンモー ド で も 再生 さ せ る こ
と がで き ます。 メ デ ィ ア と と も に コ ン ト ロ ー ラ ーを表示す る こ と も で き ますので、 そ う す
ればユーザーが メ デ ィ ア を再生 ・ 一時停止 ・ 再開 ・ 停止で き る よ う にな り ます。 あ る いは
こ れ ら の コ ン ト ロ ールを PDF の フ ォーム フ ィ ール ド を用いて実装す る こ と も 可能です。
マルチ メ デ ィ ア要素を持っ た PDF を再生する には、 Adobe Acrobat か、 マルチ メ デ ィ
アサポー ト を そなえ たサー ド パーテ ィ ーの PDF ビ ュ ーアが必要です。 Web ブ ラ ウ ザーに
内蔵 さ れてい る PDF ビ ュ ーアの多 く は目下マルチ メ デ ィ アの表現に対応 し てい ません。
PDFlib を用いて音声か動画を作成す る 手順はたいてい以下の と お り です :
> PDF_load_asset( ) で type=Rendition を用いて動画フ ァ イ ルか音声フ ァ イ ルか URL を読み
込む。
> PDF_create_action( ) で type=Rendition を用いて表現ア ク シ ョ ン を作成。
> 動画が再生 さ れ る ページ上の領域を用意す る ス ク リ ーン注釈を作成。 表現ア ク シ ョ ン
は注釈の さ ま ざ ま な ト リ ガー イ ベン ト に紐付け る こ と がで き ます。 た と えばページが
開 か れ た 時や注釈が ク リ ッ ク さ れ た 時 な ど です。 あ る い は ア ク シ ョ ン を し お り か
フ ォーム フ ィ ール ド に紐付けて メ デ ィ アの再生を制御で き る よ う にす る こ と も 可能で
す。
// その動画を再生するための表現アクションを作成
act = p.create_action("Rendition",
"target=annot_video operation=playfrombeginning rendition=" + rend_video);
// その動画が再生される場所であるスクリーン注釈を作成
p.create_annotation(25, 300, 575, 610, "Screen",
"title=annot_video name=annot_video action={activate=" + act + "}");
286 第 10 章 : イ ン タ ラ ク テ ィ ブ機能
// 表現を名前で取得し、それをフローティングウィンドウ内で特定のプロパティ群を用いて再生
// これが動作するには名称ツリー内の表現に対してだけ
if (rendition == null)
app.alert("表現が見つかりませんでした");
else
{
var floating = {
width: 400,
height: 300
};
var player = app.media.openPlayer({
rendition: rendition,
settings: {
windowType: app.media.windowType.floating,
floating: floating
}
});
}
// JavaScript文字列を仮想(PVF)ファイルへ読み込む
p.create_pvf("/pvf/javascript/script1.js", js.getBytes(), "");
// PVFファイルからJavaScriptアセットを作成
int js_asset = p.load_asset("JavaScript", "/pvf/javascript/script1.js", "");
if (js_asset == -1)
throw new Exception("エラー : " + p.get_errmsg());
// アセットからJavaScriptアクションを作成
int act_js = p.create_action("JavaScript", "javascript=" + js_asset);
// この音声表現を再生するためのしおり
p.create_bookmark("JavaScriptを用いて音声を作成(しおりをクリック)",
"action={activate=" + act_js + "}");
ク ッ ク ブ ッ ク A full code sample for sound and video renditions without annotations can be found in the
Cookbook topic multimedia/javascript_for_renditions. The topic interactive/renditions in
the pCOS Cookbook demonstrates how to enumerate all renditions in the name tree.
288 第 10 章 : イ ン タ ラ ク テ ィ ブ機能
10.4 地理空間 PDF
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルがク ッ ク ブ ッ ク の geospatial/starter_geospatial ト ピ ッ ク にあ り
ます。
10.4.3 座標系の例
地理座標系の例 WGS84 (世界測地系) 地理座標系は、 GPS をは じ め と す る 多 く の応用
分野 (OpenStreetMap な ど) の基礎 と な っ てい ます。 こ れは以下の よ う に georeference オ
プシ ョ ンの worldsystem サブオプシ ョ ンで表現で き ます :
worldsystem={type=geographic wkt={
GEOGCS["WGS 84",
DATUM["WGS_1984", SPHEROID["WGS 84", 6378137, 298.257223563]],
PRIMEM["Greenwich", 0],
UNIT["degree", 0.01745329251994328]]
}}
290 第 10 章 : イ ン タ ラ ク テ ィ ブ機能
PARAMETER["False_Northing", 0.0],
PARAMETER["Central_Meridian", 9.0],
PARAMETER["Scale_Factor", 0.9996],
PARAMETER["Latitude_Of_Origin", 0.0],
UNIT["Meter", 1.0]]
}}
/* 種別「H1」 (見出し)の構造要素を作成 */
id_h1 = p.begin_item("H1", "Title={企業沿革}");
p.fit_textline(...);
p.end_item(id_h1);
/* 種別「P」(段落)の構造要素を作成 */
id_p = p.begin_item("P", "");
p.fit_textline(...);
p.end_item(id_p);
/* 「Sect」を閉じる */
p.end_item(id_sect);
/* 種別「Sect」(セクション)の構造要素を作成 */
id_sect = p.begin_item("Sect", "Title={来し方行く末}");
/* 種別「H1」 (見出し)の構造要素を作成 */
p.fit_textline(..., "tag={tagname=H1 Title={企業沿革}}");
/* 種別「P」(段落)の構造要素を作成 */
p.fit_textline(..., "tag={tagname=P}");
/* 「Sect」を閉じる */
p.end_item(id_sect);
短縮 タ グ 付 け は、 生成 さ れ た 構造要素のハ ン ド ル を 露出 し ま せん の で、 PDF_activate_
item( ) で、 ま たは tag オプシ ョ ンの parent サブオプシ ョ ンで使 う こ と はで き ません。 こ
れ ら は構造要素 ID を必要 と す る か ら です。tag オプシ ョ ンの動作は詳 し く は以下の と お り
です :
P {tagbegin={tagname=P} }
/P {tagend}
}
11.1.2 標準構造種別
PDF 1.7 と PDF 2.0 の タ グセ ッ ト PDF は、 幅広い文書分類に対応す る よ う 設計 さ れた さ
ま ざ ま な標準構造種別に対応 し てい ます。 PDFlib は、 表 11.1 に従っ て PDF 1.x と PDF 2.0
イ ン ラ イ ン レ ベル構造種別
BibEntry (書誌項目。 compatibility=2.0 の場合には pdftagset=1.7 が必須) 何 らかの引用内容の外部 ソ ー
ス を特定する参照
Code (compatibility=2.0 の場合には pdftagset=1.7 が必須) コ ン ピ ュ ー タ ーのプ ログ ラ ムのテキス ト
の断片
Em (PDF 2.0) 強調の目的のために内容を囲います。 強調のレ ベルを上げる ためにネス ト し た Em 要素
を使用する こ と も で き ます。
Lbl 同 じ 親要素の中の他の内容から 区別する ための内容。 た と えば リ ス ト 項目に対する ビ ュ レ ッ ト ・
番号や、 キ ャ プ シ ョ ンの中の番号や、 見出 し の中の付番。
Note (compatibility=2.0 の場合には pdftagset=1.7 が必須) 脚注や後注のよ う に、 文書の本体の中か
ら参照 さ れる説明テキス ト のア イ テム。 こ の要素は Lbl を子に持て ます。
Annot (PDF 1.5) 内容を 1 つない し 複数の注釈に紐付けます。 構造ツ リ ー内に 1 つない し 複数の注釈を含
める ために使用する こ と も で き ます。 Link か Form のほ う が適切でない限 り は この要素を注釈に対
し て使用する必要があ り ます。
Form 内容を、 対応する フ ォ ーム フ ィ ール ド と 紐付けます。 構造ツ リ ーに フ ォ ーム フ ィ ール ド を含める
ために も使え ます。 Lbl 要素を用いて フ ォ ーム フ ィ ール ド のラ ベルを マー ク ア ッ プする こ と も で き
ます。
Link 内容を リ ン ク注釈 と 紐付けます。 構造ツ リ ーに リ ン ク注釈を含める ために も使え ます。 この要素
を リ ン ク注釈に対 し て使用する必要があ り ます。
リ ス ト 構造種別
L ( リ ス ト 。 ブ ロ ッ ク レ ベルかイ ン ラ イ ン レ ベル) 意味的に互いに関連 し ている項目の並び
LI ( リ ス ト 項目) リ ス ト の個々の メ ンバーのための内容
LBody ( リ ス ト 本体) リ ス ト 項目の内容本体
擬似構造種別
Artifact 直接マー ク 付き内容 と し てのページ装飾。 実のページ内容に対 し て こ う 呼ばれます (309 ページ
「11.1.6 ページ装飾」 を参照)。
ASpan (ア ク セシ ビ リ テ ィ ースパン。 PDF には Span と し て書き込まれますが、 イ ン ラ イ ン レ ベル構造種
別 Span と は区別する必要があ り ます) 構造要素に属 し ない、 あ るいは構造要素の一部分である よ
う な内容に対 し て、 ア ク セ シ ビ リ テ ィ ー特性群を紐付けます。 こ の ASpan 擬似要素は、 Alt ・
ActualText ・ Lang ・ E と い っ たア ク セ シ ビ リ テ ィ ー属性を持っ た Span と し て書き込まれます。
ASpan は、 いかな る構造要素 と も紐付き ません。
構造ツ リ ーの一部であ る ○ ×
ページ境界を また ぐ こ と が可能 ○ ×
他の要素で割 り 込む こ と が可能 ○ ×
PDF_activate_item( ) で有効にする こ と が ○ ×
可能
表要素 Table 要素は、 1 個ない し 複数の TR 要素を、 あ るいは 1 個のオプ シ ョ ナルな THead に続け
てその後の 1 個ない し 複数の TBody 要素 と 1 個のオプ シ ョ ナルな TFoot と を、 子に持て ま
す。 TBody は Table の唯一の子であ るべき ではあ り ません。 こ れに加えて Table 要素は、 1
個の Caption 要素を、 その最初または最後の子 と し て持つ こ と も で き ます。
TH ・ TD 要素は、 TR ・ TH ・ TD ・ THead ・ TBody ・ TFoot を子に持て ません。
THead ・ TBody ・ TFoot 要素は、 TR 要素のみを内容 と する こ と がで き、 かつ Table のみを親
と する こ と がで き ます。
TR は、 Table ・ THead ・ TBody ・ TFoot のみを親 と する こ と がで き ます。
PDF 2.0の整合性規 まれに し か使われない PDF 1.7 の親子 タ グ組み合わせに対 し て、 PDF 2.0 のネス テ ィ ング規
則 則 と の整合性のために、 以下のネス テ ィ ング規則が導入 さ れています :
非互換的変更 (ネス テ ィ ング規則が厳 し く な っ た も の) :
> RB ・ RT ・ RP は Ruby の子にのみなれる
> WT ・ WP は Warichu の子にのみなれる
> Document は Caption を子に持てない
> Caption は Document か Caption を子に持て ない
> H ・ H1 な どは Document か Part か Div を子に持てない
> TH ・ TD は Document か Caption を子に持てない
> direct=true に よ る イ ン ラ イ ン レ ベル要素は L か Table か Document を子に持てない
P NonStruct ・ Sub ・ Lbl ・ Em ・ Strong ・ Span ・ Link ・ Annot ・ Form ・ Ruby ・ Warichu ・ ○
L ・ Figure ・ Formula ・ Artifact
H1 ・ … ・ H Sect1 ・ NonStruct ・ Sub ・ Lbl ・ Em ・ Strong ・ Span ・ Link ・ Annot ・ Form ・ Ruby ・ ○
Warichu ・ Figure ・ Formula ・ Artifact
Lbl NonStruct ・ Sub ・ Em ・ Strong ・ Span ・ Link ・ Annot ・ Form ・ Ruby ・ Warichu ・ ○
Figure ・ Formula ・ Artifact
Em ・ Strong ・ Span NonStruct ・ Sub ・ Lbl ・ Em ・ Strong ・ Span ・ Link ・ Annot ・ Form ・ Ruby ・ Warichu ・ ○
Figure ・ Formula ・ Artifact
Link Div ・ Sect ・ NonStruct ・ Sub ・ Lbl ・ Em ・ Strong ・ Span ・ Annot ・ Ruby ・ Warichu ・ ○
Figure ・ Formula ・ Artifact
この要素がグループ化要素 と し て使用 さ れている場合には、 以下の要素 も子 と し て ×
許 さ れますが、 内容ア イ テム と 相互排他です :
DocumentFragment ・ Part ・ Aside ・ P ・ Hn ・ H ・ Title ・ Form ・ FENote ・ L ・ Table ・
Caption
Annot Div ・ Sect ・ NonStruct ・ Sub ・ Lbl ・ Em ・ Strong ・ Span ・ Link ・ Annot ・ Ruby ・ ○
Warichu ・ Figure ・ Formula ・ Artifact
この要素がグループ化要素 と し て使用 さ れている場合には、 以下の要素 も子 と し て ×
許 さ れますが、 内容ア イ テム と 相互排他です :
DocumentFragment ・ Part ・ Aside ・ P ・ Hn ・ H ・ Title ・ Form ・ FENote ・ L ・ Table ・
Caption
Ruby NonStruct ・ RB ・ RT ・ RP ○
Warichu NonStruct ・ WT ・ WP ○
11.1.6 ページ装飾
実質的な内容 と ページ装飾 ページの さ ま ざ ま な内容は、 以下の カ テ ゴ リ ーのいずれか
にあ ては ま り ます :
> 実質的な内容。 文書作成者に よ っ て、 その文書の意味を伝え る ために作成 さ れてい ま
す。 その文書の論理構造ツ リ ーは、 実際の内容を成すオブジ ェ ク ト 群を記述 し てい る
ほか、 注釈 も 含む場合があ り ます。
> 実質的なページ内容に貢献 し てお ら ず、 ページネーシ ョ ン ま たは レ イ ア ウ ト 目的のた
めに作成 さ れてい る グ ラ フ ィ ッ ク ま たはテ キ ス ト オブジ ェ ク ト を、 ページ装飾 と いい
ます。 ページ装飾は、 構造ツ リ ー内に含 ま れてお ら ず、 ス ク リ ーン リ ーダーに よ っ て
読み上げ ら れません。
11.1.7 テキス ト 処理
言語指定 タ グ付 き PDF では、 テ キ ス ト の自然言語は明示的に指定 さ れ る べ き です : こ
れに よ っ て、 ス ク リ ーン リ ーダーがその文書を読み上げ る 際に適切な言語へ切 り 替われ る
よ う にな り ます。 こ の自然言語は、 さ ま ざ ま な レベルで指定する こ と がで き ます :
> PDF_begin_document( ) の lang オプシ ョ ン を、主要言語、すなわちその文書の全体 と し
ての自然言語を指定す る ために設定す る べ き です。 こ の指定は、 ページ内容のみな ら
ず、 し お り や注釈 と い っ た イ ン タ ラ ク テ ィ ブ要素を も カバー し ます。 こ の言語指定は、
PDF_end_document( ) で変更す る こ と も で き ます。 取 り 込んだ PDF 文書に基づいて言
語を選びたい場合な ど に こ れは有用で し ょ う 。
> こ の文書言語は、個別の構造要素について、PDF_begin_item( ) の lang オプシ ョ ンか、さ
ま ざ ま な関数の tag オプシ ョ ン を用いてオーバー ラ イ ド する こ と も で き ます。
> PDF 2.0 では、注釈の自然言語を指定す る ために PDF_create_annotation( ) に も lang オプ
シ ョ ン を与え る こ と が可能です。
16 進表記での例 :
Acrobatのア ク セシ ビ リ テ ィ ーチ ェ ッ カ ー
Acrobatの読み上げ機能
その他のAcrobatの機能
PDF_fit_table( ) の
tag オプ シ ョ ン 結果
tagname=Table 推奨ア プ ローチ : 自動表 タ グ付けが行われます。 tagname=Table のかわ り に、 Table へロー
ルマ ッ プ さ れた カ ス タ ム タ グ を用いる こ と も で き ます。
tagname=Artifact キ ャ プ シ ョ ン を含め、 表内容全体がページ装飾 と し て マー ク さ れます。 BBox 属性が自動的
に追加 さ れます。
こ れは以下の状況において有用です :
> 表セルの内容に対 し て下位構造を指定。こ の tag オプシ ョ ンは、その表セルの TH か TD
要素の子要素を作成 し ます。 自動表 タ グ付けが有効の場合には、 tag オプシ ョ ンに対 し
て、 tagname について以下の値は許容 さ れません (言い換えれば、 表のネ ス ト には対
応 し てい ません) :
Table・TR・TH・TD・THead・TBody・TFoot
/* このリンクを表現する可視内容を作成 */
p.fit_textline("Click here to go to the Kraxi website", x, y,
"matchbox={name={kraxi}} fontsize=14 font=" + font);
/* URIアクションを作成 */
action = p.create_action("URI", "url={http://www.kraxi.com}");
/* 名前付き範囲枠「kraxi」上にLink注釈を作成 */
p.create_annotation(0, 0, 0, 0, "Link",
"action={activate=" + action + "} "
"usematchbox={kraxi} contents={Kraxi Inc. Webサイトへのリンク}");
p.end_item(id_link);
/* 名前付き範囲枠(群) 「kraxi」上にリンク注釈を作成 */
p.create_annotation(0, 0, 0, 0, "Link",
"action={activate " + act + "} " +
"usematchbox={kraxi} contents={Link to Kraxi Inc. Web site}");
フ ォ ーム フ ィ ール ド に タ グ付け フ ォ ーム フ ィ ール ド はア ク セシ ビ リ テ ィ ーのために以
下のア イ テ ム を必要 と し ます (図 11.5 参照) :
> Part構造要素を用いて、関連す る フ ォーム フ ィ ール ド 群のグループ を グループ化する こ
と も 可能です。
p.end_item(id_Div);
bm = p.create_bookmark("第1章", "");
id = p.begin_item("H1", "Title={第1章} bookmark=" + bm);
p.fit_textline(text, x, y, "");
p.end_item(id);
こ の方式は短縮 タ グ付けで も 用い る こ と がで き ます :
bm = p.create_bookmark("第1章", "");
p.fit_textline(text, x, y,
"tag={tagname=H1 Title={第1章} bookmark=" + bm + "}");
11.2.4 リ ス ト に タ グ付け
リ ス ト は、 関連す る 項目群を ま と め る ために使われます。 こ れは以下の構造要素に よ っ て
表現 さ れます :
> 以下のすべての構造要素を内容 と す る L要素1個。ListNumberingオプシ ョ ン を用い る と 、
Lbl 要素内で用い ら れ る 付番系列を指定す る こ と がで き ます。 こ の ListNumbering オプ
シ ョ ンは、 Lbl 要素がない場合で も 、 ス ク リ ーン リ ーダーのために有用で し ょ う 。
> オプシ ョ ナルな Caption 要素 1 個。Caption はグループ化要素ですので、内容ア イ テ ム を
内容 と す る こ と はで き ず、 他の構造要素のみを内容 と す る こ と がで き ます (P な ど)。
> 以下を内容 と す る 、 1 個ない し 複数の リ ス ト 項目 (LI) :
> オプシ ョ ナルな、 ビ ュ レ ッ ト や番号な ど を持っ た ラ ベル (Lbl) 1 個。
> その リ ス ト 項目の実際の内容を持っ た LBody 要素 1 個。LBody は、内容ア イ テ ムか、ネ
ス ト さ れた リ ス ト も 含めて他の構造要素のいずれか を内容 と す る こ と がで き ます。
/* Caption要素とP要素の両方を一回で生成 */
p.fit_textline("The following kinds of fruit are available:",
p.end_item(id_list);
...同一レベル上の要素群をさらに作成...
p.begin_document(filename, optlist);
if (topleveltagcount == 0)
{
/* このページは構造要素を何も含んでいません、
* すなわち、これは空であるか、ページ装飾のみを内容としています。
* 「Artifact」を追加しましょう。
*/
additionaltag = "tag={tagname=Artifact} ";
}
else
/*
* ページを追加のタグなしで配置してみます。
* これがうまくいかないならば、別のタグを挿入しましょう。
*/
if (p.info_pdi_page(page, "fittingpossible", "") == 0)
{
additionaltag = "tag={tagname=P} ";
if (fittingpossible)
{
p.fit_pdi_page(page, 0, 0, "adjustpage " + additionaltag);
}
else
{
System.err.println("ページをスキップします: " + p.get_errmsg());
}
注 PDF 協会が発行 し ている文書 「Tagged PDF Best Practice Guide: Syntax」 を推奨 し ます
(www.pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/ にあ り ます)
1. www.w3.org/TR/WCAG20/ 参照
タ グ付け すべての タ グ付け規則 (303 ページ 「11.1.3 PDF 1.7 の構造要素ネス テ ィ ング規則」 参照)
に従 う 必要があ り ます。 checktags 文書オプ シ ョ ン を none に設定 し てはいけません。
注 PDF 協会が発行 し た文書 「Tagged PDF Best Practice Guide: Syntax」 は、 PDF/UA-1 のための
タ グ付き PDF 構造要素の正 し い使い方に関する ガ イ ダ ン ス を提供 し ています。
フ ォ ルダーのあ る PDF_add_portfolio_folder( )
PDF ポー ト フ ォ リ オ
さ ま ざ ま な フ ィ ール ド オプ シ ョ ン PDF_create_field( ) ・ PDF_create_fieldgroup( )
ページ レ イ アウ ト PDF_begin/end_document( ) : オプ シ ョ ン pagelayout=twopageleft/right
さ ま ざ ま な注釈オプ シ ョ ン PDF_create_annotation( )
拡張権限設定 PDF_begin_document( ) で permissions=plainmetadata、 表 3.3 参照
グ ラ フ ィ ッ ク ス テー ト PDF_create_gstate( ) と 、 さ ま ざ ま な メ ソ ッ ド の gstate オプ シ ョ ン :
useblackptcomp ・ halftoneorigin オプ シ ョ ン
12.2.2 一般的要件
ク ッ ク ブ ッ ク PDF/A を生成する ための コ ー ド サン プルが PDFlib ク ッ ク ブ ッ ク の pdfa カ テ ゴ リ ーにあ り
ます。
12.2.3 色 と 画像の要件
PDF/A は、 忠実な色再現を保証す る ために、 デバ イ ス独立な色指定を必須 と し てい ます。
色空間は以下の ソ ース か ら 来 る 可能性があ り ます :
> PDF_load_image( ) と PDF_fill_imageblock ( ) を用いて直接的に、 お よ び PDF_load_
graphics( ) を通 じ て間接的に読み込まれた画像
> PDF_set_graphics_option( ) か PDF_setcolor( ) を用いた明示的な色指定
> オプシ ョ ン リ ス ト を通 じ た色指定。 た と えばテ キ ス ト フ ロ ー内な ど において。
> 透過グ ループの た めにブ レ ン ド す る 色空間 : PDF_begin/end_page_ext( ) ・ PDF_begin_
template_ext( ) ・ PDF_load_graphics( ) : オプシ ョ ン transparencygroup でサブオプシ ョ
ン colorspace
なし ◯ ◯ ◯ - - -
グ レースケールICC ◯ ◯ ◯ ◯ - -
プ ロ フ ァ イル
RGB ICCプ ロ フ ァ イ ◯ ◯ ◯ ◯ ◯ -
ル
CMYK ICCプ ロ フ ァ ◯ ◯ ◯ ◯ - ◯
イル
PDF/A-1a:2005 許容 - - - -
PDF/A-1b:2005 許容 許容 - - -
PDF/A-2a ・ PDF/A-3a 許容 - 許容 - -
PDF/A-2b ・ PDF/A-3b 許容 許容 許容 許容 許容
PDF/A-2u ・ PDF/A-3u 許容 - 許容 - 許容
なし 有 - - -
1
グ レースケールの ICC プ ロ フ ァ イル 有 有 - -
1
RGB の ICC プ ロ フ ァ イル 有 - 有 -
CMYK の ICC プ ロ フ ァ イル 有 - - 有1
表 12.13 PDF/A-1 のための定義済み XMP スキーマ (詳 し く は XMP 2004 と XMP 2005 を参照)
望ま し い
スキーマの名称 と 説明 名前空間 URI 名前空間接頭辞
CMYK ・ スポ ッ ト カ ラ ー 可 可 可 可
デバイ ス独立カ ラ ー (ICCBased ・ 可 可 可 可
Lab)
透過 ・ レ イ ヤー ― 可 可 可
外部参照出力イ ン テ ン ト ICC プ ロ ― ― 可 可
フ ァ イル
n 色出力イ ン テ ン ト ICC ロ フ ァ イル ― ― ― 可
出力 イ ン テ ン ト 出力 イ ン テ ン ト は、 意図 さ れ る 出力先デバ イ ス か印刷条件を定義 し ま
す。 こ れは、 プルーフ ィ ン グ (あ る 印刷機器を他の機器でシ ミ ュ レー ト する ) と 、 デバ イ
ス独自カ ラ ーの特性化のために有用であ り 、透過計算のためのブ レ ンデ ィ ン グ色空間 と し
て も 有用です。 PDF/X の出力 イ ン テ ン ト は通常、 グ レース ケール ・ RGB ・ CMYK いずれ
かの ICC プ リ ン タ ープ ロ フ ァ イ ルに よ っ て記述 さ れます。 ただ し PDF/X-5n は n 色 ICC
プ ロ フ ァ イ ルに対応 し てい ます。 詳細は PDF/X の種類に よ っ て異な り ます :
> PDF/X-3/4:出力 イ ン テ ン ト を、出力先デバ イ ス か印刷条件のための ICC プ ロ フ ァ イ ル
を埋め込む こ と に よ っ て指定で き ます。
> PDF/X-4p・PDF/X-5n:出力 イ ン テ ン ト のための外部 ICC プ ロ フ ァ イ ルを参照する こ と
に よ っ て (規格の名前の中の p は、外部プ ロ フ ァ イ ルが参照 さ れ る こ と を意味 し ます)。
チ ェ ッ ク サ ムに よ っ て保護 さ れた、 ICC フ ァ イ ルへの強力な参照が作成 さ れます。 参
照 ICC プ ロ フ ァ イ ルはその PDF 出力内に必ず し も 埋め込まれ る わけではないのです
が、 それで も PDF 作成時に こ れが利用可能であ る 必要があ り ます。 urls オプシ ョ ン を、
1 個ない し 複数の、 その ICC プ ロ フ ァ イ ルを発見で き る 場所の有効な URL と と も に与
え る 必要があ り ます :
if (p.load_iccprofile("CGATS TR 001",
"usage=outputintent urls={http://www.color.org}") == -1)
{
/* エラー */
}
グ レースケール ◯ ◯ ◯ ◯ - -
RGB2 ◯ ◯ ◯ ◯ ◯ -
CMYK ◯ ◯ ◯ ◯ - ◯
PDF/X-5nのための ◯ ◯ ◯ ◯ - -
xCLR
12.3.4 画像 と 透過の要件
ラ ス タ ー画像は、 363 ページ 「12.3.5 イ ン タ ラ ク テ ィ ブ機能のための要件」 で説明 し た色
関連の諸要件に従 う 必要があ り ます。 に、 PDF/X 準拠のための画像関連の追加の要件を
挙げます。
12.3.5 イ ン タ ラ ク テ ィ ブ機能のための要件
表 12.22 に、 PDF/X 準拠出力を生成す る 際に制限 さ れ る すべての操作を挙げます。 PDF/
X モー ド で こ の禁 じ ら れた関数の う ちのいずれかを呼び出す と 例外が発生 し ます。
こ の recordlevel オ プ シ ョ ン は、 そ の 受領 者 か レ コ ー ド レ ベル を 発見 で き る 場所 の、
nodenamelist 内でのゼ ロ ベース の番号を指定 し ます。こ れは scope=record オプシ ョ ンに対
し て意味を持ち ます。
ヒ エ ラ ルキーの構造 を 定義 し た後は、 ページ群 を 文書 ヒ エ ラ ルキー ノ ー ド 群内で グ
ループ化す る 必要があ り ます。 こ れを達成する には PDF_begin/end_dpart( ) を用い ます :
p.begin_dpart(""); /* 受領者レベルに次のノードを作成 */
p.begin_page_ext(...); /* 1個ないし複数のページを作成 */
...
p.end_page_ext(...);
p.end_dpart(""); /* 受領者ノードを閉じる */
/* ルートノードを閉じる */
p.end_dpart("");
/* DPartヒエラルキー内にノードを作成してDPMメタデータを追加 */
p.begin_dpart("dpm=" + dpm);
p.poca_delete(dpm, "recursive=true");
あ る いは以下の操作を行 う と 、 こ のプ ラ グ イ ン を単独のユーザーのためだけに イ ン ス ト ー
ルで き ます :
> デス ク ト ッ プ を ク リ ッ ク す る こ と に よ っ て Finder 内に確実にい る よ う に し てか ら 、
Option キーを押 し なが ら 「移動」 → 「ラ イ ブ ラ リ ー」 を選択する こ と に よ っ て、 その
ユーザーの ラ イ ブ ラ リ ーフ ォ ルダーを開 き ます。
> プ ラ グ イ ン フ ォ ルダーを、 そのユーザーの ラ イ ブ ラ リ ー フ ォ ルダーの中の以下のパ ス
へ複製 (Plug-ins フ ォ ルダーが ま だない場合には作成) :
/Users/<ユーザー名>/Library/Application Support/Adobe/Acrobat/XXX/Plug-ins
13.2.2 ブ ロ ッ ク のプ ロパテ ィ
ブ ロ ッ ク の動作はブ ロ ッ ク のプ ロ パテ ィ で制御で き ます。 Block Plugin を使っ てブ ロ ッ ク
にプ ロ パテ ィ を割 り 当て ます。
デ フ ォ ル ト 内容に関す る プ ロパテ ィ ブ ロ ッ ク のデ フ ォ ル ト 内容 を 持 た せ る 特殊 な ブ
ロ ッ ク プ ロ パテ ィ を指定す る こ と も 可能です。ブ ロ ッ ク 流 し 込み関数に可変デー タ が与え
ら れなかっ た と き や、ブ ロ ッ ク 内容が次回の印刷実行時には変わ る か も し れないが現時点
では固定な と き にそのブ ロ ッ ク に配置 さ れ る テ キ ス ト ・ 画像 ・ PDF ・ グ ラ フ ィ ッ ク 内容を
指定で き ます。
こ のデフ ォ ル ト プ ロ パテ ィ はBlock Pluginのプ レ ビ ュ ー機能で も 用い ら れます(392ペー
ジ 「13.5 ブ ロ ッ ク を Acrobat でプ レ ビ ュ ー」 参照)。
フ ォ ン ト 制御 フ ォ ン ト 埋め込み フ ォ ン ト 埋め込み ・ サブ セ ッ ト 化 ・ エ ン コ ー
デ ィ ング
テキス ト の途中で フ ォ ン ト な ど テ - ○
キス ト 属性を変更可能
追加フ ィ ール ド の内容をユーザー ○ ×
が編集可能
ベ ク ト ルグ ラ フ ィ ッ ク を流 し 込め - SVG
る
流 し 込みの際にグ ラ フ ィ ッ ク やテ - ○
キス ト のプ ロパテ ィ を オーバー ラ
イ ド 可能
透過内容 - ○
テキス ト ブ ロ ッ ク を連結可能 - ○
ブ ロ ッ ク を作成 ・ 変更 ブ ロ ッ ク ツ ール を ア ク テ ィ ブ に し た ら 、 十字ポ イ ン タ ー を ド
ラ ッ グすれば、 ページ上の希望の位置に希望の大 き さ のブ ロ ッ ク を作れます。 ブ ロ ッ ク は
つねに長方形で、 かつ辺がページの辺 と 平行にな り ます (rotate プ ロ パテ ィ を用い る と ブ
ロ ッ ク の内容をページの辺に平行でな く す る こ と がで き ま す) 。 ブ ロ ッ ク の長方形を ド
ラ ッ グ し 終え る と 、 「PDFlib ブ ロ ッ ク プ ロパテ ィ 」 ダ イ ア ロ グが現れ、 ブ ロ ッ ク の各種プ
ロ パテ ィ を編集で き ます (384 ページ 「13.3.2 ブ ロ ッ ク プ ロ パテ ィ を編集」 参照)。 ブ ロ ッ
ク ツールはブ ロ ッ ク の名前を自動的に生成 し ますが、 こ の名前はプ ロ パテ ィ ダ イ ア ロ グで
変更可能です。 ブ ロ ッ ク 名はページ内では一意であ る 必要があ り ますが、 別のページで同
じ 名前を使 う のはか ま い ません。
ダ イ ア ロ グ の一番上で、 ブ ロ ッ ク の種類を 「Textline」 (テ キ ス ト 行) ・ 「Textflow」 (テ
キ ス ト フ ロ ー) ・ 「Image」 (画像) ・ 「PDF」 ・ 「Graphics」 (グ ラ フ ィ ッ ク ) か ら 選べます。 ブ
ロ ッ ク の種類ご と に色が変え て あ り ます (図 13.1 参照) 。 タ ブは、 その時選んでい る ブ
ロ ッ ク 種別の も のだけがア ク テ ィ ブにな り ます。 「PDFlib ブ ロ ッ ク プ ロパテ ィ 」 ダ イ ア ロ
グは、 ブ ロ ッ ク の種類に よ っ て、 プ ロ パテ ィ を グループやサブグループに ま と めて階層的
に表示 し ます。
「グ リ ッ ド にスナ ッ プ」 を有効に し てい る と 、 構成 し た グ リ ッ ド にブ ロ ッ ク のサ イ ズ と 位
置が揃い ます。 こ の 「グ リ ッ ド にスナ ッ プ」 は、 新規作成す る ブ ロ ッ ク に も 効 き ます し 、
既存のブ ロ ッ ク をブ ロ ッ ク ツールで移動 ・ サ イ ズ変更する 際に も 効き ます。
こ のフ ォ ン ト プ ロ パテ ィ の自動検出は結果が変にな る こ と も あ る ため、背景を無視 さ せた
い と き には 「PDFlib ブ ロ ッ ク 」 → 「背景フ ォ ン ト ・ 色の検出」 で機能の有効 ・ 無効を切 り
替え る こ と がで き ます。 デフ ォ ル ト では こ の機能は無効にな っ てい ます。
ブ ロ ッ ク を ロ ッ ク ブ ロ ッ ク が う っ か り 移動 ・ サ イ ズ変更 ・ 削除 さ れぬ よ う ロ ッ ク し て
保護す る こ と も で き ます。ブ ロ ッ ク ツールがア ク テ ィ ブな状態でブ ロ ッ ク を選択 し て コ ン
テ キ ス ト メ ニ ュ ーか ら 「ロ ッ ク 」 を選択 し ます。 ブ ロ ッ ク が ロ ッ ク さ れてい る と 、 移動 ・
サ イ ズ変更 ・ 削除で き ず、 そのプ ロ パテ ィ ダ イ ア ロ グ を編集する こ と も で き ません。
重な っ た ブ ロ ッ ク 重な り あ う ブ ロ ッ ク 群は選択 し づ ら い こ と があ り ま す。 その領域を
ク リ ッ ク す る と 必ず最前面のブ ロ ッ ク が選ばれて し ま う か ら です。そんな と き は コ ン テ キ
ス ト メ ニ ュ ーの 「ブ ロ ッ ク の選択」 項目を用いれば、 ブ ロ ッ ク の う ちの 1 個を名前で選択
で き ます。 1 個のブ ロ ッ ク を選んだ直後にその領域で行 う 操作は、 その選択 し た 1 個のブ
ロ ッ ク に対 し てのみ効力を持ち、 他のブ ロ ッ ク に対 し ては効力を持ち ま せん。 た と えば
Enter を押せば、 その選択 し たブ ロ ッ ク のプ ロ パテ ィ を編集で き ます。 こ の方法を駆使す
れば、 ブ ロ ッ ク の上に他のブ ロ ッ ク が部分的ない し 完全にかぶ さ っ ていて も 、 簡単にその
ブ ロ ッ ク のプ ロ パテ ィ を編集す る こ と がで き ます。
ブ ロ ッ ク を書 き出 し ・ 取 り 込み ブ ロ ッ ク の書 き 出 し /取 り 込み機能を使 う と 、 あ る 1
つのページ上のブ ロ ッ ク の定義や、 あ る 文書のすべてのブ ロ ッ ク の定義を、 複数の PDF
フ ァ イ ル間で共用す る こ と が可能です。 こ れは、 既存のブ ロ ッ ク 定義を温存 し た ま まペー
ジ内容を差 し 替え と き に便利です。ブ ロ ッ ク 定義を別フ ァ イ ル と し て書 き 出すには以下の
と お り 操作 し ます :
> ブ ロ ッ ク ツールを ア ク テ ィ ブに し て、 書 き 出 し たいブ ロ ッ ク 群を選択。
> 「PDFlib ブ ロ ッ ク」 メ ニ ュ ーか コ ン テ キ ス ト メ ニ ュ ーか ら 「取 り 込み と 書き出 し 」 → 「書
き出 し ...」 を選択。 ページ範囲 と 、 ブ ロ ッ ク 定義を持たせたい新規 PDF フ ァ イ ル名を
入力。
全 フ ィ ール ド
位置 Rect
名前 Name
ツール ヒ ン ト Description
表示方法→テキス ト → フ ォ ン ト fontname
テキス ト フ ィ ール ド
オプ シ ョ ン→整列 position :
左揃え ={left center}
中央 ={center center}
右揃え ={right center}
オプ シ ョ ン→デ フ ォル ト defaulttext
ラ ジオボ タ ン ・ チ ェ ッ ク ボ ッ ク ス
「デ フ ォ ル ト でチ ェ ッ ク」 がオ ンの場合 : defaulttext :
オプ シ ョ ン→チ ェ ッ ク ボ ッ ク ス ス タ イル、 チ ェ ッ ク マー ク =4
オプ シ ョ ン→ボ タ ン ス タ イル 円形 =l
十字形 =8
ひ し 形 =u
四角形 =n
星形 =H
(文字は ZapfDingbats フ ォ ン ト における各記号を表 し ます)
リ ス ト ボ ッ ク ス ・ コ ンポボ ッ ク ス
ボタ ン
ブ ロ ッ ク のデ フ ォ ル ト 内容 プ ラ グ イ ン の場合には、 ブ ロ ッ ク のテ キ ス ト ・ 画像 ・ ベ ク
ト ルグ ラ フ ィ ッ ク ・ PDF 内容をサーバーサ イ ド のデー タ ソ ース (デー タ ベース な ど) か ら
取得す る のは無理ですので、プ レ ビ ュ ー機能ではつねにブ ロ ッ ク のデフ ォ ル ト 内容が用い
ら れます。 具体的には defaulttext ・ defaultimage ・ defaultpdf ・ defaultgraphics プ ロ パテ ィ
で指定 し た値が用い ら れます。 PPS で使 う 現実のブ ロ ッ ク 内容を代表する よ う なサンプル
デー タ 集合をデフ ォ ル ト デー タ と し て使 う のが普通です。デフ ォ ル ト 内容のないブ ロ ッ ク
はプ レ ビ ュ ー生成の際に無視 さ れ ます。 Status=ignoredefault のブ ロ ッ ク について も 同様
です。
新規ブ ロ ッ ク では、 デフ ォ ル ト プ ロ パテ ィ は空です。 プ レ ビ ュ ー機能を使 う には、 「デ
フ ォル ト 内容」プ ロ パテ ィ グループの defaulttext・defaultimage・defaultpdf・defaultgraphics
プ ロ パテ ィ (ブ ロ ッ ク の種類に よ る ) に書 き 込むか、 「高度な PPS オプ シ ョ ン ...」 ダ イ ア
ロ グの同名オプシ ョ ンに適切な値を与え る 必要があ り ます。
PDF/UA-1
PDF/X-3:2003
PDF/X-4, PDF/X-4p
PDF/X-5n
/* 貼り付けたページ上のブロック1個へ流し込み */
p.fill_textblock(page, "firstname", "Serge", "encoding=winansi");
p.close_pdi_page(page);
p.end_page_ext("");
p.close_pdi_document(doc);
/* ブロックへ流し込み */
p.fill_textblock(page, "firstname", "Serge", "encoding=winansi");
/* ... いろいろなブロックへ流し込み ... */
/* ページを再度配置、今度は見えるように */
p.fit_pdi_page(page, 0.0, 0.0, "");
if (tf == -1)
break;
/* いちばん最近のfit_textflow()呼び出しの結果をチェック */
reason = (int) p.info_textflow(tf, "returnreason");
result = p.get_string(reason, "");
/* テキストが全部配置されたならループを抜ける */
if (result.equals("_stop"))
{
p.delete_textflow(tf);
break;
}
}
ブ ロ ッ ク プ ロパテ ィ で スポ ッ ト カ ラ ー ブ ロ ッ ク プ ロ パテ ィ で特色 (ス ポ ッ ト カ ラ ー) を
使 う には、 「...」 を ク リ ッ ク すれば、 すべての HKS ・ Pantone ス ポ ッ ト カ ラ ーの一覧を表示
で き ます。 こ れ ら のカ ラ ー名は PPS に内蔵 さ れてお り 、 こ と さ ら 準備な し に使用で き ま
す。 カ ス タ ム ス ポ ッ ト カ ラ ーに対 し ては、 Block Plugin で代替色を定義する こ と が可能で
す。ブ ロ ッ ク プ ロ パテ ィ で代替色を指定 し ていない と き は、PPS アプ リ ケーシ ョ ン で PDF_
makespotcolor( ) か然 る べ き カ ラ ーオプシ ョ ン リ ス ト を用いて カ ス タ ム ス ポ ッ ト カ ラ ーを
あ ら か じ め定義 し てお く 必要があ り ます。そ う でない と ブ ロ ッ ク への流 し 込みは失敗 し ま
す。
0
P テキス ト を塗る 4 テキス ト を塗 り 、 ク リ ッ ピ ングパスに追加
2
P テキス ト を塗っ て描線 6 テキス ト を塗っ て描線 し 、 ク リ ッ ピ ン グパスに追加
orientate (キーワー ド ) テキス ト を配置する向き を指定 し ます。 と り う る値は north ・ east ・ south ・ west。
デ フ ォ ル ト : north
13.7.8 カ ス タ ムプ ロパテ ィ
カ ス タ ムプ ロ パテ ィ は、 すべての種類のブ ロ ッ ク に適用 さ れます。 PPS と プ レ ビ ュ ー機能
か ら は無視 さ れます。 カ ス タ ムプ ロ パテ ィ の命名規則を表 13.13 に示 し ます。
返 さ れたブ ロ ッ ク 名はその後、 ブ ロ ッ ク のプ ロ パテ ィ を ク エ リ ー し た り 、 ブ ロ ッ ク へテ キ
ス ト ・ 画像 ・ PDF ・ グ ラ フ ィ ッ ク 内容を流 し 込んだ り する ために利用で き ます。 指定 さ れ
たブ ロ ッ ク が存在 し ない と き には例外が発生 し ます。 こ れを避け る には、 length 接頭辞を
用いれば、 ブ ロ ッ ク の数を知 り 、 ひいては blocks 配列の最大添字を知 る こ と がで き ます
(配列の添字は 0 か ら 始ま る ので、 ブ ロ ッ ク の数は最大可能添字 よ り 1 大 き い こ と に留意
し て く だ さ い)。
カ ス タ ムプ ロパテ ィ を ク エ リ ー カ ス タ ム プ ロ パテ ィ は、 以下の例の よ う に ク エ リ ーす
る こ と がで き ます。 こ こ では、 ページ pagenum 上の b1 と い う ブ ロ ッ ク か ら プ ロ パテ ィ
zipcode を ク エ リ ー し てい ます :
zip = p.pcos_get_string(doc, "pages[" + pagenum + "]/blocks/b1/Custom/zipcode");
/* ---------------------------------------------------------
* テキストブロックを作成
* ---------------------------------------------------------
*/
textblock = p.poca_new("containertype=dict usage=blocks type=name key=Type value=Block");
/* このブロックをページのブロック辞書内に挿入 */
p.poca_insert(blockdict, "type=dict key=job_title direct=false value=" + textblock);
/* ---------------------------------------------------------
* 画像ブロックを作成
* ---------------------------------------------------------
*/
imageblock = p.poca_new("containertype=dict usage=blocks " +
"type=name key=Type value=Block");
/* このブロックをページのブロック辞書内に挿入 */
p.poca_insert(blockdict, "type=dict key=logo direct=false value=" + imageblock);
/* ---------------------------------------------------------
* PDFブロックを作成
* ---------------------------------------------------------
*/
pdfblock = p.poca_new("containertype=dict usage=blocks " +
"type=name key=Type value=Block");
/* このブロックをページのブロック辞書内に挿入 */
p.poca_insert(blockdict, "type=dict key=pdflogo direct=false " + "value=" + pdfblock);
/* ---------------------------------------------------------
* このブロック辞書をカレントページ内に挿入
* ---------------------------------------------------------
*/
p.end_page_ext("blocks=" + blockdict);
/* クリーンナップ */
p.poca_delete(blockdict, "recursive");
13.9.2 PDFlib ブ ロ ッ ク を取 り 込む
入力文書か ら 1個ない し 複数のPDFlibブ ロ ッ ク を、PDF_process_pdi( ) と action=copyallblocks
か action=copyblock で以下の よ う にカ レ ン ト 出力ページへ コ ピーす る こ と も 可能です :
if (p.process_pdi(p, doc, 0, "action=copyallblocks block={pagenumber=1}") != 1)
{
/* エラー */
}
表 13.15 ブ ロ ッ ク リ ス ト 辞書内のエ ン ト リ ー
キー 値
Blocks (辞書、 必須) キーはそれぞれ、 ブ ロ ッ ク名の名前オブ ジ ェ ク ト 。 その対応する値は、 そのブ ロ ッ
ク に対する ブ ロ ッ ク 辞書です (表 13.17 参照)。 ブ ロ ッ ク辞書内の Name キーは、 こ の辞書内のブ
ロ ッ ク 名 と 同 じ でなければな り ません。
BlockProducer1 (文字列) ブ ロ ッ ク を プ ログ ラ ム的に作成するのに用い ら れた ソ フ ト ウ ェ アの名前。 こ のエ ン ト
リ ーは、 POCA イ ン タ ー フ ェ イ スで ブ ロ ッ ク を作成 し た際に PDFlib に よ っ て作成 さ れます。
PluginVersion1 (文字列) ブ ロ ッ クの作成に使われた Block Plugin のバージ ョ ン識別を表す文字列。
1
pdfmark (論理値) ブ ロ ッ ク リ ス ト が pdfmark を用いて生成 さ れている場合は true でなければな り ません。
論理値 (論理値)
文字列 (文字列)
リスト (配列)
unichar (テキス ト 文字列) UTF-16 BOM U+FEFF で始ま る utf16be 形式の Unicode 文字列
表 13.17 ブ ロ ッ ク 辞書内のエ ン ト リ ー
プ ロパテ ィ グループ 値
A 改訂履歴 423
日付 更新点
記号 H
.NET バイ ンデ ィ ング 39 HKS カ ラ ー 92
hypertextformat オプ シ ョ ン 114
A
Acrobat のブ ロ ッ ク作成用プ ラ グ イ ン 375 I
ArtBox 71 IBM System i 66
ascender 157 IBM Z 66
asciifile オプ シ ョ ン 67 iccprofilegray/rgb/cmyk オプ シ ョ ン 87
autosubsetting オプ シ ョ ン 149 ISO 14289 (PDF/UA) 335
ISO 15930 (PDF/X) 358
B ISO 19005 (PDF/A) 346
ISO 32000-1 (PDF 1.7) 341
BleedBox 71
BMP 109, 191 ISO 32000-2 (PDF 2.0) 343
bytes → hypertextformat
J
C Javadoc 38
Java バイ ンデ ィ ング 37
C++ バイ ンデ ィ ング 35
JBIG2 190
capheight 157
JFIF 189
CCSID 117
JPEG 189
CIE L*a*b* カ ラ ースペース 90
EXIF 形式の画像 189
CMap 118, 119
JPEG2000 189
COLR カ ラ ー フ ォ ン ト 128
CropBox 71
currentx ・ currenty オプ シ ョ ン 157 L
C バイ ンデ ィ ン グ 31 leading 157
D M
defaultgray/rgb/cmyk 色空間 88 masked 195
descender 157 MediaBox 71
DeviceN カ ラ ー 94
dpi 計算 187 N
NChannel 色空間 95
E .NET バイ ンデ ィ ング 39
EBCDIC 66 n 色 ICC プ ロ フ ァ イル 358
ebcdicutf8 → hypertextformat
errorpolicy オプ シ ョ ン 213 O
EUDC (end-user defined characters) 176 Objective-C バイ ンデ ィ ング 42
EUDC (エ ン ド ユーザー定義キ ャ ラ ク タ ) フ ォ OBJR 構造エ レ メ ン ト
ン ト 127 イ ン タ ラ ク テ ィ ブ要素のための 321, 323
EXIF JPEG 画像 189 OpenType
カ ラ ー フ ォ ン ト 128
G コ レ ク シ ョ ン 127
get_buffer() 64 フ ォ ン ト 127
grid.pdf 69 フ ォ ン ト バ リ エーシ ョ ン 127
索引 425
レ イ アウ ト 機能 163 T
OTC (OpenType Collection) 175
textformat オプ シ ョ ン 114
overline オプ シ ョ ン 159
textrendering オプ シ ョ ン 159
textx ・ texty オプ シ ョ ン 157
P TIFF 190
page 188 topdown オプ シ ョ ン 70
Pantone カ ラ ー 91 TrimBox 71
PDF 1.7 341
TrueType フ ォ ン ト 127
PDF 1.7 と PDF 2.0 の タ グセ ッ ト 297
TTC (TrueType コ レ ク シ ョ ン) 127
PDF 2.0 343
TTC (TrueType Collection) 175
PDF_EXIT_TRY( ) 33
PDF_get_buffer() 64 Type 3 (ユーザー定義) フ ォ ン ト 131
PDF/A 346
PDF/UA 335 U
PDF/X 358
PDFlib underline オプ シ ョ ン 159
機能一覧 24 UPR (Unix PostScript Resource) 59
PDFlib Personalization Server 375 usehypertextencoding オプ シ ョ ン 114
pdflib.upr 63 usercoordinates オプ シ ョ ン 68
PDFLIBRESOURCEFILE 環境変数 63 utf8/utf16/utf16be/utf16le → hypertextformat
PDFlib の機能 24, 28 UTF 形式 110
PDF 取 り 込みラ イ ブ ラ リ (PDI) 211
PDI (PDF 取 り 込み) 211 W
pdiusebox オプ シ ョ ン 215
WOFF ・ WOFF2 フ ォ ン ト 130
Perl バイ ンデ ィ ン グ 44
permissions 77
Photoshop CMYK 画像 192 X
PHP バイ ンデ ィ ング 46 xCLR ICC プ ロ フ ァ イル 358
PNG 189 XMP メ タ デー タ 79
POCA (PDF オブ ジ ェ ク ト 作成 API) XObject 74
ブ ロ ッ ク を作成する ための 417 x ハイ ト 157
文書部分 メ タ デー タ (DPM) のための 371
PPS (PDFlib Personalization Server) 375
Python バイ ンデ ィ ング 48
Z
ZUGFeRD 標準
R 電子イ ンボ イ スのための 347
426 索引
う 切 り 抜き 71
ウ ィ ド ー行 250
上付き 157 く
グ ラ デーシ ョ ン 98
え グ ラ フ ィ ッ ク 199
グ リ フ 109
エ スケープ シーケ ン ス 121
記号 フ ォ ン ト か ら選択 138
絵文字修飾シーケ ン ス 161
グ リ フ ID (GID) 指定 133
エ ラ ー処理 55
置換 183
エ ン コ ーデ ィ ング
入手可能性 152
カ ス タ ム 118
グ リ フ レ ッ ト 131
シ ス テムか らの取得 117
ク ロ マキーマス ク処理 195
お け
オーバープ リ ン ト 制御 107
権限 76
オー フ ァ ン行 250
権限パスワー ド 76
言語バイ ンデ ィ ング→バイ ンデ ィ ング
か
カ ーニ ング 157 こ
回転 69 コ ア フ ォ ン ト 143
カ ス タ ムエ ン コ ーデ ィ ング 118 高度な改行 254
カ ス タ ム構造種別 308 黒点補償 89
画像 コ ピー
拡縮 187 ページ枠を 226
デー タ を再利用 187
フ ァ イル形式 189
画像を拡縮 187
さ
座標系 68
カテゴ リ
リ ソ ース 60 下向き 69
カ プ セル化 XObject メ ー ト ル 68
PDF/VT のための 373 サブ セ ッ ト 化 149
カ プ セル化 ヒ ン ト サブパス 71
PDF/VT のための 368
カ ラ ー フ ォ ン ト 128 し
カ ラ ーブ レ ン ド 98 シ ェ ーデ ィ ング 98
カ レ ン ト 点 72 しおり
環境変数 PDFLIBRESOURCEFILE 63 構造を持っ た 323
韓国語 119, 175 シ ス テムエ ン コ ーデ ィ ン グ対応 117
下付き 157
き 下向き座標 69
出力イ ン テ ン ト
記号フ ォ ン ト
PDF/A のための 349
グ リ フ を選択 138
PDF/X に対する 361, 362
輝度マス ク 105
商用ラ イ セ ン ス 13
機能
PDFlib の 24, 28 私用領域 (PUA) 109, 137
所有者パスワー ド 76
機能一覧
PDFlib 24
基本多言語面 109 す
キ ャ ッ プハイ ト 157 透か し (編集可能な) 236
キ ャ ラ ク タ ー と グ リ フ 109 スケー ラ ブルベ ク ト ルグ ラ フ ィ ッ ク (SVG)
キ ャ ラ ク タ ー メ ト リ ッ ク 157 199
行送 り 157 ス コ ープ ヒ ン ト
索引 427
PDF/VT のための 372 内容文字列 114
ス タ イル名 名前文字列 114
Windows の 145
ス テ ン シルマス ク 196
スポ ッ ト カ ラ ー (分版カ ラ ースペース) 91
に
日中韓 (日本語 ・ 中国語 ・ 韓国語)
Windows コ ー ド ページ 120
そ カ ス タ ム フ ォ ン ト 175
ソ フ ト マス ク 105 構成 119
日本語 119, 175
た
タ イ リ ングパ タ ーン 100 ぬ
ダウ ンサン プ リ ング 187 塗 り 71
タ グセ ッ ト 297, 298
タ グセ ッ ト 名前空間 309 ね
タ グ付き し お り 323 ネス ト
脱色 例外の 32
オブ ジ ェ ク ト を 104
縦書き 175
単位 68
は
バイ ト サービ ング 66
バイ ト 順序マー ク (BOM) 110, 115
ち ハイパーテキス ト 文字列 114
着色 バイ ンデ ィ ング 31
オブ ジ ェ ク ト を 104 パス 71
画像に 197 パスオブ ジ ェ ク ト 72
中国語 119, 175 パスワー ド 76
パ タ ーン ( タ イ リ ング) 100
つ バ ッ ク ス ラ ッ シ ュ置換 121
強 く 構造化 さ れた文書 338 バ リ ア ブル フ ォ ン ト 127
反転
オブ ジ ェ ク ト の色を 104
て
デ ィ セ ン ダー 157
テキス ト 位置 157 ひ
テキス ト 進行方向 175 評価版 11
テキス ト ス タ イル 157 標準 14 フ ォ ン ト 143
テキス ト フ ロー 238 標準化異体字シーケ ン ス 179
テキス ト メ ト リ ッ ク 157 標準構造種別 297
デ フ ォル ト 色空間 87 描線 71
デ フ ォル ト 座標 68
添付パスワー ド 76 ふ
テ ン プ レー ト 74 フ ァ イル検索 61
フ ォ ーム XObject 74
と フ ォ ーム フ ィ ール ド : PDFlib ブ ロ ッ クへの変
透過 換 389
PDF/VT 内の 373 フォン ト
OpenType 127
取 り 込まれた PDF ページ内で検出 373
SING 131
取 り 込み PDF ページ内で検出 373
TrueType 127
TrueType コ レ ク シ ョ ン 127
な Type 3 (ユーザー定義) 131
アル フ ァ チ ャ ン ネル Type 3 (ユーザー定義) フ ォ ン ト 131
内蔵 193 Windows のス タ イル名 145
428 索引
WOFF ・ WOFF2 130
記号グ リ フ を選択 138
ゆ
ユーザースペース 68
サブ セ ッ ト 化 149
ユーザー定義 (Type 3) フ ォ ン ト 131
標準欧文 143
ユーザーパスワー ド 76
メ ト リ ッ ク 157
ユーザー定義 (Type 3) 131
リ ソ ース構成 59 よ
フ ォ ン ト 名エ イ リ ア ス設定 141 用字系固有の改行 254
不可視テキス ト 405 横書き 175
復号画像オプ シ ョ ン 197 読み上げ順序 314
復号配列 弱 く 構造化 さ れた文書 338
画像の色に対する 197
複数ページ画像 フ ァ イル 188
袋文字 405
り
リ ソ ース カ テ ゴ リ 60
プ ラグイ ン
ブ ロ ッ ク作成用 375
ブ レ ン ド モー ド 101, 104 れ
ブロ ッ ク 例外 55
POCA で作成 417 レ イ ヤー と PDI 215
プ ラ グ イ ン 375 レ コ ー ド レ ベル
ブ ロ ッ ク プ ロパテ ィ 378 PDF/VT のための 367
文書部分 ヒ エ ラ ルキー 367, 370 連携フ ァ イル 80
文書部分 メ タ デー タ (DPM) 367, 371
ろ
へ ロールマ ッ プ
ページ寸法規格 70 カ ス タ ム構造種別のための 308
ページ寸法限界 ログ記録 57
Acrobat の 71 論理読み取 り 順序 314
ページ定義 68
ベ ク ト ルグ ラ フ ィ ッ ク 199
編集可能なすか し 236
ほ
ホス ト エ ン コ ーデ ィ ング 117
ホス ト フ ォ ン ト 144
ま
マ ス タ ーパスワー ド 76
み
ミ リ メ ー ト ル 68
め
メ ー ト ル座標 68
メ ト リ ッ ク 157
メ モ リ 内に PDF 文書を生成 64
も
文字参照 122
索引 429
ABC
PDFlib GmbH
Franziska-Bilek-Weg 9
80339 München, Germany
www.pdflib.com
電話 +49 • 89 • 452 33 84-0
ラ イ セ ン ス発行のお問い合わせ
sales@pdflib.com
サポー ト
support@pdflib.com (お持ちの ラ イ セ ン ス番号をお書 き く だ さ い)