...

2 PDFlib - TechStyle

by user

on
Category: Documents
67

views

Report

Comments

Transcript

2 PDFlib - TechStyle
ABC
PDFlib, PDFlib+PDI, PPS
A library for generating PDF on the fly
Version 8.0.1
チ ュ ー ト リ アル
COM ・ .NET ・ REALbasic エデ ィ シ ョ ン
Copyright © 1997–2010 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
FAX +49 • 89 • 452 33 84-99
疑問点がおあ り の場合は tech.groups.yahoo.com/group/pdflib にある PDFlib メ ー リ ン グ リ ス ト と アー カ イ ブ
を ご覧 く だ さ い。
ラ イ セ ン ス取得のための連絡先 : [email protected]
商用 PDFlib ラ イ セ ン ス保持者向けサポー ト : [email protected] (ラ イ セ ン ス番号をお知らせ く だ さ い)
この出版物および こ こ に含まれた情報はあ り のま まに供給 さ れる ものであ り 、 通知な く 変更 さ れる こ と が
あ り 、 また、 PDFlib GmbH によ る誓約 と し て解釈 さ れるべき ものではあ り ません。 PDFlib GmbH はいかな
る誤 り や不正確に対 し て も責任や負担を全 く 負 う ものではな く 、 こ の出版物に関するいかな る類の (明示
的 ・ 暗示的または法定に関わ ら ず) 保障を も行 う ものではな く 、 そ し て、 いかな る そ し てすべての売買可
能性の保障 と 、 特定の目的に対する適合性 と 、 サー ド パーテ ィ の権利の侵害 と を明白に否認 し ます。
PDFlib と PDFlib ロ ゴは PDFlib GmbH の登録商標です。 PDFlib ラ イ セ ン ス保持者は PDFlib の名称 と ロ ゴ を彼
らの製品の文書内で用いる権利を与え られます。 ただ し 、 こ れは必須ではあ り ません。
Adobe ・ Acrobat ・ PostScript ・ XMP は Adobe Systems Inc. の商標です。 AIX ・ IBM ・ OS/390 ・ WebSphere ・
iSeries ・ zSeries は International Business Machines Corporation の商標です。 ActiveX ・ Microsoft ・ OpenType ・
Windows は Microsoft Corporation の 商標です。 Apple ・ Macintosh ・ TrueType は Apple Computer, Inc. の 商標
です。 Unicode ・ Unicode ロ ゴは Unicode, Inc. の 商標です。 Unix は The Open Group の 商標です。 Java ・
Solaris は Sun Microsystems, Inc. の 商標です。 HKS は HKS 商標連合= Hostmann-Steinberg ・ K+E Printing
Inks ・ Schmincke の登録商標です。 他の企業の製品 と サービ ス名は他の商標やサービ スマー ク である場合が
あ り ます。
ソ フ ト ウ ェ ア ア プ リ ケーシ ョ ンやユーザー向け文書で表示 さ れる PANTONE® カ ラ ーは PANTONE 定義規格 と
一致 し ない場合があ り ます。 正確な色については最新の PANTONE Color Publication を ご覧 く だ さ い。
PANTONE® およびその他の Pantone, Inc. の商標は Pantone, Inc. に帰属 し ます。 © Pantone, Inc., 2003.
Pantone, Inc. は PDFlib GmbH に対 し て PDFlib ソ フ ト ウ ェ ア と の組み合わせでのみ使用する ための頒布ラ イ
セ ン ス さ れた色デー タ および/または ソ フ ト ウ ェ アの著作権者です。 PANTONE カ ラ ーデー タ および/また
は ソ フ ト ウ ェ アは PDFlib ソ フ ト ウ ェ アの実行の部分 と し て以外に他のデ ィ ス ク上や メ モ リ 内へ複製 し ては
いけません。
PDFlib は以下のサー ド パーテ ィ ソ フ ト ウ ェ アの変更 さ れた部分を含んでいます。
ICClib、 Copyright © 1997-2002 Graeme W. Gill
GIF 画像デ コ ーダ、 Copyright © 1990-1994 David Koblas
PNG 画像参照ラ イ ブ ラ リ (libpng)、 Copyright © 1998-2004 Glenn Randers-Pehrson
Zlib 圧縮ラ イ ブ ラ リ 、 Copyright © 1995-2002 Jean-loup Gailly and Mark Adler
TIFFlib 画像ラ イ ブ ラ リ 、 Copyright © 1988-1997 Sam Leffler、 Copyright © 1991-1997 Silicon Graphics, Inc.
Eric Young の書いた Cryptographic ソ フ ト ウ ェ ア 、 Copyright © 1995-1998 Eric Young ([email protected])
Independent JPEG Group の JPEG ソ フ ト ウ ェ ア、 Copyright © 1991-1998, Thomas G. Lane
Cryptographic ソ フ ト ウ ェ ア、 Copyright © 1998-2002 The OpenSSL Project (www.openssl.org)
Expat XML パーサ、 Copyright © 1998, 1999, 2000 Thai Open Source Software Center Ltd
ICU International Components for Unicode、 Copyright © 1995-2009 International Business Machines
Corporation and others
参照 sRGB ICC カ ラ ープ ロ フ ァ イルデー タ 、 Copyright © 1998 Hewlett-Packard Company
PDFlib は RSA Security, Inc. の MD5 メ ッ セージダ イ ジ ェ ス ト アルゴ リ ズムを含んでいます。
目次
0 PDFlib ラ イ セ ン スキーの適用
1 導入
9
13
1.1 説明書 と サン プルの紹介 13
1.2 PDFlib プ ログ ラ ミ ング 15
1.3 PDFlib/PDFlib+PDI/PPS 8 の新機能 17
1.3.1 Acrobat 9 対応の PDF 機能 17
1.3.2 フ ォ ン ト 処理 と テ キ ス ト 出力 18
1.3.3 PDFlib Block Plugin と PDFlib Personalization Server (PPS) 20
1.3.4 その他の重要な機能 21
1.4 PDFlib の機能一覧 22
1.5 PDFlib+PDI の追加機能 26
1.6 PPS の追加機能 27
1.7 製品別機能一覧 28
2 PDFlib の言語バイ ンデ ィ ング
29
2.1 各言語バイ ンデ ィ ングにおけ るデー タ 型 29
2.2 Cobol バイ ンデ ィ ング 30
2.3 COM バイ ンデ ィ ン グ 31
2.4 C バイ ンデ ィ ング 37
2.5 C++ バイ ンデ ィ ング 38
2.6 Java バイ ンデ ィ ング 39
2.7 .NET バイ ンデ ィ ン グ 40
2.8 Perl バイ ンデ ィ ング 43
2.9 PHP バイ ンデ ィ ング 44
2.10 Python バイ ンデ ィ ング 45
2.11 REALbasic バイ ンデ ィ ング 46
2.12 RPG バイ ンデ ィ ン グ 47
2.13 Ruby バイ ンデ ィ ング 48
2.14 Tcl バイ ンデ ィ ング 49
3 PDFlib 文書を作成
51
3.1 PDFlib プ ログ ラ ミ ングの一般的特徴 51
3.1.1 例外処理 51
目次
3
3.1.2
3.1.3
3.1.4
3.1.5
3.1.6
PDFlib 仮想フ ァ イ ルシ ス テ ム (PVF) 53
リ ソ ース設定 と フ ァ イ ル検索 55
PDF 文書を メ モ リ 内に生成 59
大容量 PDF 文書 59
PDFlib を EBCDIC ベース のプ ラ ッ ト フ ォーム で利用 60
3.2 ページ記述 61
3.2.1 座標系 61
3.2.2 ページサ イ ズ 63
3.2.3 直接パス と パス オブジ ェ ク ト 64
3.2.4 テ ンプ レー ト 66
3.2.5 外部 PDF 文書内の参照ページ 67
3.3 暗号化 PDF 68
3.3.1 PDF のセキ ュ リ テ ィ 機能 68
3.3.2 PDFlib に よ る 文書保護 69
3.4 Web 最適化 (線形化) PDF 71
3.5 色を扱 う 72
3.5.1 パ タ ーン と ス ムーズシ ェーデ ィ ン グ 72
3.5.2 Pantone ・ HKS ・ カ ス タ ム ス ポ ッ ト カ ラ ー 73
3.5.3 カ ラ ーマネジ メ ン ト と ICC プ ロ フ ァ イ ル 76
3.6 さ ま ざ ま な イ ン タ ラ ク テ ィ ブ要素 79
3.6.1 リ ン ク ・ し お り ・ 注釈 79
3.6.2 フ ォーム フ ィ ール ド ・ JavaScript 81
3.7 地理空間 PDF 85
3.7.1 GeoPDF を Acrobat で使 う 85
3.7.2 地理座標系 と 投影座標系 85
3.7.3 座標系関連の作成例 86
3.7.4 Acrobat 9 におけ る GeoPDF の制約 87
4 Unicode と レ ガシ エ ン コ ーデ ィ ング
89
Unicode の重要な概念 89
4.1
4.2 シ ングルバイ ト (8 ビ ッ ト ) エ ン コ ーデ ィ ング 91
4.3 日本語 ・ 中国語 ・ 韓国語エ ン コ ーデ ィ ング 95
4.4 PDFlib の文字列処理 97
4.4.1 内容文字列 ・ ハ イ パーテ キ ス ト 文字列 ・ 名前文字列 97
4.4.2 Unicode 対応言語バ イ ンデ ィ ン グの文字列 97
4.4.3 Unicode 非対応言語バ イ ンデ ィ ン グの文字列 98
4.5 キ ャ ラ ク タ を指定 99
4.5.1 エ ス ケープシーケ ン ス 99
4.5.2 文字参照 100
5 フ ォ ン ト 処理
103
さ ま ざ ま な フ ォ ン ト 形式 103
5.1.1 TrueType フ ォ ン ト 103
5.1
4
目次
5.1.2
5.1.3
5.1.4
5.1.5
OpenType フ ォ ン ト 103
PostScript Type 1 フ ォ ン ト 104
SING フ ォ ン ト (グ リ フ レ ッ ト ) 105
Type 3 フ ォ ン ト 105
5.2 Unicode のキ ャ ラ ク タ と グ リ フ 107
5.2.1 グ リ フ ID 107
5.2.2 グ リ フ に対する Unicode マ ッ ピ ン グ 107
5.2.3 Unicode 制御キ ャ ラ ク タ 108
5.2.4 ユー ロ グ リ フ 109
5.3 テキス ト 処理パイ プ ラ イ ン 110
5.3.1 入力文字列を Unicode へ正規化 110
5.3.2 Unicode 値を グ リ フ ID へ変換 111
5.3.3 グ リ フ ID を転換 112
5.4 フ ォ ン ト を読み込む 113
5.4.1 テ キ ス ト フ ォ ン ト に対す る エン コ ーデ ィ ン グ を選ぶ 113
5.4.2 記号フ ォ ン ト に対す る エン コ ーデ ィ ン グ を選ぶ 115
5.4.3 フ ォ ン ト を検索 116
5.4.4 Windows ・ Mac OS X 上のホ ス ト フ ォ ン ト 120
5.4.5 予備フ ォ ン ト 123
5.5 フ ォ ン ト の埋め込み ・ サブ セ ッ ト 化 126
5.5.1 フ ォ ン ト の埋め込み 126
5.5.2 フ ォ ン ト のサブセ ッ ト 化 127
5.6 フ ォ ン ト 情報を取得 130
5.6.1 フ ォ ン ト 非依存のエン コ ーデ ィ ン グ ・ Unicode ・ グ リ フ名取得 130
5.6.2 フ ォ ン ト 依存のエン コ ーデ ィ ン グ ・ Unicode ・ グ リ フ名取得 131
5.6.3 コ ー ド ページ網羅性 と 予備フ ォ ン ト を取得 132
6 テキス ト 出力
6.1
135
さ ま ざ ま な テキス ト 出力方式 135
6.2 フ ォ ン ト メ ト リ ッ ク と テキス ト バ リ エーシ ョ ン 137
6.2.1 フ ォ ン ト と グ リ フ の メ ト リ ッ ク 137
6.2.2 カーニ ン グ 138
6.2.3 テ キ ス ト バ リ エーシ ョ ン 139
6.3 OpenType レ イ アウ ト 機能 142
6.3.1 対応 し てい る OpenType レ イ ア ウ ト 機能 142
6.3.2 テ キ ス ト 行 ・ テ キ ス ト フ ロ ーで OpenType レ イ ア ウ ト 機能 144
6.4 複雑用字系出力 148
6.4.1 複雑用字系 148
6.4.2 用字系 と 言語 150
6.4.3 複雑用字系のシ ェ ーピ ン グ 152
6.4.4 双方向組版 152
6.4.5 ア ラ ビ ア文字テ キ ス ト 組版 154
6.5 日本語 ・ 中国語 ・ 韓国語テキス ト 出力 156
6.5.1 標準日中韓フ ォ ン ト 156
目次
5
6.5.2
6.5.3
6.5.4
カ ス タ ム日中韓フ ォ ン ト 157
EUDC ・ SING フ ォ ン ト で外字キ ャ ラ ク タ を利用 158
OpenType レ イ ア ウ ト 機能 と 高度な日中韓テ キ ス ト 出力 159
7 画像 ・ PDF ページの取 り 込み
7.1
163
ラ ス タ 画像の取 り 込み 163
7.1.1 基本的な画像処理 163
7.1.2 対応画像フ ァ イ ル形式 165
7.1.3 ク リ ッ ピ ン グパス 168
7.1.4 画像マ ス ク と 透過 168
7.1.5 画像の着色 170
7.2 PDI で PDF ページ を取 り 込み 172
7.2.1 PDI の機能 と 用途 172
7.2.2 PDFlib で PDI 関数を利用 172
7.2.3 受け入れ可能な PDF 文書 174
7.3 画像 と 取 り 込み PDF ページの配置 176
7.3.1 単純にオブジ ェ ク ト を配置 176
7.3.2 オブジ ェ ク ト を枠内に置 く 176
7.3.3 オブジ ェ ク ト の向 き を変え る 178
7.3.4 オブジ ェ ク ト を回転 180
7.3.5 ページサ イ ズの調整 181
7.3.6 配置画像 ・ PDF ページに関す る 情報を取得 182
8 テキス ト ・ 表組版
183
テキス ト 行の配置 と はめ込み 183
8.1.1 単純なテ キ ス ト 行配置 183
8.1.2 テ キ ス ト を枠内に置 く 184
8.1.3 テ キ ス ト を枠にはめ込み 185
8.1.4 テ キ ス ト を文字で整列 さ せ る 187
8.1.5 ス タ ンプ を配置 187
8.1.6 リ ーダ を利用 188
8.1.7 パス上のテ キ ス ト 189
8.1
8.2 複数行のテキス ト フ ロー 191
8.2.1 テ キ ス ト フ ロ ーをはめ込み枠に配置 193
8.2.2 段落の組版のオプシ ョ ン 194
8.2.3 イ ン ラ イ ンオプシ ョ ン リ ス ト と マ ク ロ 195
8.2.4 タ ブ位置 197
8.2.5 番号 リ ス ト と 段落間隔 199
8.2.6 制御キ ャ ラ ク タ と キ ャ ラ ク タ マ ッ ピ ン グ 200
8.2.7 ハ イ フ ネーシ ョ ン 202
8.2.8 標準改行アルゴ リ ズ ムの制御 203
8.2.9 高度な用字系固有の改行 206
8.2.10 テ キ ス ト をパス ・ 画像に回 り 込み 207
8.3 表の組版 211
8.3.1 単純な表を配置 212
6
目次
8.3.2
8.3.3
8.3.4
8.3.5
8.3.6
表セルの さ ま ざ ま な内容 215
表 と 列の幅 216
さ ま ざ ま な種類の内容を持っ た表 218
表 イ ン ス タ ン ス 221
表組版のアルゴ リ ズ ム 223
8.4 範囲枠 226
8.4.1 テ キ ス ト 行を装飾 226
8.4.2 テ キ ス ト フ ロ ーで範囲枠を利用 227
8.4.3 範囲枠 と 画像 228
9 pCOS イ ン タ フ ェ ース
231
9.1 簡単な pCOS の例 231
9.2 PDF の基本デー タ 型の処理 233
9.3 複合デー タ 構造 と ID 235
9.4 パス文法 236
9.5 擬似オブ ジ ェ ク ト 238
9.6 暗号化 PDF 文書 245
10 PDF のバージ ョ ン と 規格
247
10.1 Acrobat ・ PDF のバージ ョ ン 247
10.2 ISO 32000 250
10.3 PDF/X によ る印刷出力 251
10.3.1 PDF/X 規格フ ァ ミ リ 251
10.3.2 PDF/X 準拠出力の生成 252
10.3.3 出力 イ ン テ ン ト と 標準出力条件 255
10.3.4 PDI に よ る PDF/X 文書の取 り 込み 256
10.4 PDF/A によ る アー カ イ ビ ング 258
10.4.1 各種の PDF/A 規格 258
10.4.2 PDF/A 準拠の出力を生成 258
10.4.3 PDF/A 文書を PDI で取 り 込み 262
10.4.4 PDF/A 作成のためのカ ラ ー戦略 263
10.4.5 PDF/A のための XMP 文書 メ タ デー タ 264
10.4.6 PDF/A の検証 266
10.4.7 PDF/A 文書を Acrobat で表示 266
10.5 タ グ付き PDF 267
10.5.1 PDFlib で タ グ付 き PDF を生成 267
10.5.2 直接テ キ ス ト 出力 ・ テ キ ス ト フ ロ ーに よ る タ グ付き PDF の作成 269
10.5.3 複雑な レ イ ア ウ ト におけ る ア イ テ ムのア ク テ ィ ブ化 270
10.5.4 Acrobat におけ る タ グ付き PDF の利用 273
11 PPS と PDFlib Block Plugin
275
11.1 PDFlib Block Plugin を イ ン ス ト ール 275
目次
7
11.2 PDFlib
11.2.1
11.2.2
11.2.3
ブ ロ ッ クの概念あ ら ま し 277
文書デザ イ ン と プ ロ グ ラ ム コ ー ド と の分離 277
ブ ロ ッ ク プ ロ パテ ィ 277
PDF の フ ォーム フ ィ ール ド を利用 し ない理由は ? 278
11.3 PDFlib Block Plugin で ブ ロ ッ ク を編集 280
11.3.1 ブ ロ ッ ク を作成 280
11.3.2 ブ ロ ッ ク プ ロ パテ ィ を編集 283
11.3.3 ページ間 ・ 文書間でブ ロ ッ ク を コ ピー 285
11.3.4 PDF フ ォーム フ ィ ール ド を PDFlib ブ ロ ッ ク に変換 286
11.3.5 Block Plugin のユーザー イ ン タ フ ェース を カ ス タ マ イ ズ 289
11.4 Acrobat で ブ ロ ッ ク を プ レ ビ ュ ー 290
11.5 PPS で ブ ロ ッ クへ流 し 込み 294
11.6 ブ ロ ッ クのプ ロパテ ィ 298
11.6.1 管理プ ロ パテ ィ 群 298
11.6.2 矩形プ ロ パテ ィ 群 298
11.6.3 書式プ ロ パテ ィ 群 299
11.6.4 テ キ ス ト 作成プ ロ パテ ィ 群 301
11.6.5 テ キ ス ト 組版プ ロ パテ ィ 群 302
11.6.6 オブジ ェ ク ト はめ込みプ ロ パテ ィ 群 304
11.6.7 デフ ォ ル ト 内容に関す る プ ロ パテ ィ 群 306
11.6.8 カ ス タ ムプ ロ パテ ィ 306
11.7 pCOS で ブ ロ ッ ク名 と プ ロパテ ィ を取得 308
11.8 PDFlib
11.8.1
11.8.2
11.8.3
ブ ロ ッ クの仕様 310
PDFlib ブ ロ ッ ク の PDF オブジ ェ ク ト 構造 310
ブ ロ ッ ク 辞書のキー 311
pdfmark で PDFlib ブ ロ ッ ク を生成 313
A 改訂履歴
索引
8
目次
317
315
0 PDFlib ラ イ セ ン スキーの適用
PDFlib GmbH が提供す る PDFlib ・ PDFlib+PDI ・ PPS のバ イ ナ リ バージ ョ ンはいずれ も 、 商
用 ラ イ セ ン ス をお持ちでな く て も 、 フル機能の評価版 と し て ご利用いただけ ます。 ただ し
未 ラ イ セ ン ス版では、 生成 さ れ る ページすべてに、 www.pdflib.com と い う デモ ス タ ン プ
が横断印字 さ れます。 PDFlib ラ イ セ ン ス の取得を前向 き にご検討いただいてい る 企業で、
評 価 段 階 や プ ロ ト タ イ プ の デ モ 期 間 中 に デ モ ス タ ン プ の 除 去 を ご 希 望 の 場 合 は、
[email protected] 宛に企業情報 ・ プ ロ ジ ェ ク ト 内容を簡単にご説明いただければ、 一時的
な ラ イ セ ン ス キーを ご提供 し ます (評価キーの提供をお断 り す る 権利を私達は保持いた し
ます。 た と えば匿名に よ る ご希望の場合等)。
PDFlib ・ PDFlib+PDI ・ PDFlib Personalization Server (PPS) は 1 つのパ ッ ケージ と し て頒
布 さ れてはい ますが、 それぞれ異な る 製品であ り 、 別々の ラ イ セ ン ス キーを必要 と す る こ
と に注意 し て く だ さ い。 PDFlib+PDI の ラ イ セ ン ス キーは PDFlib に対 し て も 有効ですが、
その逆は無効であ り 、 ま た、 PPS の ラ イ セ ン ス キーは PDFlib+PDI と PDFlib に対 し て有効
です。 すべての ラ イ セ ン ス キーはプ ラ ッ ト フ ォーム依存であ り 、 購入 さ れた対象のプ ラ ッ
ト フ ォームで し か使用で き ません。
PDFlib ま たは PDI の ラ イ セ ン ス キーを ご購入いただいた ら 、 それを適用 し てデモ ス タ
ンプ を除去 し て く だ さ い。 ラ イ セ ン ス キーを設定する にはい く つかの方法があ り ます。 以
下にそれを解説 し ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの general/license_key ト ピ ッ ク にあ り ます。
Windows イ ン ス ト ー ラ Windows イ ン ス ト ー ラ を使用す る 場合は、 製品を イ ン ス ト ール
す る 際に ラ イ セ ン ス キーを入力す る こ と がで き ます。 イ ン ス ト ー ラ は ラ イ セ ン ス キーを レ
ジ ス ト リ に追加 し ます (後述)。
実行時に ラ イ セ ン スキー を適用 ス ク リ プ ト やプ ロ グ ラ ム に行を追加 し て、 ラ イ セ ン ス
キーを実行時に設定す る よ う に し ます。 PDFlib オブジ ェ ク ト を イ ン ス タ ン ス化 し た直後
に、 license パ ラ メ タ を設定す る 必要があ り ます。 具体的な文法は、 使用す る プ ロ グ ラ ミ ン
グ言語に よ っ て異な り ます。
> COM/VBScript ・ REALbasic の場合 :
oPDF.set_parameter "license", "...あなたのライセンスキー ..."
> .NET/C# の場合 :
p.set_parameter("license", "...あなたのライセンスキー ...");
ラ イ セ ン ス フ ァ イルの利用 実行時の呼び出 し で ラ イ セ ン ス キー を 与え る のでは な く 、
ラ イ セ ン ス キーを テ キ ス ト フ ァ イ ルに入力 し てお く と い う 方法 も あ り ま す。 次の形式に
従っ て く だ さ い (PDFlib のデ ィ ス ト リ ビ ュ ーシ ョ ンにはすべて、 ラ イ セ ン ス フ ァ イ ルテ ン
プ レー ト licensekeys.txt が入っ てい る ので、 それを ご利用いただ く こ と も で き ます)。
PDFlib license file 1.0
# Licensing information for PDFlib GmbH products
PDFlib
8.0.1
...あなたのライセンスキー ...
ラ イ セ ン ス フ ァ イ ル内には、 複数の PDFlib GmbH 製品に対す る ラ イ セ ン ス キー群を、 そ
れぞれ別の行に記述す る こ と も で き ます。 ま た、 複数のプ ラ ッ ト フ ォームに対す る ラ イ セ
ン ス キー群を内容 と し て持たせ る こ と に よ り 、同一の ラ イ セ ン ス フ ァ イ ルを複数のプ ラ ッ
ト フ ォームで共用す る こ と も 可能です。
9
次に、 PDFlib に こ の ラ イ セ ン ス フ ァ イ ルについて知 ら せ る 必要があ り ます。 そのため
には、 PDFlib オブジ ェ ク ト を イ ン ス タ ン ス化 し た直後に、 以下の よ う に licensefile パ ラ メ
タ を設定 し ます。
> COM/VBScript ・ REALbasic の場合 :
oPDF.set_parameter "licensefile", "/ファイルへの/パス/licensekeys.txt"
> .NET/C# の場合 :
p.set_parameter("licensefile", "/ファイルへの/パス/licensekeys.txt");
あ る いは、 環境変数 PDFLIBLICENSEFILE を設定 し て ラ イ セ ン ス フ ァ イ ルの位置を示す と い
う 方法 も あ り ます。 Windows では、 シ ス テ ムの コ ン ト ロ ールパネルを使っ て、 「シ ス テム」
→ 「詳細」 → 「環境変数」 を選択 し ます。
レ ジ ス ト リ に ラ イ セ ン スキー Windows では、下記の レ ジ ス ト リ キーに ラ イ セ ン ス フ ァ イ
ルの名前を書 き 込む と い う 方法 も あ り ます :
HKLM\Software\PDFlib\PDFLIBLICENSEFILE
ま たは、下記の レ ジ ス ト リ キーの う ちのいずれか 1 つに ラ イ セ ン ス キーを直接書 き 込む こ
と も で き ます :
HKLM\Software\PDFlib\PDFlib8\license
HKLM\Software\PDFlib\PDFlib8\8.0.1\license
MSI イ ン ス ト ー ラ は、 イ ン ス ト ール時に与え ら れた ラ イ セ ン ス キーを、 こ れ ら のエン ト リ
の末尾に書 き 込みます。
注 64 ビ ッ ト Windows シ ス テム上で レ ジ ス ト リ を手作業で扱 う 際の注意点 : 通常どお り 、 64
ビ ッ ト の PDFlib バイ ナ リ は Windows レ ジス ト リ の 64 ビ ッ ト ビ ュ ー と と も に動作 し 、 64
ビ ッ ト シ ス テム上で動作する 32 ビ ッ ト の PDFlib バイ ナ リ はレ ジ ス ト リ の 32 ビ ッ ト ビ ュ ー
と と も に動作 し ます。 32 ビ ッ ト 製品に対する レ ジ ス ト リ キーを手作業で追加する必要が
ある と きは、 必ず 32 ビ ッ ト 版の regedit ツールを使用 し て く だ さ い。 これは 「ス タ ー ト 」
→ 「フ ァ イル名を指定 し て実行 ...」 のダ イ ア ログか ら下記によ っ て起動する こ と がで き ま
す:
%systemroot%\syswow64\regedit
ア ッ プデー ト と ア ッ プ グ レ ー ド ア ッ プデー ト (あ る 製品の古いバージ ョ ン か ら その同
じ 製品の新 し いバージ ョ ンへの切 り 換え) ま たはア ッ プグ レー ド (PDFlib か ら PDFlib+PDI
ま たは PPS への、 あ る いは PDFlib+PDI か ら PPS への切 り 換え) を購入 さ れた場合は、 そ
のア ッ プデー ト かア ッ プ グ レ ー ド に対 し て受け取っ た新 し い ラ イ セ ン ス キーを適用す る
必要が あ り ま す。 前の製品に対す る 古い ラ イ セ ン ス キーは も う 利用す る こ と がで き ま せ
ん。 なお、 ラ イ セ ン ス キーは、 あ る 製品バージ ョ ンのなかのすべての メ ン テナン ス リ リ ー
ス に対 し て有効です。 すなわち、 ラ イ セ ン ス に関する 限 り 、 すべての 8.0.x バージ ョ ンは
同 じ に扱われます。
未 ラ イ セ ン スの評価版機能 いずれの機能 も 、 ソ フ ト ウ ェ アに対 し て ラ イ セ ン ス キーを
一切適用せずに完全に評価 し ていただけ ます。 し か し 、 あ る 特定製品に対す る 有効な ラ イ
セ ン ス キーの適用後は、 それ よ り も 高いカ テ ゴ リ の機能は利用で き な く な り ます。 た と え
ば、 有効な PDFlib の ラ イ セ ン ス キーを イ ン ス ト ールす る と 、 PDI の機能は試用で き な く な
り ま す。 同様に、 PDFlib+PDI の ラ イ セ ン ス キーを イ ン ス ト ール し た後は、 パー ソ ナ ラ イ
ゼーシ ョ ン機能 (ブ ロ ッ ク 関数) は利用で き な く な り ます。
10
第 0 章 : PDFlib ラ イ セ ン スキーの適用 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
あ る 製品に対す る ラ イ セ ン ス キーがすでに イ ン ス ト ール さ れてい る 時は、 そのかわ り
にダ ミ ーの ラ イ セ ン ス文字列 「0」 (数字のゼ ロ ) を設定すれば、 それ よ り も 高い製品 ク ラ
ス の機能が試用で き る よ う にな り ます。 そ う す る こ と に よ り 、 それ以前に無効に さ れた関
数が有効にな り 、 ま た、 すべてのページ を横断す る デモ ス タ ンプが再び有効にな り ます。
ラ イ セ ン ス オ プ シ ョ ン PDFlib の 1 台ま たは複数台のサーバ上での利用や、 PDFlib を利
用者自身の製品 と と も に再配布す る こ と に対 し ては、 それぞれ異な っ た ラ イ セ ン ス オプ
シ ョ ンがご利用いただけ ます。 サポー ト 契約や ソ ース コ ー ド 契約 も ご提供 し てお り ます。
ラ イ セ ン ス についての詳細情報 と PDFlib購入申込フ ォームはPDFlibデ ィ ス ト リ ビ ュ ーシ ョ
ンの中にあ り ます。 商用 PDFlib ラ イ セ ン ス のご購入に関心があ る 場合や、 ご質問に関 し
ては何で も 、 下記ま でご連絡 く だ さ い。
PDFlib GmbH, Licensing Department
Franziska-Bilek-Weg 9, 80339 München, Germany
www.pdflib.com
電話 +49 ・ 89 ・ 452 33 84-0、 FAX +49 ・ 89 ・ 452 33 84-99
ラ イ セ ン ス に関す る お問い合わせ : [email protected]
PDFlib ラ イ セ ン ス のサポー ト : [email protected]
11
12
第 0 章 : PDFlib ラ イ セ ン スキーの適用 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
1 導入
1.1 説明書 と サ ン プルの紹介
PDFlib 製品の有効活用を支援す る ために、 以下に挙げ る 資料を提供 し てい ます。
注 Windows Vista ・ Windows 7 では、 ミ ニサン プル と ス タ ー タ サン プルはデ フ ォル ト で
「Program Files」 デ ィ レ ク ト リ 内へイ ン ス ト ール さ れます。 Windows の新たな保護スキー
ムに従い、 これ らのサン プルによ っ て作成 さ れる PDF 出力フ ァ イルは 「互換性フ ァ イル」
のも と で し か見えません。 推奨 さ れる回避策 : サン プルの入っ た フ ォルダ をユーザーデ ィ
レ ク ト リ へ コ ピー し ます。
すべての言語バ イ ン デ ィ ン グ用の ミ ニサ ン プル ミ ニサン プル(hello・image・pdfclock 等)
は、 ど のパ ッ ケージに も 、 ど の言語バ イ ンデ ィ ン グ に も 入っ てい ま す。 最小限の コ ー ド
で、 テ キ ス ト 出力 ・ 画像 ・ ベ ク タ グ ラ フ ィ ッ ク の出力例を示 し てい ます。 こ の ミ ニサンプ
ルを使えば簡単に、 PDFlib が正 し く イ ン ス ト ールで き てい る か試 し た り 、 PDFlib アプ リ
ケーシ ョ ンの書 き 方を さ っ と 把握 し た り す る こ と がで き ます。
すべての言語バ イ ン デ ィ ン グ用のス タ ー タ サ ン プル ス タ ー タ サ ン プ ル は、 す べ て の
パ ッ ケージに入っ てお り 、 さ ま ざ ま な言語バ イ ンデ ィ ン グ で利用可能です。 主要な用途
で、 汎用的な出発点 と し て利用で き ます。 簡単なテ キ ス ト ・ 画像出力、 テ キ ス ト フ ロ ー ・
表組版、 PDF/A ・ PDF/X 生成、 その他 さ ま ざ ま な用途を網羅 し てい ます。 こ の ス タ ー タ
サンプルを見れば、PDFlib 製品を使っ て特定の目的を達す る ための基本技法を知 る こ と が
で き ます。 こ の ス タ ー タ サンプルを見てみ る こ と を強 く 推奨 し ます。
PDFlib チ ュ ー ト リ アル PDFlib チ ュ ー ト リ アル (本説明書) は、 ど のパ ッ ケージに も あ
る 1 個の PDF 文書で、 重要なプ ロ グ ラ ミ ン グ概念を よ り 詳 し く 、 小 さ な コ ー ド 例を用い
て説明 し て い ま す。 コ ー ド を ス タ ー タ サ ン プル よ り 拡張 し て い く に あ た っ て は、 こ の
PDFlib チ ュ ー ト リ アル内の関連す る 内容を知っ てお く 必要があ り ます。
注 本 PDFlib チ ュ ー ト リ アルでは、 作成例はたいてい Java 言語で示 さ れています (29 ページ
「2 章 PDFlib の言語バイ ンデ ィ ン グ」 の言語ご と の作成例 と 、 別途その旨特記するい く つ
かの C 特有の作成例を除いて)。 具体的な文法は言語ご と に異な り ますが、 PDFlib プ ログ
ラ ミ ングの基本概念は、 対応する どの言語バイ ンデ ィ ングについて も同 じ です。
PDFlib API リ フ ァ レ ン ス PDFlib API リ フ ァ レ ン スは、ど のパ ッ ケージに も あ る 1 個の PDF
文書で、 PDFlib アプ リ ケーシ ョ ンプ ロ グ ラ ミ ン グ イ ン タ フ ェース (API) を構成す る すべ
ての関数 ・ 引数 ・ オプシ ョ ン を簡潔に記述 し てい ま す。 引数の詳細や対応す る オプシ ョ
ン、 入力条件、 その他従 う べ き プ ロ グ ラ ミ ン グ規則を調べる には、 こ の PDFlib API リ フ ァ
レ ン ス が絶対の規範です。 こ れ以外の参照文書はどれ も 必ず し も 完全ではあ り ません。 た
と えば Javadoc の PDFlib API 一覧や、 php.net での PDFlib 関数一覧は不完全です。 PDFlib
を使用す る 際はかな ら ず、 PDFlib API リ フ ァ レ ン スの完全な内容を参照 し て く だ さ い。
PDFlib ク ッ ク ブ ッ ク PDFlib ク ッ ク ブ ッ ク は、 いろいろ な課題を達成す る ための PDFlib
コ ー ド を集めてい ます。 ク ッ ク ブ ッ ク の例はたいてい Java 言語で書かれてい ますが、 簡
単に他のプ ロ グ ラ ミ ン グ言語に合わせ る こ と がで き ます。 なぜな ら PDFlib API は、 対応す
る ど の言語バ イ ンデ ィ ン グについて も ほぼ等価だか ら です。 こ の PDFlib ク ッ ク ブ ッ ク に
は、サンプルプ ロ グ ラ ムが ど ん ど ん追加 さ れてい ます。Web 上で下記 URL で利用可能です。
1.1 説明書 と サン プルの紹介
13
www.pdflib.com/pdflib-cookbook/
pCOS ク ッ ク ブ ッ ク pCOS ク ッ ク ブ ッ ク は、 PDFlib+PDI と PPS に含まれてい る pCOS イ
ン タ フ ェ イ ス の コ ー ド を集めてい ます。 下記 URL で利用可能です。
www.pdflib.com/pcos-cookbook/
TET ク ッ ク ブ ッ ク PDFlib TET (Text Extraction Toolkit) は、 PDF 文書か ら テ キ ス ト や画
像を抽出す る ための別製品です。 こ れを PDFlib+PDI と 組み合わ る と 、 PDF 文書を その内
容に応 じ て処理す る こ と がで き ます。 TET ク ッ ク ブ ッ ク は、 TET のための コ ー ド を集めて
い ます。 こ の中には、 TET と PDFlib+PDI を組み合わせた利用例が含まれてい ます。 た と
えば、 ページ上のテ キ ス ト に応 じ て Web リ ン ク や し お り を追加 し た り 、 検索単語をハ イ
ラ イ ト し た り 、 テ キ ス ト に応 じ て文書を分割 し た り 、 目次を生成 し た り な ど です。 TET
ク ッ ク ブ ッ ク は下記 URL で利用可能です :
www.pdflib.com/tet-cookbook/
14
第 1 章 : 導入 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
1.2 PDFlib プ ロ グ ラ ミ ン グ
PDFlib と は何か PDFlib は、 Adobe の Portable Document Format (PDF) 形式の フ ァ イ ル
生成を可能にす る 開発 コ ン ポーネ ン ト です。 PDFlib は、 開発 し たプ ロ グ ラ ムに対す る バ ッ
ク エン ド と し て働 き ます。 アプ リ ケーシ ョ ンプ ロ グ ラ マーの役割 と し ては、 ただ処理 さ せ
たいデー タ を持っ て く れば よ く 、 後の仕事は PDFlib が全部引 き 継いで、 そのデー タ を視
覚化 し た PDF 出力を生成 し ます。 そのデー タ を視覚的に表現する PDF 出力の生成処理は
PDFlib がすべて請け負い ます。 PDFlib を使えば、 PDF の実際の内部構造を見 る こ と な し
に、 さ ま ざ ま なや り 方で出力を組版す る こ と がで き ます。 PDFlib のバ イ ナ リ パ ッ ケージで
は、 以下の製品が ま と めて 1 個のバ イ ナ リ に入っ てい ます。
> PDFlib。 テ キ ス ト やベ ク ト ルグ ラ フ ィ ッ ク ・ 画像 ・ ハ イ パーテ キ ス ト 要素を含んだ PDF
出力を作成す る ために必要な あ ら ゆ る 機能を持ち ます。 PDFlib は、 一行 ・ 複数行のテ
キ ス ト や画像の配置、 表の作成のための強力な組版機能を そな えてい ます。
> PDFlib+PDI。PDFlib の全機能に加え、既存 PDF 文書内のページ を取 り 込んだ出力が生成
で き る PDF 取 り 込み ラ イ ブ ラ リ (PDI) と 、 取 り 込み文書か ら 任意の PDF オブジ ェ ク
ト (ページ上の全フ ォ ン ト 一覧や メ タ デー タ 等 さ ま ざ ま な) を取得す る ための pCOS
イ ン タ フ ェース を含んでい ます。
> PDFlib Personalization Server (PPS)。 PDFlib+PDI に加え、 PDFlib ブ ロ ッ ク に自動流 し 込
みを行 う 機能 も 持ち ます。 ブ ロ ッ ク と は、 ページ上のプ レー ス ホルダであ り 、 その中
にテ キ ス ト や画像や PDF ページ を流 し 込め る も のです。ブ ロ ッ ク は、Adobe Acrobat 用
PDFlib Block Plugin (Mac 版 ・ Windows 版あ り ) を用いて対話的に作成す る こ と がで き 、
その中に、 PPS を用いて自動的に流 し 込みを行い ます。 こ のプ ラ グ イ ン も PPS に含ま
れてい ます。
PDFlib はどのよ う に利用で き るのか PDFlib は さ ま ざ ま なプ ラ ッ ト フ ォーム上で利用可
能です。 Unix ・ Windows ・ Mac のいずれで も 利用す る こ と がで き 、 ま た、 IBM i5/iSeries ・
zSeries と いっ た EBCDIC ベース のシ ス テ ムで も 使え ます。 PDFlib は C 言語で書かれてい
ま すが、 それ以外に も さ ま ざ ま な言語やプ ロ グ ラ ミ ン グ環境か ら 呼び出す こ と が可能で
す。 こ の よ う な言語や環境を言語バ イ ンデ ィ ン グ と 呼びます。 PDFlib の言語バ イ ンデ ィ ン
グは、 イ ン タ ーネ ッ ト と ス タ ン ド ア ロ ン両方の、 現在広 く 使用 さ れてい る あ ら ゆ る アプ リ
ケーシ ョ ン開発言語を カバー し てい ます。 PDFlib の API (アプ リ ケーシ ョ ンプ ロ グ ラ ミ ン
グ イ ン タ フ ェース) はわか り やす く 、 ま た、 ど のバ イ ンデ ィ ン グにおいて も 共通 し た形を
持っ てい ます。 現在、 対応 し てい る バ イ ンデ ィ ン グは以下の と お り です。
> COM。 Visual Basic や、 VBScript か JScript に よ る Active Server Pages、 Borland Delphi、
Windows Script Host な ど の環境で利用 さ れます
> ANSI C
> ANSI C++
> Cobol (IBM zSeries)
> Java。 J2EE サーブ レ ッ ト ・ JSP を含みます
> .NET。 C# や VB.NET、 ASP.NET な ど の環境で利用 さ れます
> PHP
> Perl
> Python
> REALbasic
> RPG (IBM i5/iSeries)
> Ruby。 Ruby on Rails を含みます
> Tcl
1.2 PDFlib プ ロ グ ラ ミ ング
15
PDFlib は何に使え るのか PDFlib の利用目的 と し て まず挙げ ら れ る のは、 自分の ソ フ ト
ウ ェ ア内や Web サーバ上で PDF を動的に作成す る こ と です。Web サーバ上で HTML ペー
ジ を動的に生成す る の と 同 じ よ う に、 PDFlib プ ロ グ ラ ム を使っ て PDF を動的に生成 さ せ
る よ う にすれば、 その中にユーザーか ら の入力を反映 さ せた り 、 Web サーバ上のデー タ
ベース か ら 抽出 し たデー タ な ど の動的デー タ を反映 さ せた り する こ と がで き ます。 PDFlib
を用いた アプ ロ ーチには以下の よ う な利点を挙げ る こ と がで き ます。
> PDFlib はデー タ 生成アプ リ ケーシ ョ ンに直接組み込め ます。
> こ の直接処理の採用に よ り 、PDFlib は PDF 生成手段 と し て最速であ り 、Web 用途に最適
です。
> PDFlib の ス レ ッ ド セーフ性 と 堅牢な メ モ リ ・ エ ラ ー処理は、 高パフ ォーマ ン ス なサー
バアプ リ ケーシ ョ ンの運用に対応 し ます。
> PDFlib は さ ま ざ ま なオペレーテ ィ ン グ シ ス テ ム、 さ ま ざ ま な開発環境で利用で き ます。
PDFlib 活用の必要条件 PDFlib を使えば、 PDF の実際の仕様を知 ら ずに PDF を生成で き
ます。 PDFlib は PDF の技術的な中身を な る べ く ユーザーか ら 隠 し てい ますが、 PDF に関
す る 一般的理解はあ る に こ し た こ と はあ り ません。PDFlib を最大限活用 し よ う と す る アプ
リ ケーシ ョ ンプ ロ グ ラ マーは、 PostScript (ひいては PDF) の基本的グ ラ フ ィ ッ ク モデル
をひ と と お り 理解 し てい る こ と が理想です。 と はいえ、 アプ リ ケーシ ョ ンプ ロ グ ラ マー と
し て相応の経験があ り 、画面表示や印刷用の何 ら かのグ ラ フ ィ ッ ク API の取扱経験があ る
な ら ば、 PDFlib の API について も そ う 障害な く 会得で き る と 思われます。
16
第 1 章 : 導入 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
1.3 PDFlib/PDFlib+PDI/PPS 8 の新機能
PDFlib/PDFlib+PDI/PPS 8 と Block Plugin 4 の主な新機能 ・ 改良機能を以下に挙げます。 こ
れ以外に も 多 く の新機能があ り ます:詳 し く は PDFlib API リ フ ァ レ ン ス を参照 し て く だ さ
い。
1.3.1 Acrobat 9 対応の PDF 機能
PDFlib は、Acrobat 9 (技術的には : PDF 1.7 Adobe 拡張レベル 3) に従っ た さ ま ざ ま な PDF
機能に対応 し てい ます。
外部グ ラ フ ィ ッ ク 内容 PDF 文書のページは、 他の PDF 文書のページへの参照を含む こ
と がで き ます。 こ れを参照 XObject と いい ます。 参照元フ ァ イ ルはプ レース ホルダだけ を
含みます。 た と えば画像の低解像度版や、 実際のページ内容がない と 記 し た単な る 注記な
ど です。 こ の技法を使えば、 繰 り 返 さ れ る 内容 ( ト ラ ンザ ク シ ョ ン印刷等) を何度 も 送 る
必要があ り ません。 参照 XObject は PDF/X-5g ・ PDF/X-5pg の重要な構成要素です。
レ イ ヤーバ リ ア ン ト レ イ ヤーバ リ ア ン ト (レ イ ヤー設定 と も いい ま す) は、 レ イ ヤー
のグループ と と ら え る こ と がで き ます。 レ イ ヤーを グループ化する こ と に よ り 、 印刷が安
全にな り ます。 なぜな ら 、 ユーザーが う っか り 間違っ たセ ッ ト の レ イ ヤーを有効 ・ 無効に
し て し ま う (た と えば特定の言語の レ イ ヤーを有効に し なが ら 、 全言語共用の画像 レ イ
ヤー を 有効に し 忘れ る ) こ と を 防げ る か ら です。 こ の理由か ら レ イ ヤーバ リ ア ン ト は、
PDF/X-4 ・ PDF/X-5 規格ではレ イ ヤー使用の基本 と な っ てい ます。
PDF ポー ト フ ォ リ オ PDF ポー ト フ ォ リ オは、 PDF やその他の文書を 1 個の実体に ま と
めた も ので、 こ れは Acrobat 9 で便利に利用す る こ と がで き ます。 フ ァ イ ル添付の整頓に
フ ォ ルダ構造を用いていなければ、 で き た PDF コ レ ク シ ョ ンは Acrobat 8 で も 利用可能で
す。 PDFlib では ま た、 PDF ポー ト フ ォ リ オ内の フ ァ イ ル添付の整頓を実現す る 定義済み ・
カ ス タ ム メ タ デー タ フ ィ ール ド を使 う こ と も で き ます。 新 し いア ク シ ョ ン を用いれば、 埋
め込んだ文書のページへ直接飛ぶ し お り を作 る こ と も 可能です。
地理参照付 き PDF GeoPDF は、 ページ全体に対す る 、 ま たはページ上の個別の地図に対
す る 、 地理参照情報を含みます。 Acrobat 9 は、 GeoPDF を操作す る ための さ ま ざ ま な機能
を提供 し てい ます。 PDFlib を使えば、 画像お よ びページの一部ま たは全体に対 し て地理空
間参照デー タ を割 り 当て る こ と がで き ます。
AES-256 暗号化 と Unicode パスワー ド PDFlib は、 セキ ュ リ テ ィ 向上のため AES-256 暗
号化に対応 し てい ます。 AES-256 は、 Acrobat 9 で導入 さ れてお り 、 Unicode パ ス ワー ド も
使 う こ と がで き ます。
Acrobat 9 文書の取 り 込み PDFlib+PDI ・ PPS で、 Acrobat 9 文書を取 り 込んで処理す る こ
と がで き ます。 pCOS イ ン タ フ ェ ース も Acrobat 9 文書を分析で き ます。
1.3 PDFlib/PDFlib+PDI/PPS 8 の新機能
17
1.3.2 フ ォ ン ト 処理 と テキス ト 出力
複雑用字系のシ ェ ー ピ ン グ と 双方向テキス ト 組版 単純用字系 ( ラ テ ン字等) は、 キ ャ
ラ ク タ が左か ら 右へ順番に置かれ る 用字系です。 複雑用字系では、 テ キ ス ト のシ ェーピ ン
グ ( コ ン テ キ ス ト に応 じ て適切な グ リ フ形を選ぶ) や、 キ ャ ラ ク タ の並べ替えや、 テ キ ス
ト を右か ら 左へ組むための追加処理が必要にな り ます。 PDFlib は、 ア ラ ビ ア ・ ヘブ ラ イ ・
デーヴ ァ ナーガ リ ー・ タ イ 用字系を含む さ ま ざ ま な用字系に対す る 複雑用字系出力が可能
です。
予備 フ ォ ン ト 予備フ ォ ン ト は、さ ま ざ ま な フ ォ ン ト と エン コ ーデ ィ ン グ関連の制約を扱
う ための強力な し く みです。 フ ォ ン ト を混ぜて組み合わせた り 、 足 り ない グ リ フ を他の
フ ォ ン ト か ら 持っ て来た り 、 エ ン コ ーデ ィ ン グ を拡張 し た り す る こ と が可能です。 予備
フ ォ ン ト は、合成フ ォ ン ト のデザ イ ンの相違に対応す る ために個別のグ リ フ の大 き さ を自
動的に調整す る こ と がで き ます。
OpenType レ イ ア ウ ト 機能 OpenType レ イ ア ウ ト 機能は、 フ ォ ン ト フ ァ イ ル内の追加
テーブルの形で、 OpenType フ ォ ン ト に賢 さ を追加 し ます。 こ れ ら のテーブルは、 合字 ・
ス モールキ ャ ピ タ ル・ ス ウ ォ ッ シ ュ キ ャ ラ ク タ と いっ た高度な タ イ ポグ ラ フ ィ 機能を記述
し ます。 ま た、 半角 ・ 全角 ・ プ ロ ポーシ ョ ナルグ リ フ ・ 異体字、 その他 さ ま ざ ま な高度な
日中韓テ キ ス ト 出力が可能です。
文書間で フ ォ ン ト を保持 フ ォ ン ト と 関連デー タ を、 生成文書の完了後 も メ モ リ に保持
し てお く こ と がで き ます。 こ れに よ り 、 次の文書で こ の フ ォ ン ト を再度解析す る 必要がな
く な り 、 フ ォ ン ト のサブセ ッ ト 化 と い っ た文書個別の処理だけが行われ る ので、 パフ ォー
マ ン ス が向上 し ます。
日中韓外字キ ャ ラ ク タ のための SING フ ォ ン ト 外字 と い う 日本語の用語は、広 く 使われ
て (苗字 ・ 地名等で) いなが ら も ど のエン コ ーデ ィ ン グ規格に も 含まれていないカ ス タ ム
キ ャ ラ ク タ を指 し ます。 Adobe の SING フ ォ ン ト アーキ テ ク チ ャ (グ リ フ レ ッ ト ) は、 日
中韓テ キ ス ト におけ る 外字問題を解決 し ま す。 PDFlib は、 SING フ ォ ン ト と 、 関連す る
Microsoft の EUDC フ ォ ン ト (エン ド ユーザー定義フ ォ ン ト ) の概念に対応 し てい ます。 予
備 フ ォ ン ト 機能を利用すれば、 SING ・ EUDC フ ォ ン ト を既存フ ォ ン ト に合成す る こ と も 可
能です。
フ ォ ン ト エ ン ジ ン を再設計 PDFlib の フ ォ ン ト エン ジ ンが再設計 さ れて最適化 さ れ、 さ
ま ざ ま な Unicode ・ エン コ ーデ ィ ン グ関連の利点が得 ら れ る と と も に、 全体的なパフ ォー
マ ン ス向上、 メ モ リ 使用量の低減を実現 し ま し た。 こ の再設計に よ り 、 い く つかの制約が
取 り 除かれ る こ と がで き 、 既存の機能の性能が拡張 さ れて い ま す。 た と えば、 Type 1 ・
Type 3 フ ォ ン ト で 256 個を超え る グ リ フ を指定 し た り 、ス ウ ォ ッ シ ュ キ ャ ラ ク タ を グ リ フ
名で指定 し た り す る こ と がで き る よ う にな り ま し た。
画像 ク リ ッ ピ ン グパスのまわ り に テキス ト を回 り 込み テ キ ス ト フ ロ ー組版 エ ン ジ ン
は、 テ キ ス ト を任意のパス に回 り 込ませ、 ま た、 取 り 込み TIFF ・ JPEG 画像の ク リ ッ ピ ン
グパ ス を用い る こ と も で き ます。 こ の よ う に し て、 複数行テ キ ス ト を画像に回 り 込ませ る
こ と がで き ます。
パス上のテキス ト テ キ ス ト を、 直線分 ・ 曲線 ・ 円弧を任意に混ぜた任意のベ ク ト ルパ
ス上に配置す る こ と がで き ます。 こ のパス はプ ロ グ ラ ムで構築す る こ と も 可能です。 あ る
18
第 1 章 : 導入 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
いは、 TIFF ・ JPEG 画像の ク リ ッ ピ ン グパ ス を抽出 し てテ キ ス ト パ ス と し て用い る こ と も
で き ます。
1.3 PDFlib/PDFlib+PDI/PPS 8 の新機能
19
1.3.3 PDFlib Block Plugin と PDFlib Personalization Server (PPS)
PDFlib Block Plugin は、 PDFlib Personalization Server (PPS) でブ ロ ッ ク 流 し 込み (パー ソ
ナ ラ イ ゼーシ ョ ン) を行 う ための PDF 文書の作成に使い ます。
PPS ブ ロ ッ ク 処理 を Acrobat で プ レ ビ ュ ー こ のプ ラ グ イ ンは、PPS に よ る ブ ロ ッ ク 流 し
込み処理のプ レ ビ ュ ーを Acrobat で直接生成す る こ と がで き ます。 迅速なプ レ ビ ュ ーに よ
り 、 デザ イ ナーは、 自分のブ ロ ッ ク 文書をサーバへ送っ て処理 さ せ る 前に、 その文書への
PPS 流 し 込みの結果をす ぐ に吟味す る こ と がで き ます。 プ レ ビ ュ ー PDF は、 デバ ッ グ と
開発の支援 と し て、 可能なエ ラ ー メ ッ セージ を持っ た し お り ・ レ イ ヤー ・ 注釈を内容 と し
て持ち ます。 こ のプ レ ビ ュ ー機能は開発サ イ ク ルを速め る と と も に、 PDFlib の諸機能を試
すための イ ン タ ラ ク テ ィ ブなテ ス ト フ レーム ワ ー ク と し て利用する こ と も で き ます。
ブ ロ ッ ク コ ン テ ナの PDF/A ・ PDF/X 状態 を複製 PDF/A ま たは PDF/X 文書に基づ く ブ
ロ ッ ク プ レ ビ ュ ーを生成する 際には、 Block Plugin は、 規格同定 ・ 出力 イ ン テ ン ト ・ メ タ
デー タ 等、 その規格の関連す る あ ら ゆ る 側面を複製す る こ と がで き ます。 PDF/A ・ PDF/
X 複製モー ド におけ る ブ ロ ッ ク 流 し 込み操作が、 選ばれてい る 規格に違反す る であ ろ う 場
合は (た と えばデフ ォ ル ト 画像が RGB 色空間を用いていなが ら 、 文書に適切な出力 イ ン
テ ン ト が含まれていない場合等)、エ ラ ー メ ッ セージが表示 さ れます。 こ のため、ユーザー
は起 こ り う る 規格違反を ワー ク フ ロ ーの非常に早い段階で捕捉する こ と がで き ます。
再設計 さ れたユーザー イ ン タ フ ェ ース と スナ ッ プ グ リ ッ ド PDFlib Block Plugin の ユ ー
ザー イ ン タ フ ェース は、 さ ま ざ ま な既存の、 そ し て新 し いブ ロ ッ ク プ ロ パテ ィ の利用を実
現す る ために再構築 さ れま し た。
新機能ス ナ ッ プグ リ ッ ド は、 ブ ロ ッ ク をデザ イ ン ラ ス タ に従っ てすばや く レ イ ア ウ ト
す る のに有用です。
ブ ロ ッ ク プ ロパテ ィ を追加 Block Plugin と PPS に新 し いブ ロ ッ ク プ ロ パテ ィ が さ ら に追
加 さ れま し た。 た と えば、 ブ ロ ッ ク 内に配置 さ れ る テ キ ス ト ・ 画像 ・ PDF 内容の透過を指
定す る こ と がで き ます。
PDFlib 8 の諸機能 を ブ ロ ッ ク で活用 複雑用字系のテ キ ス ト 出力やOpenType レ イ ア ウ ト
機能 と いっ た PDFlib 8 の関連する 新機能を、 ブ ロ ッ ク プ ロ パテ ィ で直接活用で き ます。 た
と えば、 ブ ロ ッ ク にア ラ ビ ア語や ヒ ンデ ィ ーのテ キ ス ト を流 し 込む こ と が可能です。
20
第 1 章 : 導入 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
1.3.4 その他の重要な機能
再利用可能なパス オ ブ ジ ェ ク ト パ ス オブジ ェ ク ト は、 いずれのページか ら も 独立に構
築 し て、 描線 ・ 塗 り ・ ク リ ッ ピ ン グのために複数回用い る こ と がで き ます。 パ ス オブジ ェ
ク ト は ま た、 回 り 込み形状 と し て用いた り (テ キ ス ト を不規則な形状の領域内に組む) 、
テ キ ス ト をパ ス上に配置す る ために用いた り す る こ と がで き ます。
PDF/X-4 ・ PDF/X-5 PDFlib は、 グ ラ フ ィ ッ ク アー ト 業界のための PDF/X-4 ・ PDF/X-5 規
格に従っ た出力を生成 し ます。 従来の PDF/X-1 ・ PDF/X-3 規格 と 異な り 、 こ れ ら は よ り
新 し い PDF バージ ョ ンに基づいてお り 、 透過 と レ イ ヤーを許容 し ます。 PDF/X-4p ・ PDF/
X-5pg では、外部的に参照 さ れた ICC プ ロ フ ァ イ ルを出力 イ ン テ ン ト と し て用い る こ と が
で き ます。 PDF/X-5g ・ PDF/X-5pg は、 外部グ ラ フ ィ ッ ク 内容の使用に対応 し てい ます。
TIFF ・ PNG 画像のアル フ ァ チ ャ ン ネル PDFlib は、 TIFF ・ PNG 画像を取 り 込む際、 画像
の透過 (アルフ ァ チ ャ ン ネル) に従い ます。 アルフ ァ チ ャ ン ネルは、 なめ ら かな遷移を生
み出 し 、 画像を背景に溶け込ませ る のに利用す る こ と がで き ます。
JBIG2 圧縮画像 JBIG2 は、 白黒画像のための高効率な画像圧縮形式です。 PDFlib は、 単
ページ ・ 複数ページの JBIG2 画像を取 り 込み、 その圧縮の利点を生成 PDF 出力内で維持
し ます。
圧縮オ ブ ジ ェ ク ト ス ト リ ーム ・ 相互参照ス ト リ ーム PDFlib は、 圧縮オブジ ェ ク ト ス ト
リ ーム と 相互参照ス ト リ ーム を生成 し ます。 こ れ ら の方式は、 生成 PDF 文書全体の フ ァ
イ ルサ イ ズ を低減す る と と も に、 旧来の相互参照テーブルを持つ PDF に課せ ら れ る 従来
の 10 GB の制約を超え て飛ぶ こ と を PDF 文書で可能に し ます。 10 GB は と んで も な く 大
き なデー タ と 思われ る か も し れませんが、 ト ラ ンザ ク シ ョ ン印刷の分野では こ の限界に達
す る 応用例が増え て き てい ます。 PDFlib ユーザーが こ の領域の PDF 文書を生成 し たいシ
ナ リ オは今後ますます増え てい く と 我々は予測 し てい ます。
内蔵 PANTONE® Goe™ カ ラ ー ラ イ ブ ラ リ PDFlib は、 コ ー ト 紙 ・ 上質紙用の新色 2058 色
と 新カ ラ ー命名方式を持つ PANTONE® Goe™ カ ラ ー ラ イ ブ ラ リ に対応 し てい ます。 こ の
Goe™ カ ラ ー ラ イ ブ ラ リ は Pantone, Inc. に よ っ て 2008 年に導入 さ れた も のです。
既存関数の改良 以下に、 PDFlib 8 におけ る 既存機能の最 も 重要な改良を挙げます :
> 画像の詳細を info_image( ) で取得
> PPS と Block Plugin:新 し いPDFlibの諸機能を PDFlibブ ロ ッ ク を通 じ て利用可能 と す る 追
加のブ ロ ッ ク プ ロ パテ ィ
> Unix シ ス テ ム上での Unicode フ ァ イ ル名
> 表組版機能 : パス オブジ ェ ク ト ・ 注釈 ・ フ ォーム フ ィ ール ド を表セル内に配置
> テ キ ス ト フ ロ ー : 追加の組版制御オプシ ョ ン、 高度な言語個別の改行
> 影付 き テ キ ス ト
> 取 り 込み画像内の XMP メ タ デー タ を保持
> info_font( ) におけ る さ ま ざ ま な改良
> し お り 作成のための追加のオプシ ョ ン
> C++ バ イ ンデ ィ ン グにおけ る 設定可能な文字列デー タ 型 (wstring で Unicode 対応等)
1.3 PDFlib/PDFlib+PDI/PPS 8 の新機能
21
1.4 PDFlib の機能一覧
表 1.1 に、 PDF lib の主な PDF 生成機能を挙げます。 PDFlib 8 の新機能 ・ 改良機能には注
釈を付 し てい ます。
表 1.1 PDFlib の機能一覧
分類
機能
PDF 出力
PDF 文書をデ ィ ス ク フ ァ イルまたは (Web サーバで) 直接 メ モ リ 上へ生成
大容量出力、 任意の PDF フ ァ イルサイ ズ (10 GB 超も 可)
ページの一時停止 / 再開 ・ 挿入機能で、 ページ を順番によ ら ず生成
各種 PDF
PDF 1.3 ∼ PDF 1.7ext31 (Acrobat 4 ∼ 9)。 ISO 32000-1 (= PDF 1.7) も
線形化 (Web 最適化) PDF によ る、 Web 上でのバイ ト サービ ング
タ グ付き PDF によ る ア ク セ シ ビ リ テ ィ ・ リ フ ロー
マー ク付き内容に よ る ア プ リ ケーシ ョ ン独自デー タ ・ 代替テキス ト を タ グ付けな し で追加 1
ISO 規格
ISO 15930 : PDF/X。 グ ラ フ ィ ッ ク アー ト 業界向け 1
ISO 19005 : PDF/A。 アー カ イ ビ ン グ用
ISO 32000 : PDF 1.7 の標準化バージ ョ ン 1
グラ フ ィ ッ ク
一般的な基本ベ ク ト ルグ ラ フ ィ ッ ク要素 : 線 ・ 曲線 ・ 円弧 ・ 楕円 1 ・ 矩形等
スムーズシ ェ ーデ ィ ング (カ ラ ーブ レ ン ド ) ・ パ タ ーン塗 り / 描線
透過 (不透明) ・ ブ レ ン ド モー ド
外部グ ラ フ ィ ッ ク 内容 (参照 XObject) によ る可変デー タ 印刷 1
再利用可能パスオブ ジ ェ ク ト 、 ク リ ッ ピ ングパス を画像か ら取 り 込み 1
レ イ ヤー
表示を切 り 替え ら れる オプ シ ョ ナルなページ内容
注釈 ・ フ ォ ーム フ ィ ール ド を レ イ ヤー上に配置可
レ イ ヤーのロ ッ ク 、 表示倍率に よ る自動表示な ど
PDF/X-4 ・ PDF/X-5 のレ イ ヤーバ リ ア ン ト
フォン ト
1
(レ イヤーのグループ化で誤印刷防止)
TrueType (TTF ・ TTC) ・ PostScript Type 1 フ ォ ン ト (PFB ・ PFA、 Mac では LWFN も )
PostScript/TrueType のアウ ト ラ イ ン を持つ OpenType フ ォ ン ト (TTF ・ OTF)
欧文 ・ 日中韓テキス ト 出力のための何ダース もの OpenType レ イ アウ ト 機能に対応。 例 :
合字 ・ ス モールキ ャ ピ タ ル ・ オール ド タ イ プ数字 ・ スウ ォ ッ シ ュ キ ャ ラ ク タ ・ 簡体 / 繁
体 ・ 縦書き字体 1
Windows ・ Mac シ ス テムに イ ン ス ト ール さ れている フ ォ ン ト (「ホス ト フ ォ ン ト 」) の直接利
用
あ ら ゆる種類のフ ォ ン ト の埋め込み。 TrueType ・ OpenType ・ Type 3 フ ォ ン ト のサブ セ ッ ト
化
ユーザー定義 (Type 3) フ ォ ン ト に よ る ビ ッ ト マ ッ プ フ ォ ン ト やカ ス タ ムロ ゴ
EUDC ・ SING1 フ ォ ン ト (グ リ フ レ ッ ト ) で、 日中韓外字キ ャ ラ ク タ
予備 フ ォ ン ト (足 り ないグ リ フ を補助のフ ォ ン ト か ら取得)
1
フ ォ ン ト を文書間で保持 し 、 パ フ ォ ーマ ン ス向上 1
テキス ト 出力
22
さ ま ざ ま な フ ォ ン ト で テキス ト 出力。 テキス ト に下線 ・ 上線 ・ 取 り 消 し 線
第 1 章 : 導入 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 1.1 PDFlib の機能一覧
分類
機能
フ ォ ン ト 内のグ リ フ を数値 ・ Unicode 値 ・ グ リ フ 名 1 で指定可能
カ ーニ ングで、 文字間隔を改善
テキス ト を太字化 ・ 斜体化 ・ 影付き 1
パス上にテキス ト を生成 1
日中韓 フ ォ ン ト で プ ロポーシ ョ ナル幅 1
見つか ら ないグ リ フ の代替設定
国際化
ページ内容 ・ イ ン タ ラ ク テ ィ ブ要素 ・ フ ァ イル名 1 に Unicode 文字列。 UTF-8 ・ UTF-16 ・
UTF-32 形式
多様な 8 ビ ッ ト ・ レ ガシ マルチバイ ト 日中韓エ ン コ ーデ ィ ング (Shift-JIS ・ Big5 等) に対
応
シ ス テムから コ ー ド ページ を取得 (Windows ・ IBM i5/iSeries ・ zSeries)
日本語 ・ 中国語 ・ 韓国語テキス ト の標準 ・ カ ス タ ム日中韓フ ォ ン ト ・ CMap
日本語 ・ 中国語 ・ 韓国語テキス ト の縦書き
ア ラ ビ ア語 ・ タ イ語 ・ デーヴ ァ ナーガ リ ー等の複雑用字系のキ ャ ラ ク タ シ ェ ーピ ング 1
ア ラ ビ ア語 ・ ヘブ ラ イ語等の右書き用字系の双方向テキス ト 組版 1
Unicode 情報を PDF 内に埋め込み、 Acrobat での適切な テキス ト 抽出を促す
画像
BMP ・ GIF ・ PNG ・ TIFF ・ JBIG21 ・ JPEG ・ JPEG 20001 ・ CCITT ラ ス タ 画像の埋め込み
画像フ ァ イル形式の自動検出
画像情報の取得 (ピ ク セルサイ ズ ・ 解像度 ・ ICC プ ロ フ ァ イル ・ ク リ ッ ピ ングパスな ど)
TIFF ・ JPEG 画像内の ク リ ッ ピ ングパス を解釈
TIFF ・ PNG 画像内のアルフ ァ チ ャ ン ネル (透過) を解釈 1
画像マス ク (透過画像に色を適用)、 スポ ッ ト カ ラ ーに よ る画像着色
色
グ レースケール ・ RGB (数値 ・ 16 進列 ・ HTML 色名) ・ CMYK ・ CIE L*a*b* カ ラ ー
PANTONE® カ ラ ー (PANTONE® Goe™ も)
1
・ HKS® カ ラ ー対応内蔵
ユーザー定義スポ ッ ト カ ラ ー
カ ラー
マネジ メ ン ト
ICC プ ロ フ ァ イルに よ る ICC 準拠カ ラ ー。 ICC 4 プ ロ フ ァ イル対応 1
テキス ト ・ 図形 ・ ラ ス タ 画像のレ ン ダ リ ング イ ン テ ン ト
デ フ ォ ル ト グ レー ・ RGB ・ CMYK カ ラ ースペースで、 デバイ ス独自カ ラ ーを再対応付け
PDF/A ・ PDF/X の出力イ ン テ ン ト に ICC プ ロ フ ァ イル
アー カ イ ビ ング
PDF/A-1a ・ PDF/A-1b (ISO 19005-1)
PDF/A-1 の XMP 拡張スキーマ
グラ フ ィ ッ ク
アー ト
PDF/X-1a ・ PDF/X-3 ・ PDF/X-41 ・ PDF/X-4p1 ・ PDF/X-5p1 ・ PDF/X-5pg1 (ISO 15930)
埋め込み / 外部参照 1 出力イ ン テ ン ト ICC プ ロ フ ァ イル
PDF/X-5p ・ PDF/X-5pg の外部グ ラ フ ィ ッ ク 内容 (参照ページ)
1
1.4 PDFlib の機能一覧
23
1
表 1.1 PDFlib の機能一覧
分類
機能
取 り 込み画像の OPI 1.3 ・ OPI 2.0 情報を生成
分版情報 (PlateColor)
テキス ト のヌ キ ・ ノ セな どの設定
テキス ト フ ロー
組版
テキス ト を、 1 個ない し 複数の矩形内に、 または任意形状領域内に組版。 ハイ フ ネーシ ョ
ン (ユーザー定義ハイ フ ネーシ ョ ン位置が必要) ・ フ ォ ン ト / 色変更 ・ 揃え方式 ・ タ ブ ・
リ ーダ ・ 制御コ マ ン ド を指定可能。 テキス ト を画像に回 り 込み
言語独自処理で高度な改行
柔軟な画像貼 り 付け ・ 組版
画像または画像の ク リ ッ ピ ングパス 1 にテキス ト を回 り 込み
表組版
さ ま ざ ま なユーザー設定に従っ て表行 ・ 表列のサイ ズを自動計算 し て配置する表組版機能。
複数ページにわた る表も 可能。
表セル内に、 一行 / 複数行テキス ト ・ 画像 ・ PDF ページ ・ パスオブ ジ ェ ク ト ・ 注釈 ・
フ ォ ーム フ ィ ール ド を配置可能
表セルを、 枠線 ・ 背景色オプ シ ョ ン を指定 し て組版可能
柔軟なス タ ン プ機能
貼 り 付け画像等各種オブ ジ ェ ク ト の座標を参照する範囲枠の概念
セキ ュ リ テ ィ
RC4 (40/128 ビ ッ ト ) または AES 暗号化アルゴ リ ズム (128/2561 ビ ッ ト ) で PDF 出力を
暗号化
Unicode パスワー ド
1
権限設定の指定 (印刷不可 ・ コ ピー不可等)
インタ ラ クテ ィ ブ
要素
フ ォ ーム フ ィ ール ド の生成。 すべての フ ィ ール ド オプ シ ョ ン と JavaScript を設定可能
し お り ・ 注釈 ・ ページ を開 く / 閉 じ る等各種イ ベン ト に対する ア ク シ ョ ンの生成
し お り の生成。 さ ま ざ ま なオプ シ ョ ン ・ 制御を設定可能
ページ遷移効果 (シ ェ ー ド ・ モザイ ク 等)
PDF リ ン ク ・ 起動 リ ン ク (他の文書種別) ・ Web リ ン ク等、 あ ら ゆる種類の PDF 注釈を生
成可能
リ ン ク ・ し お り ・ 文書を開 く ア ク シ ョ ンに名前付き移動先
ページ ラ ベル (ページのシ ンボ リ ッ ク 名) の生成
マルチ メ デ ィ ア
PDF 内に 3D アニ メ ーシ ョ ン を埋め込み
GeoPDF
地理空間参照情報を持つ PDF の生成 1
タ グ付き PDF
タ グ付き PDF ・ 構造情報の生成に よ る、 ア ク セシ ビ リ テ ィ ・ ページ リ フ ロー ・ 内容再利用
改善。 リ ン ク等各種注釈を文書構造へ入れ込み可能
メ タ デー タ
文書情報 : 標準フ ィ ール ド ( タ イ ト ル ・ サブ タ イ ト ル ・ 作成者 ・ キーワー ド ) ・ ユーザー定
義フ ィ ール ド
文書情報フ ィ ール ド から 、 またはク ラ イ ア ン ト が与えた XMP ス ト リ ームか ら XMP メ タ
デー タ を生成
TIFF ・ JPEG ・ JPEG 2000 画像内の XMP 画像 メ タ デー タ を処理 1
24
第 1 章 : 導入 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 1.1 PDFlib の機能一覧
分類
機能
プ ロ グ ラ ミ ング
Cobol ・ COM ・ C ・ C++1 ・ Java ・ .NET ・ Perl ・ PHP ・ Python ・ REALbasic ・ RPG ・ Ruby ・ Tcl
の言語バイ ンデ ィ ン グ
仮想フ ァ イルシ ス テムによ る イ ン メ モ リ 処理 (デー タ ベースの画像処理な ど)
1. PDFlib 8 の新機能 / 大幅改良機能
1.4 PDFlib の機能一覧
25
1.5 PDFlib+PDI の追加機能
PDFlib+PDI ・ PPS には、 表 1.1 に示 し た基本的な PDF 生成機能に加えて、 表 1.2 に挙げ る
機能があ り ます。
表 1.2 PDFlib+PDI の追加機能一覧
分類
機能
PDF 入力 (PDI)
既存 PDF 文書から ページ を取 り 込み
PDF 1.7 拡張レ ベル 3 (Acrobat 9) ま でのすべてのバージ ョ ンの PDF を取 り 込み可能1
すべての PDF 標準暗号化アルゴ リ ズムによ る暗号化文書を取 り 込み可能 (要マ ス タ ーパス
ワー ド ) 1
取 り 込みページの情報を取得 1
取 り 込みページのページ寸法を複製 (BleedBox ・ TrimBox ・ CropBox 等)
1
複数の取 り 込み PDF 文書にわた る冗長なオブ ジ ェ ク ト (同一フ ォ ン ト 等) を削除
異常な入力 PDF 文書を修復 1
取 り 込み PDF 文書から PDF/A ・ PDF/X 出力イ ン テ ン ト を複製
pCOS
イ ン タ フ ェ ース
pCOS イ ン タ フ ェ ースで、 取 り 込み PDF 文書の詳細を取得 1
1. PDFlib+PDI 8 の新機能 / 大幅改良機能
26
第 1 章 : 導入 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
1.6 PPS の追加機能
表 1.3 に、 PDFlib Personalization Server (PPS) でのみ利用可能な機能を挙げます (表 1.1
に示 し た基本的な PDF 生成機能 と 表 1.2 に示 し た PDF 取 り 込み機能に加え て)。
表 1.3 PDFlib Personalization Server (PPS) の追加機能一覧
分類
機能
可変デー タ 処理
(PPS)
PDFlib ブ ロ ッ ク にテキス ト ・ 画像 ・ PDF デー タ を流 し 込んで PDF をパー ソ ナ ラ イ ズ
PDFlib Block Plugin
PDFlib Block Plugin で、 Windows ・ Mac 版 Acrobat 上で PDFlib ブ ロ ッ ク を対話的に作成
再設計 さ れたユーザー イ ン タ フ ェ ース 1
PPS ブ ロ ッ ク流 し 込みを Acrobat 上で プ レ ビ ュ ー 1
Acrobat 上で ブ ロ ッ ク を対話的に作成 ・ 編集する際のスナ ッ プグ リ ッ ド
1
ブ ロ ッ ク コ ン テナの PDF/X ・ PDF/A プ ロパテ ィ を複製 1
PDF フ ォ ーム フ ィ ール ド を PDFlib ブ ロ ッ ク に変換 し て、 自動流 し 込み可能に
テキス ト フ ローブ ロ ッ ク を連結 し て、 ブ ロ ッ ク であふれた テキス ト を次のブ ロ ッ クへ
ブ ロ ッ ク プ ラ グ イ ン に PANTONE® ・ HKS® スポ ッ ト カ ラ ー名一覧を内蔵 1
1. PDFlib Personalization Server 8 の新機能 / 大幅改良機能
1.6 PPS の追加機能
27
1.7 製品別機能一覧
表 1.4 は、 PDFlib フ ァ ミ リ の各種製品の機能一覧です。
基本的な PDF 生成
以下に挙げる もの以外すべて
線形化 (Web 最適化) PDF
end_document( ) の linearize オプ シ ョ ン
PPS
API 関数 ・ 引数 ・ オプ シ ョ ン
PDFlib+PDI
機能
PDFlib
表 1.4 製品別機能一覧
○
○
○
○
1
○
○
1
○
○
PDF の最適化 (効果的でない ク ラ イ ア ン
ト コ ー ド と 、 最適化 さ れていない取 り 込
み PDF 文書に対 し てのみ意味を持ち ま
す)
end_document( ) の optimize オプ シ ョ ン
○
参照 PDF、 PDF/X-5g ・ PDF/X-5pg
begin_template_ext( ) ・ open_pdi_page( ) の
reference オプ シ ョ ン
○1
○
○
ポー ト フ ォ リ オ作成のために PDF 文書を add_portfolio_file( ) の password オプ シ ョ ン
解析
○1
○
○
PDF 取 り 込み (PDI)
すべての PDI 関数
−
○
○
既存 PDF から pCOS で情報を取得
すべての pCOS 関数
−
○
○
ブ ロ ッ ク によ る可変デー タ 処理 ・ パー ソ
ナ ラ イ ゼーシ ョ ン
ブ ロ ッ ク流 し 込みのためのすべての PPS 関数
−
−
○
Acrobat 用 PDFlib Block Plugin
PPS で利用する ための PDFlib ブ ロ ッ ク を対話的
に作成
−
−
○
1. この機能には内部的に PDI を必要 と するので、 PDFlib ソ ース コ ー ド パ ッ ケージ では利用で き ません
28
第 1 章 : 導入 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
2 PDFlib の言語バイ ンデ ィ ング
注 ス タ ー タ サン プルに目を通 さ れる こ と を強 く 推奨 し ます。 すべての PDFlib パ ッ ケージに
入っ ています。 ア プ リ ケーシ ョ ン開発の出発点 と し て有用です。 PDFlib プ ロ グ ラ ミ ングの
重要な点を多数網羅 し ています。
2.1 各言語バ イ ン デ ィ ン グにおけ る デー タ 型
一般にはすべての開発環境で、 PDFlib のルーチン を同 じ 方式で利用可能にな っ てい ます。
場合に よ っ ては、PDFlib 関数の引数に言語独自のデー タ 型を用い る こ と を留意す る 必要が
あ り ます。 と く に、 文字列 と バ イ ナ リ デー タ に用い ら れ る デー タ 型は若干異な る こ と があ
り ます。 表 2.1 に、 こ れ ら のデー タ 型に関す る 有用な情報を挙げます。
表 2.1 各言語バイ ンデ ィ ン グにおけるデー タ 型一覧
環境
文字列デー タ 型
バイ ナ リ デー タ 型
COM 全般
BSTR (文字列)
VT_ARRAY ¦ VT_UI1 型のバ リ ア ン
ト1
Delphi で COM
String (8 ビ ッ ト エ ン コ ーデ ィ ングの場合) または
WideString (Unicode の場合)
OleVariant
.NET
String
byte[ ]
REALbasic
string
MemoryBlock
1. いいかえれば、 符号な し バイ ト のバ リ ア ン ト 配列
2.1 各言語バイ ンデ ィ ングにおけるデー タ 型
29
2.2 Cobol バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
30
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
2.3 COM バ イ ン デ ィ ン グ
COM (Component Object Model)1 は、 相互作用す る さ ま ざ ま な ソ フ ト ウ ェ ア コ ン ポーネ ン
ト のための言語非依存な規格です。 PDFlib の COM 実装は、 PDFlib コ ア をベース に し た
DLL と し て ビル ド さ れてい ます。 こ の DLL ラ ッ パは PDFlib コ アの容器 と し て動作 し 、
PDFlib コ アの諸関数を呼び出す と と も に、 基幹 COM 機構 と のや り 取 り や、 登録 ・ タ イ プ
ラ イ ブ ラ リ 関連の手続 き や、 COM の例外処理を行 う 役割を担っ てい ます。 PDFlib の COM
ラ ッ パは、 技術的には以下に挙げ る よ う な特徴を持ち ます ( こ こ で用語の意味が理解で き
な く て も PDFlib の利用には支障あ り ません)。
> PDFlibは、ユーザー イ ン タ フ ェ ース を持たないWin32 イ ンプ ロ セ ス COMサーバ コ ン ポー
ネ ン ト (オー ト メ ーシ ョ ンサーバ と も い う ) と し て動作 し ます。
> PDFlib は 「ボース ス レ ッ ド 」 コ ン ポーネ ン ト です。 すなわち、 アパー ト メ ン ト ス レ ッ
ド コ ン ポーネ ン ト と し て も フ リ ー ス レ ッ ド コ ン ポーネ ン ト と し て も 扱 う こ と がで き ま
す。 こ れに加え て、 PDFlib はフ リ ース レ ッ ド マーシ ャ ラ を集約 し ます。 簡単に言えば、
ク ラ イ ア ン ト は PDFlib のオブジ ェ ク ト を直接利用す る こ と がで き る ので (プ ロ ク シ /
ス タ ブ対を経 る こ と な く )、 速度が向上す る と い う こ と です。
> PDFlib のバ イ ナ リ pdflib_com.dll は タ イ プ ラ イ ブ ラ リ を持つ自己登録 DLL です。
> PDFlib は状態を持ち ません。 すなわち、 プ ロ パテ ィ でな く メ ソ ッ ド の引数が用い ら れ
ます。
> PDFlib の二重 イ ン タ フ ェースは、 事前バ イ ンデ ィ ン グ と 実行時バ イ ンデ ィ ン グの両方
に対応 し てい ます。
> PDFlib は リ ッ チエ ラ ー情報に対応 し てい ます。
注 PDFlib は、 MTS (Microsoft Transaction Server) 独自の機能には対応 し ていません。 ただ
し 、 MTS での利用は可能です。
PDFlib COM 版の イ ン ス ト ール PDFlib は、 COM コ ン ポーネ ン ト 対応の全環境で利用で
き ます。 次の環境におけ る 利用例を後述 し ます。
> Visual Basic
> JScript に よ る Active Server Pages (ASP)
> VBScript に よ る Windows Script Host (WSH)
> Borland Delphi
Active Server Page と Windows Script Host はど ち ら も JScript と VBScript に対応 し てい ます。
し か し 両者の ス ク リ プ ト はほぼ同 じ なので、 全組み合わせの利用例は示 し ません。 さ ら に
他に も 、 COM 対応の開発環境は多数あ り 、 少 し 挙げてみ る だけで も Microsoft Visual C++ ・
Borland C++ Builder ・ PowerBuilder な ど があ り ます。 PDFlib は Visual Basic for Applications
(VBA) で も 動作 し ます。
PDFlib の イ ン ス ト ール手順は簡単かつ単純です。 下記に留意 し て く だ さ い。
> NTFS パーテ ィ シ ョ ンに イ ン ス ト ールする 場合、 PDFlib ユーザーは必ず、 イ ン ス ト ール
し た デ ィ レ ク ト リ に対す る 読み取 り パー ミ ッ シ ョ ン と 、 …\PDFlib 8.0.1\bin\pdflib _
com.dll に対する 実行パー ミ ッ シ ョ ン と が必要です。
> イ ン ス ト ール実行時には、 シ ス テ ム の レ ジ ス ト リ に対す る 書 き 込みパー ミ ッ シ ョ ン が
必要です。 Administrator ない し Power Users グループの権限があれば通常充分です。
PDFlib の MSI イ ン ス ト ー ラ PDFlib は MSI パ ッ ケージ (Microsoft's Windows Installer) と
し て入手可能です。 MSI パ ッ ケージは、 イ ン ス ト ール ・ 修復 ・ ア ン イ ン ス ト ール機能を提
1. COM に関する、 よ り 詳細な情報は www.microsoft.com/com を参照。
2.3 COM バイ ンデ ィ ング
31
供す る も のです。 PDFlib を MSI パ ッ ケージか ら イ ン ス ト ールす る には、 単に .msi フ ァ イ
ルを ダブル ク リ ッ ク す る か、 右 ク リ ッ ク し て 「 イ ン ス ト ール」 を選択 し ます。
シ ス テ ムが MSI に非対応の場合 (Windows NT の よ う に) は Microsoft か ら 無償 MSI サ
ポー ト を入手で き ます。
PDFlib COM コ ン ポーネ ン ト の イ ン ス ト ール用に提供 さ れてい る プ ロ グ ラ ム を実行 さ
せ る と 、 自動的に、 PDFlib で COM が完全利用で き る よ う にな り ます。 説明の完全を期す
る ため、 以下、 PDFlib の利用に必要な実行時環境を挙げ ま す ( イ ン ス ト ールルーチン に
よ っ て自動的に こ の よ う にな り ます)。
> PDFlib COM の DLL pdflib_com.dll を、 イ ン ス ト ール し たデ ィ レ ク ト リ へ コ ピー。
> PDFlib COM の DLL は Windows の レ ジ ス ト リ への登録が必要です。イ ン ス ト ー ラ は自己
登録 PDFlib DLL を使っ て登録を行い ます。
> PDFlib の ラ イ セ ン ス版を イ ン ス ト ール し た場合、 ラ イ セ ン ス キーを シ ス テ ムに入れ る 。
サ イ レ ン ト イ ン ス ト ール PDFlib を他の ソ フ ト ウ ェ アパ ッ ケージに含めて再配布す る 必
要のあ る 場合や、SMS の よ う な ツールで管理 さ れた多数のマシ ンに イ ン ス ト ールす る 必要
のあ る 場合には、 手動で PDFlib を各マシ ンに イ ン ス ト ールす る のは大変な作業で し ょ う 。
その よ う な場合 PDFlib はユーザー入力な し で自動 イ ン ス ト ール さ せ る こ と も 可能です。
MSI イ ン ス ト ー ラ はサ イ レ ン ト イ ン ス ト ールに対応 し てい ます。 た と えば、 コ マ ン ド
ラ イ ンで次の コ マ ン ド を実行すれば、 ユーザー入力な し で PDFlib を イ ン ス ト ールで き ま
す。
msiexec.exe /I PDFlib-8.0.1-com-dotnet.msi /qn
コ マ ン ド ラ イ ンオプシ ョ ンの完全一覧については Microsoft Windows Installer の説明書を参
照 し て く だ さ い。
ISP のサーバへの PDFlib COM の イ ン ス ト ール イ ン タ ー ネ ッ ト サ ー ビ ス プ ロ バ イ ダ
(ISP) がホ ス ト する サーバへの ソ フ ト ウ ェ アの イ ン ス ト ールは、 ロ ーカルのマシ ンへの イ
ン ス ト ール よ り も 通常困難が伴い ます。 ISP はたいていの場合、 顧客が何か新 し い ソ フ ト
ウ ェ アの イ ン ス ト ールを希望 し た と き にはかな り 難色を示す も のだか ら です。PDFlib は非
常に ISP フ レ ン ド リ ーです。 下記の よ う に、 Windows デ ィ レ ク ト リ も レ ジ ス ト リ も 汚 さ な
いか ら です。
> ただ 1つの DLL し か必要 と し ません。こ の DLL は、regsvr32 ユーテ ィ リ テ ィ を用いて適切
に登録 し さ えすれば、 任意のデ ィ レ ク ト リ に置いてお く こ と がで き ます。
> デフ ォ ル ト ではほんの数個のプ ラ イ ベー ト な レ ジ ス ト リ 項目 し か作成 さ れ ません。 こ
の レ ジ ス ト リ 項目は、 レ ジ ス ト リ ツ リ ー内の HKEY_LOCAL_MACHINE\SOFTWARE\PDFlib
の下に置かれます。 必要に応 じ て手動作成 も で き ます。
> 必要な ら ば、PDFlib はプ ラ イ ベー ト な レ ジ ス ト リ 項目 も 一切な し で利用可能です。ユー
ザーは、 レ ジ ス ト リ 項目の な いかわ り に、 set_parameter( ) 関数 を適切に呼び出 し て
SearchPath ・ resourcefile ・ license パ ラ メ タ を設定す る 必要があ り ます。 ただ し こ の場合
で も COM 機構自体が、 PDFlib イ ン ス ト ールのために レ ジ ス ト リ 項目をい く つか必要
と し ますので注意 し て く だ さ い。
フ ァ イ ルの一覧については次項で述べます。
PDFlib COM コ ン ポーネ ン ト の再配布 再配布可能 ラ ン タ イ ム ラ イ セ ン ス を 購入 し た開
発者が PDFlib COM コ ン ポーネ ン ト を自分の製品 と と も に再配布 し たい場合は、PDFlib イ
ン ス ト ー ラ 全体を完全に含めて配布 し た う えで、 PDFlib イ ン ス ト ー ラ を自製品のセ ッ ト
ア ッ プ過程の一部 と し て走 ら せ る 必要があ り ます。あ る いは下記のすべて を行 う 必要があ
り ます。
32
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> PDFlib で イ ン ス ト ール さ れた フ ァ イ ル群を自製品の イ ン ス ト ールの中に組み込みま
す。 PDFlib の必要フ ァ イ ル一覧は、 PDFlib の イ ン ス ト ール さ れたデ ィ レ ク ト リ を見れ
ば簡単に知 る こ と がで き ます。 なぜな ら そ こ が、 PDFlib イ ン ス ト ー ラ が全フ ァ イ ルを
置 く 唯一の場所だか ら です。
> 必要な PDFlib の レ ジ ス ト リ キーを作成 さ せます。 そのためには、 pdflib.reg と い う 登録
フ ァ イ ルテ ン プ レー ト が提供 さ れてい る のでその中の項目を記入 し 、 そ し て自製品の
イ ン ス ト ール過程の中でそれを用い ます。
> pdflib_com.dll を呼び出 し て自己登録 さ せ る 必要があ り ます(た と えば regsvr32 ユーテ ィ
リ テ ィ を利用)。
> ラ イ セ ン ス キーを、 PDFlib の set_parameter( ) 関数を使っ て実行時に与え ます。 こ の関
数には次の よ う に、 1 番目の引数 と し て license を与え、 2 番目の引数 と し て実際の ラ
イ セ ン ス キーを与え ます (9 ページ 「0 章 PDFlib ラ イ セ ン ス キーの適用」 も 参照)。
oPDF.set_parameter("license", "ライセンスキー ")
COM でのエ ラ ー処理 PDFlib COM コ ン ポーネ ン ト のエ ラ ー処理は COM の規則に従っ て
行われます。 すなわち、 PDFlib の例外が起 き た時には COM の例外が発生 し 、 テ キ ス ト 形
式のエ ラ ー説明が付加 さ れます。 それ と と も に、 PDFlib オブジ ェ ク ト に割 り 当て ら れてい
た メ モ リ が解放 さ れます。
COM の例外は PDFlib の ク ラ イ ア ン ト でキ ャ ッ チ し て処理で き ます。 その処理方法は、
ク ラ イ ア ン ト の環境が COM のエ ラ ー処理のために対応 し てい る 方法な ら ば何で も 使え ま
す。 PDFlib の例外の し く みについては 51 ページ 「3.1.1 例外処理」 で詳述 し ます .
Active Server Pages での PDFlib の利用 外部フ ァ イ ル使用時には (画像フ ァ イ ルな ど) 、
ASP の MapPath 機能を使っ て、 ロ ーカルデ ィ ス ク 上のパス名を ASP ス ク リ プ ト 内で使え
る パ ス に対応づけ る 必要があ り ます。 PDFlib と と も に提供 し てい る ASP 利用例を参照 し
て く だ さ い。 MapPath について詳 し く ない方は ASP の説明書 も 参照 し て く だ さ い。 絶対パ
ス名を ASP ス ク リ プ ト 中で使っ てはいけ ません。 MapPath な し では動作 し ません。
注 UNC パス名は IIS では動作 し ません。
ASP ス ク リ プ ト を置 く デ ィ レ ク ト リ に対 し ては実行パー ミ ッ シ ョ ンが必要です。ま た、PDF
生成に イ ン コ ア方式を用いない場合は書 き 込みパー ミ ッ シ ョ ン も 必要です (提供 し てい る
ASP 利用例では イ ン コ ア PDF 生成を利用)。
Active Server Pages 上の PDFlib_com と い っ た COM オブジ ェ ク ト の速度を向上 さ せ る
には、ASP ページ上の ス ク リ プ ト コ ー ド 本体の外でオブジ ェ ク ト を イ ン ス タ ン ス化す る と
い う 方法が あ り ま す。 そ う す る と 、 オブジ ェ ク ト にページ ス コ ープでな く セ ッ シ ョ ン ス
コ ープ を与え る と い う 効果があ り ます。 具体的には、 次の よ う に CreateObject を用い る
(次項の利用例の よ う に) のではな く 、
<%@ LANGUAGE = "JavaScript" %>
<%
var oPDF;
oPDF = Server.CreateObject("PDFlib_com.PDF");
oPDF.begin_document("", "");
...
次の よ う に OBJECT タ グで RUNAT ・ ID ・ ProgID 属性を用いて PDFlib_com オブジ ェ ク ト を
作成 し ます。
<OBJECT RUNAT=Server ID=oPDF ProgID="PDFlib_com.PDF"> </OBJECT>
<%@ LANGUAGE = "JavaScript" %>
2.3 COM バイ ンデ ィ ング
33
<%
oPDF.begin_document("", "");
...
さ ら に速度向上 さ せ る には、 こ の手法を global.asa フ ァ イ ルに も 適用す る と い う 方法があ
り ます。 そのためには Scope=Application 属性を用い ます。 こ れに よ り 、 オブジ ェ ク ト に
アプ リ ケーシ ョ ン ス コ ープを与え る こ と にな り ます。
JScript 5.0 では、構造化例外処理が言語に加わっ てい ます。 こ の例外処理は C++ や Java
に似てい ますが、 違いは、 JScript の例外は型を持てない と い う こ と と 、 例外を扱え る 節を
1 つ し か作れない こ と です。 例外の検知 と それに対する 対処は次の よ う に try ∼ catch 節
で行い ます。
try {
...いろいろなPDFlib命令...
} catch (exc) {
Response.write("エラー:" + exc.description);
Response.end();
}
VBScript でのエ ラ ー処理 残念なが ら 、 VBScript にはエ ラ ーを キ ャ ッ チす る 手段が何 も
あ り ません。 ただ無視す る だけです。 そのため、 下記の コ ー ド の よ う に、 ERR オブジ ェ ク
ト を定期的に調べて、 それま での間に COM コ ン ポーネ ン ト への呼び出 し で何か問題が起
こ ら なかっ たかを調べ る 必要があ り ます。 VBScript に On Error GoTo 節がない と い う のは
大 き な弱点で、 ス ク リ プ ト コ ー ド はエ ラ ーチ ェ ッ ク ルーチンへのひんぱんな呼び出 し で汚
く な っ て し ま い ます し 、最初のエ ラ ーか ら 次にエ ラ ーチ ェ ッ ク ルーチン を呼び出すま での
間にたて続けでエ ラ ーが起 き る 可能性 も あ り ます。
On Error Resume Next
Err.Clear
...いろいろなPDFlib命令...
CheckPDFError
...引き続きいろいろなPDFlib命令...
Sub CheckPDFError()
If Err.number <> 0 then
WScript.Echo "エラー:" & Err.description
Err.Clear
End If
end Sub
Visual Basic での PDFlib の利用 外部の COM コ ン ポーネ ン ト を 利用す る 場合、 Visual
Basic は事前 ( コ ンパ イ ル時の) バ イ ンデ ィ ン グ と 実行時 (事後の) バ イ ンデ ィ ン グの両
方に対応 し てい ます。 ど ち ら の種類のバ イ ンデ ィ ン グ も PDFlib では可能ですが、 事前バ
イ ンデ ィ ン グのほ う を強 く 推奨 し ます。事前バ イ ンデ ィ ン グ を さ せ る には以下の手順を踏
みます。
> VB プ ロ ジ ェ ク ト か ら PDFlib への参照を作成 し ます。 具体的には、 「プ ロ ジ ェ ク ト 」 メ
ニ ュ ーの 「参照設定 ...」 コ マ ン ド を選択 し 、 「PDFlib_com」 コ ン ト ロ ールを選びます。
> オブジ ェ ク ト 変数を宣言す る 時は、 一般的な Object 型ではな く 、 次の よ う に PDFlib_
com.PDF 型で宣言 し ます。
34
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
Dim oPDF As PDFlib_com.PDF
Set oPDF = CreateObject("PDFlib_com.PDF")
' または: Set oPDF = New PDFlib_com.PDF
参照を作成 し て事前バ イ ンデ ィ ン グ を使 う 利点は以下の と お り です。
> VB が コ ー ド 中の スペ リ ン グの間違い をチ ェ ッ ク で き る 。
> IntelliSense (自動ス テー ト メ ン ト 補完) や コ ン テ ク ス ト セ ン シテ ィ ブなヘルプが利用可
能。
> VB のオブジ ェ ク ト ブ ラ ウ ザで、すべての PDFlib メ ソ ッ ド が、それぞれの引数 と 簡単な
説明 と と も に表示 さ れ る 。
> VB のプ ロ グ ラ ムは、事前バ イ ンデ ィ ン グのほ う が実行時バ イ ンデ ィ ン グ よ り も ずっ と
高速に動作す る 。
Visual Basic での PDFlib プ ロ グ ラ ミ ン グは単純ですが、 一点だけ例外があ り ます。 Visual
Basic 6 の、 Microsoft も 認識 し てい る バグ ( も と い 「問題」) のために、 い く つかの PDFlib
関数はその ま ま では使え ません。 なぜな ら VB は、 い く つかの PDFlib メ ソ ッ ド の名前を
VB の組み込み メ ソ ッ ド で誤っ て上書 き し て し ま う のです。 た と えば、 次の コ ー ド を VB 6
で コ ンパ イ ル し て も う ま く い き ません。
oPDF.circle 10, 10, 30
こ の問題を回避す る ため、 PDFlib API は次の よ う な等価 メ ソ ッ ド を持っ てい ます。
pcircle (circleと等価)
pscale (scaleと等価)
あ る いは Microsoft テ ク ニ カルサポー ト の提案 し てい る 下記の文法を使 う こ と も で き ます。
oPDF.[circle] 10, 10, 30
問題を起 こ す メ ソ ッ ド 名を カ ッ コ に入れ る のが効 く よ う です。 すべての PDFlib 関数の う
ち、 こ の問題を起 こ すのは次の関数だけです。
circle
scale
整数 と い う デー タ 型は、 PDFlib COM コ ン ポーネ ン ト では符号つき 32 ビ ッ ト 数を表 し ま
す。 Visual Basic では long デー タ 型にあ た る も のです。 ですので、 PDFlib API の説明書が
整数型の引数を指示 し てい る 場合、 Visual Basic のプ ロ グ ラ マーは こ れを long に翻訳す る
必要があ り ます ( も っ と も 、 VB は int 値が与え ら れて も 正 し く それを翻訳 し ます)。
Visual Basic プ ロ グ ラ ムは、 エ ラ ーが発生す る と 検知 し て対応で き ます。 Visual Basic で
は、 例外のキ ャ ッ チは次の よ う に On Error GoTo 節で行われます。
Sub main()
Dim oPDF As PDFlib_com.PDF
On Error GoTo ErrExit
...いろいろなPDFlib命令...
End
ErrExit:
MsgBox Hex(Err.Number) & ": " & Err.Description
End Sub
2.3 COM バイ ンデ ィ ング
35
.NET での PDFlib COM 版の利用 PDFlib.NET 版のかわ り に (40 ページ 「2.7 .NET バ イ ン
デ ィ ン グ」 参照)、 PDFlib の COM 版を .NET で利用す る こ と も で き ます。 まず次の よ う
に、 PDFlib COM 版か ら tlbimp.exe ユーテ ィ リ テ ィ で .NET アセ ンブ リ を作成す る 必要が
あ り ます。
tlbimp pdflib_com.dll /namespace:pdflib_com /out:Interop.pdflib_com.dll
こ のアセ ンブ リ を .NET アプ リ ケーシ ョ ン内で用い る こ と がで き ます。 Visual Studio .NET
か ら pdflib_com.dll への参照を作成 し た場合は、 アセ ンブ リ は自動的に作成 さ れます。
PDFlib COM 版を VB.NET で利用す る 方法を示す コ ー ド 抜粋を以下に挙げます。
Imports PDFlib_com
...
Dim p As PDFlib_com.IPDF
...
p = New PDF()
...
buf = p.get_buffer()
PDFlib COM 版を C# で利用す る 方法を示す コ ー ド 抜粋を以下に挙げます。
using PDFlib_com;
...
static PDFlib_com.IPDF p;
...
p = New PDF();
...
buf = (byte[])p.get_buffer();
上記以外の コ ー ド は PDFlib の .NET 版 と 同様に動作 し ます。 C# では get_buffer( ) の結果
を キ ャ ス ト し なければな ら ない こ と に注意 し て く だ さ い。 なぜな ら 、 こ こ での COM オブ
ジ ェ ク ト に よ っ て返 さ れ る VARIANT デー タ 型か ら は自動変換が行われ な い た め です
(create_pfv( ) について も 同様のキ ャ ス ト が必要です)。
36
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
2.4 C バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
注 PDFlib の C バイ ンデ ィ ング を用いたア プ リ ケーシ ョ ンは、C++ コ ンパイ ラ で リ ン ク を行 う
必要があ り ます。 PDFlib ラ イ ブ ラ リ では、 C++ で実装 さ れた部分をい く つかイ ン クルー ド
し てい る ためです。 C リ ン カ を用いる と 、 必要な C++ サポー ト ラ イ ブ ラ リ に対 し てア プ リ
ケーシ ョ ンが明示的に リ ン ク さ れていない限 り 、未解決の外部参照エ ラ ーが出る可能性が
あ り ます。
2.4 C バイ ンデ ィ ング
37
2.5 C++ バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
38
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
2.6 Java バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
2.6 Java バイ ンデ ィ ング
39
2.7 .NET バ イ ン デ ィ ン グ
PDFlib の .NET 版は、 .NET に関連す る あ ら ゆ る 概念に対応 し てい ます。 技術用語でいえ
ば、 PDFlib .NET 版は、 .NET Framework の制御下で走る C++ ク ラ ス です (ア ン マネージな
PDFlib コ ア ラ イ ブ ラ リ のためのマネージな ラ ッ パを持っ てい ます)。 こ れは、 厳密名を持
つ静的アセ ンブ リ と し て構成 さ れてい ます。 PDFlib アセ ンブ リ (pdflib_dotnet.dll) には、
ラ イ ブ ラ リ 本体 と メ タ 情報 と が含まれてい ます。
注 PDFlib.NET (32-bit ・ 64-bit 版) は、 .NET Framework 2.0 以上を必要 と し ます。
PDFlib .NET 版の イ ン ス ト ール 与え ら れてい る Windows MSI イ ン ス ト ー ラ で PDFlib を イ
ン ス ト ール し ます。 PDFlib.NET の MSI イ ン ス ト ー ラ は、 PDFlib アセ ンブ リ と 補助デー タ
フ ァ イ ル群 ・ 解説文書 ・ サンプルを、 マシ ンに対話的に イ ン ス ト ール し ます。 こ の イ ン ス
ト ー ラ は PDFlib の登録 も 行っ て、 Visual Studio .NET の 「参照の追加」 ダ イ ア ロ グボ ッ ク
ス の .NET タ ブで PDFlib を簡単に参照で き る よ う に し ます。
サ イ レ ン ト イ ン ス ト ール MSI イ ン ス ト ー ラ はサ イ レ ン ト イ ン ス ト ールに も 対応 し てい
ます。 た と えば、 コ マ ン ド ラ イ ンか ら 次の よ う な コ マ ン ド を使えば、 一切のユーザー入力
な し で PDFlib を イ ン ス ト ールす る こ と がで き ます。
msiexec.exe /I PDFlib-8.0.1-com-dotnet.msi /qn
コ マ ン ド ラ イ ンオプシ ョ ンの完全な一覧については Microsoft Windows Installer の解説文書
を参照 し て く だ さ い。
「xcopy 展開」 と 呼ばれ る 処理に も 対応 し てい ます。PDFlib アセ ンブ リ (pdflib_dotnet.dll)
を、 xcopy コ マ ン ド や FTP 転送でサーバにただ コ ピーすれば よ いのです。
IntelliSense 対応 PDFlib.NET は、 VisualStudio で コ ー ド 補完等に便利な IntelliSense のた
めの情報を提供 し てい ます。IntelliSense に必要な情報はフ ァ イ ル pdflib_dotnet.xml の中に
含 まれてい ます。 イ ン ス ト ー ラ は こ の フ ァ イ ルを、 PDFlib.NET が参照 さ れた と き はいつ
で も VisualStudio に よ っ て見つか る よ う に、pdflib_dotnet.dll と 同 じ デ ィ レ ク ト リ へ複製 し
ます。 pdflib_dotnet.dll を他のデ ィ レ ク ト リ へ複製す る 場合には、 IntelliSense が動作す る
よ う 、 必ず pdflib_dotnet.xml も 複製 し て く だ さ い。
.NET でのエ ラ ー処理 PDFlib.NET は .NET の例外に対応 し てお り 、 実行時に問題が発生
す る と 、 詳細なエ ラ ー メ ッ セージ を持っ た例外を発生 さ せます。 こ う し た例外を キ ャ ッ チ
し て適切に対処す る のは ク ラ イ ア ン ト 側の役目です。そ う し ない場合、.NET Framework が
例外を キ ャ ッ チ し て、 たいていはアプ リ ケーシ ョ ン を停止 さ せます。
PDFlib は、例外関連情報を伝え る ために、 メ ンバ get_errnum・get_errmsg・get_apiname
を 持つ自前の例外 ク ラ ス PDFlib_dotnet.PDFlibException を 定義 し て い ま す。 PDFlib は
IDisposable イ ン タ フ ェ ース を実装 し てい る ので、 ク ラ イ ア ン ト は Dispose( ) メ ソ ッ ド を呼
び出 し て ク リ ーン ア ッ プが可能です。
C# での PDFlib の利用 PDFlib.NET を C# プ ロ ジ ェ ク ト で使 う には、 次の よ う に、 Visual
C# .NET で PDFlib.NET アセ ンブ リ への参照を作成す る 必要があ り ます。 「プ ロ ジ ェ ク ト 」
→ 「参照の追加 ...」 → 「参照 ...」 で イ ン ス ト ールデ ィ レ ク ト リ か ら PDFlib_dotnet.dll を選
択 し ます。
コ マ ン ド ラ イ ン コ ンパ イ ラ では、次の例の よ う に し て PDFlib.NET を参照す る こ と がで
き ます。
csc.exe /r:..\..\bin\PDFlib_dotnet.dll hello.cs
40
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
ク ラ イ ア ン ト の コ ー ド では、 PDFlib が発生 さ せ る .NET 例外を、 以下の よ う に、 通常の try
∼ catch 構造で処理す る こ と がで き ます。
try {
...いろいろなPDFlib命令...
catch (PDFlibException e)
{
// PDFlibが投げた例外をキャッチした
Console.WriteLine("PDFlib exception occurred in hello sample:\n");
Console.WriteLine("[{0}] {1}: {2}\n",
e.get_errnum(), e.get_apiname(), e.get_errmsg());
} finally {
if (p != null) {
p.Dispose();
}
}
VB.NET での PDFlib の利用 PDFlib.NET を VB.NET プ ロ ジ ェ ク ト で利用す る には、 次の
よ う に、 Visual Basic .NET で PDFlib.NET アセ ンブ リ への参照を作成す る 必要があ り ます。
「プ ロ ジ ェ ク ト 」 → 「参照の追加 ...」 → 「参照 ...」 で イ ン ス ト ールデ ィ レ ク ト リ か ら PDFlib_
dotnet.dll を選択 し ます。
コ マ ン ド ラ イ ン コ ンパ イ ラ では、次の よ う に し て PDFlib.NET を参照す る こ と がで き ま
す。
vbc.exe /r:..\..\bin\pdflib_dotnet.dll hello.vb
Visual Basic .NET は次の 2 種類の例外処理に対応 し てい ます。
> 現代的な構造化例外処理 (C# の よ う な他の現代的言語で も 利用 さ れ る 方式)
> 古典的な非構造化例外処理 (Visual Basic 6.0 では こ れが唯一の例外処理方式)
ク ラ イ ア ン ト の コ ー ド では、 PDFlib が発生 さ せ る .NET 例外を ど ち ら の例外処理方式で処
理す る こ と も で き ますが、 その文法は互いに異な り ます。 構造化例外処理で例外を キ ャ ッ
チす る 方式を推奨 し ます。 以下の よ う に try ∼ catch 節で動作 し ます。
Try
...いろいろなPDFlib命令...
Catch e As PDFlibException
Console.WriteLine("PDFlib exception occurred in hello sample:")
Console.WriteLine("[{0}] {1}: {2}",
e.get_errnum(), e.get_apiname(), e.get_errmsg())
Finally
If Not p Is Nothing Then
p.Dispose()
End If
End Try
古典的な非構造化例外処理で例外を キ ャ ッ チす る には、 以下の よ う に On Error GoTo 節を
用い ます。
Imports Microsoft.VisualBasic
Public Shared Sub Main()
On Error GoTo ErrExit
...いろいろなPDFlib命令...
Exit Sub
ErrExit:
2.7 .NET バイ ンデ ィ ング
41
Console.WriteLine("PDFlib exception caught: {0}", Err.Description)
End Sub
ASP.NET での PDFlib の利用 PDFlib.NET を ASP.NET ス ク リ プ ト で使 う には、PDFlib.NET
アセ ンブ リ を ASP で利用可能にす る 必要があ り ます。そのためには、PDFlib_dotnet.dll を、
IIS イ ン ス ト レーシ ョ ンの bin サブデ ィ レ ク ト リ (ない場合は手動で作成す る 必要があ り ま
す) に置 く か、Web アプ リ ケーシ ョ ンの bin デ ィ レ ク ト リ に置 き ます。 その例を示 し ます。
C:\Inetpub\wwwroot\bin\pdflib_dotnet.dll
C:\Inetpub\wwwroot\WebApplicationX\bin\pdflib_dotnet.dll
または
外部フ ァ イ ル (画像フ ァ イ ルな ど) を使 う 時は、 ASP の MapPath 機能を使っ て、 ロ ーカ
ルデ ィ ス ク 上のパ ス名を、ASP.NET ス ク リ プ ト で用い ら れ る パ ス に対応づけなければな り
ません。 PDFlib に付属 し てい る ASP.NET の作成例を参照 し て く だ さ い。 MapPath につい
て よ く わか ら ない方は ASP.NET の解説文書 も 参照 し て く だ さ い。 絶対パ ス名を ASP.NET
ス ク リ プ ト で使っ て も 、 MapPath な し では動作 し ないので、 使わないで く だ さ い。
ASP.NET ス ク リ プ ト を入れ る デ ィ レ ク ト リ は実行パー ミ ッ シ ョ ン を持た なければな り
ません。 ま た、 PDF 生成にあ た っ て イ ン コ ア方式を用いない限 り は書 き 込みパー ミ ッ シ ョ
ン も 持たなければな り ません (提供 し てい る ASP 利用例では イ ン コ ア PDF 生成を用いて
い ます)。
ASP.NET 2.0 以上におけ る信頼 レ ベル ASP.NET 2.0 は、 Web アプ リ ケーシ ョ ンに対 し て
さ ま ざ ま な信頼レベルで許可 さ れ る 操作に関す る 制限を導入 し てい ます。 PDFlib.NET は
非マネージ ド コ ー ド を含んでい る ので、 Full 信頼レベルを必要 と し ます。 こ れ以外の High
や Medium な ど の信頼レベルの ASP.NET では、 PDFlib.NET アプ リ ケーシ ョ ン を導入す る
こ と はで き ません。
Unicode と レ ガ シ エ ン コ ーデ ィ ン グの変換 PDFlib ユーザーの便宜のために、 便利な C#
文字列変換方法を示 し ま し ょ う 。 詳 し く は .NET の説明書を参照 し て く だ さ い。 下記の コ
ン ス ト ラ ク タ はバ イ ト 配列 (指定 さ れた変位 と 長 さ での) か ら 、 Encoding 引数で与え ら れ
たエン コ ーデ ィ ン グ を用いて Unicode 文字列を生成 し ます。
public String(sbyte*, int, int, Encoding)
42
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
2.8 Perl バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
2.8 Perl バイ ンデ ィ ング
43
2.9 PHP バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
44
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
2.10 Python バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
2.10 Python バイ ンデ ィ ング
45
2.11 REALbasic バ イ ン デ ィ ン グ 1
PDFlib REALbasic 版の イ ン ス ト ール PDFlib は、 Mac と Windows の REALbasic 開発環境
(REALbasic 2006 以上) に対応 し てい ます。
Mac で も Windows で も 、 REALbasic 用 PDFlib プ ラ グ イ ン (PDFlib.rbx) を、 REALbasic
アプ リ ケーシ ョ ンが存在す る フ ォ ルダの中の Plugins と い う フ ォ ルダに コ ピーす る 必要が
あ り ます。Mac OS X ではあわせて、PDFlib.framework を /Library/Frameworks に イ ン ス ト ー
ルす る 必要があ り ます。 REALbasic 用 PDFlib プ ラ グ イ ンは、 単一のパ ッ ケージで頒布 さ
れ、 以下の版を含んでい ます。
> Mac OS X PowerPC
> Mac OS X Intel
> Windows
こ の こ と はつま り 、 Mac と Windows の ど ち ら のバージ ョ ン を使っ て も 、 Mac 用 ・ Windows
用両方のアプ リ ケーシ ョ ン を ビル ド す る こ と がで き る こ と を意味 し ます。 ス タ ン ド ア ロ ン
のアプ リ ケーシ ョ ン を生成す る 際、REALbasic は PDFlib プ ラ グ イ ンの中の適切な部分を選
択 し て、 そのプ ラ ッ ト フ ォームで必要な部分だけ を、 生成 さ れ る アプ リ ケーシ ョ ンの中に
イ ン ク ルー ド し ます。
追加 さ れ る REALbasic ク ラ ス PDFlib プ ラ グ イ ンは REALbasic のオブジ ェ ク ト 階層に以
下の 2 つの新た な ク ラ ス を追加 し ます。
> PDFlib ク ラ ス。 すべての PDFlib API メ ソ ッ ド を含んでい ます。
> PDFlibException ク ラ ス。RuntimeException か ら 派生 し た も ので、PDFlib が発生 さ せ る 例
外を扱 う のに使え ます (後述)。
PDFlib を使っ て、 コ ン ソ ールアプ リ ケーシ ョ ンだけでな く GUI アプ リ ケーシ ョ ン も 作成
す る こ と がで き ます。 PDFlib は コ ン ト ロ ールではないので、 REALbasic の コ ン ト ロ ールパ
レ ッ ト に新たな ア イ コ ンは イ ン ス ト ール さ れません。 し か し 、 PDFlib プ ラ グ イ ンが利用可
能であれば、 REALbasic は PDFlib の ク ラ ス と その関連 メ ソ ッ ド を認識 し ます。 た と えば、
ス テー ト メ ン ト 補完機能や引数チ ェ ッ ク 機能はPDFlib API メ ソ ッ ド に対 し て完全に動作 し
ます。
REALbasic でのエ ラ ー処理 例外発生時には PDFlib は ク ラ ス PDFlibException のネ イ テ ィ
ブな REALbasic 例外を発生 さ せます。PDFlib 例外は REALbasic の標準的技法で処理す る こ
と がで き ます。すなわち、try ∼ catch ブ ロ ッ ク を用い る か( こ ち ら が推奨ですが、REALbasic
5.5 以上が必要です)、 Exception ブ ロ ッ ク で処理す る かの ど ち ら かです。 後者の例を以下
の コ ー ド で示 し ます。
Exception err As PDFlibException
MsgBox("PDFlib exception occurred in hello sample: [" + _
Str(err.get_errnum()) + "] " + err.get_apiname() + ": " + err.get_errmsg())
こ の作成例でわか る よ う に REALbasic 開発者は、 エ ラ ー番号、 エ ラ ー メ ッ セ−ジ、 例外を
発生 さ せた API 関数の名前を取得す る PDFlibException メ ソ ッ ド 群を用いて詳 し いエ ラ ー
情報を得 る こ と がで き ます。
1. www.realbasic.com を参照。
46
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
2.12 RPG バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
2.12 RPG バイ ンデ ィ ング
47
2.13 Ruby バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
48
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
2.14 Tcl バ イ ン デ ィ ン グ
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
2.14 Tcl バイ ンデ ィ ング
49
50
第 2 章 : PDFlib の言語バイ ンデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
3 PDFlib 文書を作成
3.1 PDFlib プ ロ グ ラ ミ ン グの一般的特徴
ク ッ ク ブ ッ ク プ ログ ラ ミ ングの一般的な諸側面に関する コ ー ド サン プルが
general カ テ ゴ リ にあ り ます。
PDFlib
ク ッ ク ブ ッ クの
3.1.1 例外処理
あ る 種のエ ラ ーは、 多 く の言語で例外 と 呼ばれてい ます。 こ の呼び方は理にかな っ てい ま
す。 そ う し たエ ラ ーは ま さ に例外であ っ て、 プ ロ グ ラ ムの動作中にそんなに頻繁には起 こ
ら ないだろ う と 予想 さ れ る 類の も のだか ら です。 一般に採 ら れ る 方針 と し ては、 エ ラ ーが
頻繁に起 き そ う な関数呼び出 し については従来型のエ ラ ー伝達方式 (すなわち、 -1 等の
特殊な戻 り 値でエ ラ ーを示す) を用い る けれど も 、 まれに し か起 こ ら ないエ ラ ーで、 こ ん
な特例に ま で場合分け を増や し て コ ー ド をやや こ し く す る の も ど う か と 思われ る よ う な
場合については例外方式を用い る 、 と い う のが普通です。 PDFlib のや り 方 も ま さ に こ れ と
同 じ です。 た と えば、 かな り の頻度でエ ラ ーが起 き そ う な操作 と し ては、 次の よ う な も の
が挙げ ら れます。
> 出力フ ァ イ ルを、 パー ミ ッ シ ョ ンがないのに開 こ う と す る
> PDF を読み込みたい と き 、 間違っ た フ ァ イ ル名で開 こ う と する
> 画像フ ァ イ ルが壊れてい る のに開 こ う と す る
PDFlib では、 こ の よ う なエ ラ ーを特殊な戻 り 値で示 し ます。それぞれの値は PDFlib API リ
フ ァ レ ン ス に示 し て あ り ます (たいていは -1)。 エ ラ ー時に -1 を返す と 解説に記 さ れて
い る 関数についてはすべて、アプ リ ケーシ ョ ン開発者の側で こ のエ ラ ー コ ー ド をチ ェ ッ ク
す る 必要があ り ます。
こ れに対 し て、 以下に挙げ る よ う なエ ラ ーは、 も っ と 深刻か も し れない、 し か し さ ほ
ど頻繁には起 こ ら ないエ ラ ーです。
> 仮想 メ モ リ 不足
> ス コ ープ違反 (た と えば文書を開 く 前に閉 じ よ う と す る )
> PDFlib API 関数に対す る 引数指定の誤 り (た と えば円を負の半径で描 こ う と す る )、 ま
たはオプシ ョ ン指定の誤 り
PDFlib が こ の よ う な状況を認識 し た と き には、特殊なエ ラ ー戻 り 値が呼び出 し 側に渡 る の
ではな く 、 例外が発生 し ます。 知っ てお く べ き 重要な こ と と し て、 例外が発生す る と 、 そ
れま で生成 さ せていた PDF 文書は完了で き な く な り ます。例外の後で安全に呼べ る メ ソ ッ
ド は delete( ) ・ get_apiname( ) ・ get_errnum( ) ・ get_errmsg( ) だけです。 それ以外の PDFlib
の メ ソ ッ ド を例外の後で呼んだ場合の結果は予測不能です。例外の中には以下の情報が含
まれてい ます。
> 一意なエ ラ ー番号。
> 例外を起 こ し た PDFlib API 関数の名前。
> 問題の詳細な ど を述べたテ キ ス ト 。
関数呼び出 し に よ る問題発生の原因情報 を得 る さ き に述べた よ う に、 生成中の PDF 出
力文書は、 例外が起 こ っ た ら かな ら ず放棄 し なければな り ません。 し か し ク ラ イ ア ン ト に
よ っ ては、 プ ロ グ ラ ムの流れを調整 し た り 、 別のデー タ を与えた り する こ と で、 文書を存
続 さ せ る こ と を望む場合 も あ る か も し れません。 た と えば、 あ る フ ォ ン ト の読み込みがで
き ない と き 、 たいていの ク ラ イ ア ン ト は文書を放棄 し て し ま う で し ょ う が、 ク ラ イ ア ン ト
3.1 PDFlib プ ロ グ ラ ミ ングの一般的特徴
51
表 3.1 PDFlib の例外番号の範囲一覧
エ ラ ーの範囲 原因
1000 ∼ 1999
(PDCORE ラ イ ブ ラ リ ) : メ モ リ ・ I/O ・ 引数 ・ パラ メ タ / 値 ・ オプ シ ョ ン
2000 ∼ 2999
(PDFlib ラ イ ブ ラ リ ) : 設定 ・ ス コ ープ ・ グ ラ フ ィ ッ ク と テキス ト ・ 色 ・ 画像 ・ フ ォ ン ト ・
エ ン コ ーデ ィ ング ・ PDF/X ・ ハイパーテキス ト ・ タ グ付き PDF ・ レ イ ヤー
4000 ∼ 4999
(PDF 取 り 込みラ イ ブ ラ リ PDI) : 設定 と パラ メ タ ・ 破損 PDF (フ ァ イル ・ オブ ジ ェ ク ト ・
ス ト リ ームのいずれかのレ ベル)
に よ っ ては、 別の フ ォ ン ト を使っ て何 と か し たい と い う 場合 も あ り え ます。 その よ う な と
き は、 問題が よ り 詳 し く 記 さ れたエ ラ ー メ ッ セージ を得たい場合 も あ る で し ょ う 。 その よ
う な場合には、 get_errnum( ) ・ get_errmsg( ) ・ get_apiname( ) 関数を、 問題発生 し た関数呼
び出 し の直後に呼び出す こ と がで き ます。 具体的には、 エ ラ ー値 -1 を返 し て き た関数呼
び出 し の直後に呼び出 し ます。
エ ラ ーポ リ シー PDFlib はエ ラ ー状況を検出する と 、い く つかの戦略の う ちの 1 つに従っ
て反応 し ます。 こ れは errorpolicy パ ラ メ タ で設定で き ます。 エ ラ ー コ ー ド を返す可能性の
あ る 関数はすべて、 errorpolicy オプシ ョ ンに も 対応 し てい ます。 以下のエ ラ ーポ リ シーに
対応 し てい ます。
> errorpolicy=legacy: こ の設定は非推奨ですが、以前のバージ ョ ンの PDFlib と 互換な動作
を保証 し ます。 すなわち例外やエ ラ ー戻 り 値を、 fontwarning ・ imagewarning と い っ
たパ ラ メ タ やオプシ ョ ン で制御す る 方式です。 こ れは、 PDFlib 6 と の ソ ース コ ー ド 互
換性を要す る アプ リ ケーシ ョ ン についてのみ推奨 し ます。 新 し いアプ リ ケーシ ョ ン で
は使用す る べ き ではあ り ません。 legacy 設定はデフ ォ ル ト のエ ラ ーポ リ シーです。
> errorpolicy=return : エ ラ ー状況が検出 さ れた と き 、 いか な る 警告パ ラ メ タ ・ オプ シ ョ
ンに も よ ら ず、 各関数がエ ラ ー値 -1 を返 し ます。 アプ リ ケーシ ョ ン開発者は こ の戻 り
値を調べて問題を発見 し 、 その問題に対 し て アプ リ ケーシ ョ ン ご と に適切な方法で対
処す る 必要があ り ます。 こ のアプ ロ ーチではエ ラ ー処理に統一的な アプ ロ ーチがで き
る ので、 推奨 し ます。
> errorpolicy=exception : エ ラ ー状況が検出 さ れた と き 、 例外を発生 さ せ ま す。 た だ し 、
出力文書は例外の後には使え な く な り ます。 こ の方式を使 う と 、 エ ラ ー条件分岐を さ
ぼっ て手軽にプ ロ グ ラ ミ ン グがで き ますが、そのかわ り 問題が起 き る と 出力文書は、た
と えそれがアプ リ ケーシ ョ ン側で対処で き る 問題であ っ て も 失われて し ま い ます。
以下の コ ー ド に、 例外処理に関す る 各種の戦略を示 し ます。 各作成例は、 存在す る か し な
いかわか ら ない フ ォ ン ト を読み込 も う と し てい ます。
errorpolicy=return の と き は、 戻 り 値がエ ラ ーか ど う か を調べ る 必要があ り ます。 それ
が失敗を示 し てい る と き は、 以下の よ う に失敗の原因を取得す る こ と で、 状況を適切に さ
ば く こ と がで き る で し ょ う 。
font = p.load_font("MyFontName", "unicode", "errorpolicy=return");
if (font == -1)
{
/* フォントハンドルが無効。しかしPDF出力は継続可能。*/
errmsg = p.get_errmsg();
/* 別のフォントを試すか諦める */
...
}
/* フォントハンドルは有効。継続 */
52
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
errorpolicy=exception の と き は以下の よ う に、 エ ラ ーが発生 し た ら 文書は放棄 し なければ
な り ません。
font = p.load_font("MyFontName", "unicode", "errorpolicy=exception");
/* 例外が発生しなければフォントハンドルは有効。
* 例外が発生したら、PDF出力は継続できない
*/
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの general/error_handling ト ピ ッ ク にあ り ます。
警告 問題の状況に よ っ ては、 PDFlib がそれを内部的に検出で き て も 、例外を発生 さ せて
プ ロ グ ラ ムの流れを さ え ぎ る 正当な理由にはな ら ない も の も あ り ます。以前のバージ ョ ン
の PDFlib は、 致命的でない例外 と い う 概念に対応 し ていて、 それは無効に も で き ま し た
が、 PDFlib 7 は致命的でない状況では、 例外を一切発生 し な く な り ま し た。 かわ り に、 状
況の説明を ロ グ記録 し ます ( ロ グ記録を有効に し て あれば) 。 ロ グ記録は下記の よ う に有
効にで き ます。
p.set_parameter("logging", "filename=private.log");
警告に関 し ては以下のアプ ロ ーチを推奨 し ます。
> 開発局面では警告の ロ グ記録を有効に し て、 その ロ グ フ ァ イ ル内のすべての警告 メ ッ
セージ を注意深 く 研究 し ます。 こ う し た警告は、 コ ー ド やデー タ にひそむ問題を示 し
てい る 可能性があ り ますか ら 、 その原因を理解ない し 除去す る よ う 努めなければな り
ません。
> 運用局面では警告の ロ グ記録を無効に し て、 問題が起 き た と き だけ再び有効に し ます。
3.1.2 PDFlib 仮想 フ ァ イ ルシ ス テム (PVF)
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの general/starter_pvf ト ピ ッ ク にあ り ます。
デ ィ ス ク 上の フ ァ イ ル と は別に、 ク ラ イ ア ン ト は、 PDFlib Virtual File System (PVF) と い
う し く みを利用す る こ と も で き ます。 こ れを用い る と 、 メ モ リ 内のデー タ を直接供給す る
こ と がで き る ので、 デ ィ ス ク のフ ァ イ ルを扱 う 必要が ま っ た く あ り ません。 こ れには速度
向上 と い う 利点があ り ます。 PVF はデー タ ベース か ら 取 り 出 し たデー タ 等の よ う に、 フ ァ
イ ル と し てデ ィ ス ク 上に存在 し ていない時に も 活用で き ます。 ま たそれ以外に も 、 ク ラ イ
ア ン ト の必要 と す る デー タ が、何 ら かの処理の結果 と し て メ モ リ 上にすでに存在 し てい る
場合に対 し て一般に有用です。
PVF の基本 コ ン セプ ト は、 仮想の読み取 り 専用フ ァ イ ルに名前を付けて、 それを通常
の フ ァ イ ル名 と ま っ た く 同 じ よ う に、あ ら ゆ る API 関数で使用で き る よ う にす る と い う も
のです。 UPR の設定フ ァ イ ルで も 使用す る こ と がで き ます。 仮想フ ァ イ ル名は、 ク ラ イ ア
ン ト が任意に名づけ る こ と がで き ます。 も ち ろん、 仮想フ ァ イ ル名は、 通常のデ ィ ス ク の
フ ァ イ ル と 名前衝突が起 こ ら ない よ う な も のに し なければな り ません。 そのため、 以下の
よ う な体系的な命名規則を推奨 し ます (filename は、 ク ラ イ ア ン ト が名づけ る 部分で、 各
カ テ ゴ リ 内で一意な名前です) 。 ま た、 フ ァ イ ル名の拡張子について も 、 標準に従 う こ と
を推奨 し ます。
> ラ ス タ 画像フ ァ イ ル : /pvf/image/filename
> フ ォ ン ト のア ウ ト ラ イ ンや メ ト リ ッ ク の フ ァ イ ル (実際の フ ォ ン ト 名を フ ァ イ ル名の
先頭部分 と し て用い る こ と を推奨) : /pvf/font/filename
> ICC プ ロ フ ァ イ ル : /pvf/iccprofile/filename
> エン コ ーデ ィ ン グ と コ ー ド ページ : /pvf/codepage/filename
> PDF 文書 : /pvf/pdf/filename
3.1 PDFlib プ ロ グ ラ ミ ングの一般的特徴
53
フ ァ イ ル名を指定 さ れて捜す時、 PDFlib は まず、 その指定 さ れた フ ァ イ ル名が既知の仮想
フ ァ イ ルのなかにあ る か ど う かを調べます。 その後に、 指定 さ れた フ ァ イ ルをデ ィ ス ク 上
で開 こ う と し ます。
仮想 フ ァ イルの継続期間 仮想フ ァ イ ルでデー タ が提供 さ れた と き には、 それをす ぐ に
消費す る 関数 も あ る で し ょ う し 、 その フ ァ イ ルの一部分だけ を まず読んで、 残 り の部分は
後の時点で使 う と い う 関数 も あ る で し ょ う 。 そのため、 各仮想フ ァ イ ルの継続期間につい
ては細心の注意を払 う 必要があ り ます。 PDFlib は、 それぞれの仮想フ ァ イ ルに内部 ロ ッ ク
を かけてお き 、 その内容が も う 必要な く な っ た時には じ めて ロ ッ ク を外 し ます。 そのデー
タ を ただちに コ ピー し てお く よ う ク ラ イ ア ン ト が PDFlib に要求 し た場合 (create_pvf( ) で
copy オプシ ョ ン を指定) を除いては、 仮想フ ァ イ ルの内容を ク ラ イ ア ン ト が変更 ・ 削除 ・
解放す る こ と が許 さ れ る のは、PDFlibが ロ ッ ク が外 し た後に限 ら れます。PDFlibは、delete( )
が実行 さ れた と き には、 自動的にすべての仮想フ ァ イ ルを削除 し ます。 し か し 、 フ ァ イ ル
の実際の内容 (仮想フ ァ イ ルの元デー タ ) はつねに ク ラ イ ア ン ト が解放 し なければいけ ま
せん。
さ ま ざ ま な手法 PVF では、 仮想フ ァ イ ルのための必要 メ モ リ の管理手法は複数あ り え
ます。 ど の手法で も 考慮の対処 と す る べ き こ と は、 PDFlib は、 仮想フ ァ イ ル名を用いた
API 呼び出 し が終わっ た後で も ま だその仮想フ ァ イ ルの内容へのア ク セ ス を必要 と す る か
も し れない と い う こ と と 、close( ) の後であれば も う ア ク セ ス を必要 と す る こ と は全 く ない
と い う こ と です。 留意す る 必要があ る のは、 delete_pvf( ) を呼んで も 実際の フ ァ イ ルの内
容が解放 さ れ る わけではな く (copy オプシ ョ ン を指定 し た場合は例外)、 その PVF フ ァ イ
ル名を管理 し ていたデー タ 構造が解放 さ れ る だけだ と い う こ と です。 よ っ て、 以下の よ う
な方式があ り ます。
> メ モ リ 使用を最小にす る 手法 : API 呼び出 し で仮想フ ァ イ ル名を用いた ら 、 その直後に
delete_pvf( ) を呼ぶのが よ いで し ょ う 。 そ し て、 close( ) の後に ま た delete_pvf( ) を呼ぶ
こ と を推奨 し ます。 こ の 2 度目の呼び出 し が ど う し て必要か と い う と 、 最初の呼び出
し の時点では ま だ PDFlib か ら デー タ へア ク セ ス が必要だっ たか も し れず、 その よ う な
場合はその時点では仮想 フ ァ イ ルの ロ ッ ク 解除が拒否 さ れて し ま っ てい る ためです。
し か し 、 最初の呼び出 し ですでにデー タ が解放で き てい る 場合 も あ る わけで、 その よ
う な場合で も 2 度目の呼び出 し は何 も 害にはな り ません。 ク ラ イ ア ン ト が フ ァ イ ルの
内容を解放で き る のは delete_pvf( ) が成功 し た時だけなのです。
> 仮想フ ァ イ ルを再利用 し て速度を向上 さ せ る 手法: ク ラ イ ア ン ト に よ っ ては、同 じ デー
タ (た と えばフ ォ ン ト 定義) を複数の出力文書に対 し て使い ま わ し たい こ と も あ る で
し ょ う 。 その よ う な場合には、 同 じ フ ァ イ ル内容に対 し て何度 も 作成 ・ 削除を繰 り 返
すのは賢明ではあ り ません。 その仮想フ ァ イ ルを使っ てほかに も ま だ PDF 出力文書を
生成 し たい う ちは、 delete_pvf( ) は呼び出 さ ないでお く のが よ いで し ょ う 。
> 手抜 き プ ロ グ ラ ミ ン グ: メ モ リ 使用量が気にな ら なければ、ク ラ イ ア ン ト がdelete_pvf( )
を全然呼ばない よ う に し て も か ま い ません。 こ の場合 PDFlib は、 delete( ) が呼ばれた
時点で、 すべての開かれた ま ま の仮想フ ァ イ ルを内部的に削除 し ます。
ど の場合で も 、 ク ラ イ ア ン ト がそれぞれのデー タ を解放で き る のは、 delete_pvf( ) が成功
裏に帰っ て き た時か、 delete( ) の後だけです。
PDF 出力 を仮想 フ ァ イ ルに生成 PVF は、ユーザーデー タ を PDFlib に与え る だけでな く 、
PDFlib が生成 し た PDF 文書デー タ を保持す る こ と も で き ます。 こ れは、begin_document( )
に createpvf オプシ ョ ン を与え る こ と に よ っ て実現で き ます。その PVF フ ァ イ ル名は以後、
別の PDFlib API 関数に与え る こ と がで き ます。 こ れはた と えば、 PDF 文書を PDF ポー ト
フ ォ リ オへ入れ込むために生成す る と き に有用です。 PDFlib が生成 し た PVF デー タ を直
54
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
接取得す る こ と はで き ませんので、 メ モ リ か ら PDF デー タ を取 り 出すには、 能動 イ ン コ
ア PDF 生成を用い ます (59 ページ 「3.1.4 PDF 文書を メ モ リ 内に生成」 参照)。
3.1.3 リ ソ ース設定 と フ ァ イル検索
高度な応用アプ リ ケーシ ョ ンでは、PDFlib に さ ま ざ ま な リ ソ ース を利用 さ せ る 必要があ り
ます。 た と えばフ ォ ン ト フ ァ イ ル ・ エン コ ーデ ィ ン グ定義 ・ ICC カ ラ ープ ロ フ ァ イ ルな ど
です。 PDFlib の リ ソ ース管理を、 プ ラ ッ ト フ ォームに依存 し ない、 カ ス タ マ イ ズの容易な
も のにす る ためには、 設定フ ァ イ ルを作成 し てお く こ と がで き ます。 設定フ ァ イ ルの中に
は、利用可能な さ ま ざ ま な リ ソ ース と それぞれのデ ィ ス ク フ ァ イ ル名を記述 し てお く ので
す。 こ の よ う な静的な設定フ ァ イ ルだけではな く て、 set_parameter( ) に よ る リ ソ ー ス の
追加を用いた動的な実行時設定 を行 う こ と も 可能です。 設定フ ァ イ ルに関 し ては、 Unix
PostScript Resource (UPR) と い う 簡単なテ キ ス ト 形式を採用 し ま し た。 こ の形式は、Display
PostScript の時代に生み出 さ れた も ので、 今で も い く つかのシ ス テ ム で使われてい ま す。
ただ し 元の UPR 形式を多少拡張 し ま し た。 こ の、 PDFlib で用い る 形の UPR フ ァ イ ル形式
については後述 し ます。 makepsres と い う ユーテ ィ リ テ ィ も あ り ま す (X Window System
の一部 と し て頒布 さ れ る こ と が多い)。 こ のユーテ ィ リ テ ィ を使 う と 、 PostScript フ ォ ン ト
フ ァ イ ル と メ ト リ ッ ク フ ァ イ ルか ら 自動的に UPR フ ァ イ ルを生成 さ せ る こ と がで き ます。
リ ソ ースの カ テ ゴ リ PDFlib の対応 し てい る リ ソ ース カ テ ゴ リ を表 3.2 に挙げます。こ れ
以外の リ ソ ース カ テ ゴ リ は無視 さ れます。 その値は名前文字列 と し て扱われます。 すなわ
ち、 ASCII か UTF-8 (BOM つ き ) でエン コ ーデ ィ ン グする こ と がで き ます。 Unicode 値は、
HostFont リ ソ ース で各国語の フ ォ ン ト 名を指定す る のに有用で し ょ う 。
表 3.2 PDFlib で使え る リ ソ ース カ テ ゴ リ
カテゴ リ
形式
説明
SearchPath
値
デー タ フ ァ イルのあるデ ィ レ ク ト リ の相対または絶対パス名
CMap
キー = 値
日中韓エ ン コ ーデ ィ ン グのための CMap フ ァ イル
FontAFM
キー = 値
AFM 形式の PostScript フ ォ ン ト メ ト リ ッ ク フ ァ イル
FontPFM
キー = 値
PFM 形式の PostScript フ ォ ン ト メ ト リ ッ ク フ ァ イル
FontOutline
キー = 値
PostScript か TrueType か OpenType の フ ォ ン ト アウ ト ラ イ ン フ ァ イル
Encoding
キー = 値
8 ビ ッ ト エ ン コ ーデ ィ ン グま たは コ ー ド ページのテーブルを持っ た テ
キス ト フ ァ イル
HostFont
キー = 値
シ ス テムに イ ン ス ト ール さ れている フ ォ ン ト の名前
ICCProfile
キー = 値
ICC カ ラ ープ ロ フ ァ イル名
StandardOutputIntent
キー = 値
PDF/X の標準出力条件名 (PDFlib 内蔵のも のに加えて、 完全な一覧
は PDFlib API リ フ ァ レ ン ス を参照)
リ ソ ース の記述を重複 さ せてはいけ ません。 た と えば、 1 つの フ ォ ン ト の メ ト リ ッ ク デー
タ を複数記述 し てはいけ ま せん。 ま た、 UPR フ ァ イ ルで設定す る フ ォ ン ト 名は、 実際の
フ ォ ン ト 名 と 同 じ に し ておかない と 混乱が生 じ る で し ょ う 。 ( こ の制約を PDFlib は強制 し
ませんが)。
UPR フ ァ イル形式 UPR フ ァ イ ルはテ キ ス ト フ ァ イ ルであ り 、 その構造は非常に単純で、
テ キ ス ト エデ ィ タ で簡単に書 く こ と がで き ま す し 、 自動生成 さ せ る こ と も で き ま す。 ま
ず、 その文法を見てみま し ょ う 。
3.1 PDFlib プ ロ グ ラ ミ ングの一般的特徴
55
> それぞれの行は最大 255 キ ャ ラ ク タ ま で。
> バ ッ ク ス ラ ッ シ ュ 「\」 は ラ イ ン フ ィ ー ド キ ャ ラ ク タ をエ ス ケープ し ます。 こ れは行を
延長 し たい と き に使え ます。 バ ッ ク ス ラ ッ シ ュ を 2 個使えば、 バ ッ ク ス ラ ッ シ ュ キ ャ
ラ ク タ を 1 個生成で き ます。
> ピ リ オ ド 「.」 を単独で用い る と 、 セ ク シ ョ ンの終了を意味 し ます。
> すべての記述において、 大文字 ・ 小文字が区別 さ れます。
> 注釈行はパーセ ン ト キ ャ ラ ク タ 「%」 で始め る こ と がで き 、 行末で終了 し ます。 直前に
バ ッ ク ス ラ ッ シ ュ を置けば、 注釈の開始でな く パーセ ン ト キ ャ ラ ク タ を生成で き ます。
> スペースは、 リ ソ ース名中 と フ ァ イ ル名中をのぞ く あ ら ゆ る 箇所で無視 さ れます。
UPR フ ァ イ ルは以下の部分か ら 成っ てい ます。
> フ ァ イ ルの種類を示すおま じ ない行。 次の形を と り ます。
PS-Resources-1.0
> フ ァ イ ル中で記述 さ れ る すべての リ ソ ース カ テ ゴ リ を一覧に し たセ ク シ ョ ン。 省略可
能です。 各行に 1 つずつ リ ソ ース カ テ ゴ リ を記述 し ます。 こ の一覧は、 ピ リ オ ド 1 個
だけの行に よ っ て終了 し ます。 利用可能な リ ソ ース カ テ ゴ リ については後述 し ます。
こ の省略可能なセ ク シ ョ ンが存在 し ない場合であ っ て も 、1 個の ピ リ オ ド キ ャ ラ ク タ は
存在す る 必要があ り ます。
> フ ァ イ ルのは じ めに挙げ ら れた リ ソ ース カ テ ゴ リ それぞれについてセ ク シ ョ ンが 1 つ
ずつ。 各セ ク シ ョ ンは、 リ ソ ース カ テ ゴ リ を示す 1 行で始ま り 、 その後に、 利用可能
な リ ソ ース を記述す る 行が任意の行数つづ き ます。 こ の一覧は、 ピ リ オ ド 1 個だけの
行に よ っ て終了 し ます。 各 リ ソ ースデー タ 行には リ ソ ース の名前を書 き ます (等号は
ク ォー ト す る 必要があ り ます)。 その リ ソ ース がフ ァ イ ル名を必要 と する 場合には、 等
号の後に こ の名前を付け加え る 必要があ り ます。 リ ソ ース記述に挙げ ら れた フ ァ イ ル
を PDFlib が さ がす時には SearchPath (以下を参照) が適用 さ れます。
フ ァ イル検索 と SearchPath リ ソ ース カ テ ゴ リ PDFlib は さ ま ざ ま なデー タ ア イ テ ム を
デ ィ ス ク 上の フ ァ イ ルか ら 読み込みます。 た と えば ラ ス タ 画像 ・ フ ォ ン ト ア ウ ト ラ イ ン ・
フ ォ ン ト メ ト リ ッ ク 情報 ・ エン コ ーデ ィ ン グ定義 ・ PDF 文書 ・ ICC カ ラ ープ ロ フ ァ イ ルな
ど です。 相対パス名で も 絶対パス名で も ない、 パ ス指定を ま っ た く つけない フ ァ イ ル名を
用い る こ と も で き ます。 SearchPath リ ソ ース カ テ ゴ リ を使 う と 、 必要なデー タ フ ァ イ ルの
あ る デ ィ レ ク ト リ のパ ス名の一覧を指定す る こ と がで き ます。何か フ ァ イ ルを開かなけれ
ばな ら ない と き 、 PDFlib は、 まずその ま ま の フ ァ イ ル名で フ ァ イ ルを開 こ う と し ます。 こ
の試みが失敗す る と 、 PDFlib は、 SearchPath リ ソ ース カ テ ゴ リ で指定 さ れたデ ィ レ ク ト リ
群の中でその フ ァ イ ルが開けないか ど う か、 成功す る ま で一つ一つ試 し ます。 SearchPath
は複数指定す る こ と がで き 、 逆順に検索 さ れます (後の時点で設定 さ れたパ ス ほ ど、 も っ
と 早 く に設定 さ れた も の よ り も 先に検索 さ れ る )。こ の機能を使 う と 、PDFlib のアプ リ ケー
シ ョ ン を、 プ ラ ッ ト フ ォーム依存な フ ァ イ ルシ ス テ ム体系か ら 解 き 放つ こ と がで き ます。
検索パ ス項目は下記の よ う に設定で き ます。
p.set_parameter("SearchPath", "/パス/パス/ディレクトリ1");
p.set_parameter("SearchPath", "/パス/パス/ディレクトリ2");
こ の検索を無効にす る には、 フルパ ス に よ る 指定を PDFlib 関数の中に書 き ま す。 なお、
SearchPath リ ソ ー ス カ テ ゴ リ の機能は以下の よ う にプ ラ ッ ト フ ォ ーム依存にな っ てい ま
す。
> Windows の場合、PDFlib はレ ジ ス ト リ 項目か ら 読み取っ た記述で SearchPath リ ソ ース カ
テ ゴ リ を初期化 し ます。 下記の レ ジ ス ト リ 項目にパ ス名の リ ス ト を セ ミ コ ロ ン 「;」 で
区切っ て指定す る こ と が可能です。 こ れ ら は下記の順序で検索 さ れます。
56
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
HKLM\Software\PDFlib\PDFlib8\8.0.1\SearchPath
HKLM\Software\PDFlib\PDFlib8\SearchPath
HKLM\Software\PDFlib\SearchPath
> COM エデ ィ シ ョ ン・.NET エデ ィ シ ョ ンの イ ン ス ト ー ラ は こ の SearchPath レ ジ ス ト リ 項
目を次のデ ィ レ ク ト リ で初期化 し ます (PDFlib を別の場所に イ ン ス ト ール し た場合に
は同様のデ ィ レ ク ト リ )。
C:\Program Files\PDFlib\PDFlib 8.0.1\resource
サン プル UPR フ ァ イル
UPR 設定フ ァ イ ルの作成例を以下に挙げます。
PS-Resources-1.0
.
SearchPath
/usr/local/lib/fonts
C:/psfonts/pfm
C:/psfonts
/users/kurt/my_images
.
FontAFM
Code-128=Code_128.afm
.
FontPFM
Corporate-Bold=corpb___.pfm
Mistral=c:/psfonts/pfm/mist____.pfm
.
FontOutline
Code-128=Code_128.pfa
ArialMT=Arial.ttf
.
HostFont
Wingdings=Wingdings
.
Encoding
myencoding=myencoding.enc
.
ICCProfile
highspeedprinter=cmykhighspeed.icc
.
UPR リ ソ ース フ ァ イルの検索 組み込み リ ソ ース (た と えば PDF コ ア フ ォ ン ト ・ 組み込
みエン コ ーデ ィ ン グ ・ sRGB ICC プ ロ フ ァ イ ル) やシ ス テ ム リ ソ ース (た と えばホ ス ト フ ォ
ン ト ) だけが使われ る 場合には、 UPR 設定フ ァ イ ルは必要 と は さ れません。 なぜな ら 、 と
り た てて設定がな く て も 、 必要な リ ソ ース をすべて PDFlib が見つけ ら れ る か ら です。
そ れ 以 外 の リ ソ ー ス を 使 い た い 場 合 は、 そ の リ ソ ー ス を 指 定 す る た め に、 set_
parameter( ) (後述) を呼び出すか、 UPR リ ソ ース フ ァ イ ルに記述 し ます。 こ の フ ァ イ ル
を、 PDFlib は、 最初の リ ソ ース が要求 さ れた時に自動的に読み込みます。 その過程は詳 し
く は下記の と お り です :
> 環境変数 PDFLIBRESOURCE が定義 さ れていれば、その値を PDFlib は、読み込むべき UPR
フ ァ イ ルの名前 と し ます。 こ の フ ァ イ ルが読み込めない と き は例外が発生 し ます。
> 環境変数 PDFLIBRESOURCE が定義 さ れていない場合、PDFlib は下記の名前の フ ァ イ ルを
開 こ う と し ます :
pdflib.upr
3.1 PDFlib プ ロ グ ラ ミ ングの一般的特徴
57
こ の フ ァ イ ルが読み込めない と き は例外は発生 し ません。
> Windows では上記以外に PDFlib は下記の レ ジ ス ト リ 項目を読み込 も う と し ます。下記の
順に検索 さ れます :
HKLM\Software\PDFlib\PDFlib8\8.0.1\resourcefile
HKLM\Software\PDFlib\PDFlib8\resourcefile
HKLM\Software\PDFlib\resourcefile
そ し て こ れ ら の項目の値を、 用い る べ き リ ソ ー ス フ ァ イ ルの名前 と し ます。 こ の フ ァ
イ ルが読み込めない と き は例外が発生 し ます。
64 ビ ッ ト Windows シ ス テ ム上で レ ジ ス ト リ を手作業で扱 う 際の注意点 : 通常どお り 、
64 ビ ッ ト の PDFlib バ イ ナ リ は Windows レ ジ ス ト リ の 64 ビ ッ ト ビ ュ ー と と も に動作 し 、
64 ビ ッ ト シ ス テ ム上で動作す る 32 ビ ッ ト の PDFlib バ イ ナ リ は レ ジ ス ト リ の 32 ビ ッ ト
ビ ュ ー と と も に動作 し ます。 32 ビ ッ ト 製品に対す る レ ジ ス ト リ キーを手作業で追加す
る 必要があ る と き は、 必ず 32 ビ ッ ト 版の regedit ツールを使用 し て く だ さ い。 こ れは
「ス タ ー ト 」 → 「フ ァ イル名を指定 し て実行 ...」 のダ イ ア ロ グか ら 下記に よ っ て起動す
る こ と がで き ます :
%systemroot%\syswow64\regedit
注 64 ビ ッ ト Windows シ ス テム上で レ ジ ス ト リ を手作業で扱 う 際の注意点 : 通常どお り 、 64
ビ ッ ト の PDFlib バイ ナ リ は Windows レ ジス ト リ の 64 ビ ッ ト ビ ュ ー と と も に動作 し 、 64
ビ ッ ト シ ス テム上で動作する 32 ビ ッ ト の PDFlib バイ ナ リ はレ ジ ス ト リ の 32 ビ ッ ト ビ ュ ー
と と も に動作 し ます。 32 ビ ッ ト 製品に対する レ ジ ス ト リ キーを手作業で追加する必要が
ある と きは、 必ず 32 ビ ッ ト 版の regedit ツールを使用 し て く だ さ い。 これは 「ス タ ー ト 」
→ 「フ ァ イル名を指定 し て実行 ...」 のダ イ ア ログか ら下記によ っ て起動する こ と がで き ま
す:
> ク ラ イ ア ン ト 側で resourcefile パ ラ メ タ を明示的に設定す る こ と で リ ソ ース フ ァ イ ルを
PDFlib に実行時に読み込ませ る こ と も で き ます。 次の よ う に記述 し ます。
p.set_parameter("resourcefile", "/パス/パス/pdflib.upr");
こ の呼び出 し は任意の回数繰 り 返す こ と がで き ます。 その場合、 リ ソ ース記述が蓄積
さ れてい き ます。
リ ソ ース を実行時に設定 UPR フ ァ イ ルを使っ た設定だけではな く 、 ソ ース コ ー ド 中で
set_parameter( ) 関数を使っ て直接個々の リ ソ ース を設定す る こ と も で き ます。 こ の関数
はカ テ ゴ リ 名 と それに対す る リ ソ ー ス記述を と り ます。 リ ソ ース記述の部分は、 UPR リ
ソ ース フ ァ イ ルで こ のカ テ ゴ リ のセ ク シ ョ ンに書 く の と 同 じ よ う に書き ます。た と えば次
の よ う にな り ます。
p.set_parameter("FontAFM", "Foobar-Bold=foobb___.afm");
p.set_parameter("FontOutline", "Foobar-Bold=foobb___.pfa");
注 フ ォ ン ト 設定の詳 し い説明は 116 ページ 「5.4.3 フ ォ ン ト を検索」 を参照 し て く だ さ い。
リ ソ ース値の取得 リ ソ ース項目は設定す る だけでな く 、 get_parameter( ) を使っ て取得
す る こ と も で き ます。 カ テ ゴ リ 名を キー と し て、 リ ス ト 内の番号を修飾子 と し て指定 し ま
す。 た と えば下記の呼び出 し
s = p.get_parameter("SearchPath", n);
58
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
は、 SearchPath リ ス ト 内の n 番目の項目を取得 し ます。 要求 さ れた カ テ ゴ リ に対 し て利用
可能な項目の数 よ り も n が大 き い と き は、 空文字列が返 さ れます。 返 さ れた文字列は、 何
ら かの API 関数が次に呼び出 さ れ る ま で有効です。
3.1.4 PDF 文書を メ モ リ 内に生成
フ ァ イ ル上に PDF 文書を生成す る だけではな く 、 PDFlib を使っ て メ モ リ 内に直接 PDF を
生成 さ せ る こ と も で き ます ( イ ン コ ア生成 と いい ます) 。 こ の技法は、 何 ら デ ィ ス ク ベー
ス の入出力が伴わ な い た めに速度の面で利点が あ り ま す し 、 PDF 文書 を た と えば直接
HTTP で流 し た り す る こ と も で き ます。 Web 管理者が聞いて特に喜びそ う なのは、 自分の
サーバにテ ン ポ ラ リ PDF フ ァ イ ルを散 ら か さ れずに済む と い う こ と で し ょ う 。
生成 さ れ る デー タ は、 定期的に少 し ずつ集め る こ と も で き ます し (た と えば各ページ
がで き る ご と に)、 最後に ま る ご と PDF 文書にな っ てか ら ひ と かた ま り で取 り 出す こ と も
で き ます (end_document( ) の後で)。 PDF デー タ の細切れでの生成お よ び消費にはい く つ
かの利点があ り ます。 第一に、 デー タ 全体が メ モ リ 内に収ま る 必要がないので、 メ モ リ 必
要量が小 さ く て済みます。 第二に、 こ の方式では速度 も 上が る 可能性があ り ます。 なぜな
ら 、 遅い接続でデー タ を伝送 し てい る 場合で も 、 最初の一切れを送 り 出 し てい る 間に、 次
の一切れが も う 生成中だか ら です。 ただ し 、 生成 さ れ る デー タ の総量は文書全体がで き あ
が る ま でわか り ません。
createpvf オプシ ョ ン を用い る と 、PDF デー タ をデ ィ ス ク フ ァ イ ルへ書 き 込む こ と な く 、
メ モ リ 内へ生成 し 、 その後それを PDFlib に渡す こ と がで き ます (54 ページ 「PDF 出力を
仮想フ ァ イ ルに生成」 参照)。
能動 イ ン コ ア PDF 生成 イ ン タ フ ェ ース PDF デー タ を メ モ リ 内に生成する には、 begin_
document( ) で空の フ ァ イ ル名を指定 し 、 get_buffer( ) でデー タ を取 り 出 し ます。
p.begin_document("", "");
...文書を作成...
p.end_document("");
buf = p.get_buffer();
... バッファ内のPDFデータを利用 ...
p.delete();
注 バ ッ フ ァ 内の PDF デー タ はバイ ナ リ デー タ と し て扱 う 必要があ り ます。
3.1.5 大容量 PDF 文書
多 く のユーザーはギガバ イ ト 単位の PDF 文書を扱 う 必要には迫 ら れないで し ょ う が、 業
務アプ リ ケーシ ョ ンのなかには、大量の請求書や明細な ど を含む文書を作成 し た り 処理 し
た り す る 必要があ る も のがあ り ます。PDFlib 自体は生成す る 文書のサ イ ズにいかな る 制約
も 設けてい ませんが、 PDF Reference やい く つかの PDF 規格に よ っ て課せ ら れ る い く つか
の制限があ り ます :
> 2 GB フ ァ イ ルサ イ ズ制限:PDF/A-1 規格では、フ ァ イ ルサ イ ズ を 2 GB ま でに制限 し て
い ます。 一文書が こ の制限 よ り も 大 き く な る と き は、 PDFlib は PDF/A-1 ・ PDF/X-4 ・
PDF/X-5 モー ド では例外を発生 さ せます。 それ以外の場合であれば 2 GB を超え る 文
書を作成で き ます。
> 10 GB フ ァ イ ルサ イ ズ制限:PDF 文書は伝統的に、相互参照テーブルに よ っ て内部的に、
10 進 10 桁すなわち 1010-1 バ イ ト ま でに制限 さ れて き ま し た。 こ れはお よ そ 9.3 GB に
あ た り ます。 し か し 、 圧縮オブジ ェ ク ト ス ト リ ーム を用いれば こ の制約は超え る こ と
がで き ます。 10 GB を超え る 出力文書を作成 し よ う と す る と き は、 begin_document( )
3.1 PDFlib プ ロ グ ラ ミ ングの一般的特徴
59
で objectstreams={other} オプシ ョ ン を設定する 必要があ り ます。 こ れには PDF 1.5 以
上が必要です。 圧縮オブジ ェ ク ト ス ト リ ームはいずれにせ よ フ ァ イ ル全体のサ イ ズ を
低減 さ せますが、 objectstreams 実装の一部であ る 圧縮相互参照ス ト リ ームは も はや 10
進 10 桁の制限下には置かれず、 し たがっ て 10 GB を超え る PDF 文書の作成を可能に
し ます。
> オブジ ェ ク ト の数 : 一文書内のオブジ ェ ク ト の数は全般的には PDF に よ っ て制限 さ れ
てい ませんが、 PDF/A-1 ・ PDF/X-4 ・ PDF/X-5 規格では、 一文書内の間接オブジ ェ ク
ト の数を 8,388,607 個に制限 し てい ます。一文書が こ の制限を超え る オブジ ェ ク ト を必
要 と す る と き は、 PDFlib は PDF/A-1 ・ PDF/X-4 ・ PDF/X-5 モー ド では例外を発生 さ せ
ます。 それ以外の場合であれば も っ と オブジ ェ ク ト の多い文書を作成で き ます。 生成
さ れたオブジ ェ ク ト の数は PDFlib で直接取得す る こ と はで き ませんが、 ク ラ イ ア ン ト
アプ リ ケーシ ョ ンは画像ハン ド ルを再利用 し 、 画像を ページ ス コ ープの外で読み込む
こ と に よ っ て、 い く ら かオブジ ェ ク ト を減 ら す こ と が可能です。 PDF 内のオブジ ェ ク
ト の数は、 ページ内容の複雑 さ や、 相互参照要素の数な ど に依存 し ます。 シ ン プルな
内容の大容量文書は通常ページ あ た り 4 ∼ 10 個のオブジ ェ ク ト を持ち ますので、 100
∼ 200 万ページ程度の文書であれば こ のオブジ ェ ク ト 制限を超えずに作成す る こ と が
で き ます。
3.1.6 PDFlib を EBCDIC ベースのプ ラ ッ ト フ ォ ームで利用
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
60
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
3.2 ページ記述
3.2.1 座標系
PDF のデフ ォ ル ト 座標系が PDFlib の内部では用い ら れてい ます。 デフ ォ ル ト 座標系 (デ
フ ォ ル ト ユーザースペース と も い う ) では、 ページの左下隅に原点があ り 、 DTP ポ イ ン ト
を単位 と し て用いてい ます。
1 pt = 1/72 inch = 25.4/72 mm = 0.3528 mm
1 番目の座標は右へ向か っ て増加 し 、 2 番目の座標は上へ向か っ て増加 し ます。 PDFlib の
ク ラ イ ア ン ト プ ロ グ ラ ム では、 こ のデ フ ォ ル ト ユーザー ス ペー ス を回転 ・ 拡縮 ・ 並行移
動 ・ 斜形化 さ せ る こ と に よ っ て、 新 し いユーザー座標を作る こ と も で き ます。 こ う し た変
形に対応す る 関数はそれぞれ rotate( ) ・ scale( ) ・ translate( ) ・ skew( ) です。 座標系を変更 し
た場合、 グ ラ フ ィ ッ ク ・ テ キ ス ト 関数の中の座標はすべて新 し い座標系に従っ て指定 し な
ければな り ません。 座標系は、 各ページの最初でデフ ォ ル ト 座標系に再設定 さ れます。
メ ー ト ル座標の利用 メ ー ト ル座標を利用 し たい場合は簡単で、 座標系を拡大すれば利
用で き ます。 拡大率は、 上記の DTP ポ イ ン ト の定義 よ り 導かれます。
p.scale(28.3465, 28.3465);
こ の呼び出 し の後は、 PDFlib はすべての座標を セ ンチ メ ー ト ル単位 と し て解釈 し ます ( イ
ン タ ラ ク テ ィ ブ機能については例外、 後述)。 こ れは 72 ÷ 2.54 = 28.3465 だか ら です。
あ る いは、 begin/end_page_ext( ) で userunit オプシ ョ ン を指定 し て (PDF 1.6) ページ
全体に対す る 拡縮倍率を与え る こ と も で き ます。 ただ し ユーザー座標は、 Acrobat での最
終的なページ表示に対 し てのみ効力を持つ も のであ り 、PDFlib で座標の拡縮を行 う も ので
はあ り ません。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの general/metric_topdown_coordinates ト ピ ッ ク に
あ り ます。
イ ン タ ラ ク テ ィ ブ要素の座標 イ ン タ ラ ク テ ィ ブ関数には、作成 し たいテ キ ス ト 注釈・ リ
ン ク ・ フ ァ イ ル注釈の矩形の座標を与え る 必要があ り ます。 PDF では、 ハ イ パーテ キ ス ト
の関数のための座標はつねにデ フ ォ ル ト 座標系で記述 さ れてい る と 見な さ れ ま す。 ユー
ザー座標系 (変形 さ れてい る か も し れない) で記述 さ れてい る と 見な さ れ る こ と はあ り ま
せん。 こ れは非常にやっ かいですので、 PDFlib には、 ユーザー座標が指定 さ れて も それを
PDF が認め る 形式に自動変換す る 機能があ り ます。 こ の自動変換を有効にす る には、 次の
よ う に、 usercoordinates パ ラ メ タ を true に設定 し ます。
p.set_parameter("usercoordinates", "true");
リ ン ク ・ フ ィ ール ド の矩形 と し ては、 その縁がページの縁に平行な も のに し か PDF では
対応 し ていないので、 拡縮 ・ 回転 ・ 並行移動 ・ 斜形化に よ っ て座標系が変形 し てい る と き
には与え ら れた矩形は形を調整 し なければな り ません。 こ の よ う な場合、 PDFlib では、 そ
の四角形を含み、 かつ縁がページの縁 と 平行な最小の矩形を計算 し ます。 そ し て こ れをデ
フ ォ ル ト 座標に変換 し 、 その結果の値を、 与え ら れた座標のかわ り に用い ます。
要す る に大局的に言っ て ど んな効果があ る か と いえば、usercoordinates パ ラ メ タ が true
に設定 さ れていれば、ページ内容に対 し て も イ ン タ ラ ク テ ィ ブ要素に対 し て も 同 じ 座標系
が使え る と い う こ と です。
3.2 ページ記述
61
座標の図示 PDFlib のユーザーが PDF の座標系を扱 う のを支援する ために、PDFlib のデ ィ
ス ト リ ビ ュ ーシ ョ ンには grid.pdf と い う PDF フ ァ イ ルが含まれてい ます。 こ の PDF フ ァ
イ ルは、 よ く 使われ る い く つかのページサ イ ズの座標を表示す る も のです。 望みのサ イ ズ
のページ を何か透明な も のに印刷すれば、PDFlib での開発のために有用な道具にな る か も
し れません。
Acrobat (Adobe Reader でない) に も 便利な機能があ り ます。 「表示」 → 「ナビゲーシ ョ
ン タ ブ」 → 「情報」 を選択す る だけで、 計測用パレ ッ ト が表示 さ れ る のです。 ただ し こ の
座標系はページの左上隅が原点なので、PDF のデフ ォ ル ト であ る 左下隅の原点 と は異な る
ので注意が必要です。 表示単位を変更す る には、 「編集」 → 「環境設定」 (→ 「一般 ...」) →
「単位 と ガ イ ド 」 (ま たは 「単位」 ) を選択 し て、 ポ イ ン ト ・ イ ンチ ・ ミ リ ・ パ イ カ ・ セ ン
チ メ ー ト ルの う ちのいずれかを選びます。 あ る いは 「表示」 → 「ナビゲーシ ョ ン タ ブ」 →
「情報」 を選択 し て、 「オプ シ ョ ン」 メ ニ ュ ーで単位を選ぶ と い う 方法 も あ り ます。
PDF のプ リ ン ト ア ウ ト でページの縦横の長 さ が正 し く ない よ う に見え て も 惑わ さ れな
い よ う に し ま し ょ う 。 なぜ正 し く 出ないのか、 よ く あ る 原因は以下の と お り です。
> Acrobat の印刷ダ イ ア ロ グの 「ページの拡大 / 縮小 :」 オプシ ョ ンの設定が 「な し 」 以外
にな っ てい る ために、 印刷出力が拡縮 さ れてい る 。
> 非 PostScript プ リ ン タ ド ラ イ バの場合は、印刷す る も のの大 き さ が正確に再現 さ れ る と
は限 ら ない。
オ ブ ジ ェ ク ト の回転 重要な こ と は、 一度ページ上に描いた も のは変更がで き ない と い
う こ と です。 PDFlib には、 回転 ・ 並行移動 ・ 拡縮 ・ 斜形化の関数があ り ますが、 こ う し た
関数は、 すでに存在 し てい る も のに対 し ては効力を持たず、 それ以降に描かれ る も のに対
し てだけ効力があ り ます。
テ キ ス ト ・ 画像 ・ 取 り 込み PDF ページ を回転 さ せ る のは簡単で、 fit_textline( ) ・ fit_
textflow( ) ・ fit_image( ) ・ fit_pdi_page( ) で rotate オプシ ョ ン を指定 し ます。 こ う し たオブ
ジ ェ ク ト を それぞれのはめ込み枠内で 90 度の倍数だけ回転 さ せ る のは、 こ れ ら の関数の
orientate オプシ ョ ンで可能です。 下記の例は傾き 45 度のテ キ ス ト を生成 し ます。
p.fit_textline("回転テキスト", 50.0, 700.0, "rotate=45");
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/rotated_text ト ピ ッ ク にあ り ます。
ベ ク ト ルグ ラ フ ィ ッ ク の回転は、 一般の変形関数 translate( ) ・ rotate( ) を利用すれば可能
です。 下記の例は、 左下隅を (200, 100) に持つ回転矩形を作成 し ます。 描 き たい矩形の隅
へ座標原点を変更 し 、 座標系を回転 さ せて、 矩形を (0, 0) に配置 し てい ます。 以下の よ う
に save と restore では さ む こ と に よ り 、 縦置 き テ キ ス ト の作成を完了 し た後、 簡単に元の
座標系に戻っ てオブジ ェ ク ト の配置を継続で き ます。
p.save();
p.translate(200, 100);
p.rotate(45.0);
p.rect(0.0, 0.0, 75.0, 25.0);
p.stroke();
p.restore();
/* 原点を矩形の隅へ移動*/
/* 座標を回転させる */
/* 回転された矩形を描く */
下向 き座標の利用 PDF の上向 き 座標系 と は違っ て、 グ ラ フ ィ ッ ク 環境のなかには下向
き 座標を用いてい る も の も あ る ので、 そち ら を採用 し たい開発者 も い る で し ょ う 。 その よ
う な座標系は PDFlib の変換関数で簡単に設定す る こ と がで き ます。 と こ ろが、 こ の変換
はテ キ ス ト 出力に対 し て も 効力を持つので (テ キ ス ト が簡単に上下ひっ く り 返 り ます) 、
テ キ ス ト が裏返 し にな っ て し ま わない よ う にす る には、ほかに も 何 ら かの呼び出 し を行 う
こ と が必要にな り ます。
62
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
下向き 座標が簡単に利用で き る よ う にす る ため、 PDFlib では、 あ る 特殊なモー ド に対
応 し てい ます。 こ のモー ド では、 すべての関連す る 座標に対 し てそれぞれ異な る 解釈が適
用 さ れます。 こ の topdown 機能は、 PDFlib ユーザーが下向 き 座標系でご く 自然に作業が
行え る よ う にす る ために設け ら れてい ます。 具体的には、 ページの左下隅に原点 (0, 0) が
あ っ て y 座標が上向 き に増加す る デフ ォ ル ト PDF 座標系を扱 う のではな く 、 ページの左
上隅に原点があ っ て y 座標が下向 き に増加す る 修正座標系を用い ます。ページで こ の下向
き 座標系を利用す る には、 次の よ う に begin_page_ext( ) で topdown オプシ ョ ン を指定 し
ます。
p.begin_page_ext(595.0, 842.0, "topdown");
あ る いは topdown パ ラ メ タ を用い る こ と も で き ますが、 それはページ記述の中で設定 し
てはいけ ません (ページ と ページの間で設定す る 必要があ り ます) 。 説明の完全を期す る
ため、 下向 き 座標系を設定 し た場合の効果を以下に詳 し く 挙げます。
次の よ う な 「絶対座標」 は、 通常 と 何 も 変わ ら ないや り 方でユーザー座標に翻訳 さ れ
ます。
> 関数の引数の う ち、 各関数の説明の中で 「座標」 と 書かれ て い る も のすべ て。 例 :
moveto( ) の x ・ y 。 circle( ) の x ・ y 。 rect( ) の x ・ y ( し か し width ・ height は含まず!)。
add_note( ) の llx ・ lly ・ urx ・ ury。
「相対座標」 の値は、 次の よ う に、 下向 き 座標に合 う よ う 内部変換 さ れます。
> テ キ ス ト (正の文字サ イ ズ を持つ も の) は、 ページ上端に向か っ て配置 さ れます。
> マニ ュ アルの中で、 矩形や枠な ど について 「左下隅」 と 言っ てい る 場合は、 ページ上
で も そ う な る よ う に翻訳 さ れます。
> 回転角が指定 さ れてい る 場合は、 その回転の中心は依然 と し てユーザー座標系の原点
(0, 0) です。 右回 り 回転はやは り 右回 り と し て表示 さ れます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの general/metric_topdown_coordinates ト ピ ッ ク に
あ り ます。
3.2.2 ページサ イ ズ
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの pagination/page_sizes ト ピ ッ ク にあ り ます。
規格ページサ イ ズ begin/end_page_ext( ) の width ・ height オプシ ョ ンには、 絶対値か、
ま たはシ ン ボ リ ッ ク なページサ イ ズ名を指定で き ます。 後者は、 < 規格 >.width ・ < 規格
>.height の形を と り ます。 こ こ で < 規格 > は標準判型のいずれかです (小文字で。 例 :
a4.width)。
ページサ イ ズの限界 PDF や PDFlib では、 利用で き る ページサ イ ズについてはいかな る
制約 も 課 し てい ませんが、 Acrobat の実装のほ う で、 ページサ イ ズに関す る プ ロ グ ラ ム的
な限界が存在 し て し ま っ てい ます。 こ の こ と か ら 留意すべ き なのは、 他の PDF イ ン タ プ
リ タ では も っ と 大 き なサ イ ズや も っ と 小 さ なサ イ ズの文書を扱 う こ と がで き た と し て も 、
何 も 怪 し むに足 ら ない と い う こ と です。 Acrobat のページサ イ ズ制限を表 3.3 に示 し ます。
PDF 1.6 以上では、 begin/end_page_ext( ) で userunit オプシ ョ ン を用いて、 ページに対す
る グ ロ ーバルな拡縮倍率を指定す る こ と も で き ます。
表 3.3 Acrobat の最小 ・ 最大ページサイ ズ
PDF 表示ソ フ ト
最小ページサイ ズ
最大ページサイ ズ
Acrobat 4 以上
1/24" = 3 pt = 0.106 cm
200" = 14400 pt = 508 cm
3.2 ページ記述
63
表 3.3 Acrobat の最小 ・ 最大ページサイ ズ
PDF 表示 ソ フ ト
最小ページサイ ズ
最大ページサイ ズ
Acrobat 7 以上で userunit
オプ シ ョ ン を指定
3 ユーザー単位
14 400 ユーザー単位
userunit の最大値は 75 000 なので、 可能なページサイ
ズは最大 14 400 × 75 000 = 1 080 000 000 ポ イ ン ト =
381 km
さ ま ざ ま なページサ イ ズボ ッ ク ス PDFlib の開発者の多 く は、 ページの幅 と 高 さ を指定
す る だけで済みますが、 なかには高度な アプ リ ケーシ ョ ンで ( と り わけプ リ プ レ ス業務で
は)、それ以外の PDF のボ ッ ク ス項目を記述 し たい と き も あ る で し ょ う 。PDFlib では、PDF
のすべてのボ ッ ク ス項目に対応 し てい ます。PDFlib の ク ラ イ ア ン ト で指定で き る 項目を以
下に挙げます (それぞれの定義は PDF リ フ ァ レ ン ス よ り )。 こ う し た項目はあ る 種の環境
で有用です。
> MediaBox: ページの幅 と 高 さ を指定す る ために用い ら れ、通常私達がページサ イ ズ と し
て と ら えてい る も のを記述 し ます。
> CropBox: ページの内容が切 り 抜かれ る 領域。Acrobat は こ のサ イ ズ を画面表示 と 印刷の
際に利用 し ます。
> TrimBox: 完成ページの領域を指定 (裁ち切 り 後の)。
> ArtBox: ページ上で意味のあ る 内容が占め る 領域。 こ れがアプ リ ケーシ ョ ン ソ フ ト ウ ェ
アで利用 さ れ る こ と は稀。
> BleedBox: 印刷所環境で出力 さ れ る と き にページの内容が切 り 抜かれ る 領域。印刷所工
程での裁ち切 り の不正確 さ を考えに入れて少 し ゆ と り を持たせて囲んで も よ い。
PDFlib では、 上記の ど の値 も 利用す る こ と はな く 、 ただ出力フ ァ イ ルに記録す る 機能を持
つだけです。 デフ ォ ル ト では PDFlib は、 ページの幅 と 高 さ の指定か ら MediaBox を生成 し
ますが、 それ以外の項目は一切生成 し ません。 以下の コ ー ド 抜粋は、 新 し いページ を開始
さ せた後、 CropBox の 4 つの値を設定す る も のです。
/* カスタムCropBoxを持つ新規ページを開始 */
p.begin_page_ext(595, 842, "cropbox={10 10 500 800}");
文書のページ数 PDFlib では、1 つの文書の中に生成す る ページの数については何 も 制限
はあ り ません。 PDFlib は、 何十万ページ あ る 文書で も Acrobat が効率的に表示 し ていけ る
よ う な PDF 構造を生成 し ます。
3.2.3 直接パス と パス オ ブ ジ ェ ク ト
パ ス と は、 任意の数の直線 ・ 矩形 ・ 円 ・ ベジエ曲線 ・ 楕円弧でで き た輪郭です。 パ ス は、
つなが っ ていない部分を複数含む こ と がで き ます。 こ う し た部分を サブパ ス と いい ます。
パ ス に対 し て実行で き る 操作を以下に挙げます。
> 描線。 パ ス に沿っ て線を描 き ます。 ク ラ イ ア ン ト が与え た、 描画に関す る 引数 (た と
えば色や線幅) を用い ます。
> 塗 り 。 パ ス で囲 ま れた領域全体を塗 り ます。 ク ラ イ ア ン ト が与え た、 塗 り に関す る 引
数を用い ます。
> 切 り 抜 き 。 以後の描画の可視領域を限定 し ます。 具体的には、 カ レ ン ト 切 り 抜 き 領域
(デフ ォ ル ト では無限定) が、 カ レ ン ト 切 り 抜 き 領域 と パ ス で囲まれた領域 と の交差部
分に と っ て替わ ら れます。
> ただパ ス を終了。 見えないパ ス がで き ます。 それで も PDF フ ァ イ ルの中には存在 し て
い ます。 こ れが有用な場合は稀です。
64
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
直接パス 関数 moveto( ) ・ lineto( ) ・ rect( ) 等を用いて、 カ レ ン ト ページやその他の内容
ス ト リ ーム (テ ンプ レー ト ・ Type 3 グ リ フ記述等) へただちに書かれ る 直接パ ス を構築す
る こ と も で き ます。 パス を構築 し た直後に、 それを stroke ( ) ・ fill( ) ・ clip( ) のいずれか 1 つ
お よ び関連す る 関数で処理す る 必要が あ り ま す。 こ れ ら の関数はパ ス を消費 し 削除 し ま
す。 パ ス を複数回使 う 唯一の方法は、 save( ) と restore( ) を用い る こ と です。
直接パ ス を作成 し ておいて上記の操作を何 も 適用 し ない と エ ラ ーにな り ます。 PDFlib
の ス コ ープ体系に従えば、 ク ラ イ ア ン ト は こ の制約に自然に従 う こ と にな り ます。 パ ス の
書式属性 (色 ・ 線幅等) を変えたい場合はかな ら ず、 描画操作の開始前に行 う 必要があ り
ます。 こ の規則を一言で言えば 「パ ス記述の途中で、 書式を変え てはいけ ません」。
パ ス を ただ作成 し ただけではページには何 も 現れ ません。 次の よ う に、 塗 り か描線を
パ ス に適用 し なければ目に見え る 結果は得 ら れません。
p.setcolor("stroke", "rgb", 1, 0, 0, 0);
p.moveto(100, 100);
p.lineto(200, 100);
p.stroke();
たいていのグ ラ フ ィ ッ ク 関数では、 カ レ ン ト 点 と い う 概念を利用 し てい ます。 こ れは、 描
画に用いてい る ペンの位置 と 捉え る こ と がで き ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの graphics/starter_graphics ト ピ ッ ク にあ り ます。
パス オ ブ ジ ェ ク ト パ ス オブジ ェ ク ト は、 直接パ ス よ り も 便利で強力な も のです。 パ ス
オブジ ェ ク ト は、 パ ス を構築す る ためのすべての描画操作を カプセル化 し ます。 パ ス オブ
ジ ェ ク ト は add_path_point( ) で作成す る こ と がで き 、 あ る いは、 画像 ク リ ッ ピ ン グパ ス を
含んでい る 画像フ ァ イ ルか ら 抽出す る こ と も で き ます (後述)。 add_path_point( ) では、 パ
ス 構築を実現す る ためのい く つかの便利なオプシ ョ ン を使 う こ と も で き ま す。 パ ス オブ
ジ ェ ク ト を作成 し た ら 、 それは さ ま ざ ま な目的に利用す る こ と が可能です :
> パス オブジ ェ ク ト を、 draw_path( ) を用いてページ記述上で利用す る こ と がで き ます。
すなわち塗っ た り 、 描線 し た り 、 ク リ ッ ピ ン グパ ス と し て用いた り す る こ と がで き ま
す。
> パ ス オブジ ェ ク ト を、 テ キ ス ト フ ロ ーの回 り こ み形状 と し て用い る こ と がで き ま す :
テ キ ス ト が任意の形状の内部 ま た は外部 を 回 り こ む よ う に組 ま れ ま す (207 ページ
「8.2.10 テ キ ス ト をパ ス ・ 画像に回 り 込み」 参照)。
> テ キ ス ト をパ ス上に配置す る こ と も で き ます。 すなわち、 キ ャ ラ ク タ 群がパ ス の直線
や曲線に沿っ て並べ ら れます (189 ページ 「8.1.7 パス上のテ キ ス ト 」 参照)。
> パス オブジ ェ ク ト を表セル内に配置す る こ と がで き ます。
直接パ ス と 異な り 、 パ ス オブジ ェ ク ト は delete_path( ) で明示的に削除 さ れ る ま で複数回
利用す る こ と がで き ます。 パ ス に関す る 情報は info_path( ) で取得で き ます。 下記の コ ー
ド は、 円を含む単純なパ ス形状を作成 し 、 それをページ上の異な る 2 箇所に描線 し 、 最後
にそれを削除 し てい ます :
path = p.add_path_point( -1, 0, 100, "move", "");
path = p.add_path_point(path, 200, 100, "control", "");
path = p.add_path_point(path, 0, 100, "circular", "");
p.draw_path(path,
0,
0, "stroke");
p.draw_path(path, 400, 500, "stroke");
p.delete_path(path);
3.2 ページ記述
65
パ ス オブジ ェ ク ト をいちいち描画操作で作成する 方法のほかに、取 り 込み画像か ら ク リ ッ
ピ ン グパ ス を抽出す る 方法 も あ り ます :
image = p.load_image("auto", "image.tif", "clippingpathname={path 1}");
/* 画像のクリッピングパスからパスオブジェクトを作成 */
path = (int) p.info_image(image, "clippingpath", "");
if (path == -1)
throw new Exception("エラー : クリッピングパスが見つかりません!");
p.draw_path(path, 0, 0, "stroke");
3.2.4 テ ン プ レ ー ト
PDF 内のテ ン プ レ ー ト PDFlib では、 技術用語で フ ォ ーム XObject と 呼ばれ る PDF の機
能に対応 し てい ます。 し か し こ の用語は、 対話的な フ ォーム と ま ぎ ら わ し いため、 私達は
こ の機能を 「テ ンプ レー ト 」 と 呼びます。 PDFlib のテ ンプ レー ト は、 ページ外のバ ッ フ ァ
と 捉え る こ と がで き 、 そ こ ではテ キ ス ト ・ ベ ク ト ル ・ 画像の操作が行え ます (通常のペー
ジ上 と 同 じ よ う に) 。 テ ンプ レー ト がで き た後は、 ま る で ラ ス タ 画像の よ う に使 う こ と が
で き 、 任意の回数、 任意のページに貼 り 付け る こ と が可能です。 画像同様、 テ ンプ レー ト
には拡縮や斜形化な ど の幾何学的変形を施す こ と がで き ます。 1 つのテ ンプ レー ト を複数
のページで使っ た場合には(ない し は同 じ ページで複数回)、テ ンプ レー ト を構成す る PDF
オペレー タ は実際には PDF フ ァ イ ル中に 1 回 し か書かれていないので、 PDF 出力フ ァ イ
ルサ イ ズの節約にな り ます。 テ ンプ レー ト は、 複数のページに繰 り 返 し 現れ る も のに対 し
て活用す る と よ いで し ょ う 。 た と えば、 毎ページ同 じ 背景や、 企業 ロ ゴや、 CAD ソ フ ト ・
地図作成 ソ フ ト の吐 き 出す図記号な ど です。 こ れ以外に も テ ンプ レー ト の代表的な活用例
と し ては、 ト ン ボ ・ 商標 ・ 外字な ど があ り ます。
PDFlib で テ ン プ レ ー ト を利用 テ ン プ レ ー ト は、 ページ記述の外でのみ 「定義す る 」 こ
と がで き 、 そ し てページ記述の中で 「利用す る 」 こ と がで き ます。 ただ し 、 テ ンプ レー ト
は他のテ ンプ レー ト を内包す る こ と も 可能です。 も ち ろん、 テ ンプ レー ト を それ自体の定
義中で使 う こ と は不可能です。 定義済みのテ ンプ レー ト をページ上か ら 参照する には fit_
image( ) 関数を使えば よ く 、 画像をページに貼 り 付け る の と ま っ た く 同 じ です (176 ペー
ジ 「7.3 画像 と 取 り 込み 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);
あ ら ゆ る テ キ ス ト ・ グ ラ フ ィ ッ ク ・ 色関数がテ ンプ レー ト 上では使え ます。 ただ し 、 次に
挙げ る 関数は、 テ ンプ レー ト を作成 し てい る 間には使っ てはいけ ません。
> load_image( ) : こ れは大 き な制約ではあ り ま せん。 なぜな ら 画像はテ ン プ レー ト 定義
の外で開いておけば、 自由にテ ンプ レー ト の中で使え る か ら です (開 く 以外は)。
66
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> すべての イ ン タ ラ ク テ ィ ブ関数。 なぜな ら こ れ ら は必ず、 配置 し たい文書ページ上で
定義 し なければな ら ず、 テ ンプ レー ト の一部 と し て生成す る こ と はで き ません。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの general/repeated_contents ト ピ ッ ク にあ り ます。
3.2.5 外部 PDF 文書内の参照ページ
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの pdfx/starter_pdfx5g ト ピ ッ ク にあ り ます。
PDF 文書は、 外部文書内のページへの参照を含む こ と がで き ます : こ の (拡縮や回転 さ れ
た) 参照ページは文書の一部ではあ り ませんが、 他のページ内容 と 全 く 同 じ よ う に表示 ・
印刷 さ れ ます。 こ れを利用す る と 、 再利用す る グ ラ フ ィ ッ ク 内容 ( ロ ゴ ・ 表紙ページ等)
を、 その PDF デー タ を含め る こ と な く 参照す る こ と がで き ます。 PDFlib は、 強い参照に、
すなわち、 参照ページが内部 メ タ デー タ を通 じ て同定 さ れ る 参照に対応 し てい ます。 参照
ページが得 ら れない と き や、 メ タ デー タ と 整合 し ない と き は、 参照ページではな く 代理画
像が表示 さ れます。
参照ページ (技術用語では参照 XObject) は、 PDF 1.4 (すなわち Acrobat 5 の フ ァ イ ル
形式) ですでに仕様に記載 さ れてい ま し たが、 それを正 し く 表示 ・ 印刷する には Acrobat 9
が必要です。 参照ページは PDF/X-5g ・ PDF/X-5pg の重要な要素で も あ り ます。 生成 さ れ
る (新 し い) 文書を コ ン テナ文書 と いい、 参照ページがあ る 外部 PDF 文書を タ ーゲ ッ ト
フ ァ イ ル と いい ます。
参照ページ を Acrobat で使 う には、 Acrobat を下記の よ う に正 し く 設定す る こ と が重要
です :
> 「編集」 → 「環境設定」 → 「一般 ...」 → 「ページ表示」 → 「参照 XObject タ ーゲ ッ ト を表
示」 : 「つねに」 に設定。
> 「編集」 → 「環境設定」 → 「一般 ...」 → 「ページ表示」 → 「参照 さ れる フ ァ イルの場
所」 : タ ーゲ ッ ト フ ァ イ ルがあ る デ ィ レ ク ト リ の名前を入力。
> 「編集」 → 「環境設定」 → 「一般 ...」 → 「セキ ュ リ テ ィ (拡張)」 → 「セキ ュ リ テ ィ 特権
の場所」 → 「フ ォルダのパス を追加」 : コ ン テナ文書があ る デ ィ レ ク ト リ の名前を追加。
こ れは 「拡張セキ ュ リ テ ィ を有効にする」 の設定にかかわ ら ず行 う 必要があ り ます。
タ ーゲ ッ ト ページは、 コ ン テナ PDF 内部でその フ ァ イ ル名 と ページ番号が指定 さ れてお
り 、 下記の条件すべて を満たす と き にのみ代理でな く それが表示 さ れます :
> コ ン テナ文書が Acrobat の設定に よ り 信頼 さ れてい る 。
> 指定 さ れたデ ィ レ ク ト リ 内で タ ーゲ ッ ト フ ァ イ ルが見つか っ た。
> タ ーゲ ッ ト フ ァ イ ルがパス ワー ド を一切要求せず、 エ ラ ーな く 開 く こ と がで き る 。
> コ ン テナ文書内で指定 さ れた参照ページのページ番号が タ ーゲ ッ ト フ ァ イ ル内に存在
し てい る 。
> PDF/X-5 のみ: タ ーゲ ッ ト 内の ID と 特定の XMP メ タ デー タ 項目群が、コ ン テナ文書内
の対応す る 項目 と 整合す る 必要があ り ます。
こ れ ら の条件に 1 つで も 違反 し てい る と き は、 タ ーゲ ッ ト ページでな く 代理が表示 さ れま
す。 Acrobat はいかな る エ ラ ー メ ッ セージ も 出 し ません。
PDFlib は、 別の取 り 込みページ を代理 ( タ ーゲ ッ ト を単純化 し た も の等) と し て用い
る こ と も で き ます。 あ る いは、 テ ンプ レー ト を代理 と し て用いて、 た と えば単純な幾何学
形状を代理のプ レース ホルダ と す る こ と も 可能です :
proxy = p.begin_template_ext(0, 0,
"reference={filename=target.pdf pagenumber=1 strongref=true}");
if (proxy == -1 )
{
/* エラー */
}
3.2 ページ記述
67
3.3 暗号化 PDF
3.3.1 PDF のセキ ュ リ テ ィ 機能
PDF は、 文書の内容を保護す る 助け と な る さ ま ざ ま なセ キ ュ リ テ ィ 機能に対応 し てい ま
す。 こ う し たセキ ュ リ テ ィ 機能は、 対称型暗号化を用い る Acrobat の標準の暗号化ハン ド
ラ に基づいてい ます。 Acrobat Reader と Acrobat 製品は下記のセキ ュ リ テ ィ 機能に対応 し
てい ます :
> 権限 : PDF 文書に対 し 、 印刷やテ キ ス ト 抽出 と いっ た特定の操作を制限 し ます。
> ユーザーパ ス ワー ド : フ ァ イ ルを開 く 際に要求 さ せ る こ と がで き ます。
> マ ス タ ーパ ス ワ ー ド : 権限 ・ ユーザーパ ス ワ ー ド ・ マ ス タ ーパ ス ワ ー ド の う ちのいず
れかのセ キ ュ リ テ ィ 設定 を 変更す る 際に要求 さ せ る こ と がで き ま す。 ユーザーパ ス
ワ ー ド と マ ス タ ーパ ス ワ ー ド を持つフ ァ イ ルは、 いずれかのパ ス ワ ー ド で閲覧 ・ 印刷
が可能にな り ます。
> (PDF 1.6) 保護 し ていない文書内で、 添付だけ を暗号化する こ と も で き ます。
フ ァ イ ルが、 ユーザーパ ス ワ ー ド かマ ス タ ーパ ス ワ ー ド か何 ら かの権限制限を持つ場合、
その フ ァ イ ルは暗号化 さ れます。
操作権限 「印刷 : 許可 し ない」 の よ う に、 何 ら かの操作権限を設定す る と 、 Acrobat では
その機能が無効にな り ます。 し か し こ れは必ず し も 、 サー ド パーテ ィ の PDF ビ ュ ーア等
の ソ フ ト ウ ェ アで も こ う な る と はかぎ り ません。 操作権限に従 う か ど う かは PDF ツール
の開発者次第なのです。 実際、 い く つかの PDF ツールは権限設定を全 く 無視す る こ と が
知 ら れてい ます し 、 商用の PDF ク ラ ッ キ ン グ ツールを使えば、 いかな る 操作制限を も 無
効化す る こ と が可能です。こ れは暗号化の ク ラ ッ キ ン グ と は関係のない話で、単純に、PDF
フ ァ イ ルが表示可能であ る かぎ り 、それを絶対印刷 さ れない よ う にす る こ と な ど で き る は
ずがないか ら です。こ の こ と は実際、Adobe 自身の PDF リ フ ァ レ ン ス に も 示 さ れてい ます:
There is nothing inherent in PDF encryption that enforces the document permissions
specified in the encryption dictionary. It is up to the implementors of PDF viewers to respect the
intent of the document creator by restricting user access to an encrypted PDF file according to
the permissions contained in the file. (PDF の暗号化には、 暗号化辞書で指定 さ れた文書権
限設定に関 し て、 本来的な強制力は何 も あ り ません。 暗号化 さ れてい る PDF フ ァ イ ルの、
ユーザーに よ る 利用を、 その フ ァ イ ルに含 ま れた権限設定に従っ て制限す る こ と に よ っ
て、 文書の作成者の意図を尊重す る か ど う かは、 PDF ビ ュ ーアの実装者次第です。)
Unicode パスワー ド PDF 1.7 拡張レベル 3 (Acrobat 9) は Unicode パ ス ワー ド に対応 し
てい ま す。 それ以前のバージ ョ ン では欧文キ ャ ラ ク タ のパ ス ワ ー ド に し か対応 し ていな
かっ たのに対 し 、 PDF 1.7 拡張レベル 3 では任意の Unicode キ ャ ラ ク タ を ユーザー ・ マ ス
タ ーパ ス ワー ド で用い る こ と が可能です。
良いパスワー ド ・ 悪いパスワー ド PDF の暗号化の強度は、 暗号化の鍵長に よ っ てのみ
決 ま る のではな く 、 パ ス ワ ー ド の長 さ と 質に よ っ て も 決 ま り ま す。 よ く 知 ら れてい る の
は、 名前や普通の単語な ど をパス ワー ド と し て使 う べ き ではない と い う こ と で、 なぜな ら
それ ら は簡単に推測がで き 、あ る いはいわゆ る 辞書攻撃を使っ て系統的に割 り 出 さ れて し
ま う か ら です。 さ ま ざ ま な調査が明 ら かに し てい る と こ ろ に よ れば、 か な り 多 く のパ ス
ワー ド は配偶者やペ ッ ト の名前、 ユーザーの誕生日、 子供の愛称な ど が選ばれてお り 、 容
易に推測が可能 と な っ てい ます。
PDF の暗号化は、 内部的には 40 ビ ッ ト か 128 ビ ッ ト の鍵で動作 し ますが、 ユーザーの
レベルでは、 PDF 1.7 以下ではパス ワー ド の 32 文字ま でが、 PDF 1.7 拡張レベル 3 では
UTF-8 の 127 バ イ ト ま でが使われます。 PDF 文書を暗号化す る のに使われ る 内部鍵は、
68
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
ユーザーが与えたパ ス ワー ド に対 し て、 あ る 複雑な計算を行 う こ と で導 き 出 さ れます。 パ
ス ワー ド が も し も 弱ければ、鍵長にかかわ ら ず、結果 と し て保護 も 弱 く な り ます。128 ビ ッ
ト 鍵 も AES 暗号化 も 、 短いパス ワー ド を使えばあ ま り 安全ではあ り ません。
3.3.2 PDFlib に よ る文書保護
暗号化アルゴ リ ズム と 鍵長 保護 さ れた文書を生成す る と き 、 PDFlib は、 ク ラ イ ア ン ト
が選んだ PDF 互換レベルで利用可能な最 も 強い暗号化 と 鍵長を選びます :
> PDF 1.3 (Acrobat 4) では、 40 ビ ッ ト 鍵の RC4 が使われます。
> PDF 1.4 (Acrobat 5) では、 128 ビ ッ ト 鍵の RC4 が使われます。
> PDF 1.5 (Acrobat 6) では、128 ビ ッ ト 鍵の RC4 が使われます。 こ れは PDF 1.4 と 鍵長が
同 じ ですが、 暗号化方式は若干異な る も のが使われ る ので、 そのために Acrobat 6 が必
要です。
> PDF 1.6 (Acrobat 7) 以上では、 128 ビ ッ ト 鍵の AES (Advanced Encryption Standard) が
使われます。
> PDF 1.7 拡張レベル 3 (Acrobat 9) では、 256 ビ ッ ト 鍵の AES (Advanced Encryption
Standard) が使われ ます。 こ れ以前のアルゴ リ ズ ム では WinAnsi エ ン コ ーデ ィ ン グの
キ ャ ラ ク タ に よ る パ ス ワ ー ド に し か対応 し て い な いのに対 し 、 こ のバージ ョ ン では
Unicode パ ス ワー ド も 使え ます。
パスワー ド パ ス ワー ド は、begin_document( ) の userpassword・masterpassword オプシ ョ
ンで設定す る こ と がで き ます。 PDFlib は、 ク ラ イ ア ン ト が与えたパ ス ワー ド と 下記の よ う
に相互作用 し ます :
> ユーザーパ ス ワ ー ド と 権限 (後述) が与え ら れてい る のにマ ス タ ーパ ス ワ ー ド が与え
ら れていない場合は、 正規ユーザーがセ キ ュ リ テ ィ 設定を変え る こ と がで き て し ま い
ます。 こ の理由か ら PDFlib は こ の場合をエ ラ ー と 見な し ます。
> ユーザーパ ス ワ ー ド と マ ス タ ーパ ス ワ ー ド が同 じ であ る 場合は、 フ ァ イ ルのユーザー
と 所有者 と の区別が不可能にな っ て し ま い ますので、 こ の場合 も 有効な保護は望め ま
せん。 PDFlib は こ の場合を エ ラ ー と 見な し ます。
> ユーザーパス ワー ド ・ マ ス タ ーパス ワー ド と も 、32 文字ま で許 さ れます。空のパ ス ワー
ド は許 さ れません。
与え ら れたパ ス ワー ド は、 その後に生成 さ れ る すべての文書に対 し て用い ら れます。
セキ ュ リ テ ィ 上の推奨事項 最大限のセ キ ュ リ テ ィ を得 る ために、 以下の こ と を推奨 し
ます。
> Acrobat 7 よ り 古い ビ ュ ーアに対応す る 必要がない限 り 、 AES 暗号化を使 う こ と 。
> マ ス タ ーパ ス ワ ー ド だけ を持ち、 ユーザーパ ス ワ ー ド を持た ない文書は、 必ず ク ラ ッ
ク 可能です。 ですので、 ユーザーパ ス ワ ー ド を かけ る こ と を考慮す る べ き です (ただ
し も ち ろ んそのユーザーパ ス ワ ー ド は、 文書の正当な利用者には渡 ら なければな り ま
せん)。
> パス ワー ド は最低で も 8 文字 と し 、アルフ ァ ベ ッ ト 以外の文字を混ぜ る こ と 。辞書にあ
る 言葉や人名 ・ 地名をパス ワー ド に使わない こ と 。
権限 操作制限は begin_document( ) の permissions オプシ ョ ン で設定す る こ と がで き ま
す。 それは操作制限の入っ た文字列 (複数可) で構成 さ れ ます。 permissions オプシ ョ ン
を設定す る 際には masterpassword オプシ ョ ン も 設定 し なければな り ません。 なぜな ら そ
う でな ければ Acrobat ユーザーは簡単に権限設定を取 り 除 く こ と がで き て し ま う か ら で
す。 デフ ォ ル ト ではすべての操作が許可 さ れてい ます。 操作制限を指定する と Acrobat の
3.3 暗号化 PDF
69
その機能は無効にな り ます。操作制限はユーザーパ ス ワー ド な し で適用す る こ と がで き ま
す。 下記の例の よ う に スペース で区切れば、 複数の制限キーワー ド を指定す る こ と も で き
ます :
p.begin_document(filename, "masterpassword=abcd1234 permissions={noprint nocopy}");
表 3.4 に、 使え る すべての操作制限キー ワーを挙げます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの general/permission_settings ト ピ ッ ク にあ り ま
す。
表 3.4 begin_document( ) の permissions オプ シ ョ ンに対する操作制限キーワー ド 一覧
キーワー ド
解説
noprint
Acrobat が、 フ ァ イルの印刷を拒みます。
nomodify
Acrobat が、 ユーザーによ る フ ォ ーム フ ィ ール ド の追加やその他あ ら ゆる変更を拒みます。
nocopy
Acrobat が、 テキス ト やグ ラ フ ィ ッ クの コ ピーや抽出を拒み、 ア ク セ シ ビ リ テ ィ イ ン タ
フ ェ ース を無効に し ます。
noannots
Acrobat が、 コ メ ン ト やフ ォ ーム フ ィ ール ド の追加 ・ 変更を拒みます。
noforms
(PDF 1.4。 nomodify ・ noannots を暗黙に前提 し ます) Acrobat が、 フ ォ ーム フ ィ ール ド への
記入を拒みます。
noaccessible
(PDF 1.4) Acrobat が、 ア ク セシ ビ リ テ ィ を目的 と し た テキス ト やグ ラ フ ィ ッ ク の抽出 (た
と えばス ク リ ーン リ ーダー ソ フ ト ) を拒みます。
noassemble
(PDF 1.4。 nomodify を暗黙に前提 し ます) Acrobat が、 ページの挿入 ・ 削除 ・ 回転や し お
り ・ サムネールの作成を拒みます。
nohiresprint
(PDF 1.4) Acrobat が、 高解像度印刷を拒みます。 noprint が指定 さ れていない場合は、 印
刷は 「画像 と し て印刷」 機能に制限 さ れます。 すなわち その場合、 ページが低解像度に変
換 さ れた ものを印刷する こ と し かで き ません。
plainmetadata
(PDF 1.5) 暗号化文書で も、 文書の メ タ デー タ を暗号化 し ないま まに し ます。 こ れは XMP
メ タ デー タ にのみ影響 し 、 文書情報フ ィ ール ド には影響 し ません。
注 PDF を ウ ェ ブ上で提供する場合には必ず、 ク ラ イ ア ン ト が自分のブ ラ ウザを使っ てその文
書のロー カル コ ピーを と る こ と がで き て し まいます。ユーザーがロー カル コ ピーを保存す
る こ と を PDF 側から 防ぐ方法はあ り ません。
添付 フ ァ イルの暗号化 PDF 1.6 以上では、 文書が保護 さ れていな く て も 、 添付フ ァ イ ル
だ け を 暗 号 化 す る こ と も で き ま す。 こ れ を 実 現す る に は、 begin_document( )
で
attachmentpassword オプシ ョ ン を与え ます。
70
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
3.4 Web 最適化 (線形化) PDF
PDFlib は、 PDF 文書に線形化 と い う 処理を行 う こ と がで き ます (PDF の線形化は 「最適
化」 ・ 「Web 表示用に最適化」 と も いい ます)。 線形化は PDF フ ァ イ ルの中身を再配列 し 、
補足情報を追加 し ま す。 こ の情報が活用 さ れ る こ と でア ク セ ス の高速化が可能にな り ま
す。
非線形化 PDF は ま る ご と ク ラ イ ア ン ト へ転送 し な ければな ら ないのに対 し 、 線形化
PDF は Web サーバか ら バ イ ト サービ ン グ と い う 処理を用いてページ ご と に転送す る こ と
が可能です。 こ れに よ り Acrobat (ブ ラ ウ ザのプ ラ グ イ ン と し て動作 し てい る ) は、 PDF
文書内の各部分を個別に取得で き ます。 ですので、 文書の先頭ページ を、 その文書がサー
バか ら 全部ダ ウ ン ロ ー ド さ れて く る ま でユーザーを待たせ る こ と な く 表示す る こ と がで
き ます。 こ れはユーザー体験の向上を も た ら し ます。
ブ ラ ウ ザへ PDF デー タ を ス ト リ ームす る のは Web サーバであ っ て PDFlib ではない こ
と に留意 し て く だ さ い。 PDFlib がす る こ と は、 バ イ ト サービ ン グ可能な PDF フ ァ イ ルを
生成す る こ と です。 バ イ ト サービ ン グ PDF を活用す る には、 下記のすべての必要条件を
満たす必要があ り ます :
> PDF文書が線形化 さ れてい る 必要があ り ます。線形化はbegin_document( )のlinearize オ
プシ ョ ンで下記の よ う に行 う こ と がで き ます :
p.begin_document(outfilename, "linearize");
Acrobat で文書のプ ロ パテ ィ を見れば、その フ ァ イ ルが線形化 さ れてい る か ど う か を調
べ る こ と がで き ます (「Web 表示用に最適化」 : 「はい」)。
> Web サーバがバ イ ト サービ ン グに対応 し てい る 必要があ り ます。 その基礎であ る バ イ
ト レ ン ジプ ロ ト コ ルは HTTP 1.1 に含まれてい ますので、 現行のすべての Web サーバ
に実装 さ れてい ます。
> ユーザーはAcrobat をブ ラ ウ ザのプ ラ グ イ ン と し て使用する と と も に、Acrobatでページ
ご と のダ ウ ン ロ ー ド を有効に し てお く 必要があ り ます (「編集」 → 「環境設定」 → (「一
般 ...」 →) 「イ ン タ ーネ ッ ト 」 → 「Web 表示用に最適化を許可」)。 なお、 こ れはデフ ォ
ル ト では有効にな っ てい ます。
PDF フ ァ イ ルが大 き い (ページ数か MB で数えて) ほ ど、 Web 上で転送 し た時の線形化の
効用は高ま り ます。
注 PDF 文書を線形化する と 、 フ ァ イルサイ ズが若干大き く な り ます。 こ れは、 線形化情報が
追加 さ れる ためです。
線形化に必要な一時領域 PDFlib では、 線形化を行 う には、 まずその文書全体の作成が
完了す る 必要があ り ます。 線形化処理は、 文書の作成が完了 し た後に別個の段階 と し て行
われ る のです。 こ のため、 PDFlib で最適化を行 う には、 追加の格納領域が必要にな り ま
す。 必要な一時領域はおお よ そ、 生成 さ れた文書 (線形化前の) と 同 じ 容量です。 PDFlib
は線形化デー タ を、 begin_document( ) の inmemory オプシ ョ ンに従っ て、 メ モ リ 内か一時
デ ィ ス ク フ ァ イ ルの ど ち ら かに格納 し ます。
3.4 Web 最適化 (線形化) PDF
71
3.5 色 を扱 う
注 PDFlib API リ フ ァ レ ン スに、 対応 し ている色空間の一覧 と 説明があ り ます。
ク ッ ク ブ ッ ク 色の諸側面に関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの color カ テ ゴ リ にあ り ます。
色空間の使用の概要については、 ク ッ ク ブ ッ ク の color/starter_color ト ピ ッ ク を参照 し
て く だ さ い。
3.5.1 パ タ ー ン と スムーズシ ェ ーデ ィ ン グ
単色の色のかわ り に、パ タ ーンやス ムーズシ ェーデ ィ ン グ を特殊な色 と し て利用す る こ と
も で き ます。 任意の物の描線や塗 り に使用で き ます。
パ タ ー ン パ タ ーンは、任意の数の塗 り 操作を 1 つの実体に ま と めた も のに よ っ て定義 さ
れます。 こ のグループは任意の他の物の塗 り や描線に用い る こ と がで き 、 塗 り の場合は全
域内に、 描線の場合はパ ス上にグループが複製 (縦横に並ぶ) さ れます。 パ タ ーン を使っ
た作業では次の手順を踏みます。
> まず、begin_pattern( ) と end_pattern( ) の間でパ タ ーン を定義 し なければな り ません。パ
タ ーンの定義にはたいていの画像オペレー タ が利用で き ます。
> begin_pattern( ) に よ っ て返 さ れたパ タ ーンハン ド ルは、 setcolor( ) を使用 し て、 パ タ ー
ン を カ レ ン ト 色 と し て設定す る ために用い る こ と がで き ます。
begin_pattern( ) の painttype 引数に よ っ て、 パ タ ーン定義がそれ自身の色指定を含む こ と
がで き る か ど う かが決ま り ます。 painttype が 1 の場合、 パ タ ーン定義はそれ自身の色指
定を含ま なければな ら ず、 つねに見た目が同 じ にな り ます。 painttype が 2 の場合、 パ タ ー
ン定義は色指定を一切含んでいてはな り ません。そのパ タ ーンが塗 り や描線に使われ る と
き には、 カ レ ン ト の塗 り や描線の色が適用 さ れます。
注 パ タ ーンはスムーズシ ェ ーデ ィ ングに基づいて定義する こ と も で き ます (後述)。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの graphics/fill_pattern・images/tiling_pattern ト
ピ ッ ク にあ り ます。
スムーズシ ェ ーデ ィ ン グ ス ムーズ シ ェ ーデ ィ ン グは、 カ ラ ーブ レ ン ド やグ ラ デ ィ エ ン
ト と も いい、 あ る 色か ら 別の色へ連続的に遷移する も のの こ と を言い ます。 2 つの色は同
じ 色空間で指定す る 必要があ り ます。 PDFlib は ス ムーズシ ェーデ ィ ン グについて、 次の 2
種類の方向に対応 し てい ます。
> 線形シ ェーデ ィ ン グ。 線に沿っ て定義 さ れます。
> 放射シ ェーデ ィ ン グ。 2 つの円の間に定義 さ れます。
シ ェーデ ィ ン グは 2 つの色の間の遷移 と し て定義 さ れます。 1 番目の色にはつねにカ レ ン
ト 塗 り 色が用い ら れます。 2 番目の色は shading( ) の c1 ・ c2 ・ c3 ・ c4 引数で与え ら れます。
こ の数値は、 setcolor( ) の記述に従っ た 1 番目の色の色空間で解釈 さ れます。
shading( ) を呼び出す と 、 シ ェーデ ィ ン グオブジ ェ ク ト のハン ド ルが返 さ れます。 こ れ
は次の 2 つの方式のいずれかで利用す る こ と がで き ます。
> shfill( ) で領域を塗 り ます。 こ の メ ソ ッ ド を使 う こ と がで き る のは、 塗 り を適用 し たい
対象の形がシ ェーデ ィ ン グの形 と 同 じ であ る 場合です。 こ の関数はその名前 と 違っ て、
物の内部を塗 る だけではな く 、 その外部に対 し て も 効力を持ち ます。 こ の動作は clip( )
で変更で き ます。
> よ り 複雑 な物の塗 り に用い る シ ェ ーデ ィ ン グ パ タ ー ン を 定義 し ま す。 具体的には、
shading_pattern( ) を呼び出 し てシ ェーデ ィ ン グに基づいたパ タ ーン を作成 し 、 こ のパ
タ ーン を任意の物の塗 り や描線に用い ます。
72
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの color/color_gradient ト ピ ッ ク にあ り ます。
3.5.2 Pantone ・ HKS ・ カ ス タ ムスポ ッ ト カ ラ ー
PDFlib は ス ポ ッ ト カ ラ ーに対応 し てい ます (技術的には、 PDF では特色 (Separation) 色
空間 と し て知 ら れてい る のですが、 通常、 separation と い う 用語はプ ロ セ ス カ ラ ーに対 し
て も 用い ら れます) 。 ス ポ ッ ト カ ラ ー と は、 プ ロ セ ス カ ラ ーの混色領域外にあ る カ ス タ ム
色の印刷に用い ら れ る も のです。 ス ポ ッ ト カ ラ ーは名前で指定 さ れ、 PDF ではつねに代替
色を伴い ます。 代替色は、 その ス ポ ッ ト カ ラ ーに近い色が選ばれますが、 ま っ た く 同 じ 色
ではあ り ません。 Acrobat では こ の代替色を用いて、 画面表示やス ポ ッ ト カ ラ ー非対応機
(事務用プ リ ン タ な ど) への印刷を行い ます。 印刷機では、 要求 さ れた ス ポ ッ ト カ ラ ーが
適用 さ れ、 文書内で用い ら れてい る その他すべてのプ ロ セ ス カ ラ ー と と も に印刷 さ れ ま
す。こ のために PDF フ ァ イ ルは、色分版 と い う 処理で後処理 さ れ る こ と が必要にな り ます。
PDFlib は、 さ ま ざ ま な組み込みス ポ ッ ト カ ラ ー ラ イ ブ ラ リ に も 対応 し てい ます し 、 カ
ス タ ム (ユ ー ザ ー定義) ス ポ ッ ト カ ラ ー に も 対応 し て い ま す。 ス ポ ッ ト カ ラ ー名 が
makespotcolor( ) に よ っ て要求 さ れ る と 、 PDFlib は まず、 その要求 さ れた ス ポ ッ ト カ ラ ー
が PDFlib 組み込み ラ イ ブ ラ リ の う ちのいずれかの中で見つか る か ど う か を調べます。 も
し 見つかれば、 PDFlib は代替色に関 し て、 組み込 ま れた値を用い ま す。 見つか ら ない場
合、 その ス ポ ッ ト カ ラ ーはユーザー定義色 と 見な さ れ る ので、 ク ラ イ ア ン ト 側でそれに対
し て適切な代替色値を与え る 必要があ り ます (カ レ ン ト 色を通 じ て) 。 ス ポ ッ ト カ ラ ーに
は濃度を指定す る こ と がで き ます。 すなわち、 0 か ら 1 ま でのパーセ ン ト 値 と と も に用い
る こ と がで き ます。
デフ ォ ル ト では、 組み込み ス ポ ッ ト カ ラ ーはカ ス タ ム代替値で再定義す る こ と はで き
ません。 し か し 、 こ の動作は spotcolorlookup パ ラ メ タ で変更す る こ と がで き ます。 こ れ
を使 う と 、古いアプ リ ケーシ ョ ンが異な る 色定義を用いてい る よ う な場合 と の互換性が と
れます し 、 ま た、 PANTONE カ ラ ーに対す る PDFlib の Lab 代替値を扱 う こ と ので き ない
ワー ク フ ロ ーにおいて も 有用です。
PDFlib は、 PDF/X か PDF/A の準拠レベルが選択 さ れてい る と 、 自動的に適切な代替
色を生成 し ます (251 ページ 「10.3 PDF/X に よ る 印刷出力」 参照)。 カ ス タ ム ス ポ ッ ト カ
ラ ーに関 し ては、選択 さ れた PDF/X か PDF/A の準拠レベル と 互換の代替色を与え る のは
ユーザー側の役割 と な り ます。
注 組み込みスポ ッ ト カ ラ ーのデー タ と 各商標については、PDFlib ソ フ ト ウ ェ ア での使用のた
めの ラ イ セ ン ス を PDFlib GmbH は各商標権者から 取得 し ています。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの color/spot_color ト ピ ッ ク にあ り ます。
PANTONE® カ ラ ー
PANTONE カ ラ ーは世界的に有名で広 く 利
用 さ れ て い ま す。 PDFlib は、 Pantone Matching System® (ス
ウ ォ ッ チ総数 26,000 色) に加え て、 2008 年に導入 さ れた コ ー
ト 紙 / 上質紙用の追加 2058 色を持つ Pantone® Goe® System に
完全対応 し てい ます。表 3.5 に示すデジ タ ルカ ラ ー ラ イ ブ ラ リ
に あ る すべ て の カ ラ ー ス ウ ォ ッ チ名が利用で き ま す。 商用
PDFlib のお客様は、 PANTONE ス ポ ッ ト カ ラ ーの全一覧のテ キ
ス ト フ ァ イ ルを、 私達のサポー ト か ら 得 る こ と がで き ます。
ス ポ ッ ト カ ラ ー名は大文字 ・ 小文字を区別 し ます。 上記の
例 と 同様に大文字を使っ て く だ さ い。 旧形式の色名接頭辞 CV ・ CVV ・ CVU ・ CVC ・ CVP
も 使用す る こ と がで き ま す。 こ れ ら は、 対応す る 新 し い色名に変換 さ れ ま す。 た だ し 、
preserveoldpantonenames パ ラ メ タ が true の場合には変換 さ れません。 PANTONE と い う
3.5 色を扱 う
73
接頭辞は必ず、例示 し た よ う に ス ウ ォ ッ チ名につけ る 必要があ り ます。一般に、PANTONE
カ ラ ー名は次の方式に従っ て構成す る 必要があ り ます。
PANTONE <id> <paperstock>
こ こ で <id> は色の識別子であ り (た と えば 185)、<paperstock> は利用す る ペーパース ト ッ
ク の頭文字です (た と えば C は coated = コ ー ト 紙)。 ス ウ ォ ッ チ名を構成す る 各要素の間
には スペー ス を 1 つずつ入れ る 必要があ り ます。 PANTONE 接頭辞では じ ま る 名前の ス
ポ ッ ト カ ラ ーが要求 さ れたに も かかわ ら ず、その名前が有効な PANTONE カ ラ ーを表 し て
いなかっ た場合には、 関数は失敗 し ます。 次の コ ー ド は、 あ る PANTONE カ ラ ーを濃度値
70 パーセ ン ト で用いた例です。
spot = p.makespotcolor("PANTONE 281 U");
p.setcolor("fill", "spot", spot, 0.7, 0, 0);
注 こ こ で示 し た PANTONE® カ ラ ーは PANTONE の定義標準 と 一致 し ない こ と があ り ます。正
確な色については現在の PANTONE カ ラ ー発行物を参照 し て く だ さ い。 PANTONE® および
その他の Pantone, Inc. の諸商標は Pantone, Inc. の所有物です。 © Pantone, Inc., 2003.
注 PANTONE® カ ラ ーは PDF/X-1a モー ド では対応 し ていません。
表 3.5 PDFlib に内蔵の PANTONE スポ ッ ト カ ラ ー ラ イ ブ ラ リ 一覧
カ ラーラ イ ブ ラ リ名
色名の例
PANTONE ソ リ ッ ド /コ ー ト 紙
PANTONE 185 C
PANTONE ソ リ ッ ド /上質紙
PANTONE 185 U
PANTONE ソ リ ッ ド /マ ッ ト コ ー ト 紙
PANTONE 185 M
PANTONE プ ロ セス/コ ー ト 紙
PANTONE DS 35-1
C
PANTONE プ ロ セス/上質紙
PANTONE DS 35-1
U
PANTONE プ ロ セス/コ ー ト 紙 (EURO)
PANTONE DE 35-1
C
PANTONE プ ロ セス/上質紙 (EURO)
PANTONE DE 35-1
U
2006 年 5 月追加
PANTONE パス テル/コ ー ト 紙
PANTONE 9461 C
2006 年追加分の新色を含む
PANTONE パス テル/上質紙
PANTONE 9461 U
2006 年追加分の新色を含む
PANTONE メ タ リ ッ ク/ コ ー ト 紙
PANTONE 871 C
2006 年追加分の新色を含む
PANTONE カ ラ ーブ リ ッ ジ CMYK (PC)
PANTONE 185 PC
PANTONE ソ リ ッ ド を プ ロ セス/ コ ー ト 紙に置
き換え
PANTONE カ ラ ーブ リ ッ ジ CMYK
(EURO)
PANTONE 185 EC
PANTONE ソ リ ッ ド を プ ロ セス/ コ ー ト 紙
(EURO) に置き換え
PANTONE カ ラ ーブ リ ッ ジ/上質紙
PANTONE 185 UP
2006 年 7 月追加
PANTONE ヘキサク ローム/コ ー ト 紙
PANTONE H 305-1
C
非推奨。 廃止予定
PANTONE ヘキサク ローム/上質紙
PANTONE H 305-1
U
非推奨。 廃止予定
74
注
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 3.5 PDFlib に内蔵の PANTONE スポ ッ ト カ ラ ー ラ イ ブ ラ リ 一覧
カ ラーラ イブ ラ リ名
色名の例
注
PANTONE ソ リ ッ ド イ ン ヘキサク ローム PANTONE 185 HC
/コー ト 紙
PANTONE ソ リ ッ ド ト ゥ プ ロ セス/ コ ー PANTONE 185 PC
ト紙
PANTONE カ ラ ーブ リ ッ ジ CMYK (PC) で置き
換え
PANTONE ソ リ ッ ド ト ゥ プ ロ セス/ コ ー PANTONE 185 EC
ト 紙 (EURO)
PANTONE カ ラ ーブ リ ッ ジ CMYK (EURO) で置
き換え
PANTONE Goe / コ ー ト 紙
PANTONE 42-1-1 C 2008 年追加の 2058 色
PANTONE Goe /上質紙
PANTONE 42-1-1 U 2008 年追加の 2058 色
HKS® カ ラ ー
HKS カ ラ ーシ ス テ ムは ド イ ツ な ど の欧州諸国で
広 く 利用 さ れてい ます。 PDFlib は HKS カ ラ ーに完全対応 し て
い ま す。 以下のデジ タ ルカ ラ ー ラ イ ブ ラ リ (Farbfächer) に あ
る カ ラ ース ウ ォ ッ チ名がすべて利用可能です (カ ッ コ 内にサン
プルス ウ ォ ッ チ名を示 し ます)。
> HKS K (Kunstdruckpapier) 、グ ロ ス アー ト 紙用、88 色 (HKS 43
K)
> HKS N (Naturpapier)、 ナチ ュ ラ ル紙用、 86 色 (HKS 43 N)
> HKS E (Endlospapier)、 連続ス テーシ ョ ナ リ 用 / コ ー ト 、 88 色 (HKS 43 E)
> HKS Z (Zeitungspapier)、 ニ ュ ース プ リ ン ト 用、 50 色 (HKS 43 Z)
商用 PDFlib のお客様は、 HKS ス ポ ッ ト カ ラ ーの全一覧のテ キ ス ト フ ァ イ ルを、 私達のサ
ポー ト か ら 得 る こ と がで き ます。
ス ポ ッ ト カ ラ ー名は大文字 ・ 小文字を区別 し ます。 上記の例 と 同様に大文字を使っ て
く だ さ い。 HKS と い う 接頭辞は必ず、 例示 し た よ う に ス ウ ォ ッ チ名につけ る 必要があ り ま
す。一般に、HKS カ ラ ー名は次の方式の う ちのいずれかに従っ て構成す る 必要があ り ます。
HKS <id> <paperstock>
こ こ で <id> は色の識別子であ り (た と えば 43)、 <paperstock> は利用す る ペーパース ト ッ
ク の頭文字です(た と えば N は natural 紙)。ス ウ ォ ッ チ名を構成する HKS・<id>・<paperstock>
各要素の間には スペース を 1 つずつ入れ る 必要があ り ます。上記 2 番目の方式は ラ イ ブ ラ
リ か ラ イ ブ ラ リ の中の色に対 し てのみ用い る こ と がで き ます。HKS 接頭辞では じ ま る 名前
の ス ポ ッ ト カ ラ ーが要求 さ れたに も かかわ ら ず、 その名前が有効な HKS カ ラ ーを表 し て
いなか っ た場合には、 関数は失敗 し ます。 次の コ ー ド は、 あ る HKS カ ラ ーを濃度値 70
パーセ ン ト で用いた例です。
spot = p.makespotcolor("HKS 38 E");
p.setcolor("fill", "spot", spot, 0.7, 0, 0);
ユーザー定義スポ ッ ト カ ラ ー 上述の組み込みス ポ ッ ト カ ラ ーのほかに、 PDFlib ではカ
ス タ ム ス ポ ッ ト カ ラ ーに も 対応 し てい ま す。 カ ス タ ム ス ポ ッ ト カ ラ ーには任意の名前 と
(ただ し 組み込みの色 と かち合 う 名前は使え ません) 代替色を与え る こ と がで き ます。 こ
の代替色は、 画面表示 と 低品位印刷に用い ら れますが、 高品位の色分版には用い ら れませ
ん。 カ ス タ ム ス ポ ッ ト カ ラ ーに適切な代替色を与え る のは ク ラ イ ア ン ト 側の役割です。
新規ス ポ ッ ト カ ラ ーに代替色を設定す る ための専用の PDFlib 関数 と い う も のはあ り ま
せん。 そのかわ り に、 カ レ ン ト 塗 り 色が用い ら れます。 代替色設定のために呼び出 し が 1
3.5 色を扱 う
75
つ多 く 必要であ る と い う 点を除けば、 カ ス タ ム ス ポ ッ ト カ ラ ーの定義 と 利用は、 以下の よ
う に、 組み込みス ポ ッ ト カ ラ ーの利用 と 同様に行 う こ と がで き ます。
p.setcolor("fill", "cmyk", 0.2, 1.0, 0.2, 0);
spot = p.makespotcolor("CompanyLogo");
p.setcolor("fill", "spot", spot, 1, 0, 0);
/* 代替CMYK値を定義 */
/* そこからスポットカラーを作成 */
/* スポットカラーを設定 */
3.5.3 カ ラ ーマ ネ ジ メ ン ト と ICC プ ロ フ ァ イル
PDFlib は、 デバ イ ス独立色 ・ レ ン ダ リ ン グ イ ン テ ン ト ・ ICC プ ロ フ ァ イ ル と い っ た、 い く
つかのカ ラ ーマネジ メ ン ト の概念に対応 し てい ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの color/iccprofile_to_image ト ピ ッ ク にあ り ます。
デバ イ ス独立 CIE L*a*b* カ ラ ー setcolor( ) に色空間名 lab を与えれば、 デバ イ ス独立な
色値を CIE 1976 L*a*b* 色空間で指定す る こ と がで き ます。 L*a*b* 色空間の色は、 範囲 0
∼ 100 の輝度値 1 個 と 、 範囲 -127 ∼ 128 の色値 2 個 と で指定 さ れます。 lab 色空間に用い
ら れ る 光源は D50 です (日中光 5000 K、 2゜ 測定)。
レ ン ダ リ ン グ イ ン テ ン ト PDFlib ク ラ イ ア ン ト がデバ イ ス独立な色値を指定で き る と は
いっ て も 、 あ る 出力デバ イ ス がその要求 さ れた色を正確に再現で き る と は限 り ません。 そ
の よ う な場合には、 色域圧縮 と い う 処理に よ る 代替を行 う と い う 妥協が必要にな り ます。
色域圧縮 と は、 色の分布範囲を狭めて、 特定のデバ イ ス で再現で き る よ う な小 さ な範囲に
す る こ と です。 レ ン ダ リ ン グ イ ン テ ン ト は こ の処理を制御す る ために用い ら れます。 レ ン
ダ リ ン グ イ ン テ ン ト を 指 定 す る に は、 個 々 の 画像 に 対 し て は、 load_image( )
に
renderingintent パ ラ メ タ ま たはオプシ ョ ン を与え ます。 ま た、 レ ン ダ リ ン グ イ ン テ ン ト は
テ キ ス ト やベ ク ト ルグ ラ フ ィ ッ ク に対 し て も 指定す る こ と がで き 、 そのためには create_
gstate( ) に renderingintent オプシ ョ ン を与え ます。
ICC プ ロ フ ァ イル International Color Consortium (ICC)1 は、 入力デバ イ スや出力デバ イ
ス の色の特徴を指定す る ための フ ァ イ ル形式を定義 し ま し た。こ の ICC カ ラ ープ ロ フ ァ イ
ルは、 工業標準 と 捉え ら れてお り 、 すべての主要な カ ラ ーマネジ メ ン ト シ ス テ ム と アプ リ
ケーシ ョ ンのベン ダーが こ れに対応 し てい ます。 PDFlib は次の領域での ICC プ ロ フ ァ イ
ルに よ る カ ラ ーマネジ メ ン ト に対応 し てい ます。
> ページ上のテ キ ス ト と ベ ク ト ルグ ラ フ ィ ッ ク のための、 ICC ベース の色空間を定義。
> 取 り 込んだ画像フ ァ イ ルに埋め込まれてい る ICC プ ロ フ ァ イ ルを処理。
> 取 り 込んだ画像フ ァ イ ルに ICC プ ロ フ ァ イ ルを適用(画像に ICC プ ロ フ ァ イ ルが埋め込
まれていた場合は上書 き )。
> グ レース ケール・RGB・CMYK のデー タ を ICC ベース の色空間へ対応づけ る デフ ォ ル ト
色空間を定義。
> 外部 ICC プ ロ フ ァ イ ルを使用 し て PDF/X か PDF/A の出力 イ ン テ ン ト を定義。
カ ラ ーマネジ メ ン ト は色指定の中の要素数を変え ません (た と えば RGB か ら CMYK へ)。
注 主要な印刷環境のための ICC カ ラ ープ ロ フ ァ イルは、 www.pdflib.com でダウン ロー ド で
き るほか、 その他の無料 ICC プ ロ フ ァ イルへの リ ン ク も掲載 し ています。
ICC プ ロ フ ァ イルの検索 PDFlib は、 load_iccprofile( ) に与え ら れた profilename 引数を用
い、 次の手順を踏んで ICC プ ロ フ ァ イ ルを検索 し ます。
1. www.color.org を参照。
76
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> profilename=sRGB な ら ば、 PDFlib はその内部 sRGB プ ロ フ ァ イ ル (後述) を用い、 検索
は打ち切 ら れます。
> ICCProfile リ ソ ース カ テ ゴ リ 内にprofilename と い う 名前の リ ソ ース があ る か ど う か を調
べます。 も し あれば、 その値を フ ァ イ ル名 と し て以下の手順で用い ます。 その よ う な
リ ソ ース がない場合は、 profilename を フ ァ イ ル名 と し て直接用い ます。
> 前の手順で決定 さ れた フ ァ イ ル名を用い、下記の組み合わせを 1 つずつ順に試 し てみ る
こ と に よ り 、 デ ィ ス ク 上の フ ァ イ ルを検索 し ます :
<ファイル名>
<ファイル名>.icc
<ファイル名>.icm
<colordir>/<ファイル名>
<colordir>/<ファイル名>.icc
<colordir>/<ファイル名>.icm
Windows では colordir は、オペレーテ ィ ン グ シ ス テ ムがデバ イ ス依存 ICC プ ロ フ ァ イ ル
を格納 し てい る デ ィ レ ク ト リ を示 し ます (C:\WINNT\system32\ spool\drivers\color が典
型的)。 Mac OS X では colordir と し て下記のパ ス が試み ら れます :
/System/Library/ColorSync/Profiles
/Library/ColorSync/Profiles
/Network/Library/ColorSync/Profiles
~/Library/ColorSync/Profiles
その他のシ ス テ ムでは colordir を用い る 手順は省略 さ れます。
sRGB 色空間 と sRGB ICC プ ロ フ ァ イル PDFlib は、 sRGB (元 IEC 61966-2-1) と 呼ばれ
る 工業規格の RGB 色空間に対応 し てい ます。 sRGB は、 さ ま ざ ま な ソ フ ト ウ ェ アやハー ド
ウ ェ アのベン ダーが こ れに対応 し てお り 、デジ タ ルス チルカ メ ラ の よ う な消費者向け RGB
デバ イ スやカ ラ ープ リ ン タ ・ モニ タ の よ う な事務機器におけ る 簡単な カ ラ ーマネジ メ ン ト
のために広 く 利用 さ れてい ます。 PDFlib は sRGB 色空間に対応 し てお り 、 必要な ICC プ ロ
フ ァ イ ルデー タ を内蔵 し てい ます。 ですか ら sRGB プ ロ フ ァ イ ルを ク ラ イ ア ン ト が別途用
意す る 必要はな く 、 あ え て用意 し な く て も つねに利用可能です。 こ れ を 利用す る には、
load_iccprofile( ) を profilename=sRGB で呼び出 し ます。
画像に埋め込まれてい る プ ロ フ ァ イルの利用 (ICC タ グ付 き画像) 画像のなかには、 そ
の画像の色値の特徴を記述 し た ICC プ ロ フ ァ イ ルが埋め込まれてい る こ と があ り ます。た
と えば、埋め込まれた ICC プ ロ フ ァ イ ルは、画像デー タ の生成に用い ら れた ス キ ャ ナの色
特性を記述す る こ と がで き ます。 PDFlib では、 PNG ・ JPEG ・ TIFF 各画像フ ァ イ ル形式の
中に埋め込ま れた ICC プ ロ フ ァ イ ルを扱 う こ と がで き ます。 honoriccprofile オプシ ョ ン ま
たはパ ラ メ タ が true に設定 さ れてい る 場合 (デフ ォ ル ト ではそ う な っ てい ます)、 画像内
に埋め込ま れてい る ICC プ ロ フ ァ イ ルはその画像か ら 抽出 さ れ、 PDF 出力内に埋め込ま
れて、 Acrobat がその画像に適用で き る よ う に さ れます。 こ の処理は、 画像への ICC プ ロ
フ ァ イ ルの タ グ付け と 呼ばれ る こ と も あ り ます。PDFlib は画像の ピ ク セル値に変更は加え
ません。
image:iccprofile パ ラ メ タ を使 う と 、 画像内に埋め込まれてい る プ ロ フ ァ イ ルに対す る
ICC プ ロ フ ァ イ ルハン ド ルを得 る こ と がで き ます。 こ れは、 同 じ プ ロ フ ァ イ ルを複数の画
像に適用 し たい場合に有用です。
未知の ICC プ ロ フ ァ イ ル内の色要素数を調べ る には icccomponents パ ラ メ タ を用い ま
す。
3.5 色を扱 う
77
外部 ICC プ ロ フ ァ イ ルの画像への適用 ( タ グ付け) 画像に埋め込ま れてい る ICC プ ロ
フ ァ イ ルを使 う のではな く 、 外部プ ロ フ ァ イ ルを各画像に適用す る こ と も で き ます。 その
ためには load_image( ) の iccprofile オプシ ョ ンでプ ロ フ ァ イ ルハン ド ルを与え ます。
ページ記述用の ICC ベースの色空間 テ キ ス ト やベ ク ト ルグ ラ フ ィ ッ ク の色値は、 プ ロ
フ ァ イ ルに よ っ て指定 さ れ る ICC ベース の色空間で直接指定す る こ と がで き ます。まずは
色空間を、 setcolor:iccprofilegray ・ setcolor:iccprofilergb ・ setcolor:iccprofilecmyk の う ちのい
ずれかのパ ラ メ タ の値 と し てICCプ ロ フ ァ イ ルハン ド ルを与え る こ と に よ っ て設定す る 必
要が あ り ま す。 つづいて次の よ う に、 ICC ベー ス の色値を、 iccbasedgray ・ iccbasedrgb ・
iccbasedcmyk の う ちのいずれかの色空間キーワー ド と と も に、 setcolor( ) に与え る こ と が
で き ます。
p.set_parameter("errorpolicy", "return");
icchandle = p.load_iccprofile(...);
if (icchandle == -1)
{
return;
}
p.set_value("setcolor:iccprofilecmyk", icchandle);
p.setcolor("fill", "iccbasedcmyk", 0, 1, 0, 0);
ICC ベースのデ フ ォ ル ト 色空間へデバ イ ス カ ラ ー を対応づけ PDF には、 ページ記述中
のデバ イ ス依存な グ レー ・ RGB ・ CMYK の色をデバ イ ス独立色に対応づけ る 機能があ り ま
す。 こ れを利用す る と 、 その ま ま ではデバ イ ス依存な色値に対 し て、 正確な測色指定を与
え る こ と がで き ます。 こ の方式で色値を対応づけ さ せ る には、 DefaultGray ・ DefaultRGB ・
DefaultCMYK の う ちのいずれかの色空間定義を与え る 必要があ り ます。PDFlib で こ れを実
現す る には、 begin_page_ext( ) の defaultgray ・ defaultrgb ・ defaultcmyk オプシ ョ ン を設定
し て、 ICC プ ロ フ ァ イ ルハン ド ルを その値 と し て与え ます。 下記の作成例では、 sRGB 色
空間を、 テ キ ス ト ・ 画像 ・ ベ ク ト ルグ ラ フ ィ ッ ク のデフ ォ ル ト RGB 色空間 と し て設定 し
てい ます :
/* sRGBはつねに利用できることが保証済 */
icchandle = p.load_iccprofile("sRGB", 0, "usage=iccbased");
p.begin_page_ext(595, 842, "defaultrgb=" + icchandle);
PDF/X ・ PDF/A のための出力 イ ン テ ン ト を定義 出力デバ イ ス (プ リ ン タ ) のプ ロ フ ァ イ
ルを用いて、 PDF/X のための出力条件を指定す る こ と がで き ます。 そのためには、 load_
iccprofile( ) への呼び出 し で usage=outputintent を指定 し ます。 PDF/A に対 し ては、 あ ら
ゆ る 種類のプ ロ フ ァ イ ルを出力 イ ン テ ン ト と し て指定で き ます。詳 し く は 251 ページ「10.3
PDF/X に よ る 印刷出力」 と 258 ページ 「10.4 PDF/A に よ る アーカ イ ビ ン グ」 を参照 し て
く だ さ い。
78
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
3.6 さ ま ざ ま な イ ン タ ラ ク テ ィ ブ要素
ク ッ ク ブ ッ ク イ ン タ ラ ク テ ィ ブ要素を作成する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの interactive カ
テ ゴ リ にあ り ます。
3.6.1 リ ン ク ・ し お り ・ 注釈
こ の項では、 し お り ・ フ ォーム フ ィ ール ド ・ 注釈 と いっ た さ ま ざ ま な イ ン タ ラ ク テ ィ ブ要
素の作成方法を説明 し ます。 こ の項で作成す る つ も り の イ ン タ ラ ク テ ィ ブ要素がすべてで
き あがっ た完成文書を図 3.1 に示 し ます。 こ の文書には以下の イ ン タ ラ ク テ ィ ブ要素があ
り ます。
> 右上には、テ キ ス ト www.kraxi.com の所に、www.kraxi.com への非表示の Web リ ン ク が
あ り ます。 こ の領域を ク リ ッ ク す る と 、 指定 さ れた Web ページが表示 さ れます。
> 灰色の フ ォーム フ ィ ール ド が、 種類はテ キ ス ト で、 Web リ ン ク の下に作っ て あ り ます。
JavaScript を使っ て こ こ には今日の日付が自動的に記入 さ れます。
> 赤い押 し ピ ンは添付を持っ た注釈です。 ク リ ッ ク す る と フ ァ イ ル添付が開 き ます。
> 左下にはフ ォ ーム フ ィ ール ド があ り 、 種類はボ タ ン で、 プ リ ン タ のア イ コ ン を表示 し
てい ます。 こ のボ タ ン を ク リ ッ ク す る と Acrobat の メ ニ ュ ー項目 「フ ァ イル」 → 「印
刷」 が実行 さ れます。
> ナビ ゲーシ ョ ンパネルには し お り 「Our Paper Planes Catalog」 があ り ます。 こ の し お り
を ク リ ッ ク する と 、 別の PDF 文書のページが表示 さ れます。
以下、 こ う し た イ ン タ ラ ク テ ィ ブ要素を PDFlib で作成す る 方法を詳 し く 説明 し ます。
Web リ ン ク まずは、 Web サ イ ト www.kraxi.com への リ ン ク を作 り ま し ょ う 。 こ れは 3
つの段階で達成で き ます。 まず、 Web リ ン ク をつけたいテ キ ス ト を配置 し ます。 matchbox
オプシ ョ ンで name=kraxi を指定 し て、 テ キ ス ト のはめ込み枠を後で参照で き る よ う に し
てお き ます。
次に、 URI 型 (Acrobat では 「Web ページ を開 く 」) のア ク シ ョ ン を作成 し ます。 す る
と ア ク シ ョ ンハン ド ルが得 ら れます。 こ のア ク シ ョ ンハン ド ルは後で イ ン タ ラ ク テ ィ ブ要
素 (複数可) に割 り 当て る こ と がで き ます。
最後に、 リ ン ク を実際に作成 し ます。 PDF では リ ン ク は Link 型の注釈です。 リ ン ク に
対す る action オプシ ョ ンでは、 イ ベン ト 名 activate を指定 し てア ク シ ョ ン を ト リ ガ さ せ、
加え て上記で作成 し た act ハン ド ルを ア ク シ ョ ン内容 と し て与え ます。 デフ ォ ル ト では リ
ン ク は細い黒枠線がついて表示 さ れます。最初の う ちは こ のほ う が位置合わせを正確にで
き て便利ですが、 こ こ では linewidth=0 で枠線を非表示に し て あ り ます。
図 3.1
い ろ い ろ なハイパーテキス
ト 要素を持つ文書
3.6 さ ま ざ ま な イ ン タ ラ ク テ ィ ブ要素
79
normalfont = p.load_font("Helvetica", "unicode", "");
p.begin_page_ext(pagewidth, pageheight, "topdown");
/* テキスト行「Kraxi Systems, Inc.」を配置。範囲枠を使用 */
String optlist =
"font=" + normalfont + " fontsize=8 position={left top} " +
"matchbox={name=kraxi} fillcolor={rgb 0 0 1} underline";
p.fit_textline("Kraxi Systems, Inc.", 2, 20, optlist);
/* URIアクションを作成 */
optlist = "url={http://www.kraxi.com}";
int act = p.create_action("URI", optlist);
/* 範囲枠「kraxi」上にLink注釈を作成 */
optlist = "action={activate " + act + "} linewidth=0 usematchbox={kraxi}";
/* 矩形座標の0は範囲枠の座標に置き換えられる */
p.create_annotation(0, 0, 0, 0, "Link", optlist);
p.end_page_ext("");
画像やテ キ ス ト フ ロ ーの一部への Web リ ン ク の作成例については 226 ページ 「8.4 範囲
枠」 を参照 し て く だ さ い。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの interactive/link_annotations ト ピ ッ ク にあ り ま
す。
別の フ ァ イルに移動す る し お り 今度は、別の PDF フ ァ イ ルに移動する し お り 「Our Paper
Planes Catalog」 を作成 し ま し ょ う 。 フ ァ イ ル名は paper_planes_catalog.pdf であ る も の と
し ます。 まず、 GoToR 型のア ク シ ョ ン を作成 し ます。 こ のア ク シ ョ ンに対す る オプシ ョ ン
リ ス ト で、 移動先文書の名前を filename オプシ ョ ンで定義 し ます。 ま た destination オプ
シ ョ ンで、 拡大表示 さ せたいページ内の一部分を指定 し ます。 具体的には、 表示 さ れ る の
は文書の 2 ページ目で (page 2)、 位置 ・ 倍率指定表示で (type fixed)、 ページの中頃が表
示 さ れ (left 50 top 200)、 表示倍率 200% (zoom 2) と な り ます。
String optlist =
"filename=paper_planes_catalog.pdf " +
"destination={page 2 type fixed left 50 top 200 zoom 2}";
goto_action = p.create_action("GoToR", optlist);
次の段階 と し て、 実際に し お り を作成 し ます。 こ の し お り に対する action オプシ ョ ンで、
ア ク シ ョ ンの ト リ ガ と し て activate イ ベン ト を指定 し 、 起 こ し たいア ク シ ョ ン と し て上で
作成 し た goto_action ハン ド ルを指定 し ます。 fontstyle bold オプシ ョ ンで太字のテ キ ス ト
を指定 し 、textcolor {rgb 0 0 1} で し お り を青 く し ます。し お り のテ キ ス ト 「Our Paper Planes
Catalog」 は関数の引数 と し て与え ます。
String optlist=
"action={activate " + goto_action + " } fontstyle=bold textcolor={rgb 0 0 1}";
catalog_bookmark = p.create_bookmark("Our Paper Planes Catalog", optlist);
こ の し お り を ク リ ッ ク す る と 、 移動先文書内のページの指定部分が表示 さ れます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの interactive/nested_bookmarks ト ピ ッ ク にあ り ま
す。
80
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
フ ァ イル添付に よ る注釈 次に、 フ ァ イ ル添付を作成 し ます。 まず FileAttachment 型の
注釈を作成 し ます。 filename オプシ ョ ンで添付の名前を指定 し 、 mimetype image/gif オプ
シ ョ ンでその種類を指定 し ます (MIME はフ ァ イ ル内容の分類のために広 く 使われてい る
記述方式) 。 こ の し お り は 押 し ピ ン と し て 表示 さ れ (iconname pushpin) 、 色は赤 で
(annotcolor {rgb 1 0 0})、 説明を持ち ます (contents {Get the Kraxi Paper Plane!})。 印刷 さ れ
ません (display noprint)。
String
optlist =
"filename=kraxi_logo.gif mimetype=image/gif iconname=pushpin " +
"annotcolor={rgb 1 0 0} contents={Get the Kraxi Paper Plane!} display=noprint";
p.create_annotation(left_x, left_y, right_x, right_y, "FileAttachment", optlist);
なお、 iconname で定義 し た ア イ コ ンの大 き さ は変化 し ません。 ア イ コ ンはその標準サ イ
ズの ま ま、 指定 し た矩形の左上隅に表示 さ れます。
3.6.2 フ ォ ーム フ ィ ール ド ・ JavaScript
印刷ボ タ ン フ ォ ーム フ ィ ール ド 次に、 文書の印刷に使え る ボ タ ン フ ォ ーム フ ィ ール ド
を作成 し ます。 最初のバージ ョ ンではボ タ ンに ラ ベルをつけてお き ます。 その後で ラ ベル
をやめてプ リ ン タ のア イ コ ン を使い ま し ょ う 。 まず Named 型 (Acrobat では 「 メ ニ ュ ー項
目を実行」 ) のア ク シ ョ ン を作成 し ます。 ま た、 ラ ベルの フ ォ ン ト も 指定 し てお く 必要が
あ り ます。
print_action = p.create_action("Named", "menuname=Print");
button_font = p.load_font("Helvetica-Bold", "unicode", "");
こ のボ タ ン フ ォーム フ ィ ール ド に対す る action オプシ ョ ンで、ア ク シ ョ ン実行の ト リ ガ と
し て up イ ベン ト (Acrobat では 「マウスボ タ ン を放す」) を指定 し 、 ア ク シ ョ ン その も の
と し て上で作成 し た print_action ハン ド ルを指定 し ます。 backgroundcolor {rgb 1 1 0} オプ
シ ョ ンで背景を黄色に指定 し 、 bordercolor {rgb 0 0 0} で枠線を黒に指定 し ます。 オプシ ョ
ン caption Print でボ タ ンにテ キ ス ト Print をつけ、 tooltip {Print the document} でユーザー
のための追加説明を作成 し ます。 font オプシ ョ ンで、 上で作成 し た button_font ハン ド ル
を用いて フ ォ ン ト を指定 し ます。 デフ ォ ル ト では、 ラ ベルのサ イ ズはボ タ ンの領域にち ょ
う ど収ま る よ う 自動調整 さ れます。 そ し て、 実際にボ タ ン フ ォーム フ ィ ール ド を作成す る
際に、適当な座標 と 、名前 print_button、pushbutton 型、適切なオプシ ョ ン群を指定 し ます。
String
optlist =
"action {up " + print_action + "} backgroundcolor=yellow " +
"bordercolor=black caption=Print tooltip={Print the document} font=" +
button_font;
p.create_field(left_x, left_y, right_x, right_y, "print_button", "pushbutton", optlist);
それでは、 こ の最初のバージ ョ ンのボ タ ン を改良 し て、 テ キ ス ト Print をやめて小 さ いプ
リ ン タ ア イ コ ン に替 え て み ま し ょ う 。 こ れ を 達成す る には、 そ の画像 フ ァ イ ル print_
icon.jpg を テ ンプ レー ト と し てページ作成前に読み込みます。 icon オプシ ョ ン を用いてテ
ンプ レー ト ハン ド ル print_icon を ボ タ ン フ ィ ール ド に割 り 当てつつ、 上記の コ ー ド と 同様
に フ ォーム フ ィ ール ド を作成 し ます。
print_icon = p.load_image("auto", "print_icon.jpg", "template");
if (print_icon == -1)
{
3.6 さ ま ざ ま な イ ン タ ラ ク テ ィ ブ要素
81
/* エラー処理 */
return;
}
p.begin_page_ext(pagewidth, pageheight, "");
...
String optlist = "action={up " + print_action + "} icon=" + print_icon +
" tooltip={Print the document} font=" + button_font;
p.create_field(left_x, left_y, right_x, right_y, "print_button", "pushbutton", optlist);
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの interactive/form_pushbutton ト ピ ッ ク にあ り ま
す。
単純な テキス ト フ ィ ール ド 今度は、 テ キ ス ト フ ィ ール ド をページ右上隅付近に作成 し
ます。 ユーザーは今日の日付を こ の フ ィ ール ド に入力す る こ と がで き ます。 フ ォ ン ト ハン
ド ルを取得 し 、 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);
デフ ォ ル ト では文字サ イ ズは auto であ り 、 こ の場合フ ィ ール ド の高 さ がその ま ま初期の
文字サ イ ズ と な り ます。入力が フ ィ ール ド の終わ り ま で達す る と 文字サ イ ズは小 さ く な っ
て、 テ キ ス ト がつねに フ ィ ール ド に収ま る よ う 自動調整 さ れます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの
interactive/form_textfield_layout ・
interactive/form_textfield_height ト ピ ッ ク にあ り ます。
JavaScript を持つ テキス ト フ ィ ール ド 上で作成 し た テ キ ス ト フ ォ ー ム フ ィ ール ド を改
良 し て、 ページ を開 く と 自動的に今日の日付が記入 さ れ る よ う に し ま し ょ う 。 第一段階 と
し て、 JavaScript 型 (Acrobat では 「JavaScript を実行」) のア ク シ ョ ン を作成 し ます。 こ の
ア ク シ ョ ンのオプシ ョ ン リ ス ト の中の script オプシ ョ ンで JavaScript ス ニペ ッ ト を定義 し
ます。 こ の ス ニペ ッ ト は、 今日の日付を date テ キ ス ト フ ィ ール ド に月日年形式で表示 し
ます。
String optlist =
"script={var d = util.printd('mmm dd yyyy', new Date()); "
"var date = this.getField('date'); date.value = d;}"
show_date = p.create_action("JavaScript", optlist);
第二段階 と し て、 ページ を作成 し ます。 オプシ ョ ン リ ス ト で action オプシ ョ ン を与え、 そ
の中で、 上で作成 し た show_date ア ク シ ョ ン を ト リ ガ イ ベン ト open (Acrobat では 「ペー
ジ を開 く 」) に対 し て設定 し ます。
String optlist = "action={open " + show_date + "}";
p.begin_page_ext(pagewidth, pageheight, optlist);
最終段階 と し て、 上 と 同様にテ キ ス ト フ ィ ール ド を作成 し ます。 ページ を開 く たび、 こ こ
に自動的に今日の日付が記入 さ れます。
textfield_font = p.load_font("Helvetica-Bold", "winansi", "");
String optlist = "backgroundcolor={gray 0.8} font=" + textfield_font;
p.create_field(left_x, left_y, right_x, right_y, "date", "textfield", optlist);
82
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの interactive/form_textfield_fill_with_js ト ピ ッ
ク にあ り ます。
テキス ト フ ィ ール ド の さ ま ざ ま な フ ォ ーマ ッ ト オ プ シ ョ ン Acrobat で は、 テ キ ス ト
フ ィ ール ド に対 し て さ ま ざ ま なオプシ ョ ン を指定 し て内容を フ ォ ーマ ッ ト す る こ と が可
能です。 た と えば通貨 ・ 日付 ・ パーセ ン ト な ど です。 こ れは、 カ ス タ ムの JavaScript コ ー
ド を Acrobat が使用す る こ と に よ っ て実装 さ れてい ます。 こ う いっ た フ ォーマ ッ ト 機能は
PDF リ フ ァ レ ン ス には記載 さ れていない物ですか ら 、PDFlib は直接には こ れに対応を し て
い ま せん。 し か し なが ら 、 PDFlib ユーザーの便宜を図 る ため、 以下、 フ ォ ーマ ッ ト オプ
シ ョ ン を実現す る ための簡単な JavaSctipt コ ー ド を create_field( ) の action オプシ ョ ンで与
え る 方法について説明 し ます。
テ キ ス ト フ ィ ール ド が フ ォーマ ッ ト さ れ る よ う にす る には、 JavaScript ス ニペ ッ ト を テ
キ ス ト フ ィ ール ド の keystroke ・ format のア ク シ ョ ン と し て設定 し ます。 その JavaScript
コ ー ド か ら 何 ら かの内部 Acrobat 関数を呼び出 し 、 こ の関数の引数群で フ ォーマ ッ ト の詳
細を制御 し ます。
以下の作成例では、 keystroke ・ format の 2 つのア ク シ ョ ン を作成 し 、 こ れ ら を 1 つの
フ ォーム フ ィ ール ド に対 し て設定 し て、 フ ィ ール ド 内容の フ ォーマ ッ ト が小数点以下の桁
数 2 ・ 通貨記号 EUR と な る よ う に し てい ます。
keystroke_action = p.create_action("JavaScript",
"script={AFNumber_Keystroke(2, 0, 3, 0, \"EUR \", true); }");
format_action = p.create_action("JavaScript",
"script={AFNumber_Format(2, 0, 0, 0, \"EUR \", true); }");
String
optlist = "font=" + font + "action={keystroke " + keystroke_action +
" format=" + format_action + "}";
p.create_field(50, 500, 250, 600, "price", "textfield", optlist);
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの interactive/form_textfield_input_format ト ピ ッ
ク にあ り ます。
Acrobat で対応 し てい る さ ま ざ ま な フ ォーマ ッ ト を指定す る には、 それぞれ適切な関数を
JavaScript コ ー ド 内で用い る 必要があ り ます。 対応 し てい る すべての フ ォーマ ッ ト につい
て、 それぞれ実現す る ために keystroke ・ format ア ク シ ョ ンで用い る べ き JavaScript 関数名
を表 3.6 に挙げます。 表 3.7 は 関数の引数の解説です。 こ れ ら の関数を、 上記の例 と 同様
に使用 し て く だ さ い。
表 3.6 テキス ト フ ィ ール ド のための JavaScript フ ォ ーマ ッ ト 関数一覧
フ ォ ーマ ッ ト
keystroke ・ format ア ク シ ョ ン で用いるべき JavaScript 関数
数値
AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend)
AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend)
パーセ ン ト
AFPercent_Keystroke(ndec, sepStyle), AFPercent_Format(ndec, sepStyle)
日付
AFDate_KeystrokeEx(cFormat), AFDate_FormatEx(cFormat)
時間
AFTime_Keystroke(tFormat), AFTime_FormatEx(cFormat)
特殊
AFSpecial_Keystroke(psf), AFSpecial_Format(psf)
3.6 さ ま ざ ま な イ ン タ ラ ク テ ィ ブ要素
83
表 3.7 JavaScript フ ォ ーマ ッ ト 関数に対するパラ メ タ 一覧
パラ メ タ
説明 ・ と り う る値
nDec
小数点以下の桁数
sepStyle
区切 り のス タ イル。
0
1,234.56
negStyle
1
1234.56
2
1.234,56
3
1234,56
負数の表記方法。
0
標準
1
赤い字にする
2
かっ こ で く く る
3
両方
strCurrency
通貨記号文字列。 例 : \u20AC でユーロ記号
bCurrencyPrepend
false
通貨記号を頭につけない
true
通貨記号を頭につける
cFormat
日付形式文字列。 以下の形式指定文字列を含む こ と がで き るほか、 後述の tFormat の時刻
形式を どれで も含む こ と がで き る。
d
日
tFormat
psf
84
dd
日の頭にゼロ を適宜つけた もの
ddd
曜日の短縮形
m
月を数で表す
mm
月を数で表 し 頭にゼロ を適宜つけた もの
mmm
月名の短縮形
mmmm
月名の全体形
yyyy
年の 4 桁
yy
年の下 2 桁
時刻形式文字列。 以下の形式指定文字列を含む こ と がで き る。
h
時 (0 ∼ 12)
hh
時 (0 ∼ 12) の頭にゼロ を適宜つけた もの
H
時 (0 ∼ 24)
HH
時 (0 ∼ 24) の頭にゼロ を適宜つけた もの
M
分
MM
分の頭にゼロ を適宜つけた もの
s
秒
ss
秒の頭にゼロ を適宜つけた もの
t
午前 「a」、 午後 「p」
tt
午前 「am」、 午後 「pm」
特殊オプ シ ョ ン。
0
ZIP コ ー ド
1
ZIP コ ー ド + 4
2
電話番号
3
社会保障番号
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
3.7 地理空間 PDF
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの interactive/starter_geospatial ト ピ ッ ク にあ り
ます。
3.7.1 GeoPDF を Acrobat で使 う
PDF 1.7ext3 では、 地理空間参照情報 (世界座標) を PDF ページ内容に追加す る こ と がで
き る よ う にな っ てい ます。 Acrobat 9 では、 地理空間参照付 き PDF 文書 (縮めて GeoPDF)
でい く つかの こ と がで き ます :
> マ ウ ス カー ソ ルの下の地図上の位置の座標を表示 : 「ツール」 → 「分析」 → 「地図位置
ツール」 。 マ ウ ス カー ソ ルの下の地図上の位置の座標を、 右 ク リ ッ ク し て 「座標を ク
リ ッ プボー ド に コ ピー」 を選択す る こ と で コ ピーで き ます。
> 地図上の位置 を検索 : 「ツ ール」 → 「分析」 → 「地図位置ツ ール」 →右 ク リ ッ ク し て
「位置を検索」 を選択→求め る 座標を入力。
> 地図上の位置を マー ク : 「ツール」 → 「分析」 → 「地図位置ツール」 →右 ク リ ッ ク し て
「位置を マー ク」 を選択。
> 地図上の距離 ・ 周辺 ・ 面積を測定 : 「ツール」 → 「分析」 → 「もの さ し ツール」。
> 座標表示に用いたい座標系等、 地理空間測定の さ ま ざ ま な設定を、 「編集」 → 「環境設
定」 → 「一般 ...」 → 「 もの さ し (地図情報)」 で変更す る こ と がで き ます。
PDFlib の地理空間機能は下記の関数 と オプシ ョ ンで実装 さ れてい ます :
> 1 つのページに対 し て、1 つない し 複数の地理参照付 き 領域を、begin/end_page_ext( ) の
viewports オプシ ョ ンで割 り 当て る こ と がで き ます。 ビ ュ ーポー ト を使 う と 、 ページ上
の別々の領域で別々の地理空間参照 (georeference オプシ ョ ンで指定) を用い る こ と が
可能にな り ます。 こ れはた と えば同一ページ上に複数の地図があ る と き な ど に有用で
す。
> load_image( ) の georeference オプシ ョ ン を使 う と 、画像に地球ベース の座標を割 り 当て
る こ と がで き ます。
3.7.2 地理座標系 と 投影座標系
地理座標系は地球を地理座標で、 すなわち緯度 と 経度を度単位で表 し て記述 し ます。 投影
座標系は、 地理座標系の上に指定す る こ と がで き 、 地理座標系におけ る 点か ら 二次元 (投
影) 座標系への変換を記述 し ます。 こ こ か ら 算出 さ れ る 座標を Northing ・ Easting 値 と い
い、 投影座標系では角度は も はや不要です。 地理座標系が GPS な ど の全球的応用分野で
用い ら れてい る のに対 し て、投影はそれ よ り も あ る 程度局地的な地図製作な ど の応用分野
で必要 と な り ます。
歴史的 ・ 数学的理由に よ り 、 世界 じ ゅ う で さ ま ざ ま な座標系が用い ら れてい ます。 地
理座標系 ・ 投影座標系 と も 、 EPSG ・ WKT と い う 2 種類の普及 し た方式で記述す る こ と が
で き ます。
EPSG EPSG は何千 も の座標系の集合で あ り 、 おのおのが数値 コ ー ド で参照 さ れ ま す。
EPSG は、 今はな き 欧州石油調査グループの略称であ り 、 現在は国際石油 ・ 天然ガ ス生産
者協会 (OGP) に よ っ て保守 さ れてい ます。
EPSG 参照コ ー ド は、 EPSG デー タ ベース内の座標系群の う ちの 1 つを指 し 示 し ます。
EPSG デー タ ベース全体を、 下記の場所か ら ダ ウ ン ロ ー ド す る こ と がで き ます :
www.epsg.org
3.7 地理空間 PDF
85
WKT (Well-known text) WKT (Well-Known Text) 系は記述的であ り 、 座標系のあ ら ゆ
る 関 連 パ ラ メ タ の テ キ ス ト 表記 か ら 成 っ て い ま す。 WKT の 仕 様 は 文 書 「OpenGIS®
Implementation Specification: Coordinate Transformation Services」 に示 さ れてお り 、 こ の文
書は Open Geospatial Consortium (OGC) に よ っ て Document 01-009 と し て発行 さ れてい
ます。 こ れは下記の場所で入手可能です :
www.opengeospatial.org/standards/ct
WKT は ISO 19125-1 で標準化 も さ れてい ます。 WKT ・ EPSG と も Acrobat で使用で き ます
(ま た、 PDFlib で も 対応 し てい ます) が、 Acrobat 9 はすべての可能な EPSG コ ー ド を実装
し てい る わけではあ り ません。 と く に、 地理座標系のための EPSG コ ー ド 群には Acrobat
は対応 し ていない よ う です。 その場合には WKT の使用を推奨 し ます。 下記の Web サ イ ト
で、 特定の EPSG コ ー ド に対応す る WKT を示 し てい ます :
www.spatialreference.org/ref/epsg
3.7.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]]
}}
ETRS (欧州地球基準系) 地理座標系は WGS84 と ほ と ん ど等価です。 こ れは下記の よ う に
指定で き ます :
worldsystem={type=geographic wkt={
GEOGCS["ETRS_1989",
DATUM["ETRS_1989", SPHEROID["GRS_1980", 6378137.0, 298.257222101]],
PRIMEM["Greenwich", 0.0],
UNIT["Degree", 0.0174532925199433]]
}}
注 WGS84 ・ ETRS 系に対する EPSG コ ー ド は こ こ では示 し ていません。 なぜな ら Acrobat は地
理座標系に対する EPSG コ ー ド に対応 し てお ら ず、 投影座標系に し か対応 し ていないよ う
だか ら です (後述)。
投影座標系関連の作成例 投影は、 その背景に あ る 地理座標系に基づいてい ま す。 下記
の例では、 GPS 座標での利用に適 し た投影座標系を指定 し ます。
中欧では、 ETRS89 UTM zone 32 N と い う 系が適用 さ れます。 こ れは広 く 利用 さ れてい
る UTM (国際 メ ルカ ト ル投影) を用いてお り 、 下記の よ う に georeference オプシ ョ ンの
worldsystem サブオプシ ョ ン で表現で き ます :
worldsystem={type=projected wkt={
PROJCS["ETRS_1989_UTM_Zone_32N",
GEOGCS["GCS_ETRS_1989",
DATUM["D_ETRS_1989", SPHEROID["GRS_1980", 6378137.0, 298.257222101],
TOWGS84[0, 0, 0, 0, 0, 0, 0]],
PRIMEM["Greenwich", 0.0],
86
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
UNIT["Degree", 0.0174532925199433]],
PROJECTION["Transverse_Mercator"],
PARAMETER["False_Easting", 500000.0],
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]]
}}
こ の座標系に対応す る EPSG コ ー ド は 25832 です。WKT のかわ り に、上記の系はその EPSG
コ ー ド を通 じ て下記の よ う に指定す る こ と も で き ます :
worldsystem={type=projected epsg=25832}
3.7.4 Acrobat 9 におけ る GeoPDF の制約
GeoPDF を Acrobat 9 で扱 う なかで、 私た ちは下記の難点に遭遇 し てい ます (Acrobat 9.3.1
ま で試 し た結果) :
> EPSG コ ー ド は地理座標系に対 し ては ま っ た く 動作せず、投影系に対 し てのみ動作す る
よ う です。
回避策 : EPSG コ ー ド でな く 、 対応す る WKT を使 う こ と 。
> 地理空間デー タ を ベ ク ト ル オ ブ ジ ェ ク ト に紐付 け て も 正 し く 動作 し ま せ ん。 PDF
Reference に よ れば こ れは理論上動作す る はずなのですが、 こ の理由か ら PDFlib では、
open_pdi_page( ) ・ begin_template_ext( ) に対す る georeference オプシ ョ ンには対応 し
てい ません。
ベ ク ト ルベース の地図を作成す る ための回避策 : 地理空間デー タ をページに紐付け る
こ と はで き ます。 すなわち、 begin_page_ext( ) の viewports オプシ ョ ン を用い ます。
> 重な り 合っ た地図 : 同一ページ上に複数の画像ベース の地図を貼 り 付け る こ と がで き
ます。 複数の地図が重な り 合っ てい る と き 、 重な り 合っ てい る 領域内の点の座標を表
示 さ せる と 、 Acrobat は、 最後に貼 り 付け ら れた地図の座標を用い ます ( こ れがすなわ
ち見えてい る 地図で も あ り ますので こ れは理にかな っ てい ます)。 し か し 、 双方の画像
ハン ド ルが同一の (すなわち load_image( ) への 1 回の呼び出 し で取得 さ れた) 場合に
は、 Acrobat は も はや さ ま ざ ま な画像の領域を考慮 し な く な り 、 1 番目の画像の座標が
誤っ て 2 番目の画像の領域へ拡張 さ れ、 誤っ た座標表示 と な っ て し ま い ます。
回避策:同一ページ上に同 じ 画像をベース に し た地図を複数枚貼 り 付けたい と き は、そ
の画像を複数回開 く こ と 。
> 面積 も の さ し ツールは地理座標系に対 し ては正 し く 動作せず、 投影系に対 し てのみ正
し く 動作 し ます。
3.7 地理空間 PDF
87
88
第 3 章 : PDFlib 文書を作成 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
4 Unicode と レ ガシエ ン コ ーデ ィ ング
こ の章では、 Unicode やその他のエン コ ーデ ィ ン グ方式に関す る 基礎的な情報を提供 し ま
す。 PDFlib におけ る テ キ ス ト 処理は Unicode 規格に大き く 依存 し てい ますが、 さ ま ざ ま な
レ ガシエン コ ーデ ィ ン グや特殊エン コ ーデ ィ ン グに も 対応 し てい ます。
4.1 Unicode の重要な概念
キ ャ ラ ク タ と グ リ フ テ キ ス ト を扱 う 際には、 次の概念を は っ き り 区別す る こ と が大切
です。
> キ ャ ラ ク タ は、 言語の中で情報を伝達す る 最小の単位です。 代表的な例は ラ テ ン アル
フ ァ ベ ッ ト の文字、 中国語の表意文字、 日本語の音節文字です。 キ ャ ラ ク タ は意味を
持ち ます。 すなわち キ ャ ラ ク タ は意味実体です。
> グ リ フは、 さ ま ざ ま な視覚表現で、 1 個ない し 複数のキ ャ ラ ク タ を表 し ます。 グ リ フは
外見を持ち ます。 すなわち グ リ フは表現実体です。
キ ャ ラ ク タ と グ リ フ の間に一対一の対応は存在 し ません。た と えば合字は 1 つのグ リ フ で
すが、 2 つ以上のキ ャ ラ ク タ で表現 さ れます。 か と 思えば、 1 つのグ リ フ が場面に よ っ て
別々のキ ャ ラ ク タ を表すのに使われ る こ と も あ り ます (キ ャ ラ ク タ には同 じ 形の も のがあ
り ます。 図 4.1 参照)。
BMP と PUA 下記の用語が Unicode ベース の環境では頻繁に登場 し ます :
> 基本多言語面 (BMP) : Unicode の範囲 U+0000 ∼ U+FFFF 内の コ ー ド 点か ら 成 り ます。
Unicode 規格は こ のほかに も 多 く の コ ー ド 点を、 追加面群、 すなわち範囲 U+10000 ∼
U+10FFFF 内に含んでい ます。
> 私用領域 (PUA):私用のために予約 さ れてい る い く つかの領域の 1 つです。PUA の コ ー
ド 点は一般的なや り と り には利用で き ません。 なぜな ら 、 Unicode 規格では こ の領域の
中にいかな る キ ャ ラ ク タ を も 指定 し ていないか ら です。基本多言語面は範囲 U+E000 ∼
U+F8FF に PUA を含んでい ます。第 15 面 (U+F0000 ∼ U+FFFFD) と 第 16 面(U+100000
∼ U+10FFFD) は私用のためにすっか り 予約 さ れてい ます。
図 4.1
グ リ フ とキャ ラ ク タ
の関係
4.1 Unicode の重要な概念
89
Unicode エ ン コ ーデ ィ ン グ形式 (UTF 形式) Unicode 標準は各キ ャ ラ ク タ に数 ( コ ー ド
点) を割 り 当ててい ます。 こ の数を コ ン ピ ュ ー タ 処理で使 う には、 何 ら かの方式で表現 し
なければな り ません。 Unicode 標準では こ れを エン コ ーデ ィ ン グ形式 と 呼びます (旧称 :
変換形式)。 こ の用語はフ ォ ン ト のエン コ ーデ ィ ン グ と 混同 し てはいけ ません。 Unicode は
以下のエン コ ーデ ィ ン グ形式を定義 し てい ます。
> UTF-8: こ れは可変幅の形式で、 コ ー ド 点は 1 ∼ 4 バ イ ト で表 さ れます。範囲 U+0000 ∼
U+007F の ASCII キ ャ ラ ク タ は範囲 00 ∼ 7F のシ ン グルバ イ ト で表 さ れます。 範囲
U+00A0 ∼ U+00FF の Latin-1 キ ャ ラ ク タ は 2 バ イ ト で表 さ れ、 その第一バ イ ト はつね
に 0xC2 か 0xC3 にな り ます ( こ れ ら の値は Latin-1 で Â と Ã を表 し ます)。
> UTF-16 : 基本多言語面 (BMP) の コ ー ド 点は 1 つの 16 ビ ッ ト 値で表 さ れます。補助多言
語面の コ ー ド 点、すなわち範囲 U+10000 ∼ U+10FFFF の コ ー ド 点は 16 ビ ッ ト 値の対で
表 さ れます。 こ の対をサ ロ ゲー ト ペア と 呼びます。 1 つのサ ロ ゲー ト 値は、 範囲 D800
∼ DBFF の高位サ ロ ゲー ト 値 1 つ と 範囲 DC00 ∼ DFFF の低位サ ロ ゲー ト 値 1 つか ら
成っ てい ます。 高位 と 低位のサ ロ ゲー ト 値はサ ロ ゲー ト ペアの中にのみ現れ、 他の場
面で使われ る こ と はあ り ません。
> UTF-32 : 各 コ ー ド 点は 1 つの 32 ビ ッ ト 値で表 さ れます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/process_utf8 ト ピ ッ ク にあ り ます。
Unicode エ ン コ ーデ ィ ン グ体系 と バ イ ト 順序マー ク (BOM) コ ン ピ ュ ー タ ア ー キ テ ク
チ ャ は種類に よ っ て、 バ イ ト の並べ方が違い ま す。 すなわちバ イ ト が よ り 大 き な値 (16
ビ ッ ト や 32 ビ ッ ト ) を構成す る と き 、 最上位バ イ ト を最初に格納す る 方式 (ビ ッ グエン
デ ィ ア ン) と 、 最下位バ イ ト を最初に格納す る 方式 ( リ ト ルエ ンデ ィ ア ン) があ り ます。
ビ ッ グエンデ ィ ア ン アーキ テ ク チ ャ の代表例は PowerPC であ り 、一方 x86 アーキ テ ク チ ャ
は リ ト ルエンデ ィ ア ンです。UTF-8 と UTF-16 はシ ン グルバ イ ト よ り 大 き な値を用いてい
ま すので、 やは り バ イ ト の並べ方を論 じ る 必要が出て き ま す。 エ ン コ ーデ ィ ン グ体系は
(上述のエン コ ーデ ィ ン グ形式 と は違 う ので注意)、エン コ ーデ ィ ン グ形式に加え てバ イ ト
順序を指定 し ます。 た と えば UTF-16BE は、 UTF-16 でバ イ ト 順序はビ ッ グエンデ ィ ア ン
と い う 意味です。 バ イ ト 順序があ ら か じ めわか ら ない と き は、 それを指定す る 手段 と し て
コ ー ド 点 U+FEFF があ り ま す。 こ れをバ イ ト 順序マー ク (BOM) と いい ます。 BOM は
UTF-8 では不要ですが、 存在 し ていて も よ く 、 それを利用 し てバ イ ト ス ト リ ーム を UTF8 と 同定す る こ と も で き ます。 さ ま ざ ま なエン コ ーデ ィ ン グ形式に対する BOM の表 し 方
を表 4.1 に示 し ます。
表 4.1 さ ま ざ ま な Unicode エ ン コ ーデ ィ ング形式に対するバイ ト 順序マー ク一覧
エ ン コ ーデ ィ ング形式
バイ ト 順序マー ク (16 進)
WinAnsi における視覚表現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
ÿþ■■
1. 黒四角 ■ は null バイ ト を意味 し ます。
90
第 4 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
4.2 シ ン グルバ イ ト (8 ビ ッ ト ) エ ン コ ーデ ィ ン グ
8 ビ ッ ト エン コ ーデ ィ ン グ (シ ン グルバ イ ト エン コーデ ィ ン グ と も いい ます) は、 バ イ ト
値 0x01 ∼ 0xFF を それぞれ、 BMP (すなわち U+0000 ∼ U+FFFF) 内の Unicode 値を持つ
1 つのキ ャ ラ ク タ に割 り 当て ます。 同時に使え る キ ャ ラ ク タ は 255 種類ま でです。 なぜな
ら コ ー ド 0 (ゼ ロ ) は .notdef キ ャ ラ ク タ U+0000 のために予約 さ れてい る か ら です。
PDFlib の定義済みエン コ ーデ ィ ン グ を表 4.2 に記 し ます。 あわせて、 い く つかの主要
な フ ォ ン ト 種別内におけ る 有無を示 し ます。普通の フ ォ ン ト では満たせない要求をす る 用
字系や言語 も あ る 、 と い う 認識が重要です。
注 PDFlib デ ィ ス ト リ ビ ュ ーシ ョ ンに同梱の作成例 「chartab」 を使 う と 、 任意のフ ォ ン ト と
エ ン コ ーデ ィ ングの組み合わせについて、 そのキ ャ ラ ク タ 一覧表を簡単に印刷で き ます。
macroman エ ン コ ーデ ィ ン グについての注意 こ のエン コ ーデ ィ ン グは Mac OS のキ ャ
ラ ク タ セ ッ ト を反映 し てい ま すが、 た だ、 219 = 0xDB の位置に古い通貨記号が あ っ て、
Apple が定義 し なお し た よ う なユー ロ のグ リ フ がない と い う 点が違っ てい ます ( こ の非互
換性は PDF の仕様の定め る と こ ろです)。 macroman_apple エン コ ーデ ィ ン グは、 以下の
相違点を除いて macroman と 同 じ です。
> macroman_apple エン コ ーデ ィ ン グでは、219 = 0xDB の位置が通貨記号のかわ り にユー
ロ のグ リ フ にな っ てい ます。
> macroman_apple エン コ ーデ ィ ン グには、 Mac OS のキ ャ ラ ク タ セ ッ ト で定義 さ れてい
る よ う なギ リ シ ャ 語 / 数学記号群が含まれてい ます。こ う し た記号は macroman_apple
エ ン コ ーデ ィ ン グで利用可能ではあ り ますが、 それに必要な グ リ フ を含んでい る フ ォ
ン ト はあ ま り 多 く あ り ません。
ホ ス ト エ ン コ ーデ ィ ン グ 特殊なエン コ ーデ ィ ン グ host は固定 し た意味を持たず、 環境
のプ ラ ッ ト フ ォームに よ っ て、 下記の 8 ビ ッ ト エン コ ーデ ィ ン グに対応づけ ら れます (表
4.2 参照) :
> MVS か USS を持つ IBM zSeries では ebcdic に対応づけ ら れます。
> IBM i5/iSeries では ebcdic_37 に対応づけ ら れます。
> Windows では winansi に対応づけ ら れます。
> それ以外のすべてのシ ス テ ム (Mac OS X を含む) では iso8859-1 に対応づけ ら れます。
ホ ス ト エン コ ーデ ィ ン グが有用なのは何 と いっ て も 、プ ラ ッ ト フ ォーム非依存のテ ス ト プ
ロ グ ラ ム (PDFlib デ ィ ス ト リ ビ ュ ーシ ョ ンの中にあ る よ う な) や、 その他の単純なプ ロ グ
ラ ム を書 く と き です。 製品版でのホ ス ト エン コ ーデ ィ ン グの使用は推奨 し ませんので、 何
ら かの適切なエン コ ーデ ィ ン グに置 き 換え る べ き です。
host エン コ ーデ ィ ン グは、 Unicode 非対応の言語バ イ ンデ ィ ン グでは、 名前文字列のデ
フ ォ ル ト エン コ ーデ ィ ン グ と し て用い ら れてい ます (98 ページ 「4.4.3 Unicode 非対応言
語バ イ ンデ ィ ン グの文字列」 参照) 。 なぜな ら こ れが フ ァ イ ル名な ど に一番適切だか ら で
す。
自動エ ン コ ーデ ィ ン グ PDFlib は、 特定の環境に対 し て も っ と も 自然なエ ン コ ーデ ィ ン
グ を手間な く 指定で き る し く みに対応 し てい ます。エン コ ーデ ィ ン グ名 と し て キーワー ド
auto を与え る と 、 プ ラ ッ ト フ ォームや環境に よ っ て、 以下のテ キ ス ト フ ォ ン ト 用 8 ビ ッ
ト エン コ ーデ ィ ン グ を指定 し た こ と にな り ます。
> Windows では : カ レ ン ト のシ ス テ ム コ ー ド ページ (詳 し く は後述)
> Unix・Mac OS X では:iso8859-1(ただ し Mac 上の LWFN PostScript フ ォ ン ト では auto は
macroman に対応)
> IBM i5/iSeries では : カ レ ン ト ジ ョ ブのエン コ ーデ ィ ン グ (IBMCCSID000000000000)
4.2 シ ングルバイ ト (8 ビ ッ ト ) エ ン コ ーデ ィ ング
91
対応言語
TrueType
「big font」4
winansi
cp1252 (ISO8859-1 のスーパーセ ッ ト ) と 同 じ
○
○
○
○
macroman
○
○
○
○
macroman_
apple
Mac Roman エ ン コ ーデ ィ ング、 すなわち オ リ ジナルの Macintosh キ ャ
ラク タセッ ト
macroman と ほぼ同 じ 、 ただ し 通貨をユーロ で置き換え、 数学 / ギ リ
シ ャ語記号を追加で含みます
−
−
○
○
ebcdic
PostScript 3
フォン ト2
コー ド
ページ
OpenType
Pro フ ォ ン ト 3
Acrobat 7/8/91
コアフ ォン ト
表 4.2 い く つかの フ ォ ン ト 種別内における、 定義済みエ ン コ ーデ ィ ングのためのグ リ フの有無。 Acrobat コ ア フ ォ
ン ト では表現で き ない言語も あ り ます。
EBCDIC コ ー ド ページ 1047
○
○
○
○
ebcdic_37
EBCDIC コ ー ド ページ 037
○
○
○
○
pdfdoc
PDFDocEncoding
○
○
○
○
iso8859-1
(Latin-1) 西欧諸語
○
○
○
○
iso8859-2
(Latin-2) 中欧のス ラ ブ諸語
○1
○
○
○
iso8859-3
(Latin-3) エ スペ ラ ン ト ・ マル タ 語
−
−
○
○
iso8859-4
(Latin-4) エ ス ト ニア語 ・ バル ト 諸語 ・ グ リ ーン ラ ン ド 語
○1
−
○
○
iso8859-5
ブルガ リ ア語 ・ ロ シ ア語 ・ セルビ ア語
−
−
○
○
iso8859-6
ア ラ ビ ア語
−
−
−
○
iso8859-7
現代ギ リ シ ャ 語
−
−
1個
欠け
○
iso8859-8
ヘブ ラ イ語 ・ イ デ ィ ッ シ ュ語
−
−
−
○
iso8859-9
iso8859-10
(Latin-5) 西欧諸語 ・ ト ル コ 語
○
1
○
○
○
(Latin-6) 北欧諸語
○1
−
1個
欠け
○
iso8859-13
(Latin-7) バル ト 諸語
○1
○
○
○
iso8859-14
(Latin-8) ケル ト 語
−
−
−
−
iso8859-15
(Latin-9) Latin-1 に、 ユーロ と フ ラ ン ス語 ・ フ ィ ン ラ ン ド 語キ ャ ラ ク
タ を加え ています
○
○
○
○
iso8859-16
(Latin-10) ハン ガ リ ー語 ・ ポー ラ ン ド 語 ・ ルーマニ ア語 ・ ス ロベニア ○ 1
語
○
○
○
cp1250
中欧諸語
−
○
○
○
cp1251
キ リ ル諸語
−
−
○
○
cp1252
西欧諸語 (winansi と 同 じ )
○
○
○
○
cp1253
ギ リ シ ャ語
−
−
1個
欠け
○
cp1254
ト ルコ語
−
○
○
○
cp1255
ヘブ ラ イ語
−
−
−
○
cp1256
ア ラ ビ ア語
−
−
−
5個
欠け
cp1257
バル ト 諸語
−
○
○
○
cp1258
ベ ト ナム語
−
−
−
○
1. Times ・ Helvetica フ ォ ン ト フ ァ ミ リ に関する テーブル内の情報。 Acrobat 内で使用 さ れる Courier フ ォ ン ト はグ リ フ がそれよ
り 少な く 、 iso8859-2 ・ iso8859-4 ・ iso8859-9 ・ iso8859-10 ・ iso8859-13 ・ iso8859-16 を網羅 し ていません。
2. 拡張 Adobe Latin キ ャ ラ ク タ セ ッ ト (CE フ ォ ン ト )、 一般に PostScript 3 デバイ スに付属の Type 1 フ ォ ン ト
3. Adobe OpenType Pro フ ォ ン ト は、 レギ ュ ラ ーな OpenType フ ォ ン ト よ り も グ リ フ が多いです。
4. 大き なグ リ フ セ ッ ト を持つ Windows TrueType フ ォ ン ト 。 例 : Tahoma
92
第 4 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> IBM zSeries では : ebcdic (= コ ー ド ページ 1047)
記号フ ォ ン ト では、キー ワー ド auto は builtin エン コ ーデ ィ ン グに対応づけ ら れます (115
ページ 「5.4.2 記号フ ォ ン ト に対す る エン コ ーデ ィ ン グ を選ぶ」 参照)。 自動エン コ ーデ ィ
ン グは多 く の場面で便利ですが、 その半面、 こ の方式を用いた PDFlib ク ラ イ ア ン ト プ ロ
グ ラ ムは他の環境では使え な く な り ます。
ユーザー定義 8 ビ ッ ト エ ン コ ーデ ィ ン グ 定義済みエン コ ーデ ィ ン グのほか、 PDFlib は
ユーザー定義 8 ビ ッ ト エン コ ーデ ィ ン グに も 対応 し てい ます。こ れを使いたいのは、PDFlib
の内部で得 ら れない何かのキ ャ ラ ク タ セ ッ ト を扱いたい と き です。 た と えば、 PDFlib 内部
で対応 し てい る の と は違 う EBCDIC キ ャ ラ ク タ セ ッ ト を扱 う こ と も で き ます。 PDFlib は、
PostScript グ リ フ名で定義 さ れたエン コ ーデ ィ ン グ テーブルに対応 し てい る ほか、 Unicode
値で定義 さ れた テーブルに も 対応 し てい ます。
ユーザー定義エン コ ーデ ィ ン グ を PDFlib プ ロ グ ラ ム内で利用で き る よ う にす る には、
以下の作業を あ ら か じ め行 う 必要があ り ます (あ る いはエ ン コ ーデ ィ ン グは、 encoding_
set_char( )) を使っ て実行時に構築す る こ と も で き ます)。
> エン コ ーデ ィ ン グの記述を単純なテ キ ス ト 形式で作成す る 。
> そのエン コ ーデ ィ ン グ を PDFlib リ ソ ース フ ァ イ ル内で (55 ページ 「3.1.3 リ ソ ース設定
と フ ァ イ ル検索」 参照)、 ま たは set_parameter( ) で設定す る 。
> エ ン コ ーデ ィ ン グが使 う すべてのキ ャ ラ ク タ に対応 し た フ ォ ン ト を与え る ( メ ト リ ッ
ク と 、 あ る いはア ウ ト ラ イ ン フ ァ イ ル も )。
エン コ ーデ ィ ン グ フ ァ イ ルは、 グ リ フ名 と 番号を 1 行ずつ単純に列挙 し た も のです。 エン
コ ーデ ィ ン グ定義の冒頭部分は次の よ う にな り ます。
% PDFlib用エンコーディング定義。グリフ名を使用
% 名前
コード Unicode(オプション)
space
32
0x0020
exclam
33
0x0021
...
Unicode 値が指定 さ れていない と き は、 PDFlib はその内部テーブルの中で適切な Unicode
値を さ が し ます。 グ リ フ なでな く Unicode 値を指定す る こ と も で き ます :
% PDFlib用コードページ定義。Unicode値を使用
% Unicode
コード
0x0020
32
0x0021
33
...
よ り 厳密に言えば、 エン コ ーデ ィ ン グか コ ー ド ページのフ ァ イ ルの内容は、 以下の規則に
従 う 必要があ り ます。
> 注釈はパーセ ン ト キ ャ ラ ク タ 「%」 で始ま り 、 行末で終わ り ます。
> 各行の先頭項目は、PostScript グ リ フ名か、ま たは 16 進 Unicode 値です。Unicode 値は、接
頭辞 0x と 16 進 4 桁 (大文字で も 小文字で も ) で構成 さ れます。 その後に、 空白キ ャ
ラ ク タ と 、 16 進 (0x00 ∼ 0xFF) か 10 進 (0 ∼ 255) の文字 コ ー ド が続 き ます。 オプ
シ ョ ン と し て、 グ リ フ名に よ る エン コ ーデ ィ ン グ フ ァ イ ルの場合は、 対応する Unicode
値を 3 列目に持つ こ と も で き ます。
> エ ン コ ーデ ィ ン グ フ ァ イ ル内で述べ ら れていない文字 コ ー ド には、 未定義 と 見な さ れ
ます。 あ る いは未定義位置に対 し ては、 Unicode 値 0x0000 かキ ャ ラ ク タ 名 .notdef を
与え る こ と も 可能です。
4.2 シ ングルバイ ト (8 ビ ッ ト ) エ ン コ ーデ ィ ング
93
> エン コ ーデ ィ ン グか コ ー ド ページの フ ァ イ ルの中の Unicode値はすべて U+FFFF よ り も
小 さ く なければな り ません。
命名規則 と し ては、 グ リ フ 名に よ る テーブル を エ ン コ ーデ ィ ン グ フ ァ イ ル (*.enc) と 呼
び、Unicode に よ る テーブルを コ ー ド ページ フ ァ イ ル (*.cpg) と 呼びますが、 し か し PDFlib
は両者を同様に扱い ます。
94
第 4 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
4.3 日本語 ・ 中国語 ・ 韓国語エ ン コ ーデ ィ ン グ
歴史的に、 非常に多 く の日中韓エン コ ーデ ィ ン グ方式が、 無数の規格化団体や企業に よ っ
て開発 さ れて き ま し た。幸い、普及 し てい る エン コ ーデ ィ ン グにはすべて、Acrobat や PDF
はデフ ォ ル ト 対応 し てい ます。 日中韓テ キ ス ト におけ る エン コ ーデ ィ ン グの概念は、 欧文
テ キ ス ト の場合 よ り は る かに複雑なので、単な る 8 ビ ッ ト エン コ ーデ ィ ン グでは も はや不
充分です。 そのかわ り と し て PostScript と PDF では、 キ ャ ラ ク タ コ レ ク シ ョ ン と キ ャ ラ ク
タ マ ッ プ (CMap) と い う 概念を用いて フ ォ ン ト 内のキ ャ ラ ク タ を組織化 し てい ます。
標準日中韓エ ン コ ーデ ィ ン グに対す る定義済み CMap 定義済みの日中韓 CMap を表 4.3
に示 し ます。 表か ら 見て取れ る よ う に、 Mac ・ Windows ・ Unix シ ス テ ム で使われ る 日中韓
エン コ ーデ ィ ン グの多 く に対応 し てい る ほか、ベン ダー独自エン コ ーデ ィ ン グに も い く つ
か対応 し てい ます。 た と えば日本語な ら Shift-JIS ・ EUC ・ ISO 2022、 中国語な ら GB ・ Big5、
韓国語な ら KSC な ど です。 Unicode に も すべての ロ ケールで対応 し てい ます。
表 4.3 日本語 ・ 中国語 ・ 韓国語テキス ト 用定義済み CMap 一覧 (PDF リ フ ァ レ ン ス よ り )
ロ ケール
CMap 名
文字セ ッ ト と テキス ト 形式
日本語
UniJIS-UCS2-H, -V
Adobe-Japan1 キ ャ ラ ク タ コ レ ク シ ョ ンの Unicode (UCS-2) エ ン コ ーデ ィ ン
グ
UniJIS-UCS2-HW-H UniJIS-UCS2-H と 同 じ だが、 プ ロポーシ ョ ナルの欧文文字が半角の形に置き
UniJIS-UCS2-HW-V 換わ っ ている
中国語
簡体字
中国語
繁体字
韓国語
UniJIS-UTF16-H
UniJIS-UTF16-V
Adobe-Japan1 キ ャ ラ ク タ コ レ ク シ ョ ンの Unicode (UTF-16BE) エ ン コ ー
デ ィ ング。 JIS X 0213:1000 キ ャ ラ ク タ セ ッ ト の全キ ャ ラ ク タ への割 り 当て を
含む。
UniGB-UCS2-H
UniGB-UCS2-V
UniGB-UTF16-H
UniGB-UTF16-V
Adobe-GB1 キ ャ ラ ク タ コ レ ク シ ョ ンの Unicode (UCS-2) エ ン コ ーデ ィ ング
UniCNS-UCS2-H
UniCNS-UCS2-V
Adobe-CNS1 キ ャ ラ ク タ コ レ ク シ ョ ンの Unicode (UCS-2) エ ン コ ーデ ィ ン
グ
UniCNS-UTF16-H
UniCNS-UTF16-V
Adobe-CNS1 キ ャ ラ ク タ コ レ ク シ ョ ンの Unicode (UTF-16BE) エ ン コ ーデ ィ
ング。 HKSCS-2001 (2 ・ 4 バイ ト 文字 コ ー ド ) の全キ ャ ラ ク タ への割 り 当て
を含む。
UniKS-UCS2-H, -V
Adobe-Korea1 キ ャ ラ ク タ コ レ ク シ ョ ンの Unicode (UCS-2) エ ン コ ーデ ィ ン
グ
Adobe-GB1 キ ャ ラ ク タ コ レ ク シ ョ ンの Unicode (UTF-16BE) エ ン コ ーデ ィ ン
グ。 GB18030-2000 キ ャ ラ ク タ セ ッ ト の全キ ャ ラ ク タ への割 り 当て を含む。
UniKS-UTF16-H, -V Adobe-Korea1 キ ャ ラ ク タ コ レ ク シ ョ ンの Unicode (UTF-16BE) エ ン コ ー
デ ィ ング
注 Unicode 対応の言語バイ ンデ ィ ングは、 Unicode CMap (UCS2 か UTF16) にのみ対応 し て
います。 それ以外の CMap を使 っ てはいけません (97 ページ 「4.4.2 Unicode 対応言語バ
イ ンデ ィ ングの文字列」 参照)。
標準 CMap に対す る日中韓テキス ト のエ ン コ ーデ ィ ン グ 要求 さ れた CMap に対 し て、
それに合 う よ う エン コ ー ド さ れた テ キ ス ト を与え る のは ク ラ イ ア ン ト 側の役割です。与え
ら れた テ キ ス ト が、 要求 さ れた CMap に従っ てい る か ど う か を、 PDFlib はチ ェ ッ ク し て、
選ばれた CMap に従っ ていない誤っ たテ キ ス ト 入力に対 し ては例外を発生 さ せます。
CMap の設定 定義済み CMap の 1 つを用いて日本語 ・ 中国語 ・ 韓国語 (日中韓) テ キ ス
ト を生成す る には、 PDFlib は対応す る CMap フ ァ イ ルを必要 と し ます。 入っ て く る テ キ ス
4.3 日本語 ・ 中国語 ・ 韓国語エ ン コ ーデ ィ ング
95
ト を処理 し て、 日中韓エン コ ーデ ィ ン グ を Unicode に対応づけ る ためです。 CMap フ ァ イ
ルは別パ ッ ケージで入手で き ます。 以下の よ う に イ ン ス ト ールする 必要があ り ます。
> Windows では CMap フ ァ イ ルは、 PDFlib の イ ン ス ト レーシ ョ ンデ ィ レ ク ト リ 内の
resource/cmap デ ィ レ ク ト リ に置いておけば、 自動的に見つけ ら れます。
> それ以外のシ ス テ ム では CMap フ ァ イ ルは、任意の好都合なデ ィ レ ク ト リ に置 く こ と が
で き 、 実行時に SearchPath を下記の よ う に設定する こ と で、 CMap フ ァ イ ルを手動で
設定す る 必要があ り ます。
p.set_parameter("SearchPath", "/パス/パス/resource/cmap");
日中韓 CMap フ ァ イ ルの検索先を設定す る 方式のかわ り に、適切な SearchPath 定義を含む
UPR 設定フ ァ イ ルを指す よ う PDFLIBRESOURCEFILE 環境変数を設定する こ と も で き ます。
96
第 4 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
4.4 PDFlib の文字列処理
4.4.1 内容文字列 ・ ハ イパーテキス ト 文字列 ・ 名前文字列
PDF と オペレーテ ィ ン グ シ ス テ ムの要請に よ り 、PDFlib での文字列の処理方式は、 その文
字列の使い道に よ っ て異な り ます。 PDFlib API は、 以下の文字列型を定義 し て用いてい ま
す。 PDFlib API リ フ ァ レ ン ス では、 すべての関連す る パ ラ メ タ ・ オプシ ョ ンには、 内容文
字列 ・ ハ イ パーテ キ ス ト 文字列 ・ 名前文字列 と 記 し て あ り ます。
内容文字列 ・ ハ イ パーテ キ ス ト 文字列 ・ 名前文字列は、 Unicode と 8 ビ ッ ト エン コ ー
デ ィ ン グで使え ます。 文字列処理の実際は言語バ イ ンデ ィ ン グに よ っ て異な り ますので、
97 ページ 「4.4.2 Unicode 対応言語バ イ ンデ ィ ン グの文字列」 で説明 し ます。
内容文字列 内容文字列は、ユーザーが特定の フ ォ ン ト で選んだエン コ ーデ ィ ン グに従っ
てページ本体内容 (ページ記述) を作成す る ために用い ら れます。 PDFlib API リ フ ァ レ ン
ス の中で、 ページ内容関数におけ る text と い う 名前の関数引数はすべて こ の種類に属 し
ます。 内容文字列は特定フ ォ ン ト 内のグ リ フ に よ っ て表現 さ れますので、 使用可能な キ ャ
ラ ク タ の範囲はフ ォ ン ト / エン コ ーデ ィ ン グの組み合わせに依存 し ます。
例:
show( ) ・ fit_textline( ) ・ add_textflow( ) の text 引数。
ハ イパーテキス ト 文字列 ハ イ パーテ キ ス ト 文字列は、 し お り や注釈な ど の イ ン タ ラ ク
テ ィ ブ機能のために用い ら れ る も のであ り 、 関数の説明では明示的に 「ハイパーテキス ト
文字列」 と 記 し て あ り ます。 イ ン タ ラ ク テ ィ ブ機能のための関数の多 く の引数やオプシ ョ
ンが こ の種類に属すほか、 それ以外に も 若干 こ の種類に属する も のがあ り ます。 表示で き
る キ ャ ラ ク タ の範囲は、 Acrobat で利用可能な フ ォ ン ト やオペ レ ーテ ィ ン グ シ ス テ ム と
いっ た外部要因に依存 し ます。
例:
add_table_cell( ) の fieldname オプシ ョ ン
define_layer( ) の name オプシ ョ ン
create_action( ) の destname オプシ ョ ン
create_bookmark( ) の text 引数
名前文字列 名前文字列は、 外部フ ァ イ ル名 ・ フ ォ ン ト 名 ・ ブ ロ ッ ク 名な ど のために用い
ら れ る も のであ り 、 関数の説明では 「名前文字列」 と 記 し て あ り ます。 例 :
begin_document( ) ・ create_pvf( ) の filename 引数
load_font( ) の fontname 引数
load_iccprofile( ) の profilename 引数
フ ァ イ ル名は特殊な ケース です : オプシ ョ ン filenamehandling は、 PDFlib が API に与え ら
れた フ ァ イ ル名を ロ ーカルフ ァ イ ルシ ス テ ムで使え る も のへ変換す る 方法を指定 し ます。
4.4.2 Unicode 対応言語バ イ ン デ ィ ン グの文字列
開発環境が文字列デー タ 型に対応 し ていて、 かつ内部的に Unicode を用いてお り 、 そ し て
対応す る PDFlib 言語 ラ ッ パがその言語の Unicode 文字列に対応 し てい る 場合に、 そのバ
イ ンデ ィ ン グ を Unicode 対応 と 呼ぶ こ と に し ます。 下記の PDFlib 言語バ イ ンデ ィ ン グは
Unicode 対応です :
> C++
> COM
> .NET
4.4 PDFlib の文字列処理
97
>
>
>
>
>
Java
Python
REALbasic
RPG
Tcl
こ う し た環境での文字列処理は単純です : 文字列はすべて自動的に、 ネ イ テ ィ ブな UTF16 形式の Unicode 文字列 と し て PDFlib カーネルに与え ら れます。 こ う し た言語の ラ ッ パ
は、 ク ラ イ ア ン ト か ら 与え ら れ る Unicode 文字列を正 し く 取 り 扱 う こ と がで き 、 ま た、 い
く つかの PDFlib のパ ラ メ タ を自動的に設定 し ます。 こ の こ と か ら 下記の結果が生 じ ます :
> 必要な変換を PDFlib 言語 ラ ッ パがすべて行い、 ク ラ イ ア ン ト か ら 与え ら れたハ イ パー
テ キ ス ト 文字列がつねに utf16 形式の unicode エン コーデ ィ ン グで PDFlib に供給 さ れ
る よ う 動作 し ます。
> つねにUTF-16 を言語環境がPDFlibに供給する ため、UTF-8はUnicode対応言語では使用
で き ません。 あ ら か じ め UTF-16 に変換す る 必要があ り ます。
> ページの内容には unicode エン コーデ ィ ン グ を用い る こ と が、 エン コーデ ィ ン グ を
Unicode 対応言語で取 り 扱 う う えで も っ と も 簡単な方法です。ただ し 8 ビ ッ ト エン コ ー
デ ィ ン グや、 記号フ ォ ン ト のシ ン グルバ イ ト テ キ ス ト も 、 使いた ければ使 う こ と がで
き ます。
> 日中韓フ ォ ン ト に非 Unicode CMap を用い る こ と は (95 ページ 「4.3 日本語・中国語・韓
国語エ ン コ ーデ ィ ン グ」 参照) 避けな ければな り ません。 なぜな ら 、 ラ ッ パがつねに
Unicode を PDFlib コ アに与え る か ら です。 Unicode CMap のみが利用可能です。
要す る に基本的には、 ク ラ イ ア ン ト は生の Unicode 文字列を PDFlib 関数に与え る こ と が
で き 、 その際に別途設定やパ ラ メ タ 設定は必要ない と い う こ と です。 関数の説明に書いて
あ る 、 ハ イ パーテ キ ス ト 文字列 と 名前文字列の違いは、 Unicode 対応言語バ イ ンデ ィ ン グ
では関係があ り ません。
Unicode 変換関数 文字列を Unicode 以外のエン コ ーデ ィ ン グで扱わなければな ら ない場
合は、 それを PDFlib に渡す前には Unicode に変換す る 必要があ り ます。 29 ページ 「2 章
PDFlib の言語バ イ ンデ ィ ン グ」 の言語ご と の節に、 代表的な言語バ イ ンデ ィ ン グで提供 さ
れてい る 有用な Unicode 文字列変換方法を詳 し く 説明 し て あ り ます。
4.4.3 Unicode 非対応言語バ イ ン デ ィ ン グの文字列
( こ の節は、 PDFlib 説明書の総合エデ ィ シ ョ ンにのみ掲載 し てい ます)
98
第 4 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
4.5 キ ャ ラ ク タ を指定
環境に よ っ てはプ ロ グ ラ マーは、 ソ ース コ ー ド を 8 ビ ッ ト エン コ ーデ ィ ン グ (winansi ・
macroman ・ ebcdic 等) で書 く こ と を要求 さ れます。 こ の よ う な環境で Unicode キ ャ ラ ク
タ を用いたい と き は、テ キ ス ト の全キ ャ ラ ク タ を マルチバ イ ト エン コ ーデ ィ ン グに変え る
こ と は許 さ れないため、 その一部の Unicode キ ャ ラ ク タ だけ を 8 ビ ッ ト エン コ ーデ ィ ン グ
の ま ま のテ キ ス ト の中へ入れ込む、 な ど と い う こ と がで き る のか と 悩んで し ま い ます。 こ
の状況か ら 開発者を救 う ため、PDFlib では、テ キ ス ト を表す補助手段がい く つか使え ます。
4.5.1 エ ス ケープ シーケ ン ス
PDFlib は、 エスケープ シーケ ン ス ( こ れは実際には誤称です : バ ッ ク ス ラ ッ シ ュ置換 と い
う 用語のほ う が よ いで し ょ う ) と い う し く みを通 じ てテ キ ス ト 文字列内に任意の値を簡単
に入れ込め る 方式に対応 し てい ます。 た と えば、 テ キ ス ト ブ ロ ッ ク のデフ ォ ル ト テ キ ス ト
内で \t シーケ ン ス を使えば、 直接キーボー ド 入力では無理か も し れない タ ブキ ャ ラ ク タ
が入れ ら れます。 同様にエ ス ケープシーケ ン ス は、 記号フ ォ ン ト におけ る コ ー ド を表すに
も 便利です し 、エ ス ケープシーケ ン ス を持たない言語バ イ ンデ ィ ン グにおいては リ テ ラ ル
文字列を あ ら わすに も 便利です。
エ ス ケープシーケ ン ス は、 シーケ ン ス を 1 個のバ イ ト 値へ置換す る 命令です。 シーケ
ン ス は、 文字列のカ レ ン ト エ ン コ ーデ ィ ン グ内のバ ッ ク ス ラ ッ シ ュ キ ャ ラ ク タ 「\」 に対
す る コ ー ド で開始 し ます。 エ ス ケープシーケ ン ス の置換か ら 得 ら れ る バ イ ト 値を表 4.4 に
示 し ます。 エ ス ケープシーケ ン ス で表せ る のは、 0 ∼ 255 のバ イ ト 値だけです。
い く つかのプ ロ グ ラ ミ ン グ言語 と 異な り 、 PDFlib のエ ス ケープシーケ ン ス はその種類
に応 じ てつねに固定長 と な り ます。ですのでシーケ ン ス の終了キ ャ ラ ク タ は必要あ り ませ
ん。
表 4.4 エ スケープ シーケ ン ス と バイ ト 値一覧
シーケ ン ス
長さ
Mac ・ Windows ・
Unix
EBCDIC プ ラ ッ ト
フ ォ ーム
広 く 知ら れる解釈
\f
2
0C
0C
フ ォ ーム フ ィ ー ド
\n
2
0A
15/25
ラインフ ィード
\r
2
0D
0D
キ ャ リ ッ ジ リ タ ーン
\t
2
09
05
水平 タ ブ
\v
2
0B
0B
ラインタブ
\\
2
5C
E0
バッ クスラ ッ シュ
\xNN
4
バイ ト 値を表す 16 進 2 桁。 例 : \FF
\NNN
4
バイ ト 値を表す 8 進 3 桁。 例 : \377
エ ス ケープシーケ ン ス はデフ ォ ル ト では置換 さ れ ません。 エ ス ケープシーケ ン ス を文
字列において使いたいな ら 、 escapesequence パ ラ メ タ かオプシ ョ ン を明示的に true に設
定す る 必要があ り ます :
p.set_parameter("escapesequence", "true");
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/escape_sequences ト ピ ッ ク にあ り ます。
4.5 キ ャ ラ ク タ を指定
99
エ ス ケープシーケ ン ス はすべての内容文字列 ・ ハ イ パーテ キ ス ト 文字列 ・ 名前文字列内
で、 BOM 検出の後に、 し か し タ ーゲ ッ ト 形式への変換の前に、 評価 さ れます。
エ ス ケープシーケ ン ス が解決で き ない と き には (\x の後の 16 進数が不正等)、 例外が
発生 し ます。 内容文字列については こ の動作は、 glyphcheck ・ errorpolicy 設定で制御 さ れ
ます。
エ ス ケープシーケ ン ス を有効に し てい る と き は、 バ ッ ク ス ラ ッ シ ュ キ ャ ラ ク タ を含む
Windows のパ ス名に注意 し て く だ さ い。
4.5.2 文字参照
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/character_references ト ピ ッ ク にあ り ま
す。
文字参照は、 置換シーケ ン ス を Unicode 値で置換す る 命令です。 参照シーケ ン ス は、 カ レ
ン ト エン コ ーデ ィ ン グ内のア ンパサン ド キ ャ ラ ク タ 「&」 の コ ー ド で開始 し 、 セ ミ コ ロ ン
キ ャ ラ ク タ 「;」 の コ ー ド で終了 し ます。 タ ーゲ ッ ト Unicode 値を表現す る ためにい く つか
の方式が利用可能です :
HTML 文字参照 PDFlib は、 HTML 4.0 で定義 さ れてい る すべての文字実体参照に対応 し
てい ます。 数値文字参照は 10 進 ・ 16 進記法で与え る こ と がで き ます。 HTML 文字参照の
全一覧は下記の場所にあ り ます :
www.w3.org/TR/REC-html40/charset.html#h-5.3
例:
&shy;
&euro;
&lt;
&gt;
&amp;
&Alpha;
U+00AD
U+00AD
U+00AD
U+00AD
U+00AD
U+0391
ソフトハイフン
ユーログリフ (実体名)
小なり記号
大なり記号
アンパサンド記号
ギリシャ文字Α
数値文字参照 Unicode キ ャ ラ ク タ に対す る 数値文字参照 も HTML 4.0 で定義 さ れてい ま
す。 こ れはハ ッ シ ュ キ ャ ラ ク タ 「#」 と 10 進ま たは 16 進の数値を必要 と し 、 16 進数値の
は小文字か大文字の 「X」 キ ャ ラ ク タ を頭につけ ます。 例 :
&#173;
&#xAD;
&#229;
&#xE5;
&#Xe5;
&#x20AC;
&#8364;
U+00AD
U+00AD
U+00AD
U+00E5
U+00E5
U+20AC
U+20AC
ソフトハイフン
ソフトハイフン
文字aの上に小さな丸 (10進)
文字aの上に小さな丸 (16進、小文字x)
文字aの上に小さな丸 (16進、大文字X)
ユーログリフ (16進)
ユーログリフ (10進)
注 128 ∼ 159 (10 進) すなわち 0x80 ∼ 0x9F (16 進) のコ ー ド 点は、 winansi コ ー ド 点を参
照 し ません。 Unicode では こ れ らは、 印刷可能キ ャ ラ ク タ でな く 制御キ ャ ラ ク タ を参照 し
ます。
PDFlib 独自の実体名 PDFlib では、 下記のグループの Unicode 制御キ ャ ラ ク タ に対 し て、
カ ス タ ムの文字実体参照を使 う こ と がで き ます :
> 表 6.4 に挙げ る デフ ォ ル ト シ ェ ーピ ン グ動作を上書き する 制御キ ャ ラ ク タ 群。
> 表 6.5 に挙げ る デフ ォ ル ト 双方向組版を上書 き す る 制御キ ャ ラ ク タ 群。
> 表 8.1 に挙げ る テ キ ス ト フ ロ ーの改行 と 組版のための制御キ ャ ラ ク タ 群。
100
第 4 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
例:
&linefeed;
&hortab;
&ZWNJ;
U+000A ラインフィード制御キャラクタ
U+0009 水平タブ
U+200C ゼロ幅非接合子
グ リ フ 名参照 グ リ フ名は下記の情報源か ら 導かれます :
> 代表的な グ リ フ名は内蔵 リ ス ト 内で検索 さ れます
> フ ォ ン ト 独自のグ リ フ名はカ レ ン ト フ ォ ン ト 内で検索 さ れ ます。 こ の種類の文字参照
は必ずフ ォ ン ト を必要 と す る ので、 内容文字列でのみ動作 し ます。
グ リ フ名参照を同定す る ために、 実際の名前はア ンパサン ド キ ャ ラ ク タ 「&」 の後に ピ リ
オ ド キ ャ ラ ク タ 「.」 を必要 と し ます。 例 :
&.three;
&.mapleleaf;
&.T.swash;
U+0033 数字3の代表的グリフ名
(PUA Unicode値)Cartaフォントにおけるカスタムグリフ名
(PUA Unicode値)2番目のピリオドキャラクタはグリフ名の一部です
グ リ フ名に よ る 文字参照は下記のシナ リ オで有用です :
> フ ォ ン ト 独自グ リ フ名に よ る 文字参照は、 内容文字列内で異体字 (ス ウ ォ ッ シ ュ キ ャ
ラ ク タ 等) や、 特定の Unicode セマ ン テ ィ ク ス を持たないグ リ フ (記号 ・ ア イ コ ン ・ 装
飾) を選ぶのに有用です。 ただ し 、 等幅数字をは じ め と す る 多 く の機能は、 OpenType
機能で も っ と 簡単に実装で き ます (142 ページ 「6.3 OpenType レ イ ア ウ ト 機能」 参照)。
> Adobe グ リ フ リ ス ト 内の名前 (uniXXXX ・ u1XXXX の形の も の も )、 お よ び特定の共通の
「名前誤 り 」 グ リ フ名は、 内容文字列 と ハ イ パーテ キ ス ト 文字列でつねに受け入れ ら れ
ます。
文字参照の利用 文字参照はデフ ォ ル ト では置換 さ れませんので、内容文字列内で文字参
照を使 う には、 charref パ ラ メ タ ま たはオプシ ョ ン を明示的に true に設定す る 必要があ り
ます。 例 :
p.set_parameter("charref", "true");
font = p.load_font("Helvetica", "winansi", "");
if (font == -1) { ... }
p.setfont(font, 24);
p.show_xy("Price: 500&euro;", 50, 500);
文字参照を使 う う えでのその他の注意点を挙げます :
> 文字参照は、 内容文字列 ・ ハ イ パーテ キ ス ト 文字列 ・ 名前文字列のいずれで も 使え ま
す。 例外 と し て、 フ ォ ン ト 独自グ リ フ名参照は上述の よ う に内容文字列でのみ動作 し
ます。
> 文字参照はbuiltin エン コーデ ィ ン グのテ キ ス ト 内では置換 さ れません。し か し 、unicode
エ ン コ ーデ ィ ン グ を用い る こ と に よ っ て記号フ ォ ン ト に対 し て文字参照を使 う こ と は
で き ます。
> 文字参照はオプシ ョ ン リ ス ト 内では置換 さ れません。 ただ し 、 Unichar デー タ 型のオプ
シ ョ ン内では認識 さ れます。 こ の場合、 「&」 ・ 「;」 修飾は外す必要があ り ます。 こ の認
識はつねに有効であ り 、 charref パ ラ メ タ ・ オプシ ョ ンには従い ません。
> 文字参照が解決で き ない と き (&# の後に無効な 10 進数があ る と き や、& の後に未知の
実 体 名 が あ る と き 等) は 例 外 が 発 生 し ま す。 内 容 文 字 列 に つ い て は こ の 動 作 は
glyphcheck ・ errorpolicy 設定で制御 さ れます。 glyphcheck=none の場合は、 参照シーケ
ン ス がその ま ま生成出力に現れます。
4.5 キ ャ ラ ク タ を指定
101
102
第 4 章 : Unicode と レ ガシ エ ン コ ーデ ィ ング (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
5 フ ォ ン ト 処理
5.1 さ ま ざ ま な フ ォ ン ト 形式
5.1.1 TrueType フ ォ ン ト
さ ま ざ ま な TrueType フ ォ ン ト 形式 PDFlib はベ ク ト ルベー ス の TrueType
フ ォ ン ト には対応 し てい ますが、 ビ ッ ト マ ッ プベース の TrueType フ ォ ン ト に
は対応 し てい ません。 TrueType フ ォ ン ト フ ァ イ ルは自己充足 し てい ます。 す
なわ ち 1 個の フ ァ イ ルの中に必要な情報がすべて入っ てい ま す。 PDFlib は
TrueType フ ォ ン ト について下記の フ ァ イ ル形式に対応 し てい ます :
> Windows の TrueType フ ォ ン ト (*.ttf)。 欧文 ・ 記号 ・ 日中韓フ ォ ン ト を含みます。
> TrueType コ レ ク シ ョ ン(*.ttc)。1 つの フ ァ イ ルの中に複数の フ ァ イ ルが入っ
てい ます。 TTC フ ァ イ ルは通常、 日中韓フ ォ ン ト を グループ化す る ために
用い ら れますが、 Apple は、 1 つの欧文フ ォ ン ト の複数の メ ンバを 1 個の
フ ァ イ ルにパ ッ ケージす る のに も こ れを用いてい ます。
> エン ド ユーザー定義キ ャ ラ ク タ (EUDC) フ ォ ン ト (*.tte) 。 Microsoft の
eudcedit.exe ツールで作 ら れます。
> Mac 上では、シ ス テ ムに イ ン ス ト ール さ れた TrueType フ ォ ン ト (.dfont を含めて) はす
べて PDFlib で も 使え ます。
TrueType フ ォ ン ト の名前 フ ォ ン ト フ ァ イ ルを扱 う 際には、 任意の別名を用い る こ と が
で き ます (116 ページ 「フ ォ ン ト デー タ の情報源」 参照)。 生成 さ れた PDF では、 TrueType
フ ォ ン ト の名前が PDFlib (や Windows) で用いていた名前 と 異な る こ と があ り ます。 こ れ
は正常であ り 、 PDF は TrueType の PostScript 名を用いてい る と い う 事実に よ る も のです。
PostScript 名は本当の TrueType と は異な り ます(例:TimesNewRomanPSMT に対 し て Times
New Roman)。
5.1.2 OpenType フ ォ ン ト
OpenType フ ォ ン ト 形式は、 PostScript と TrueType 技術を結合 し た も のです。
こ れは TrueType フ ァ イ ル形式の拡張 と し て実装 さ れてお り 、 統一形式を提供
し ます。 OpenType フ ォ ン ト は、 合字やス ウ ォ ッ シ ュ キ ャ ラ ク タ 等、 テ キ ス ト
出力の改善に利用で き る オプシ ョ ナルなテーブル (142 ページ 「6.3 OpenType
レ イ ア ウ ト 機能」 参照) のほか、 複雑用字系シ ェ ーピ ン グのためのテーブルを
含む こ と も で き ます (148 ページ 「6.4 複雑用字系出力」 参照)。
OpenType フ ォ ン ト は、すべてのプ ラ ッ ト フ ォーム上で動作す る 単一の コ ン テナ形式を
提供 し てい ますが、 OpenType には下記の よ う に さ ま ざ ま な種類があ り 、 こ れが混乱の元
にな る こ と も あ り ますので、 それを理解 し てお く こ と も 有用で し ょ う :
> ア ウ ト ラ イ ン形式:OpenType フ ォ ン ト は、TrueType と PostScript のいずれをベース と し
た グ リ フ記述 も 内容 と し て持つ こ と がで き ま す。 PostScript ベー ス のほ う は Compact
Font Format (CFF) や Type 2 と も 呼ばれ、 たいてい *.otf 接尾辞をつけて用い ら れま
す。 Windows Explorer は OpenType フ ォ ン ト をつねに 「O」 ロ ゴで表示 し ます。
> TrueType フ ォ ン ト と 、TrueType ア ウ ト ラ イ ン を持っ た OpenType フ ォ ン ト と は、と も に
*.ttf 接尾辞を用いてい る 可能性があ る ため、 容易には見分けがつ き ません。 こ の識別
の難 し さ か ら 、 Windows Explorer は右記の基準で動作 し ます : .ttf フ ォ ン ト が電子署名
を含んでい る な ら ば、 それは 「O」 ロ ゴ で表示 さ れ、 そ う でな ければそれは 「TT」 ロ
5.1 さ ま ざ ま な フ ォ ン ト 形式
103
ゴ で表示 さ れます。 し か し 、 電子署名は OpenType フ ォ ン ト において必須なわけでは
あ り ませんので、 こ れはプ レーン な旧来の TrueType フ ォ ン ト と OpenType フ ォ ン ト と
を見分け る 有用な基準 と し ては利用で き ません。
> CID (キ ャ ラ ク タ ID) アーキ テ ク チ ャ が日中韓フ ォ ン ト に対 し て用い ら れてい ます。 現
代の CID フ ォ ン ト は、 PostScript ア ウ ト ラ イ ン を持つ OpenType *.otf フ ォ ン ト と し て
パ ッ ケージ さ れてい ます。 実用的な観点か ら は、 こ れはプ レーン な OpenType フ ォ ン
ト と 見分けがつ き ません。 Windows Explorer は OpenType CID フ ォ ン ト をつねに 「O」
ロ ゴ で表示 し ます。
フ ァ イ ル名の接尾辞 も 、 Windows Explorer に よ っ て 表示 さ れ る ロ ゴ も 、 フ ォ ン ト 内に
OpenType レ イ ア ウ ト 機能があ る か ど う かについては何 も 語 ら ない こ と に留意 し て く だ さ
い。 詳 し く は 142 ページ 「6.3 OpenType レ イ ア ウ ト 機能」 を参照 し て く だ さ い。
5.1.3 PostScript Type 1 フ ォ ン ト
PostScript ア ウ ト ラ イ ン ・ メ ト リ ッ ク フ ァ イル形式 PostScript Type 1 フ ォ ン
ト はかな ら ず 2 つの部分に分かれてい ます。 すなわちア ウ ト ラ イ ンデー タ 本体
と メ ト リ ッ ク 情報です。PDFlib は、PostScript Type 1 のあ ら ゆ る プ ラ ッ ト フ ォー
ム上での ア ウ ト ラ イ ンデー タ と メ ト リ ッ ク デー タ のた めの下記の フ ァ イ ル形
式に対応 し てい ます :
> プ ラ ッ ト フ ォーム非依存な AFM (Adobe Font Metrics) 形式 と 、 Windows 固有の PFM
(Printer Font Metrics) フ ォ ン ト 形式。
> プ ラ ッ ト フ ォーム独立な PFA (Printer Font ASCII) 形式 と 、Windows 独自の PFB (Printer
Font Binary) 形式。 ど ち ら も PostScript Type 1 形式の フ ォ ン ト ア ウ ト ラ イ ン情報用の
形式です (「ATM フ ォ ン ト 」 と い う こ と も あ り ます)。
> Mac上では、リ ソ ース を利用 し たPostScript Type 1フ ォ ン ト 、すなわちLWFN(LaserWriter
Font) ア ウ ト ラ イ ン フ ォ ン ト に も 対応 し てい ます。 こ の種の フ ォ ン ト にはフ ォ ン ト スー
ツ ケース (FOND リ ソ ース。 FFIL と も い う ) がついてお り 、 その中に メ ト リ ッ ク デー
タ が入っ てい ま す (ス ク リ ーン フ ォ ン ト も 入っ てい ますが PDFlib はそれは無視 し ま
す)。
> PostScript ホ ス ト フ ォ ン ト を扱 う 際には、 LWFN はその フ ォ ン ト スーツ ケース と 同 じ
デ ィ レ ク ト リ に置かれてい る 必要があ り 、 かつ 5+3+3 規則に従っ て命名 さ れてい る 必
要があ り ます。
PostScript フ ォ ン ト の名前 フ ォ ン ト フ ァ イ ルを扱 う 際には、任意の別名を利用で き ます
(116 ページ 「フ ォ ン ト デー タ の情報源」 参照)。 フ ォ ン ト の内部名を知 り たい と き 、 それ
を取得で き る 方法はい く つかあ り ます。
> フ ォ ン ト ア ウ ト ラ イ ン フ ァ イ ル (*.pfa か *.pfb) を開いて /FontName 項目を見つけてそ
の右の文字列を見ます。最初のキ ャ ラ ク タ (\) を無視 し た残 り のキ ャ ラ ク タ を フ ォ ン ト
名 と し て使い ます。
> Windows と Mac OS X 以上では、 フ ォ ン ト フ ァ イ ルを ダブル ク リ ッ ク す る と 、 その フ ォ
ン ト のサンプルが現れて フ ォ ン ト の PostScript 名 も 表示 さ れます。
> AFM メ ト リ ッ ク フ ァ イ ルを開いて FontName項目を見つけてその右の文字列を見ます。
注 PostScript 名は Windows の フ ォ ン ト メ ニ ュ ー名 と はかな り 違 う こ と があ り ます。た と えば
「AvantGarde-Demi」 (PostScript 名) は 「AvantGarde, Bold」 (Windows のフ ォ ン ト メ ニ ュ ー
名) と な り ます。
104
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
5.1.4 SING フ ォ ン ト (グ リ フ レ ッ ト )
SING フ ォ ン ト (Smart Independent Glyphlets) は、 技術的には OpenType フ ァ イ ル形式の
拡張です。 SING フ ォ ン ト は、 日中韓テ キ ス ト におけ る 外字問題、 すなわち Unicode や広
く 用い ら れてい る 日中韓 レ ガ シエ ン コ ーデ ィ ン グ のいずれに も エ ン コ ー ド さ れていない
カ ス タ ム な グ リ フ に対す る 解決策 と し て開発 さ れた も のです。 SING アーキ テ ク チ ャ に関
す る 詳細を知 る には、Adobe Glyphlet Development Kit (GDK) for SING Gaiji Architecture を下
記の場所か ら ダ ウ ン ロ ー ド す る こ と がで き ます :
www.adobe.com/devnet/opentype/gdk/topic.html
SING フ ォ ン ト はたいてい、 1 個のグ リ フ だけ を内容 と し て持ち ます (あわせて縦書 き 字体
も 含む こ と も あ り ます)。 こ の 「 メ イ ン」 グ リ フ の Unicode 値は、 PDFlib で取得す る こ と
がで き 、 それにはグ リ フ ID を要求 し 、 ついで こ のグ リ フ ID に対す る Unicode 値を要求 し
ます :
maingid = (int) p.info_font(font, "maingid", "");
uv = (int) p.info_font(font, "unicode", "gid=" + maingid);
SING フ ォ ン ト を、 load_font( ) の fallbackfonts オプシ ョ ンの forcechars オプシ ョ ンの gaiji
サブオプシ ョ ン を用いて予備フ ォ ン ト と し て利用す る こ と を推奨 し ま す。 詳 し く は 158
ページ 「6.5.3 EUDC ・ SING フ ォ ン ト で外字キ ャ ラ ク タ を利用」 を参照 し て く だ さ い。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/starter_fallback ト ピ ッ ク にあ り ます。
廉価な FontLab SigMaker ツールを利用 し て、既存の画像や他フ ォ ン ト 内のグ リ フ をベース
に SING フ ォ ン ト を生成す る こ と も で き ます :
www.fontlab.com/font-utility/sigmaker/
5.1.5 Type 3 フ ォ ン ト
他のすべての フ ォ ン ト 形式 と は異な り 、Type 3 フ ォ ン ト はデ ィ ス ク フ ァ イ ルか ら 取得 さ れ
る のではな く 、 標準 PDFlib グ ラ フ ィ ッ ク 関数群を用いて実行時に定義 さ れ る 必要があ り
ます。 Type 3 フ ォ ン ト は下記の用途で有用です :
> ビ ッ ト マ ッ プフ ォ ン ト
> ロ ゴ等のカ ス タ ム グ ラ フ ィ ッ ク を、 シ ンプルなテ キ ス ト 操作命令で簡単に印刷可能
> いずれの定義済みの フ ォ ン ト やエ ン コ ーデ ィ ン グ で も 入手で き な い日本語の外字
(ユーザー定義キ ャ ラ ク タ )。
Type 3 フ ォ ン ト の定義の中では、 PDFlib のベ ク ト ルグ ラ フ ィ ッ ク ・ ラ ス タ 画像の機能が
すべて使え ます し 、 テ キ ス ト 出力の機能で さ えすべて使 う こ と がで き る ので、 Type 3 フ ォ
ン ト のキ ャ ラ ク タ の中身に関 し ては制約は何 も あ り ません。 PDF 取 り 込み ラ イ ブ ラ リ PDI
と 組み合わせれば、 さ ま ざ ま な描画の組み合わせを 1 枚の PDF のページ と し て取 り 込ん
で、 それを用いて Type 3 フ ォ ン ト のキ ャ ラ ク タ を定義す る こ と さ え可能です。 し か し 、
Type 3 フ ォ ン ト が最 も し ば し ば利用 さ れ る のはビ ッ ト マ ッ プグ リ フ のためであ り 、それは
こ れが PDF 内でグ リ フ に ラ ス タ 画像を使え る 唯一の フ ォ ン ト 形式だか ら です。
Type 3 フ ォ ン ト はページの外で完全に定義す る 必要があ り ます ( よ り 厳密にいえば、 フ ォ
ン ト 定義は文書ス コ ープ中で行われなければな り ません)。 以下の作成例は、 単純な Type
3 フ ォ ン ト を定義 し てい ます。
p.begin_font("Fuzzyfont", 0.001, 0.0, 0.0, 0.001, 0.0, 0.0, "");
p.begin_glyph("circle", 1000, 0, 0, 1000, 1000);
5.1 さ ま ざ ま な フ ォ ン ト 形式
105
p.arc(500, 500, 500, 0, 360);
p.fill();
p.end_glyph();
p.begin_glyph("ring", 400, 0, 0, 400, 400);
p.arc(200, 200, 200, 0, 360);
p.stroke();
p.end_glyph();
p.end_font();
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの
fonts/starter_type3font ・ fonts/type3_
bitmaptext ・ fonts/type3_rasterlogo ・ fonts/type3_vectorlogo ト ピ ッ ク にあ り ます。
こ う し た フ ォ ン ト は PDFlib の中に登録 さ れ、 その名前は load_font( ) に与え る こ と がで き
ます。 その際、 その Type 3 フ ォ ン ト の中のグ リ フ の名前を含むエン コ ーデ ィ ン グ も 一緒
に指定す る 必要があ り ます。 Type 3 フ ォ ン ト を扱 う 時は以下の こ と に留意 し て く だ さ い。
> パ タ ーンやテ ン プ レー ト での場合 と 同様、 グ リ フ定義の中で画像を開 く こ と はで き ま
せん。 ただ し 、 グ リ フ定義開始前に開いておいた画像を グ リ フ定義内で貼 り 付け る こ
と は可能です。 あ る いは、 小 さ な ビ ッ ト マ ッ プの場合な ら イ ン ラ イ ン画像を用いて こ
の制約を克服す る こ と も で き ます。
> PDF 読み込み機能を持つ さ ま ざ ま な ソ フ ト ウ ェ アが持つ制約のため、 テ キ ス ト 出力内
で使われ る キ ャ ラ ク タ は、 すべて実際に フ ォ ン ト 中で定義 さ れていなければな り ませ
ん。具体的には、文字 コ ー ド x を任意のテ キ ス ト 出力関数で表示 し たい場合、 エン コ ー
デ ィ ン グの位置 x に glyphname があ る な ら ば、 その glyphname は begin_glyph( ) で定
義 さ れていなければな り ません。
> PDF 読み込み機能を持つ ソ フ ト ウ ェ アのなかには、 対応す る グ リ フ名が フ ォ ン ト 中で
定義 さ れていない コ ー ド が用い ら れ る 場合、 .notdef と い う 名前のグ リ フ を必要 と す る
も のがあ り ます。 Acrobat 8 は、 .notdef グ リ フ がない と ク ラ ッ シ ュ す る こ と さ え あ り ま
す。.notdef グ リ フ があ り さ えすれば よ く 、 その中身は空のグ リ フ定義でか ま い ません。
> 普通の ビ ッ ト マ ッ プデー タ を用いて キ ャ ラ ク タ を定義す る 場合、 ビ ッ ト マ ッ プ中の使
われていない ピ ク セルは、 背景にかかわ ら ず白 く 印刷 さ れ ます。 こ れを避けて、 元の
背景色が透けて見え る よ う にす る には、ビ ッ ト マ ッ プ画像を作成する 際に mask パ ラ メ
タ を用い ます。
> 画像に対 し て interpolate オプシ ョ ン を指示す る と 、Type 3 ビ ッ ト マ ッ プ フ ォ ン ト の画面
上や印刷時の見栄え を向上 さ せ る のに有用です。
> Type 3 フ ォ ン ト には、 アセ ン ダやデ ィ セ ン ダな ど、 タ イ ポグ ラ フ ィ 的なプ ロ パテ ィ は
一切含まれてい ません。 し か し 、 load_font( ) のそれぞれ対応す る オプシ ョ ン を使えば
設定で き ます。
106
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
5.2 Unicode のキ ャ ラ ク タ と グ リ フ
5.2.1 グ リ フ ID
フ ォ ン ト はグ リ フ の集合であ り 、 各グ リ フ がその輪郭に よ っ て定義 さ れてい ます。 PDFlib
は、 フ ォ ン ト 内の各グ リ フ に番号を割 り 当て ます。 こ の番号を グ リ フ ID ま たは GID と い
い ま す。 GID 0 (ゼ ロ ) は、 すべての フ ォ ン ト 形式において .notdef グ リ フ を指 し ま す。
.notdef グ リ フ の見た目はフ ォ ン ト 形式やベン ダに よ っ て異な り ますが、 よ く あ る 実装は
空白グ リ フ か白四角か四角バ ッ テ ンです。 最高の GID は、 その フ ォ ン ト 内のグ リ フ数 よ
り 1 少ない数であ り 、 こ れは info_font( ) の numglyphs キーワー ド で取得す る こ と がで き
ます。
グ リ フ ID の割 り 当て方はフ ォ ン ト 形式に よ っ て異な り ます :
> TrueType・OpenType フ ォ ン ト はすでに内部 GID を含んでい ますので、PDFlib は こ の GID
を用い ます。
> CID キー付 き OpenType 日中韓フ ォ ン ト では、 CID が GID と し て用い ら れます。
> それ以外の フ ォ ン ト 種別については、 PDFlib がグ リ フ に、 フ ォ ン ト 内のそのア ウ ト ラ
イ ン記述の順番に従っ て付番 し ます。
PDFlib では、 Unicode な ど のエン コ ーデ ィ ン グではな く GID でグ リ フ を選ぶ こ と も で き ま
す (115 ページ 「グ リ フ ID エン コ ーデ ィ ン グ」 参照)。 直接 GID 指定は、 グ リ フ数を取得
し て全グ リ フ を なめ る こ と で フ ォ ン ト の概観表を印刷す る 等、 特殊な応用でのみ有用で
す。
5.2.2 グ リ フ に対す る Unicode マ ッ ピ ン グ
Unicode マ ッ ピ ン グ PDFlib は、 各 GID に一意な Unicode 値を割 り 当て ます。 こ のマ ッ
ピ ン グ処理はフ ォ ン ト 形式に よ っ て異な り ますので、対応 し てい る フ ォ ン ト 種別ご と に以
下の各項で解説 し てい ます。 各 GID には一意な Unicode 値が割 り 当て ら れますが、 その逆
は必ず し も 真ではあ り ません。 すなわち、 あ る 1 つのグ リ フ が複数の Unicode 値を表す こ
と も あ り ます。 多 く の TrueType ・ OpenType フ ォ ン ト で よ く あ る 例は、 空グ リ フ が U+0020
の空白 と U+00A0 の ノ ーブ レー ク スペース の両方を表す場合や、1 つのグ リ フ が U+2126 の
オーム記号 と U+03A9 のギ リ シ ャ 文字 Ω を表す場合です。 複数の Unicode 値が フ ォ ン ト
内の同一 の グ リ フ を 指 し て い る 場合、 PDFlib は そ の フ ォ ン ト 内で 最初に見つか っ た
Unicode 値を割 り 当て ます。
マ ッ プ な し グ リ フ と 私用領域 (PUA) 場 合 に よ っ て は、 あ る 特 定 の グ リ フ に 対 す る
Unicode 値を フ ォ ン ト が提供 し ていない こ と があ り ます。 こ の場合には、PDFlib は Unicode
私用領域 (89 ページ 「4.1 Unicode の重要な概念」 参照) 内の値を そのグ リ フ に割 り 振 り
ます。 こ の よ う な グ リ フ を マ ッ プ な し グ リ フ と いい ます。 フ ォ ン ト 内のマ ッ プな し グ リ フ
の数は、 info_font( ) の unmappedglyphs キー ワー ド で取得す る こ と がで き ます。 マ ッ プな
し グ リ フは、 フ ォ ン ト の検索性 と テ キ ス ト 抽出を司 る ToUnicode CMap 内では Unicode 置
換キ ャ ラ ク タ U+FFFD で表 さ れます。 結果 と し てマ ッ プな し グ リ フは、 生成 さ れた PDF
か ら テ キ ス ト と し て正 し く 抽出で き な く な り ます。
PDFlib が PUA 値を マ ッ プな し グ リ フ に割 り 振っ てい く 際には、 下記のプール内の若い
値か ら 順に用いてい き ます :
> 基本 と な る のは基本多言語面 (BMP) 内の Unicode PUA 領域、 すなわち範囲 U+E000 ∼
U+F8FF です。 必要であれば こ れに加え、 第 15 面 (U+F0000 to U+FFFFD) 内の PUA
値 も 用い ら れます。
5.2 Unicode のキ ャ ラ ク タ と グ リ フ
107
> その フ ォ ン ト が内部的にすでに割 り 振っ てい る PUA 値は、新たな PUA 値を作成す る 際
には用い ら れません。
> Adobe 領域 U+F600 ∼ F8FF 内の PUA 値は用い ら れません。
生成 さ れ る PUA 値は、1 つの フ ォ ン ト 内で一意です。 あ る フ ォ ン ト 内のグ リ フ に対 し て生
成 さ れ る PUA 値の割 り 振 り は、 他の フ ォ ン ト か ら は独立です。
TrueType ・ OpenType ・ SING フ ォ ン ト に対す る Unicode マ ッ ピ ン グ PDFlib は、 フ ォ ン
ト の cmap テーブルで見つかっ た Unicode マ ッ ピ ン グ を保持 し ます(cmap の選択は、load_
font( ) に与え る エン コ ーデ ィ ン グに依存 し ます)。1 つのグ リ フ が複数の Unicode 値に対 し
て用い ら れてい る 場合、PDFlib はその フ ォ ン ト 内で見つかっ た最初の Unicode 値を用い ま
す。
cmap が何の Unicode マ ッ ピ ン グ も 提供 し ていないグ リ フ については、PDFlib はそのグ
リ フ名を post テーブル (その フ ォ ン ト 内にあれば) 内でチ ェ ッ ク し 、 Type 1 フ ォ ン ト に
ついて後述す る よ う にそのグ リ フ名に基づいて Unicode マ ッ ピ ン グ を決定 し ます。
場合に よ っ ては、 cmap も post テーブル も その フ ォ ン ト 内のすべてのグ リ フ に対す る
Unicode 値を提供 し ていない こ と があ り ます。 こ れは Unicode 規格外の異体字 (ス ウ ォ ッ
シ ュ キ ャ ラ ク タ 等) ・拡張合字・非テ キ ス ト 記号について あ ては ま り ます。 こ の場合 PDFlib
は、 107 ページ 「マ ッ プな し グ リ フ と 私用領域 (PUA) 」 で述べた よ う に問題のグ リ フ に
PUA 値を割 り 当て ます。
Type 1 フ ォ ン ト に対す る Unicode マ ッ ピ ン グ Type 1 フ ォ ン ト は明示的な Unicode マ ッ
ピ ン グ を内蔵 し てお ら ず、 各グ リ フ に一意な名前を割 り 当ててい ます。 PDFlib は こ のグ リ
フ名に基づいて Unicode 値の割 り 当て を試みます。 そのためには内蔵の、 さ ま ざ ま な言語
や用字系に対 し て広 く 用い ら れ る 7,000 種を超すグ リ フ名に対す る Unicode マ ッ ピ ン グ を
内容 と し て持つマ ッ ピ ン グ テーブルが使われ ま す。 こ のマ ッ ピ ン グ テーブルには Adobe
Glyph List (AGL)1 内のお よ そ 4,200 種のグ リ フ名が含まれてい ます。 し か し 、 Type 1 フ ォ
ン ト は こ の内蔵マ ッ ピ ン グ テーブルに含ま れていないグ リ フ名を含んでい る こ と があ り 、
こ れは と り わけ記号フ ォ ン ト について顕著です。 こ の場合 PDFlib は、 107 ページ 「マ ッ プ
な し グ リ フ と 私用領域 (PUA)」 で述べた よ う に問題のグ リ フ に PUA 値を割 り 当て ます。
Type 1 フ ォ ン ト に対す る メ ト リ ッ ク が PFM フ ァ イ ルか ら 読み込まれ、PFB ま たは PFA
ア ウ ト ラ イ ン フ ァ イ ルが得 ら れない と き は、PDFlib はその フ ォ ン ト のグ リ フ名を知 る こ と
がで き ません。 こ の場合、 PDFlib は Unicode 値を PFM フ ァ イ ル内のエン コ ーデ ィ ン グ
(charset) 項目に基づいて割 り 当て ます。
Type 3 フ ォ ン ト に対す る Unicode マ ッ ピ ン グ Type 3 フ ォ ン ト も グ リ フ名に基づいてい
ますので、 Type 1 フ ォ ン ト と 同様に扱われます。 ただ し 重要な違いは、 Type 3 フ ォ ン ト
ではグ リ フ名はユーザーの制御下にあ る (begin_glyph( ) の glyphname 引数を通 じ て) と
い う こ と です。 ですので、 ユーザー定義 Type 3 フ ォ ン ト に対 し ては AGL 内の適切な グ リ
フ名を用い る こ と を強 く 推奨 し ます。 こ れに よ っ て、 正 し い Unicode 値が PDFlib に よ っ
て自動的に正 し く 割 り 当て ら れ る よ う にな り 、 生成 さ れ る PDF 文書内でテ キ ス ト が検索
可能にな り ます。
5.2.3 Unicode 制御キ ャ ラ ク タ
制御キ ャ ラ ク タ は、 いかな る グ リ フ を も 表 さ ず、 何 ら かの組版情報の伝達に用い ら れ る
Unicode 値です。 PDFlib は、 下記のグループの Unicode 制御キ ャ ラ ク タ を処理 し ます :
1. AGL は partners.adobe.com/public/developer/en/opentype/glyphlist.txt にあ り ます。
108
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> デフ ォ ル ト のシ ェーピ ン グ動作を上書 き す る ための制御キ ャ ラ ク タ (表 6.4 に挙げ る )
と 、 デフ ォ ル ト の双方向組版を上書 き す る ための制御キ ャ ラ ク タ (表 6.5 に挙げ る )
は、 テ キ ス ト 行 ・ テ キ ス ト フ ロ ー内の複雑用字系のシ ェーピ ン グ と OpenType レ イ ア
ウ ト 機能の処理を制御 し ます。 こ れ ら の制御キ ャ ラ ク タ は、 評価 さ れた後に削除 さ れ
ます。
> 表 8.1 に挙げ る 改行 と テ キ ス ト フ ロ ー組版のための組版制御キ ャ ラ ク タ 。こ れ ら の制御
キ ャ ラ ク タ は、 評価 さ れた後に削除 さ れます。
> こ れ以外の範囲 U+0001 ∼ U+0019・U+007F ∼ U+009F の Unicode 制御キ ャ ラ ク タ は置換
キ ャ ラ ク タ で置換 さ れます。
フ ォ ン ト が制御キ ャ ラ ク タ に対す る グ リ フ を含んでいた と し て も 、そのグ リ フは通常は視
覚化 さ れません。 なぜな ら PDFlib が制御キ ャ ラ ク タ を除去す る か ら です ( こ の規則の例
外 と し て &NBSP; と &SHY; は除去 さ れません)。 ただ し 、 encoding=glyphid の場合は制御
キ ャ ラ ク タ はテ キ ス ト 内に保持 さ れ、 視覚出力を生み出す こ と がで き ます。
5.2.4 ユー ロ グ リ フ
欧州の通貨ユー ロ を表す記号は、 それを正 し く 表示 ・ 印刷 し よ う と し た と き に、 多 く の問
題を引 き 起 こ し ます。 こ の項では、 ユー ロ キ ャ ラ ク タ を う ま く 扱え る よ う にな る ためのい
く つかの ヒ ン ト を記 し ま し ょ う 。 まずは じ めに、 ユー ロ キ ャ ラ ク タ を含んでい る エン コ ー
デ ィ ン グ を選ぶ必要があ り 、そ し て ど の位置にユー ロ が置かれてい る か を調べ る 必要があ
り ます。 い く つかの例 :
> unicode エン コ ーデ ィ ン グではキ ャ ラ ク タ U+20AC を使い ます。 あ る いは、 ユー ロ グ リ
フ を その文字参照 &euro; (名前で) か &#x20AC; (数値で) で指定す る こ と も で き ます。
> winansi エン コ ーデ ィ ン グでは位置は 0x80 (16 進) すなわち 128 (10 進) です。
> 広 く 用い ら れ る iso8859-1 エン コ ーデ ィ ン グはユー ロ キ ャ ラ ク タ を含んでい ません。 し
か し 、 iso8859-15 エ ン コ ーデ ィ ン グは iso8859-1 の拡張であ り 、 ユー ロ キ ャ ラ ク タ を
0xA4 (16 進) すなわち 164 (10 進) に追加 し てい ます。
> 元々の macroman エン コ ーデ ィ ン グはユー ロ キ ャ ラ ク タ を含んでい ません。 し か し 、
Apple は こ のエン コ ーデ ィ ン グに変更を加え、 0xDB (16 進) すなわち 219 (10 進) の
古い通貨グ リ フ をユー ロ グ リ フへ置 き 換え ま し た。 こ の変更 さ れた Mac エン コ ーデ ィ
ン グ を使 う には、 macroman でな く macroman_apple を使い ます。
次に、 ユー ロ グ リ フ を含んでい る フ ォ ン ト を選ぶ必要が あ り ま す。 今 ど き のたいていの
フ ォ ン ト はユー ロ グ リ フ を含んでい ますが、古い フ ォ ン ト だ と 含んでいないか も し れませ
ん。 ま たい く つかの例 :
> PostScript レベル 1・レベル 2 デバ イ ス の内蔵フ ォ ン ト はユー ロ キ ャ ラ ク タ を含んでい ま
せんが、 PostScript 3 デバ イ ス の内蔵フ ォ ン ト はたいてい含んでい ます。
> フ ォ ン ト がユー ロ キ ャ ラ ク タ を含んでいない場合は、 Symbol コ ア フ ォ ン ト 内の位置
0xA0 (16 進) すなわち 160 (10 進) にあ る ユー ロ をかわ り に利用す る こ と も で き ます。
ユー ロ グ リ フ が フ ォ ン ト にない と き は、PDFlib の フ ォ ン ト 予備機構を用いて他の フ ォ ン ト
の中のユー ロ グ リ フ を追加す る こ と も で き ます (124 ページ 「別フ ォ ン ト か ら のユー ロ グ
リ フ を使 う 」 参照)。
5.2 Unicode のキ ャ ラ ク タ と グ リ フ
109
5.3 テキス ト 処理パ イ プ ラ イ ン
ク ラ イ ア ン ト アプ リ ケーシ ョ ンは、 ページ出力 し たいテ キ ス ト を PDFlib に与え ます。 こ
のテ キ ス ト は、 ア プ リ ケーシ ョ ン個別の何 ら かのエ ン コ ーデ ィ ン グ と 形式に従っ てエ ン
コ ー ド さ れてい ます。 し か し 、 PDFlib の内部処理は Unicode 規格に基づいてお り 、 ま た最
終テ キ ス ト 出力はフ ォ ン ト 固有のグ リ フ ID を必要 と し ます。 ですので PDFlib は、 ページ
内容のために与え ら れ る 文字列を テ キ ス ト 処理パ イ プ ラ イ ンの中で 3つの過程を経て処理
し ます :
> 入力 コ ー ド を Unicode 値へ正規化。こ の処理は選択 さ れてい る エン コ ーデ ィ ン グに よ り
制約を受け ます。
> Unicode 値を フ ォ ン ト 固有のグ リ フ ID へ変換。こ の処理はその フ ォ ン ト 内で利用可能な
グ リ フ に よ り 制約を受け ます。
> グ リ フ ID を転換。 こ の処理は出力エン コ ーデ ィ ン グに よ り 制約を受け ます。
テ キ ス ト 処理パ イ プ ラ イ ンの こ れ ら 3 つの過程は、 い く つかの下部処理を含んでお り 、 そ
れはオプシ ョ ンで制御す る こ と がで き ます。
5.3.1 入力文字列 を Unicode へ正規化
以下の ス テ ッ プは、 encoding=glyphid と 非 Unicode CMap 以外のすべてのエン コ ーデ ィ ン
グに対 し て実行 さ れます :
> Unicode 対応言語バ イ ンデ ィ ン グ : シ ン グルバ イ ト エン コ ーデ ィ ン グが指定 さ れてい る
と き は、UTF-16 テ キ ス ト は高次バ イ ト を捨て る こ と でシ ン グルバ イ ト テ キ ス ト へ変換
さ れます。
> Windows : マルチバ イ ト テ キ ス ト (cp932 等) を Unicode へ変換 し ます。
> エ ス ケープシーケ ン ス (99 ページ 「4.5.1 エ ス ケープシーケ ン ス」 参照) を、 対応す る
数値へ置 き 換え ます。
> 文字参照を解決 し 、 それを対応す る Unicode 値へ置 き 換え ます (100 ページ 「4.5.2 文字
参照」 お よ び次項参照)。
> シ ン グルバ イ ト エ ン コ ーデ ィ ン グ : シ ン グルバ イ ト テ キ ス ト を、 指定 さ れたエ ン コ ー
デ ィ ン グに従っ て Unicode へ変換 し ます。
さ ま ざ ま な フ ォ ン ト 形式やキ ャ ラ ク タ の種別に対する Unicode の割 り 当てについて詳 し く
は、 107 ページ 「5.2.2 グ リ フ に対す る Unicode マ ッ ピ ン グ」 を参照 し て く だ さ い。
グ リ フ 名に よ る文字参照 フ ォ ン ト 内のグ リ フは、その対応す る Unicode 値を あ ら か じ め
知 る こ と がで き ない (PDFlib が実行時に PUA 値を割 り 振 る ので) も のがあ り 、 その よ う
な グ リ フは直接指定す る こ と がで き ません。 その よ う な グ リ フ を指定す る には、 グ リ フ名
に よ る 文字参照を使 う こ と がで き ます。 文法の解説は 100 ページ 「4.5.2 文字参照」 を参
照 し て く だ さ い。 こ の参照は、 対応す る Unicode 値へ置 き 換え ら れます。
文字参照が内容文字列内で用い ら れてい る と き は、 PDFlib はその指定 さ れた グ リ フ を
カ レ ン ト フ ォ ン ト 内で見つけ よ う と 試み、 そ し てその参照を そのグ リ フ の Unicode 値へ置
き 換え ます。 指定 さ れた グ リ フ が フ ォ ン ト 内で見つか ら ない と き は、 PDFlib は Unicode 値
を決定す る ためにその内蔵グ リ フ名テーブルを検索 し ます。 こ の Unicode 値は さ ら に、 適
切な グ リ フ が フ ォ ン ト 内で得 ら れ る か ど う かを調べる ために使われます。その よ う な グ リ
フ が見つか ら ない と き は、 動作は glyphcheck ・ errorpolicy 設定で制御 さ れます。 文字参照
は、 glyphid ・ builtin エン コ ーデ ィ ン グでは使 う こ と がで き ません。
110
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
5.3.2 Unicode 値 を グ リ フ ID へ変換
前項で決定 さ れた Unicode 値は、 い く つかの理由に よ り 変更が必要な場合があ り ます。 以
下の ス テ ッ プは、 下記の よ う に処理 さ れ る encoding=glyphid と 非 Unicode CMap 以外のす
べてのエン コ ーデ ィ ン グに対 し て実行 さ れます :
> 非 Unicode CMap の場合 : 無効な コ ー ド 列はつねに例外を発生 さ せます。
> encoding=glyphid の場合 : 無効な グ リ フ ID は、replacementchar (glyphcheck=replace の
と き ) かグ リ フ ID 0 (glyphcheck=none) へ置 き 換え ら れます。 glyphcheck=error の と
き は例外が発生 し ます。
予備 フ ォ ン ト 内の強制キ ャ ラ ク タ Unicode 値を、 fallbackfonts オプシ ョ ンの forcechars
サブオプシ ョ ン に従っ て置 き 換え て、 対応す る 予備フ ォ ン ト のグ リ フ ID を決定 し ます。
詳 し く は 123 ページ 「5.4.5 予備フ ォ ン ト 」 を参照 し て く だ さ い。
グ リ フ ID へ変換 残 り の Unicode 値を、 107 ページ 「5.2.2 グ リ フ に対す る Unicode マ ッ
ピ ン グ」 で決定 さ れ る マ ッ ピ ン グに従っ て グ リ フ ID へ変換 し ます。 Unicode 値に対応す る
グ リ フ ID が フ ォ ン ト 内に見つか ら ない と き は、 その次の ス テ ッ プは glyphcheck オプシ ョ
ンに よ っ て異な り ます :
> glyphcheck=none : グ リ フ ID 0 が用い ら れます。 こ れはすなわち、.notdef グ リ フ がテ キ
ス ト 出力内で用い ら れ る こ と を意味 し ます。 .notdef グ リ フ が視覚的形状を内容 と し て
持つ場合 (たいていは白四角か四角バ ッ テ ン) には、 問題の起 き た キ ャ ラ ク タ が PDF
ページ上で目に見え る よ う にな り ます。 それが望ま し いか ど う かは場合に よ る で し ょ
う。
> glyphcheck=replace ( こ れがデフ ォ ル ト ) : 警告 メ ッ セージが ロ グ記録 さ れ、 PDFlib は、
マ ッ プで き ない Unicode 値を後述のグ リ フ置換機構に よ っ て置 き 換え よ う と 試みます。
> glyphcheck=error : PDFlib はエ ラ ーを発生 さ せます。 errorpolicy=return の場合には、 こ
れはすな わ ち関数呼び出 し が テ キ ス ト 出力 を 一切生成せずに終了 さ れ る こ と を 意味
し 、 add/create_textflow( ) が -1 を返す こ と を意味 し ます。 errorpolicy=exception の場合
は例外が発生 し ます。
グ リ フ 置換 glyphcheck=replace の場合は、 マ ッ プで き ない Unicode 値は再帰的に以下の
よ う に置 き 換え ら れます :
> マ ス タ ーフ ォ ン ト を読み込んだ際に指定 し た予備フ ォ ン ト の中で、その Unicode 値に対
す る グ リ フ が検索 さ れ ます。 各フ ォ ン ト に対 し て予備フ ォ ン ト は複数指定す る こ と も
で き る ので、 こ こ では任意の数の フ ォ ン ト が関わ る 可能性があ り ます。 予備フ ォ ン ト
の う ちの 1 つでグ リ フ が見つか っ た と き はそれが使われます。
> タ イ ポグ ラ フ ィ 的に類似のグ リ フ を、PDFlib の内蔵置換テーブル内の Unicode 値に従っ
て選びます。 こ の内蔵 リ ス ト か ら こ れ ら の置換のい く つか を以下に抜粋 し ます。 リ ス
ト 内の 1 番目のキ ャ ラ ク タ が フ ォ ン ト 内で見つか ら ない と き 、 それは 2 番目のキ ャ ラ
ク タ へ置き 換え ら れます :
U+00A0
U+00AD
U+2010
U+03BC
U+212B
U+220F
U+2126
(ノーブレークスペース)
(ソフトハイフン)
(ハイフン)
(ギリシャ文字μ)
(オングストローム記号)
(多項総乗演算子)
(オーム記号)
U+0020
U+002D
U+002D
U+00C5
U+00B5
U+03A0
U+03A9
(空白)
(ハイフン-マイナス)
(ハイフン-マイナス)
(マイクロ記号)
(欧文Aの上に丸)
(ギリシャ文字Π)
(ギリシャ文字Ω)
5.3 テキス ト 処理パイ プ ラ イ ン
111
内蔵テーブルに加えて、 全角キ ャ ラ ク タ U+FF01 ∼ U+FF5E は、 フ ォ ン ト 内で全角字
体が得 ら れない場合には、対応す る ISO 8859-1 キ ャ ラ ク タ (すなわち U+0021∼U+007E)
へ置 き 換え ら れます。
> Unicode の合字を、その構成グ リ フ群へ分解 し ます(例:U+FB00 欧文合字 ff を シーケ ン
ス U+0066 f ・ U+0066 f へ置 き 換え)。
> 同 じ Unicode セマ ン テ ィ ク ス を持つグ リ フ を、 そのグ リ フ名に従っ て選びます。 特に、
ピ リ オ ド で区切 ら れた グ リ フ名接尾辞はすべて、 対応す る グ リ フ が得 ら れない と き は
除去 さ れます (例 : A.swash を A へ置 き 換え。 g.alt を g へ置 き 換え)。
こ れ ら の方式がいずれ も Unicode 値に対する グ リ フ を与え ない と き は、replacementchar オ
プシ ョ ンで指定 さ れた キ ャ ラ ク タ が使われます。それに対応す る グ リ フ自体が フ ォ ン ト 内
で得 ら れ な い と き (ま た は replacementchar オプ シ ョ ン が指定 さ れ て い な い と き ) は、
U+00A0 ( ノ ーブ レー ク スペース) と U+0020 (空白) が試 さ れます。 こ れ ら さ え も 得 ら れ
ない と き は、 グ リ フ ID 0 (グ リ フ な し 記号) が使われます。
PDF/A-1 ・ PDF/X-4 ・ PDF/X-5 では、 グ リ フ ID 0 へマ ッ プ さ れ る 入力 コ ー ド は ス キ ッ
プ さ れます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/glyph_replacement ト ピ ッ ク にあ り ます。
5.3.3 グ リ フ ID を転換
決定 さ れた グ リ フ ID はま だ最終的な も のではあ り ません。 なぜな ら 最終出力を生成す る
前に、 い く つかの転換を行わなければな ら ない可能性があ る か ら です。 具体的に ど の よ う
な転換が必要かは、 フ ォ ン ト やい く つかのオプシ ョ ンに よ っ て異な り ます。 以下の ス テ ッ
プは、 非 Unicode CMap で keepnative=true の場合を除 き 、 すべてのエン コ ーデ ィ ン グに対
し て行われます。
縦書 き グ リ フ 縦書 き モー ド の フ ォ ン ト では、い く つかのグ リ フは縦書 き 字体へ置 き 換わ
る 可能性があ り ます。 こ の置換は、 フ ォ ン ト 内に vert OpenType レ イ ア ウ ト 機能テーブル
が必要です。
OpenType レ イ ア ウ ト 機能 OpenType 機能は、 合字 ・ ス ウ ォ ッ シ ュ キ ャ ラ ク タ ・ ス モー
ルキ ャ ピ タ ルをは じ め と す る さ ま ざ ま な タ イ ポグ ラ フ ィ バ リ エーシ ョ ン を、 1 個ない し 複
数のグ リ フ ID を他の値へ置 き 換え る こ と に よ っ て作 り 出す こ と がで き ます。OpenType 機
能については 142 ページ 「6.3 OpenType レ イ ア ウ ト 機能」 で解説 し てい ます。 OpenType
レ イ ア ウ ト 機能は、 適切な フ ォ ン ト に対 し てのみ有効であ り (144 ページ 「OpenType レ
イ ア ウ ト 機能のための要件」 参照)、 かつ features オプシ ョ ンに従っ て適用 さ れます。
複雑用字系のシ ェ ー ピ ン グ シ ェ ー ピ ン グは、 テ キ ス ト の順序を替え、 ま た、 キ ャ ラ ク
タ の位置に よ っ て適切な字体の グ リ フ を決定 し ま す (例 : ア ラ ビ ア文字キ ャ ラ ク タ の頭
字 ・ 中字 ・ 尾字 ・ 単独形) 。 こ れは適切な フ ォ ン ト に対 し てのみ有効であ り (150 ページ
「シ ェーピ ン グのための要件」 参照)、 かつ shaping オプシ ョ ンに従っ て適用 さ れます。
112
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
5.4 フ ォ ン ト を読み込む
5.4.1 テキス ト フ ォ ン ト に対す る エ ン コ ーデ ィ ン グ を選ぶ
フ ォ ン ト は、 明示的に load_font( ) 関数で読み込む こ と も で き 、 あ る いは暗黙的に、 add/
create_textflow( ) や fill_textblock( ) と い っ た特定の関数に fontname・encoding オプシ ョ ン
を与え る こ と で読み込む こ と も で き ます。 ど の よ う な方式を用いて フ ォ ン ト を読み込むの
かにかかわ ら ず、 適切なエン コ ーデ ィ ン グ を指定する 必要があ り ます。 エン コ ーデ ィ ン グ
は下記を決定 し ます :
> PDFlib が与え ら れ る テ キ ス ト を ど のテ キ ス ト 形式であ る と 見なすか。
> フ ォ ン ト 内の ど のグ リ フ が使え る か。
> ページ上のテ キ ス ト と フ ォ ン ト 内のグ リ フデー タ が PDF 出力文書内に ど の よ う に格納
さ れ る か。
PDFlib のテ キ ス ト 処理は Unicode 規格1 に基づいてい ます。 こ れは ISO 10646 と ほぼ等価
です。 今ど き の開発環境の多 く が Unicode 規格に対応 し てい ますので、 Unicode 文字列を
使っ てで き る だけ簡単に PDF 出力を生成で き る よ う にす る こ と が私た ちの目標です。 た
だ し 、 Unicode を扱わない開発者はそのアプ リ ケーシ ョ ン を Unicode へ切 り 替え る 必要は
あ り ません。 レ ガシエン コ ーデ ィ ン グ も 使 う こ と がで き る か ら です。
ど のエ ン コ ーデ ィ ン グ を選ぶかは、 フ ォ ン ト や、 得 ら れ る テ キ ス ト デー タ や、 い く つ
かのプ ロ グ ラ ミ ン グ的側面に よ っ て決ま り ます。 以下 こ の項では、 さ ま ざ ま な分類のエン
コ ーデ ィ ン グの概観を示す こ と で、 適切なエン コ ーデ ィ ン グ を選ぶための助け と し ます。
Unicode エ ン コ ーデ ィ ン グ encoding=unicode と す る と 、Unicode 文字列を PDFlib に渡す
こ と がで き ます。 こ のエン コ ーデ ィ ン グはすべてのフ ォ ン ト 形式に対 し て使え ます。 利用
す る 言語バ イ ンデ ィ ン グに よ っ て、 そのプ ロ グ ラ ミ ン グ言語 (Java 等) が提供 し てい る
Unicode 文字列デー タ 型を利用で き る 場合 も あれば、 Unicode を UTF-8 ・ UTF-16 ・ UTF32 のいずれかの形式で リ ト ルエンデ ィ ア ン ・ ビ ッ グエ ンデ ィ ア ンのいずれかのバ イ ト 順
序で内容 と し て持つバ イ ト 配列を用い る 場合 も あ り ます (C 等)。
encoding=unicode では、フ ォ ン ト 内のすべてのグ リ フ が指定で き 、複雑用字系のシ ェー
ピ ン グ と OpenType レ イ ア ウ ト 機能を使 う こ と がで き ます。PDFlib は、要求 さ れた Unicode
値に対す る グ リ フ を フ ォ ン ト が含んでい る か ど う かを調べます。グ リ フ が得 ら れない と き
は、 代替グ リ フ を同一フ ォ ン ト か別フ ォ ン ト か ら 持っ て来る こ と がで き ます (123 ページ
「5.4.5 予備フ ォ ン ト 」 参照)。
PDF 内のい く つかの フ ォ ン ト 形式 (Type 1、 Type 3、 グ リ フ名に基づ く OpenType フ ォ
ン ト ) は、 シ ン グルバ イ ト テ キ ス ト にのみ対応 し てい ます。 し か し 、 PDFlib では こ う し た
種類の フ ォ ン ト で も 255 種類を超え る キ ャ ラ ク タ を扱え る よ う 工夫 し てい ます。
encoding=unicode の難点は、 昔な が ら の シ ン グ ルバ イ ト やマルチバ イ ト のエ ン コ ー
デ ィ ン グのテ キ ス ト を用い る こ と がで き ない (ISO 8859-1 を除 き ) こ と です。
シ ン グルバ イ ト エ ン コ ーデ ィ ン グ 8 ビ ッ ト エン コーデ ィ ン グ (シ ン グルバ イ ト エン コー
デ ィ ン グ と も い う ) は、 テ キ ス ト 文字列内の各バ イ ト を 1 個のキ ャ ラ ク タ へマ ッ プ し ます
ので、 同時に扱え る キ ャ ラ ク タ は 255 種類ま でに制限 さ れます (値 0 は利用で き ません)。
こ の種類のエン コ ーデ ィ ン グはすべての フ ォ ン ト 形式に対 し て使え ます。 PDFlib は、 選ば
れたエン コ ーデ ィ ン グに合っ た グ リ フ を フ ォ ン ト が含んでい る か ど う かを調べます。使え
る グ リ フ の数が最低限の数に届かない と き は、 PDFlib は警告 メ ッ セージ を ロ グ記録 し ま
す。選ばれたエン コ ーデ ィ ン グに対 し て使え る グ リ フ が フ ォ ン ト 内で ま っ た く 得 ら れない
と き は、 フ ォ ン ト 読み込みは 「font doesn't support encoding」 と い う メ ッ セージ を出 し て
1. www.unicode.org を参照。
5.4 フ ォ ン ト を読み込む
113
失敗 し ます。 PDFlib は、 要求 さ れた入力値に対す る グ リ フ を フ ォ ン ト が含んでい る か ど う
かを調べます。 グ リ フ が得 ら れない と き は、 代替グ リ フ を同一フ ォ ン ト か別フ ォ ン ト か ら
持っ て来 る こ と がで き ます (123 ページ 「5.4.5 予備フ ォ ン ト 」 参照)。
8 ビ ッ ト エン コ ーデ ィ ン グについて詳 し く は 91 ページ 「4.2 シ ン グルバ イ ト (8 ビ ッ
ト ) エン コ ーデ ィ ン グ」 で解説 し てい ます。 こ れは さ ま ざ ま な情報源か ら 持っ て来 る こ と
がで き ます :
> 表 4.2 に従っ た大量の定義済みエン コ ーデ ィ ン グ。 こ れは さ ま ざ ま なシ ス テ ム、 さ ま ざ
ま な ロ ケールで現在利用 さ れて い る 最 も 重要な エ ン コ ーデ ィ ン グ群 を 網羅 し て い ま
す。
> ユーザー定義エ ン コ ーデ ィ ン グ。 こ れは、 外部フ ァ イ ルで与え る か、 ま たは実行時に
encoding_set_char( ) で動的に構築す る こ と がで き ます。 こ のエン コ ーデ ィ ン グは、 グ
リ フ名か Unicode 値に基づ く こ と がで き ます。
> オペレーテ ィ ン グ シ ス テ ム か ら 持っ て き たエ ン コ ーデ ィ ン グ。 シ ス テムエ ン コ ーデ ィ
ン グ と も いい ます。 こ の機能は、 Windows と IBM iSeries ・ zSeries で利用可能です。
シ ン グルバ イ ト エン コ ーデ ィ ン グの難点は、キ ャ ラ ク タ やグ リ フ の数に限 り があ る こ と で
す。 こ の理由か ら 、 複雑用字系のシ ェーピ ン グ と OpenType レ イ ア ウ ト 機能はシ ン グルバ
イ ト エン コ ーデ ィ ン グに対 し ては使え ません。
ビル ト イ ン エ ン コ ーデ ィ ン グ encoding=builtin を指定 し て、 記号フ ォ ン ト 内の非テ キ ス
ト グ リ フ に対す る シ ン グルバ イ ト コ ー ド を使 う と い う 方法 も あ り ます。フ ォ ン ト の内部エ
ン コ ーデ ィ ン グの形式はフ ォ ン ト の種類に よ っ て異な り ます :
> TrueType:エン コ ーデ ィ ン グは、フ ォ ン ト のシ ン ボ リ ッ ク cmap に、すなわち cmap テー
ブル内の (3, 0) 項目に基づいて作 ら れます。
> OpenType フ ォ ン ト はエン コ ーデ ィ ン グ を CFF テーブル内に含んでい る こ と があ り ま
す。
> PostScript Type 1 フ ォ ン ト はつねにエン コ ーデ ィ ン グ を含んでい ます。
> Type 3 の場合、エン コ ーデ ィ ン グはフ ォ ン ト の先頭 255 グ リ フ に よ っ て定義 さ れます。
フ ォ ン ト が ビル ト イ ンエン コ ーデ ィ ン グ を何 ら 含んでいない と き は、フ ォ ン ト 読み込みは
失敗 し ます (OpenType 日中韓フ ォ ン ト 等)。 info_font( ) で symbolfont キーを用い る こ と
も で き ます。 こ れが false を返 し た な ら 、 その フ ォ ン ト はテ キ ス ト フ ォ ン ト であ り 、 広 く
利用 さ れてい る シ ン グルバ イ ト エ ン コ ーデ ィ ン グのいずれかで読み込む こ と も で き ます。
symbolfont キーが true を返 し た な ら それはで き ません。 その よ う な記号フ ォ ン ト 内のグ
リ フは、各グ リ フ に対す る コ ー ド がわかっ てい る 場合にのみ利用する こ と が可能です(115
ページ 「5.4.2 記号フ ォ ン ト に対す る エン コ ーデ ィ ン グ を選ぶ」 参照)。
encoding=builtin の難点は、 シ ン グルバ イ ト エン コ ー ド さ れた テ キ ス ト 内では文字参照
が使え ない こ と です。
マルチバ イ ト エ ン コ ーデ ィ ン グ こ の種類のエ ン コ ーデ ィ ン グは日中韓 フ ォ ン ト に、 す
なわち日本語 ・ 中国語 ・ 韓国語のキ ャ ラ ク タ 群を持つ TrueType ・ OpenType CID フ ォ ン ト
に対 し て使え ます。 こ れ ら の用字系で使 う ために さ ま ざ ま なエン コ ーデ ィ ン グ方式が開発
さ れて き ま し た。 日本語では Shift-JIS ・ EUC、 中国語では GB ・ Big5、 韓国語では KSC 等
です。マルチバ イ ト エン コ ーデ ィ ン グは Adobe CMap か Windows コ ー ド ページで定義 さ れ
てい ます (95 ページ 「4.3 日本語 ・ 中国語 ・ 韓国語エン コ ーデ ィ ン グ」 参照)。
こ れ ら の伝統的エン コ ーデ ィ ン グは、encoding=unicode と 等価であ る Unicode CMap を
除 き 、 Unicode 非対応言語バ イ ンデ ィ ン グでのみ使 う こ と がで き ます。
マルチバ イ ト エン コ ーデ ィ ン グでは、 keepnative オプシ ョ ン true がな ら ば、 テ キ ス ト
はユーザーか ら 与え ら れた も のがその ま ま PDF 出力へ書 き 込まれます。
114
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
マルチバ イ ト エン コ ーデ ィ ン グの難点は、 PDFlib は入力テ キ ス ト について文法的有効
性のみを検査 し 、与え ら れたテ キ ス ト に対す る グ リ フ が フ ォ ン ト 内で得 ら れ る か ど う かは
検査 し ない点です。 ま た、 Unicode テ キ ス ト を与え る こ と も で き ません。 なぜな ら PDFlib
は Unicode 値を それに対応す る マルチバ イ ト 列へ変換す る こ と がで き ないか ら です。かつ、
文字参照、 OpenType レ イ ア ウ ト 機能、 複雑用字系のシ ェーピ ン グ も 利用で き ません。
グ リ フ ID エ ン コ ーデ ィ ン グ PDFlib では encoding=glyphid をすべての フ ォ ン ト 形式に対
し て使え ます。 こ のエン コ ーデ ィ ン グでは、 107 ページ 「5.2.1 グ リ フ ID」 で解説す る 付
番方式を用いて、 フ ォ ン ト 内のすべてのグ リ フ が指定で き ます。 数値グ リ フ ID は 0 か ら
始ま り 、 理論上の最大値は 65,565 です (その よ う な大量のグ リ フ を持つフ ォ ン ト はあ り
ませんが)。 最大グ リ フ ID 値は info_font( ) で maxcode キーを用いて取得で き ます。
PDFlib は、 与え ら れた グ リ フ ID が フ ォ ン ト 内で有効であ る か ど う か を調べます。 複雑
用字系のシ ェーピ ン グ と OpenType レ イ ア ウ ト 機能が使え ます。
グ リ フ ID は特定の フ ォ ン ト に固有の も のであ り 、 場合に よ っ ては PDFlib に よ っ て生
成 さ れ る こ と す ら あ る ので、 encoding=glyphid は一般に通常のテ キ ス ト 出力には適 し ませ
ん。 こ のエン コ ーデ ィ ン グの主な用途は、 フ ォ ン ト の全グ リ フ一覧を印刷す る こ と です。
5.4.2 記号 フ ォ ン ト に対す る エ ン コ ーデ ィ ン グ を選ぶ
記号フ ォ ン ト は、 記号 ・ ロ ゴ ・ ピ ク ト グ ラ ム な ど の非テ キ ス ト グ リ フ群を内容 と し て持つ
フ ォ ン ト です。 こ れは、 テ キ ス ト フ ォ ン ト にはないい く つかの問題を提起 し ます。 背景に
あ る 問題は、Unicode 規格は一般にあ えて記号グ リ フ をエン コ ー ド し ていない こ と です(広
く 利用 さ れてい る ZapfDingbats フ ォ ン ト 内のグ リ フ等、 こ の規則には例外 も あ り ますが)。
記号 フ ォ ン ト を Unicode 指向 ワ ー ク フ ロ ー に 適合 し て 利用 で き る よ う に す る た め、
TrueType ・ OpenType フ ォ ン ト はたいていそのグ リ フ に私用領域 (PUA) 内の Unicode 値
を割 り 当ててい ます。 Unicode マ ッ ピ ン グ テーブルがない こ と か ら 、 PostScript Type 1 は
こ れを行えず、 一般にそのグ リ フ を選ぶのに欧文キ ャ ラ ク タ の コ ー ド を用いてい ます。 す
べての フ ォ ン ト 形式において、 記号グ リ フ はたいてい カ ス タ ム の グ リ フ名を持っ てい ま
す。
こ う し た状況か ら 、 記号フ ォ ン ト 内のグ リ フ の選択に関 し て下記の よ う な結果が生 じ
ます :
> 記号 TrueType・OpenType フ ォ ン ト は encoding=unicode で最 も 良 く 読み込め ます。グ リ
フ に割 り 当て ら れてい る PUA 値がわか っ てい る 場合には、 記号グ リ フ を選ぶためにテ
キ ス ト 内で こ の値を与え る こ と がで き ます。 そのためにはその フ ォ ン ト 内の PUA 割 り
当てがあ ら か じ めわか っ てい る 必要があ り ます。
> PDFlib は記号 PostScript Type 1 フ ォ ン ト に対 し て PUA 値を内部的に割 り 振 り ますので、
こ の PUA 値は事前にはわか り ません。
> 記号フ ォ ン ト 内のグ リ フ を 8 ビ ッ ト コ ー ド を使っ て指定 し たい場合には、 フ ォ ン ト を
encoding=builtin で読み込んで、テ キ ス ト 内で 8 ビ ッ ト コ ー ド を与え る こ と がで き ます。
た と えば、 数字 4 ( コ ー ド 0x34) は ZapfDingbats フ ォ ン ト 内でチ ェ ッ ク マー ク 記号を
選びます。
記号フ ォ ン ト を encoding=unicode で使 う ためには、適切な Unicode 値を テ キ ス ト で用い る
必要があ り ます :
> Symbol フ ォ ン ト 内のキ ャ ラ ク タ はすべて正 し い Unicode 値を持っ てい ます。
> ZapfDingbats フ ォ ン ト 内のキ ャ ラ ク タ は範囲 U+2007 ∼ U+27BF の Unicode 値を持っ てい
ます。
> Wingdings ・ Webdings 等の Microsoft の記号フ ォ ン ト は、 範囲 U+F020 ∼ U+F0FF の PUA
Unicode 値を用いてい ます (charmap アプ リ ケーシ ョ ンは こ れを シ ン グルバ イ ト コ ー ド
で表 し ますが)。
5.4 フ ォ ン ト を読み込む
115
> それ以外の フ ォ ン ト については、フ ォ ン ト 内の個々のグ リ フ に対す る Unicode 値を あ ら
か じ め知っ てお く か、 ま たは実行時に info_font( ) で (例 : PostScript Type 1 フ ォ ン ト
の場合はグ リ フ名を与え て) 決定す る 必要があ り ます。
制御キ ャ ラ ク タ 表 8.1 に挙げ る 範囲 U+0001 ∼ U+001F の Unicode 制御キ ャ ラ ク タ は、
encoding=builtin で も テ キ ス ト フ ロ ー内で使え ます。 0x20 未満の コ ー ド は、 記号フ ォ ン ト
がその コ ー ド に対す る グ リ フ を持たないな ら ば、 制御キ ャ ラ ク タ と し て解釈 さ れます。 こ
れは大多数の記号フ ォ ン ト にあ ては ま り ます。
文字参照 文字参照は記号フ ォ ン ト に対 し て使 う こ と がで き ます。し か し 記号フ ォ ン ト は
一般に、 文字参照を開始す る ア ンパサン ド キ ャ ラ ク タ U+0026 「&」 に対す る グ リ フ を含ん
でい ません。 コ ー ド 0x26 も 、 フ ォ ン ト 内の既存のグ リ フへマ ッ プで き ないので使え ませ
ん。 ですので記号フ ォ ン ト は、 文字参照を使 う 必要があ る と き は、 encoding=unicode で読
み込む必要があ り ます。 文字参照は encoding=builtin では動作 し ません。
5.4.3 フ ォ ン ト を検索
フ ォ ン ト デー タ の情報源 先述の よ う に、 フ ォ ン ト は明示的に load_font( ) 関数で読み込
む こ と も で き ま す し 、 あ る いは暗黙的に、 さ ま ざ ま な テ キ ス ト 出力関数に fontname ・
encoding オプシ ョ ン を与え て読み込む こ と も で き ます。フ ォ ン ト のネ イ テ ィ ブな名前を使
う こ と も で き ます し 、 フ ォ ン ト デー タ の場所を決定す る ために用い ら れ る 任意のカ ス タ ム
名 を 扱 う こ と も で き ま す。 カ ス タ ム フ ォ ン ト 名は文書内で一意で あ る 必要が あ り ま す。
info_font( ) で、 こ の フ ォ ン ト 名は apiname キーで取得する こ と がで き ます。
load_font( ) を続けて呼び出す と 、 すべてのオプシ ョ ンが こ の関数を最初に呼び出 し た
際に与え た も の と 等 し ければ、 同 じ フ ォ ン ト ハン ド ルが返 さ れ ま す (扱いが異な る オプ
シ ョ ンが若干あ り ますので、 詳 し く は PDFlib API リ フ ァ レ ン ス を参照)。 そ う でなければ、
同 じ フ ォ ン ト 名に対 し て新規の フ ォ ン ト ハン ド ルが作成 さ れ ます。 PDFlib ではフ ォ ン ト
デー タ の情報源 と し て下記に対応 し てい ます :
> デ ィ ス ク ベース ま たは仮想の フ ォ ン ト フ ァ イ ル
> Windows ま たは Mac オペレーテ ィ ン グ シ ス テ ムか ら 持っ て来た フ ォ ン ト (ホ ス ト フ ォ ン
ト)
> PDF 標準フ ォ ン ト : こ れ ら は、 よ く 知 ら れた名前の少数の欧文 ・ 日中韓フ ォ ン ト です
> begin_font( ) お よ び関連関数群で定義 さ れた Type 3 フ ォ ン ト
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/font_resources ト ピ ッ ク にあ り ます。
フ ォ ン ト の検索順序 PDFlib に与え ら れ る フ ォ ン ト 名は名前文字列です。 PDFlib は与え
ら れた フ ォ ン ト 名を使っ て、 さ ま ざ ま な種類の フ ォ ン ト を以下の順序で探 し ます。 こ の検
索処理は、 使え る フ ォ ン ト が ス テ ッ プの 1 つで見つか る と と も に終わ り ます :
> フ ォ ン ト 名が標準日中韓フ ォ ン ト の名前 と 一致 し 、 指定 さ れたエ ン コ ーデ ィ ン グが定
義済み CMap の名前であ る (156 ページ 「6.5.1 標準日中韓フ ォ ン ト 」 参照)。
> フ ォ ン ト 名が、こ れ以前に同一文書内で begin_font( ) で作成 さ れた Type 3 フ ォ ン ト の名
前 と 一致す る (105 ページ 「5.1.5 Type 3 フ ォ ン ト 」 参照)。
> フ ォ ン ト 名が、 フ ォ ン ト 名を TrueType ・ OpenType フ ォ ン ト フ ァ イ ルの名前 と 紐づけ る
FontOutline リ ソ ース内の名前 と 一致す る 。
> フ ォ ン ト 名が、フ ォ ン ト 名を PostScript Type 1 フ ォ ン ト の メ ト リ ッ ク フ ァ イ ルの名前 と
紐づけ る FontAFM ま たは FontPFM リ ソ ース内の名前 と 一致す る 。
> フ ォ ン ト 名が、 フ ォ ン ト 名を シ ス テ ムに イ ン ス ト ール さ れてい る フ ォ ン ト の名前 と 紐
づけ る HostFont リ ソ ース内の名前 と 一致する 。
116
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> フ ォ ン ト 名が欧文 コ ア フ ォ ン ト の名前 と 一致す る (118 ページ 「欧文 コ ア フ ォ ン ト 」 参
照)。
> フ ォ ン ト 名が、 シ ス テ ム に イ ン ス ト ール さ れてい る ホ ス ト フ ォ ン ト の名前 と 一致す る
(120 ページ 「5.4.4 Windows ・ Mac OS X 上のホ ス ト フ ォ ン ト 」 参照)。
> フ ォ ン ト 名が フ ォ ン ト フ ァ イ ルのベース名 (すなわち フ ァ イ ル名接尾辞を除いた名前)
と 一致す る 。
フ ォ ン ト が見つか ら なか っ た と き は、 フ ォ ン ト 読み込みは下記のエ ラ ー メ ッ セージ を出 し
て止ま り ます :
Font file (AFM, PFM, TTF, OTF etc.) or host font not found
さ ま ざ ま な リ ソ ース カ テ ゴ リ について詳 し く は 55 ページ 「3.1.3 リ ソ ース設定 と フ ァ イ ル
検索」 を参照 し て く だ さ い。 以下の各項では、 さ ま ざ ま な分類の フ ォ ン ト に対す る フ ォ ン
ト 読み込みについて さ ら に詳 し く 解説 し てい き ます。
TrueType ・ OpenType フ ォ ン ト フ ォ ン ト 名は、使いたい フ ォ ン ト
フ ァ イ ルの名前に対 し て、 FontOutline リ ソ ース を通 じ て紐づけ る
必要があ り ます :
p.set_parameter("FontOutline", "Arial=/usr/fonts/Arial.ttf");
font = p.load_font("Arial", "unicode", "embedding");
等号の左側の フ ォ ン ト 別名は任意に選べます :
p.set_parameter("FontOutline", "f1=/usr/fonts/Arial.ttf");
font = p.load_font("f1", "unicode", "embedding");
実行時に set_parameter( ) で設定す る のでな く 、UPR フ ァ イ ル内で FontOutline リ ソ ース を
設定す る こ と も で き ます (55 ページ 「3.1.3 リ ソ ース設定 と フ ァ イ ル検索」 参照) 。 絶対
フ ァ イ ル名を避け る ため、 SearchPath リ ソ ース カ テ ゴ リ を用い る こ と も で き ます ( こ の場
合 も 、 SearchPath リ ソ ース カ テ ゴ リ を UPR フ ァ イ ル内で設定す る こ と も 可能です)。 例 :
p.set_parameter("SearchPath", "/usr/fonts");
p.set_parameter("FontOutline", "f1=Arial.ttf");
font = p.load_font("f1", "unicode", "");
TrueType コ レ ク シ ョ ン TrueType コ レ ク シ ョ ン (TTC、 157 ページ 「6.5.2 カ
ス タ ム日中韓フ ォ ン ト 」 参照) フ ァ イ ル内に含 ま れてい る フ ォ ン ト を選ぶに
は、 その フ ォ ン ト の名前を直接指定 し ます :
p.set_parameter("FontOutline", "MS-Gothic=msgothic.ttc");
font = p.load_font("MS-Gothic", "unicode", "embedding");
フ ォ ン ト 名は、 TTC フ ァ イ ル内のすべての フ ォ ン ト の名前 と 照合 さ れ ま す。 あ る いは、
TTC フ ァ イ ル内の n 番目の フ ォ ン ト を選ぶには、フ ォ ン ト 名の後に コ ロ ン をつけて番号 n
を指定す る こ と がで き ます。 こ の場合は、 等号の左側の フ ォ ン ト 別名は任意に選べます :
p.set_parameter("FontOutline", "f1=msgothic.ttc");
font = p.load_font("f1:0", "unicode", "");
5.4 フ ォ ン ト を読み込む
117
PostScript Type 1 フ ォ ン ト フ ォ ン ト 名は、 使い た い フ ォ ン ト の メ ト リ ッ ク
フ ァ イ ルの名前に対 し て、その メ ト リ ッ ク フ ァ イ ルの種類に応 じ て、FontAFM・
FontPFM リ ソ ース カ テ ゴ リ のいずれか を通 じ て紐づけ る 必要があ り ます :
p.set_parameter("FontPFM", "lucidux=LuciduxSans.pfm");
font = p.load_font("lucidux", "unicode", "embedding");
PostScript フ ォ ン ト を埋め込む必要があ る と き は、 その名前を、 その フ ォ ン ト ア ウ ト ラ イ
ン フ ァ イ ル (PFA ま たは PFB) に対 し て、 FontOutline リ ソ ース カ テ ゴ リ を通 じ て紐づけ
る 必要があ り ます :
p.set_parameter("FontPFM", "lucidux=LuciduxSans.pfm");
p.set_parameter("FontOutline", "lucidux=LuciduxSans.pfa");
font = p.load_font("lucidux", "unicode", "embedding");
PostScript Type 1 フ ォ ン ト に対 し ては、FontOutline リ ソ ース だけでは充分でない こ と に留
意 し て く だ さ い。 必ず メ ト リ ッ ク フ ァ イ ルが必要ですので、 フ ォ ン ト を読み込むためには
AFM ま たは PFM フ ァ イ ルが得 ら れ る 必要があ り ます。
フ ォ ン ト メ ト リ ッ ク ・ ア ウ ト ラ イ ン フ ァ イ ルが検索 さ れ る デ ィ レ ク ト リ は、 SearchPath
リ ソ ース カ テ ゴ リ を通 じ て指定す る こ と がで き ます。
欧文 コ ア フ ォ ン ト PDF ビ ュ ーアは、 つねに利用可能 と 見な さ れ る フ ォ ン ト 14 種の コ ア
セ ッ ト に対応 し てい ます。 コ ア フ ォ ン ト の完全な メ ト リ ッ ク 情報はすでに PDFlib に内蔵
さ れてい ますので、 追加デー タ は必要あ り ません (フ ォ ン ト を埋め込みたい場合を除 き )。
コ ア フ ォ ン ト は下記の名前を持ち ます :
Courier ・ Courier-Bold ・ Courier-Oblique ・ Courier-BoldOblique ・
Helvetica ・ Helvetica-Bold ・ Helvetica-Oblique ・ Helvetica-BoldOblique ・
Times-Roman ・ Times-Bold ・ Times-Italic ・ Times-BoldItalic ・
Symbol ・ ZapfDingbats
フ ォ ン ト 名が リ ソ ー ス を 通 じ て い か な る フ ァ イ ル名へ も 紐づ け ら れ て い な い と き は、
PDFlib は そ の フ ォ ン ト を 欧文 コ ア フ ォ ン ト の リ ス ト 内で探 し ま す。 こ の ス テ ッ プ は、
embedding オプシ ョ ンが指定 さ れてい る 場合、ま たはその フ ォ ン ト 名に対 し て FontOutline
リ ソ ース が得 ら れ る 場合には ス キ ッ プ さ れます。 下記の コ ー ド は、 コ ア フ ォ ン ト の 1 つを
何の設定 も な し に要求 し ます :
font = p.load_font("Times-Roman", "unicode", "");
内部 リ ス ト で見つかっ た コ ア フ ォ ン ト は決 し て埋め込まれません。 こ れ ら の フ ォ ン ト のい
ずれかを埋め込むためには、 フ ォ ン ト ア ウ ト ラ イ ン フ ァ イ ルを設定する 必要があ り ます。
ホ ス ト フ ォ ン ト フ ォ ン ト 名が リ ソ ー ス を通 じ ていかな る フ ァ イ ル名へ も 紐づけ ら れて
いない と き は、PDFlib はその フ ォ ン ト を、Windows ま たは Mac シ ス テ ムに イ ン ス ト ール さ
れてい る フ ォ ン ト の リ ス ト 内で探 し ます。シ ス テ ムに イ ン ス ト ール さ れてい る フ ォ ン ト を
ホス ト フ ォ ン ト と いい ます。 ホ ス ト フ ォ ン ト の名前は ASCII でエン コ ー ド さ れてい る 必要
があ り ます。Windows では Unicode も 使え ます。ホ ス ト フ ォ ン ト について詳 し く は 120 ペー
ジ 「5.4.4 Windows ・ Mac OS X 上のホ ス ト フ ォ ン ト 」 を参照 し て く だ さ い。 例 :
font = p.load_font("Verdana", "unicode", "");
Windows では、 フ ォ ン ト 名の後にカ ン マ をつけて フ ォ ン ト ス タ イ ルを追加す る こ と も で き
ます :
118
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
font = p.load_font("Verdana,Bold", "unicode", "");
コ ア フ ォ ン ト のいずれかの名前で ホ ス ト フ ォ ン ト を読み込むためには、 その フ ォ ン ト 名
を、 ほ し いホ ス ト フ ォ ン ト の名前に対 し て、 HostFont リ ソ ース カ テ ゴ リ を通 じ て紐づけ る
必要があ り ます。 下記の コ ー ド は、 内蔵 コ ア フ ォ ン ト デー タ を使 う のでな く 、 Symbol フ ォ
ン ト の メ ト リ ッ ク ・ ア ウ ト ラ イ ンデー タ がホ ス ト シ ス テ ムか ら 持っ て来 ら れ る よ う に し て
い ます :
p.set_parameter("HostFont", "Symbol=Symbol");
font = p.load_font("Symbol", "unicode", "embedding");
等号の左側の フ ォ ン ト 別名は任意に選べますが、 こ こ ではホ ス ト フ ォ ン ト の名前を その ま
ま使い ま し た。
フ ォ ン ト フ ァ イル を拡張子に基づいて検索 Type 3 以外のすべて の種類の フ ォ ン ト は、
指定 さ れた フ ォ ン ト 名を フ ォ ン ト メ ト リ ッ ク ・ ア ウ ト ラ イ ン フ ァ イ ルのベース名 (フ ァ イ
ル接尾辞の一切ない名前) と し て用いて検索す る こ と がで き ます。 PDFlib は、 指定 さ れた
名前の フ ォ ン ト が見つか ら なか っ た と き は、SearchPath リ ソ ース カ テ ゴ リ 内のすべての項
目を なめなが ら 、 与え ら れた フ ァ イ ル名に対 し て、 知 ら れてい る すべての フ ァ イ ル名接尾
辞を付加す る こ と に よ っ て、 フ ォ ン ト メ ト リ ッ ク ・ ア ウ ト ラ イ ンデー タ を見つけ よ う と 試
みます。 こ の拡張子に基づ く 検索は具体的には以下の よ う な アルゴ リ ズ ムです :
> 下記の接尾辞を フ ォ ン ト 名に付加 し 、 で き た フ ァ イ ル名の フ ォ ン ト メ ト リ ッ ク (お よ
び TrueType ・ OpenType フ ォ ン ト の場合はア ウ ト ラ イ ン) があ る か ど う か を順番に調
べてみます :
.tte .ttf .otf .gai .afm .pfm .ttc
.TTE .TTF .OTF .GAI .AFM .PFM .TTC
> PostScript フ ォ ン ト の埋め込みが要求 さ れてい る 場合は、 下記の接尾辞を フ ォ ン ト 名に
付加 し 、 その名前の フ ォ ン ト ア ウ ト ラ イ ン フ ァ イ ルがあ る か ど う か を順番に調べてみ
ます :
.pfa .pfb
.PFA .PFB
フ ォ ン ト フ ァ イ ルが見つか ら なか っ た と き は、 フ ォ ン ト 読み込みは下記のエ ラ ー メ ッ
セージ を出 し て止ま り ます :
Font cannot be embedded (PFA or PFB font file not found)
> 上述の候補フ ァ イ ル名群を 「あ り の ま ま に」 検索 し 、 ついで、 SearchPath リ ソ ース カ テ
ゴ リ 内で設定 さ れてい る すべてのデ ィ レ ク ト リ 名を前につけて検索 し ます。
こ れはすなわち、 手作業で一切設定を し な く て も 、 フ ォ ン ト の種類に従っ た標準的な フ ァ
イ ル名接尾辞 を フ ォ ン ト 名 に 付加 し た 名前 を フ ォ ン ト フ ァ イ ル が 持 っ て お り 、 か つ
SearchPath デ ィ レ ク ト リ のいずれかの中に置かれてい る な ら ば、PDFlib はその フ ォ ン ト を
発見す る と い う こ と を意味 し ます。
下記の 2 つの コ ー ド は、 フ ォ ン ト ア ウ ト ラ イ ン フ ァ イ ルを見つけ る う えで同等の効力
を持ち ます :
p.set_parameter("FontOutline", "Arial=/usr/fonts/Arial.ttf");
font = p.load_font("Arial", "unicode", "");
と
5.4 フ ォ ン ト を読み込む
119
p.set_parameter("SearchPath", "/usr/fonts");
font = p.load_font("Arial", "unicode", "");
標準日中韓 フ ォ ン ト Acrobat は、 日中韓テ キ ス ト のための さ ま ざ ま な標準フ ォ ン ト に対
応 し てい ます。 詳細 と フ ォ ン ト 名一覧は 156 ページ 「6.5.1 標準日中韓フ ォ ン ト 」 を参照
し て く だ さ い。 PDFlib は標準日中韓フ ォ ン ト を、 下記の要件が満た さ れ る な ら ば、 フ ォ ン
ト 検索処理のいちばん最初の段階で発見 し ます :
> 指定 さ れた フ ォ ン ト 名が標準日中韓フ ォ ン ト の名前 と 一致す る 。
> 指定 さ れたエン コ ーデ ィ ン グが、 定義済み CMap のいずれか 1 つの名前であ る 。
> embedding オプシ ョ ンが指定 さ れなか っ た。
こ れ ら の要件のいずれかに反す る と き は、 フ ォ ン ト 検索は継続 さ れます。 内部 リ ス ト で見
つかっ た標準日中韓フ ォ ン ト は決 し て埋め込まれません。 こ れ ら のいずれかを埋め込むた
めには、 フ ォ ン ト ア ウ ト ラ イ ン フ ァ イ ルを設定する 必要があ り ます。 例 :
font = p.load_font("KozGoPro-Medium", "90msp-RKSJ-H", "");
Type 3 フ ォ ン ト Type 3 フ ォ ン ト は、 実行時に、 標準 PDFlib グ ラ フ ィ ッ ク 関数群でグ リ
フ を定義す る こ と に よ っ て定義す る 必要があ り ます (105 ページ 「5.1.5 Type 3 フ ォ ン ト 」
参照)。 begin_font( ) に与え ら れた フ ォ ン ト 名が、 load_font( ) で要求 さ れた フ ォ ン ト 名 と
一致す る と き は、 その フ ォ ン ト が フ ォ ン ト 検索の最初の段階で選ばれます (その フ ォ ン ト
名が標準日中韓フ ォ ン ト の名前 と 一致 し なかっ た と い う 前提で)。 例 :
p.begin_font("PDFlibLogoFont", 0.001, 0.0, 0.0, 0.001, 0.0, 0.0, "");
...
p.end_font();
...
font = p.load_font("PDFlibLogoFont", "logoencoding", "");
5.4.4 Windows ・ Mac OS X 上のホ ス ト フ ォ ン ト
Mac ・ Windows シ ス テ ムでは PDFlib は、 オペレーテ ィ ン グ シ ス テ ムに イ ン ス ト ール さ れて
い る TrueType ・ OpenType ・ PostScript フ ォ ン ト を利用する こ と がで き ます。 こ う し た フ ォ
ン ト を ホ ス ト フ ォ ン ト と いい ま す。 手作業で フ ォ ン ト フ ァ イ ルを設定 し な く て も 、 その
フ ォ ン ト を単純にシ ス テ ムに イ ン ス ト ール (たいていは、 適切なデ ィ レ ク ト リ へそれを ド
ロ ッ プす る こ と に よ っ て) すれば、 PDFlib はそれを う ま く 利用 し ます。
ホ ス ト フ ォ ン ト を扱 う 際には、 その正確な (大文字 ・ 小文字を区別 し た) フ ォ ン ト 名
を用い る こ と が重要です。 フ ォ ン ト 名は重要ですので、 フ ォ ン ト 名決定のためのい く つか
のプ ラ ッ ト フ ォーム ご と の方式を以下に述べます。フ ォ ン ト 名については さ ら に詳 し い情
報が 104 ページ 「5.1.3 PostScript Type 1 フ ォ ン ト 」 にあ り ます。
Windows 上のホ ス ト フ ォ ン ト 名 を知る イ ン ス ト ール さ れてい る フ ォ ン ト の名前は、 そ
の フ ォ ン ト フ ァ イ ルを ダブル ク リ ッ ク し て、現れ る ウ ィ ン ド ウ の 1 行目に表示 さ れ る 完全
フ ォ ン ト 名を見れば簡単に知 る こ と がで き ます。フ ォ ン ト に よ っ ては、使っ てい る Windows
のバージ ョ ンに従っ てその名前の一部が ロ ーカ ラ イ ズ さ れてい る こ と も あ り ます。た と え
ば、 フ ォ ン ト 名の一部 と し て広 く 使われてい る Bold は、 ド イ ツ語シ ス テ ム上では翻訳 さ
れた単語 Fett と し て表示 さ れ る こ と があ り ます。 Windows シ ス テ ムか ら ホ ス ト フ ォ ン ト
デー タ を取得す る には、 変換 さ れた形の フ ォ ン ト 名 (Arial Fett 等) を PDFlib で用い る か、
あ る いはフ ォ ン ト ス タ イ ル名 (後述) を用い る 必要があ り ます。 し か し 、 フ ォ ン ト デー タ
を フ ァ イ ルか ら 直接取得す る には、 正規の ( ロ ーカ ラ イ ズ さ れていない) 形の フ ォ ン ト 名
(Arial Bold 等) を用い る 必要があ り ます。
120
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
注 こ の国際化の問題は、 ロー カ ラ イ ズ さ れた形のフ ォ ン ト 名を用いるのでな く 、 フ ォ ン ト ス
タ イル名 (「,Bold」 等、 後述) を付加する こ と によ っ て回避する こ と がで き ます。
TrueType フ ォ ン ト を も っ と 詳 し く 調べたい と き は、 Microsoft の無償の 「Font properties
extension」1 を見てみま し ょ う 。 フ ォ ン ト の TrueType テーブルの さ ま ざ ま な項目が、 人間
に読め る 形で表示 さ れます。
Windows の フ ォ ン ト ス タ イル名 Windows オペレーテ ィ ン グ シ ス テ ムか ら ホ ス ト フ ォ ン
ト を読み込む際には、 PDFlib ユーザーは、 Windows の フ ォ ン ト 選択機構が提供す る 機能を
利用す る こ と がで き ます : 太 さ と 斜体について ス タ イ ル名を与え る こ と がで き ます。 例 :
font = p.load_font("Verdana,Bold", "unicode", "");
こ れは Windows に対 し て、 ベース フ ォ ン ト のボール ド ・ イ タ リ ッ ク 等あ る 特定のバ リ エー
シ ョ ン を探す よ う 命令 し ます。 得 ら れ る フ ォ ン ト に よ っ て、 Windows は、 求め ら れた フ ォ
ン ト に最 も 似通っ てい る フ ォ ン ト を選びます ( こ れは新た な フ ォ ン ト バ リ エーシ ョ ン を作
り 出 し ます)。 Windows が見つけた フ ォ ン ト は、 求めた フ ォ ン ト と は異な る 可能性があ り 、
生成 さ れ る PDF 内のフ ォ ン ト 名は、 求めた名前 と は異な る 可能性があ り ます。 PDFlib は、
Windows の フ ォ ン ト 選択に対 し ていかな る 制御 も で き ません。 フ ォ ン ト ス タ イ ル名はホ ス
ト フ ォ ン ト でのみ働 き 、 フ ォ ン ト フ ァ イ ルを通 じ て設定 さ れた フ ォ ン ト に対 し ては働 き ま
せん。
下記のキー ワ ー ド (フ ォ ン ト 名 と カ ン マで区切っ て) は、 ベー ス フ ォ ン ト 名に付加 し
て フ ォ ン ト の太 さ を指定す る こ と がで き ます :
none, thin, extralight, ultralight, light, normal, regular, medium,
semibold, demibold, bold, extrabold, ultrabold, heavy, black
こ の キー ワ ー ド は大文字 ・ 小文字を区別 し ま す。 上記のかわ り に、 あ る いは上記に加え
て、 italic キー ワー ド を指定す る こ と も で き ます。 2 つの ス タ イ ル名を用い る と き は、 両者
を カ ン マで区切 る 必要があ り ます。 例 :
font = p.load_font("Verdana,Bold,Italic", "unicode", "");
フ ォ ン ト の太 さ の数値 も 、 フ ォ ン ト ス タ イ ル名の等価な代用 と し て用い る こ と がで き ま
す:
0 (none), 100 (thin), 200 (extralight), 300 (light), 400 (normal), 500 (medium), 600
(semibold), 700 (bold), 800 (extrabold), 900 (black)
下記の例はフ ォ ン ト の bold バ リ エーシ ョ ン を選びます :
font = p.load_font("Verdana,700", "unicode", "");
注 Windows の フ ォ ン ト に対する ス タ イル名は、 ロー カ ラ イ ズ さ れた フ ォ ン ト 名を扱 う 必要
がある と き には有用で し ょ う 。 なぜな ら こ れは、 フ ォ ン ト バ リ エーシ ョ ンのロー カ ラ イ ズ
さ れた名前にかかわ ら ずそれを指定する ための汎用的な方式を提供するから です。
注 Windows のス タ イル名の命名方式は、 fontstyle オプ シ ョ ン と 混同 し てはいけません。 両
者は一見似ていますが、 ま っ た く 異な る動作をする ものです。
Windows 上のホ ス ト フ ォ ン ト 指定で起 こ り う る問題 Windows 上の フ ォ ン ト イ ン ス ト ー
ルに関 し て起 こ り う る 問題についてユーザーに注意を喚起 し ま す。 フ ォ ン ト を 「フ ァ イ
1. www.microsoft.com/typography/TrueTypeProperty21.mspx を参照。
5.4 フ ォ ン ト を読み込む
121
ル」 → 「新 し い フ ォ ン ト のイ ン ス ト ール ...」 メ ニ ュ ー項目で イ ン ス ト ールす る (フ ォ ン ト
を Fonts デ ィ レ ク ト リ へ ド ラ ッ グす る のではな く ) 場合、 チ ェ ッ ク ボ ッ ク ス 「フ ォ ン ト
フ ォ ルダに フ ォ ン ト を コ ピ ーす る」 が あ り ま す。 こ のボ ッ ク ス のチ ェ ッ ク を外 し てい る
と 、 Windows は元の フ ォ ン ト フ ァ イ ルへのシ ョ ー ト カ ッ ト ( リ ン ク ) を フ ォ ン ト フ ォ ルダ
内に置 く だけです。 こ の場合は元のフ ォ ン ト フ ァ イ ルは、 PDFlib を使っ てい る アプ リ ケー
シ ョ ン か ら 利用可能なデ ィ レ ク ト リ 内に置いて あ る 必要が あ り ま す。 特に、 Windows の
Fonts デ ィ レ ク ト リ 外の フ ォ ン ト フ ァ イ ルは IIS か ら はデフ ォ ル ト のセキ ュ リ テ ィ 設定では
利用で き ません。 解決策 : フ ォ ン ト フ ァ イ ルを Fonts デ ィ レ ク ト リ へ コ ピーす る か、 あ る
いは元の フ ォ ン ト フ ァ イ ルを IIS が読み取 り 権限を持つデ ィ レ ク ト リ 内に置 き ます。
Adobe Type Manager (ATM) で フ ォ ン ト を イ ン ス ト ールす る 際に 「フ ァ イルを コ ピー
せずに追加」 オプシ ョ ン をチ ェ ッ ク し ていた場合 も 、 同様の問題が起 こ る 可能性があ り ま
す。
Mac 上のホ ス ト フ ォ ン ト 名 Mac OS X に入っ てい る Font Book ユーテ ィ リ テ ィ を利用す
れば、 イ ン ス ト ール さ れてい る ホ ス ト フ ォ ン ト の名前を知 る こ と がで き ます。 プ ロ グ ラ ム
的にホ ス ト フ ォ ン ト の リ ス ト を作成す る には、Apple の無償提供 し てい る Font Tools1 を推
奨 し ます。 こ の コ マ ン ド ラ イ ンユーテ ィ リ テ ィ の ス イ ー ト には ftxinstalledfonts と い う プ
ロ グ ラ ムが含まれてお り 、 こ れは イ ン ス ト ール さ れてい る すべての フ ォ ン ト の正確な名前
を知 る ために有用です。PDFlib はホ ス ト フ ォ ン ト の名前 と し てい く つかの種類に対応 し て
い ます :
> QuickDraw フ ォ ン ト 名 : こ れは Mac OS 上で長い間使われて き た、 し か し も う 昔の も の
で あ る と 考え ら れてい る 旧式の フ ォ ン ト 名です。 QuickDraw フ ォ ン ト 名を知 る には、
タ ー ミ ナル ウ ィ ン ド ウ で下記の コ マ ン ド を実行 し ます :
ftxinstalledfonts -q
> 「一意」 フ ォ ン ト 名: こ れは新 し い フ ォ ン ト 名であ り (Mac OS では新 し い ATS フ ォ ン ト
関数で使え ます)、 東ア ジ ア フ ォ ン ト 等に対 し て Unicode でエン コ ー ド す る こ と も で き
ます。 一意フ ォ ン ト 名を知 る には、 タ ー ミ ナル ウ ィ ン ド ウ で下記の コ マ ン ド を実行 し
ます ( 「:」 を含む項目が出力に含まれ る こ と があ り ますが、 こ れは除去す る 必要があ
り ます) :
ftxinstalledfonts -u
> PostScript フ ォ ン ト 名。PostScript フ ォ ン ト 名を知る には、タ ー ミ ナル ウ ィ ン ド ウ で下記
の コ マ ン ド を実行 し ます :
ftxinstalledfonts -p
注 PDFlib の Leopard ビル ド (Mac OS X 10.5 以上用) は、 上記 3 種類のホス ト フ ォ ン ト 名すべ
てに対応 し ています。 非 Leopard ビル ド では QuickDraw フ ォ ン ト 名 し か使えません。
Mac 上で ホ ス ト フ ォ ン ト を利用す る際に起 こ り う る問題 私た ちのテ ス ト に よ れば、 新
規に イ ン ス ト ール さ れた フ ォ ン ト は、 ユーザーが コ ン ソ ールか ら ロ グ ア ウ ト し て、 再び ロ
グ イ ンす る ま で、 PDFlib の よ う な UI な し アプ リ ケーシ ョ ンか ら は利用で き ない こ と があ
り ます。
Mac OS X 10.5 (Leopard) では、 ホ ス ト フ ォ ン ト は、 リ モー ト コ ン ピ ュ ー タ か ら の タ ー
ミ ナルセ ッ シ ョ ン内で動作 し てい る プ ロ グ ラ ムか ら は利用で き ません。 こ れは PDFlib の
制約ではな く 、Font Tools な ど他のプ ロ グ ラ ムに も あ ては ま り ます。 こ の問題は Mac OS X
10.5.6 では修正 さ れてい ます。
1. developer.apple.com/textfonts/download を参照。
122
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
5.4.5 予備 フ ォ ン ト
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/starter_fallback ト ピ ッ ク にあ り ま
す。
予備フ ォ ン ト は、 フ ォ ン ト と エン コ ーデ ィ ン グの不足な点を扱 う 強力な し く みを提供 し ま
す。 必要な フ ォ ン ト 変更が PDFlib に よ っ て自動的に行われますので、 こ れは さ ま ざ ま な
場面でテ キ ス ト 出力の実現に活用す る こ と がで き ま す。 こ の し く みは、 所与の フ ォ ン ト
(ベース フ ォ ン ト と いい ます) を、 他の 1 つない し 複数の フ ォ ン ト 内のグ リ フ を こ のベー
ス フ ォ ン ト に連結す る こ と に よ っ て強化す る も のです。 よ り 正確には : フ ォ ン ト は実際に
は変更 さ れないのですが、 PDFlib が PDF ページ記述内の必要な フ ォ ン ト 変更をすべて自
動的に行い ます。 予備フ ォ ン ト は下記の機能を提供 し ます :
> ベース フ ォ ン ト 内で得 ら れないグ リ フは自動的に、1 つない し 複数の予備フ ォ ン ト 内で
検索 さ れ ます。 言い換えれば、 フ ォ ン ト にグ リ フ を追加す る こ と が可能です。 複数の
予備フ ォ ン ト をベース フ ォ ン ト に対 し て紐付け る こ と が可能ですので、 少な く と も 1
つの フ ォ ン ト が適切な グ リ フ を含んでい る Unicode キ ャ ラ ク タ をすべて有効に使 う こ
と がで き ます。
> あ る 特定の予備フ ォ ン ト 内のグ リ フ を用いて、 ベース フ ォ ン ト 内のグ リ フ を上書 き す
る こ と がで き ます。 すなわち、 フ ォ ン ト 内のグ リ フ を置 き 換え る こ と が可能です。 1 つ
な い し 複数の個別の グ リ フ を 置 き 換え る こ と も で き ま す し 、 あ る いは置 き 換え た い
Unicode キ ャ ラ ク タ 群の範囲を 1 つない し 複数指定す る こ と も で き ます。
予備フ ォ ン ト か ら の グ リ フ のサ イ ズ と 縦位置は、 ベー ス フ ォ ン ト に合 う よ う 調整で き ま
す。 ち ょ っ と 驚 く こ と には、 ベース フ ォ ン ト それ自身 も 予備フ ォ ン ト と し て使 う こ と が可
能です (同一の、 ま たは異な る エン コ ーデ ィ ン グで) 。 こ れを利用す る と 下記の ト リ ッ ク
が実装で き ます :
> ベース フ ォ ン ト それ自身を予備フ ォ ン ト と し て使 う こ と に よ っ て、 フ ォ ン ト 内のグ リ
フ群の一部ない し 全部のサ イ ズ ま たは位置を調節す る こ と がで き ます。
> ベース フ ォ ン ト の実際のエン コ ーデ ィ ン グ外のキ ャ ラ ク タ を追加で き ます。
予備フ ォ ン ト 機構は、 fallbackfonts フ ォ ン ト 読み込みオプシ ョ ンに よ っ て司 ら れ、 すべて
のテ キ ス ト 出力関数に対 し て効力を持ち ます。あ ら ゆ る フ ォ ン ト 読み込みオプシ ョ ン と 同
様に、fallbackfonts オプシ ョ ンは load_font( ) への明示的な呼び出 し で与え る こ と も で き ま
す し 、あ る いは暗黙的フ ォ ン ト 読み込みのためのオプシ ョ ン リ ス ト 内で与え る こ と も で き
ます。 1 つのベース フ ォ ン ト に対 し ては複数の予備フ ォ ン ト を指定す る こ と も 可能な こ と
か ら 、 fallbackfonts オプシ ョ ンは値 と し てオプシ ョ ン リ ス ト の リ ス ト を と り ます (すなわ
ち、 中括弧がその分必要です)。
info_font( ) を利用す る と 、予備フ ォ ン ト 機構の結果を取得す る こ と がで き ます (Section
5.12.2, ?Querying Codepage Coverage and Fallback Fonts? 参照)。
注意 予備フ ォ ン ト を扱 う 際には下記に留意 し て く だ さ い :
> フ ォ ン ト の組み合わせは必ず し も 、 タ イ ポ グ ラ フ ィ 的に美 し い結果を生み出すわけで
はあ り ません。 ベース フ ォ ン ト のグ リ フデザ イ ン に整合す る グ リ フデザ イ ン を持つ予
備フ ォ ン ト だけ を使 う よ う 注意を払 う 必要があ り ます。
> 予備フ ォ ン ト に対す る フ ォ ン ト 読み込みオプシ ョ ンは、fallbackfonts オプシ ョ ン リ ス ト
内で別途指定す る 必要があ り ます。 た と えば、 ベース フ ォ ン ト に対 し て埋め込みを指
定 し ていて も 、 予備フ ォ ン ト は自動的には埋め込まれません。
> 予備フ ォ ン ト は、その フ ォ ン ト が正 し い Unicode 情報を含んでい る 場合にのみ動作 し ま
す。 置換グ リ フは、 被置換グ リ フ と 同 じ Unicode 値を持っ てい る 必要があ り ます。
> 用字系固有のシ ェーピ ン グ (オプシ ョ ン shaping ・ script ・ locale) と OpenType 機能 (オ
プシ ョ ン features ・ script ・ language) は、 同一フ ォ ン ト 内のグ リ フ群に対 し てのみ適
5.4 フ ォ ン ト を読み込む
123
用 さ れ、 ベース フ ォ ン ト と 1 つない し 複数の予備フ ォ ン ト と にわた る グ リ フ群に対 し
ては適用 さ れません。
> 下線 / 上線 / 取 り 消 し 線機能は、予備フ ォ ン ト を扱 う 際には注意 し て使 う 必要があ り ま
す。 ア セ ン ダ等の タ イ ポ グ ラ フ ィ 値について も 同様です。 ベース フ ォ ン ト 内で決定 さ
れ る 下線の太 さ ・ 位置は、 予備フ ォ ン ト 内の値 と は一致 し ない可能性があ り ます。 そ
の場合、 下線の位置 ま たは太 さ が見苦 し く ガ タ つ く こ と にな り ます。 こ の問題に対す
る 単 純 な 回 避 策 は、 統 一 的 な 値 を、 fit_textline( ) ・ add/create_textflow( )
の
underlineposition ・ underlinewidth オプシ ョ ンで指定す る こ と です。 こ の値は、 ベース
フ ォ ン ト と すべての予備フ ォ ン ト において う ま く い く よ う に選ぶ必要があ り ます。
以下の各項で、 予備フ ォ ン ト の重要な用途をい く つか解説 し 、 それを実現す る オプシ ョ ン
リ ス ト を示 し ます。
テキス ト フ ォ ン ト に数学キ ャ ラ ク タ を追加 数学グ リ フ がない と き の非常に荒っぽい解
決法 と し て、 fallbackfonts オプシ ョ ンに対 し て下記の フ ォ ン ト 読み込みオプシ ョ ン を用い
て、 Symbol フ ォ ン ト 内の数学グ リ フ を テ キ ス ト フ ォ ン ト に追加す る こ と がで き ます :
fallbackfonts={{fontname=Symbol encoding=unicode}}
複数の用字系で使え る よ う フ ォ ン ト を合体 場合に よ っ ては、 入力テ キ ス ト デー タ の用
字系が事前にわか ら ない こ と が あ り ま す。 た と えば、 デー タ ベー ス が欧文 ・ ギ リ シ ャ 文
字 ・ キ リ ル文字のテ キ ス ト を含んでい る のに、 得 ら れ る フ ォ ン ト は こ れ ら の用字系の う ち
の 1 つ し か同時に網羅 し ていない と い う 場合があ る か も し れません。用字系を決定 し て適
切な フ ォ ン ト を選ぶのではな く 、 い く つかの フ ォ ン ト を結びつけた フ ォ ン ト を構築 し て、
実質的にすべての用字系の スーパーセ ッ ト を網羅する こ と が可能です。 fallbackfonts オプ
シ ョ ンに対 し て下記の フ ォ ン ト 読み込みオプシ ョ ン を用いて、ギ リ シ ャ 文字フ ォ ン ト と キ
リ ル文字フ ォ ン ト を欧文フ ォ ン ト に追加す る こ と がで き ます :
fallbackfonts={
{fontname=Times-Greek encoding=unicode embedding forcechars={U+0391-U+03F5}}
{fontname=Times-Cyrillic encoding=unicode embedding forcechars={U+0401-U+0490}}
}
8 ビ ッ ト エ ン コ ーデ ィ ン グ を拡張 入力デー タ が レ ガシ8ビ ッ ト エン コ ーデ ィ ン グに限 ら
れていた と し て も 、 こ のエ ン コ ーデ ィ ン グ外のキ ャ ラ ク タ を使 う こ と がで き ま す。 予備
フ ォ ン ト を利用 し て ( こ こ ではベース フ ォ ン ト それ自身を予備フ ォ ン ト と し ます)、 かつ、
PDFlib の文字参照の し く みを用いてエ ン コ ーデ ィ ン グ外のキ ャ ラ ク タ を指定すれば よ い
のです。 Helvetica フ ォ ン ト を encoding=iso8859-1 ( こ のエン コ ーデ ィ ン グはユー ロ グ リ フ
を含んでい ません) で読み込んだ と す る と 、 fallbackfonts オプシ ョ ンに対 し て下記の フ ォ
ン ト 読み込みオプシ ョ ン を用いて、 ユー ロ グ リ フ を フ ォ ン ト に追加す る こ と がで き ます :
fallbackfonts={{fontname=Helvetica encoding=unicode forcechars=euro}}
入力エン コ ーデ ィ ン グはユー ロ キ ャ ラ ク タ を含んでい ませんので、それを 8 ビ ッ ト 値で指
定す る こ と はで き ません。 こ の制約を回避する には文字参照かグ リ フ名参照 (&euro; 等)
を用い ます (100 ページ 「4.5.2 文字参照」 参照)。
別 フ ォ ン ト か ら のユー ロ グ リ フ を使 う 上記 と ほ と ん ど同 じ ですが、 ベー ス フ ォ ン ト が
ユー ロ グ リ フ を含んでい ない場合 を考え ま す。 fallbackfonts オプ シ ョ ン に対 し て下記の
フ ォ ン ト 読み込みオプシ ョ ン を用いて、ユー ロ グ リ フ を別の フ ォ ン ト か ら 持っ て来 る こ と
がで き ます :
124
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
fallbackfonts={{fontname=Helvetica encoding=unicode forcechars=euro textrise=-5%}}}
textrise サブオプシ ョ ン を用いて、 ユー ロ グ リ フ を若干下へ下げま し た。
フ ォ ン ト 内の一部ない し 全部のグ リ フ を大 き く す る 予備 フ ォ ン ト を使 う と 、 フ ォ ン ト
内の一部ない し すべてのグ リ フ を、 文字サ イ ズ を変えずに大き く する こ と がで き ます。 こ
の場合 も 、 ベース フ ォ ン ト それ自身を予備フ ォ ン ト と し て用い ます。 こ の機能は、 さ ま ざ
ま な フ ォ ン ト のデザ イ ン を、 コ ー ド 内で文字サ イ ズ を調整せずに見た目上協調 さ せ る のに
有用です。fallbackfonts オプシ ョ ンに対 し て下記の フ ォ ン ト 読み込みオプシ ョ ン を用いて、
指定 し た範囲内のすべてのグ リ フ を 120% へ大 き く す る こ と がで き ます :
fallbackfonts={
{fontname=Times-Italic encoding=unicode forcechars={U+0020-U+00FF} fontsize=120%}
}
拡大 し た ピ ク ト グ ラ ム を追加 fallbackfonts オプ シ ョ ン に対 し て下記の フ ォ ン ト 読み込
みオプシ ョ ン を用いて、 ZapfDingbats フ ォ ン ト か ら 記号を持っ て来 る こ と がで き ます :
fallbackfonts={
{fontname=ZapfDingbats encoding=unicode forcechars=.a12 fontsize=150% textrise=-15%}
}
こ の場合 も 、 fontsize ・ textrise サブオプ シ ョ ン を用い て、 記号のサ イ ズ と 位置をベー ス
フ ォ ン ト に合わせてい ます。
日中韓 フ ォ ン ト 内のグ リ フ を置 き換え fallbackfonts オプ シ ョ ン に対 し て下記の フ ォ ン
ト 読み込みオプシ ョ ン を用いて、 ASCII 範囲内の欧文キ ャ ラ ク タ を別フ ォ ン ト か ら の も の
に置 き 換え る こ と がで き ます :
fallbackfonts={
{fontname=Courier-Bold encoding=unicode forcechars={U+0020-U+007E}}
}
ア ラ ビ ア文字 フ ォ ン ト に欧文キ ャ ラ ク タ を追加
文字テ キ ス ト 組版」 で解説 し てい ます。
こ の用途は 154 ページ 「6.4.5 ア ラ ビ ア
足 り ないグ リ フ を知 る 無償提供 さ れてい る フ ォ ン ト Unicode BMP Fallback SIL は、 実際
のグ リ フ でな く 各 Unicode 値の 16 進値を表示 し ます。 こ の フ ォ ン ト は、 ワー ク フ ロ ーに
おけ る フ ォ ン ト 関連の問題を診断す る のに非常に有用な と き があ り ます。 fallbackfonts オ
プシ ョ ンに対 し て下記の フ ォ ン ト 読み込みオプシ ョ ン を用いて、 任意の フ ォ ン ト を、 足 り
ないキ ャ ラ ク タ が可視化 さ れ る よ う こ の特殊な予備フ ォ ン ト で強化す る こ と がで き ます :
fallbackfonts={{fontname={Unicode BMP Fallback SIL} encoding=unicode}}
外字キ ャ ラ ク タ を フ ォ ン ト に追加 こ の用途は 158 ページ 「6.5.3 EUDC ・ SING フ ォ ン ト
で外字キ ャ ラ ク タ を利用」 で解説 し てい ます。
5.4 フ ォ ン ト を読み込む
125
5.5 フ ォ ン ト の埋め込み ・ サブ セ ッ ト 化
5.5.1 フ ォ ン ト の埋め込み
Acrobat におけ る PDF の フ ォ ン ト 埋め込み と フ ォ ン ト 置換 PDF 文書は、 正 し いテ キ ス
ト 表示を確保す る ために、 フ ォ ン ト デー タ を さ ま ざ ま な形式で含む こ と がで き ます。 あ る
いは、 キ ャ ラ ク タ の メ ト リ ッ ク と い く つかの一般的な フ ォ ン ト 情報だけ を含む (グ リ フ の
ア ウ ト ラ イ ン本体を含 ま ない) フ ォ ン ト 記述子を埋め込む こ と も で き ま す。 フ ォ ン ト が
PDF 文書に埋め込まれていない場合、 Acrobat はそれが タ ーゲ ッ ト シ ス テ ムで得 ら れれば
それを取 り (「ロー カルフ ォ ン ト を用いる」)、 あ る いはフ ォ ン ト 記述子に従っ て代替フ ォ
ン ト を組み立て よ う と 試みます。代替フ ォ ン ト が使われ る こ と に よ っ てテ キ ス ト は読め る
よ う にな り ますが、 そのグ リ フは元の フ ォ ン ト と は異な る 可能性があ り ます。 よ り 重要な
こ と は、 Acrobat の代替フ ォ ン ト (AdobeSansMM ・ AdobeSerifMM) は欧文テ キ ス ト に対
し てのみ働 き 、 それ以外の用字系や記号グ リ フ に対 し ては一切働かない と い う こ と です。
同様に、 代替フ ォ ン ト は、 複雑用字系のシ ェーピ ン グか OpenType レ イ ア ウ ト 機能が使わ
れてい る と き には働 き ません。 こ う し た理由か ら 、 一般にはフ ォ ン ト の埋め込みを推奨 し
ます。 ただ し 、 文書が フ ォ ン ト を埋め込んでいな く て も タ ーゲ ッ ト シ ス テ ム上での表示が
許容範囲内にな る と わかっ てい る 場合は例外です。 その よ う な PDF フ ァ イ ルは本質的に
非可搬ですが、すべての ワー ク ス テーシ ョ ン上で必要フ ォ ン ト が得 ら れ る と わかっ てい る
企業ネ ッ ト ワー ク な ど の制御 さ れた環境においては役に立つか も し れません。
PDFlib で フ ォ ン ト を埋め込み フ ォ ン ト の 埋 め 込 み は、 フ ォ ン ト を 読 み 込 む 際 に
embedding オプシ ョ ンで司 ら れます (ただ し 場合に よ っ ては PDFlib はフ ォ ン ト を強制的
に埋め込みます) :
font = p.load_font("WarnockPro", "winansi", "embedding");
表 5.1 に挙げ る よ う に、 使用フ ォ ン ト ご と に PDFlib が必要 と す る フ ォ ン ト ・ メ ト リ ッ ク
フ ァ イ ルは使用フ ォ ン ト ご と に異な り ます。 表 5.1 に挙げ る 要請に加え て、 (標準ま たは
カ ス タ ムの) 日中韓フ ォ ン ト をいずれかの標準 CMap で使 う には、 その CMap フ ァ イ ルが
(場合に よ っ てはその文字集合に対す る Adobe-Japan1-UCS2 等の Unicode マ ッ ピ ン グ CMap
も ) 得 ら れ る 必要があ り ます。
不可視テ キ ス ト (主に OCR 出力に有用) にのみ使われ る フ ォ ン ト に対す る フ ォ ン ト 埋
め込みは、 フ ォ ン ト を読み込む際に optimizeinvisible オプシ ョ ンで制御す る こ と がで き ま
す。
表 5.1 さ ま ざ ま な フ ォ ン ト 使用状況 と 必要フ ァ イル
使用フ ォ ン ト
フ ォ ン ト の メ ト リ ッ ク フ ァ フ ォ ン ト のアウ ト ラ イ ン
イルが必要か
フ ァ イルが必要か
14 コ ア フ ォ ン ト のいずれか
×
embedding=true の場合の
み
Mac か Windows シ ス テムに イ ン ス ト ール さ れて
いる TrueType ・ OpenType ・ PostScript Type 1 ホ
ス ト フォン ト
×
×
非 コ ア PostScript フ ォ ン ト
○
embedding=true の場合の
み
126
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 5.1 さ ま ざ ま な フ ォ ン ト 使用状況 と 必要フ ァ イル
使用 フ ォ ン ト
フ ォ ン ト の メ ト リ ッ ク フ ァ フ ォ ン ト のアウ ト ラ イ ン
イルが必要か
フ ァ イルが必要か
TrueType フ ォ ン ト
n/a
○
n/a
○
×
×
OpenType ・ SING フ ォ ン ト
標準日中韓 フ ォ ン ト
1
1. 日中韓 フ ォ ン ト に関 し て詳 し く は 156 ページ 「6.5 日本語 ・ 中国語 ・ 韓国語テキス ト 出力」 を参照。
フ ォ ン ト 埋め込みの法的側面 留意 し ておかな ければな ら ない重要な こ と は、 あ る フ ォ
ン ト フ ァ イ ルを持っ てい る と い う 理由だけでは、 その フ ォ ン ト を PDF に埋め込んで も よ
い と い う 正当化はで き ない と い う こ と です。た と え合法な フ ォ ン ト ラ イ セ ン ス を保持 し て
いて も 同様です。 多 く のフ ォ ン ト ベン ダーが、 自社の フ ォ ン ト の埋め込みには制限を加え
てい ます。 さ ま ざ ま な書体工房のなかには、 PDF の フ ォ ン ト 埋め込みを完全に禁止 し てい
る と こ ろ も あ り ます し 、自社の フ ォ ン ト に対す る 特別なオン ラ イ ン ラ イ セ ン スや埋め込み
ラ イ セ ン ス を提示 し てい る と こ ろ も あ り ます し 、 ま た、 フ ォ ン ト にサブセ ッ ト 化を施す限
り において フ ォ ン ト 埋め込みを許 し てい る と こ ろ も あ り ます。 フ ォ ン ト を PDFlib で埋め
込んでみ よ う と 試み る 前に、 まず、 その フ ォ ン ト の埋め込みが法的にはど の よ う な こ と に
な る のか調べて く だ さ い。TrueType フ ォ ン ト や OpenType フ ォ ン ト の中では埋め込み制限
を指定 し てお く こ と がで き る ので、 PDFlib はその指定に従い ます。 TrueType フ ォ ン ト の
中の埋め込みフ ラ グが 埋め込み不可 に設定 さ れてい る 場合1、 PDFlib はフ ォ ン ト ベン
ダーの要請に従い、 その フ ォ ン ト を埋め込 も う と す る あ ら ゆ る 試みを拒否 し ます。
5.5.2 フ ォ ン ト のサブ セ ッ ト 化
PDF 出力のサ イ ズ を減 ら すために、PDFlib は、 あ る フ ォ ン ト の中で実際にその文書の中で
使われてい る グ リ フ だけ を埋め込む こ と がで き ます。 こ の処理を フ ォ ン ト のサブセ ッ ト 化
と いい ます。 サブセ ッ ト 化を行 う と 新 し い フ ォ ン ト が作成 さ れ、 その中ではグ リ フ の数が
元の フ ォ ン ト よ り も 少な く 、 PDF の表示に必要ない フ ォ ン ト 情報 も 省略 さ れてい ます。 た
だ し 、 Acrobat の TouchUp テ キ ス ト ツールは、 サブセ ッ ト フ ォ ン ト のテ キ ス ト では動作 し
て く れません。 フ ォ ン ト のサブセ ッ ト 化は特に日中韓フ ォ ン ト において重要です。 PDFlib
は次の種類の フ ォ ン ト のサブセ ッ ト 化に対応 し てい ます。
> TrueType フ ォ ン ト 。
> PostScript か TrueType のア ウ ト ラ イ ン を持つ OpenType フ ォ ン ト 。
> Type 3 フ ォ ン ト (特別な扱いが必要、 128 ページ 「Type 3 フ ォ ン ト のサブセ ッ ト 化」 を
参照)
サブセ ッ ト 化を要求 さ れてい る フ ォ ン ト が文書内で使われてい る 場合、PDFlib は実際にテ
キ ス ト 出力に使われてい る キ ャ ラ ク タ を調べます。サブセ ッ ト 化の動作を制御す る にはい
く つかの方法があ り ます (autosubsetting は指定 し ていない と し て) :
> デフ ォ ル ト のサブセ ッ ト 化の動作は autosubsetting パ ラ メ タ で制御 さ れます。も し こ の
パ ラ メ タ が true な ら ば、 サブセ ッ ト 化可能なすべての フ ォ ン ト に対 し てサブセ ッ ト 化
が有効にな り ます (特別な扱いが必要な Type 3 フ ォ ン ト の場合を除 き ます、 後述)。 デ
フ ォ ル ト 値は true です。
> autosubsetting=true の場合:subsetlimit パ ラ メ タ はパーセ ン ト 値を持ち ます。文書内で
用い ら れてい る 、あ る フ ォ ン ト 内のグ リ フ の数が こ の割合を超え る 場合には、その フ ォ
ン ト のサブセ ッ ト 化は無効 と な り 、 かわ り に フ ォ ン ト 全体が埋め込ま れ ます。 こ れに
1. も っ と 明確に言えば、 その フ ォ ン ト の OS/2 テーブル内の fsType フ ラ グが値 2 を持つ場合。
5.5 フ ォ ン ト の埋め込み ・ サブ セ ッ ト 化
127
よ っ て処理時間があ る 程度短縮で き ますが、 そのかわ り に出力フ ァ イ ルの容量は大 き
く な り ます。
p.set_value("subsetlimit", 75); /* サブセットの限界を75%に設定 */
subsetlimit のデフ ォ ル ト 値は 100 パーセ ン ト です。 言い換えれば、 ク ラ イ ア ン ト が明
示的に 100 パーセ ン ト 未満の限界値を要求 し ない限 り 、 load_font( ) で要求 さ れ る サブ
セ ッ ト 化オプシ ョ ンは効力を持ち ます。
> autosubsetting=true の場合:subsetminsize パ ラ メ タ を用い る と 、容量の小 さ な フ ォ ン ト
のサブセ ッ ト 化を完全に無効にす る こ と がで き ます。 元の フ ォ ン ト フ ァ イ ルの容量が
subsetminsize の値 よ り も KB 単位で小 さ い場合、 その フ ォ ン ト のサブセ ッ ト 化は無効
にな り ます。
TrueType フ ォ ン ト の埋め込み と サブ セ ッ ト 化 あ る TrueType フ ォ ン ト が、 winansi か
macroman 以外のエン コ ーデ ィ ン グで使用 さ れ る フ ォ ン ト であ る 場合、 デフ ォ ル ト ではそ
の フ ォ ン ト は PDF 出力の際に CID フ ォ ン ト に変換 さ れます。 Adobe グ リ フ リ ス ト (AGL)
の中にあ る キ ャ ラ ク タ だけ を含むエ ン コ ーデ ィ ン グの場合には、 autocidfont パ ラ メ タ を
false に設定すれば こ の変換は行われません。
初期 フ ォ ン ト サブ セ ッ ト を指定 フ ォ ン ト サブセ ッ ト は、 文書内で使われてい る すべて
のグ リ フ のア ウ ト ラ イ ン記述を含んでい ます。 こ れはすなわち、 生成 さ れ る 文書サブセ ッ
ト は文書ご と に変化す る こ と を意味 し ます。 なぜな ら 一般に、 各文書内ではそれぞれ異な
る キ ャ ラ ク タ (ひいてはグ リ フ) のセ ッ ト が用い ら れてい る か ら です。 フ ォ ン ト サブセ ッ
ト を埋め込んだた く さ んの小 さ な文書を大 き な文書へ連結する 際には、フ ォ ン ト サブセ ッ
ト がそれぞれま ち ま ちであ る こ と は厄介です:埋め込まれてい る サブセ ッ ト は全部互いに
異な る ため、 除去で き ないのです。
こ う し た場合のために、 PDFlib では、 load_font( ) の initialsubset オプシ ョ ンで フ ォ ン
ト サブセ ッ ト の初期内容を指定す る こ と が可能です。 PDFlib がデフ ォ ル ト では空のサブ
セ ッ ト か ら 開始 し 、生成 さ れ る テ キ ス ト 出力か ら の要請に応 じ て グ リ フ を追加 し てい く の
に対 し て、initialsubset オプシ ョ ン を利用す る と 、空でないサブセ ッ ト を指定す る こ と がで
き ます。 た と えば、 Latin-1 テ キ ス ト 出力のみが生成 さ れ る と わか っ てい る 場合に、 フ ォ
ン ト がその他のグ リ フ も た く さ ん含んでい る な ら ば、 先頭 Unicode ブ ロ ッ ク を初期サブ
セ ッ ト と し て指定す る こ と がで き ます :
initialsubset={U+0020-U+00FF}
こ れはすなわち、 指定 し た範囲内のすべての Unicode キ ャ ラ ク タ に対す る グ リ フ がサブ
セ ッ ト 内に入れ込まれ る こ と を意味 し ます。 こ の範囲を、 生成 さ れ る 文書内のすべてのテ
キ ス ト を網羅す る よ う に選んでおいたな ら ば、生成 さ れ る フ ォ ン ト サブセ ッ ト はすべての
文書内で等 し く な る で し ょ う 。 そ う すれば、 こ の よ う な文書群を あ と で 1 個の PDF へ連
結す る 際に、 等 し い フ ォ ン ト サブセ ッ ト 群は begin_document( ) の optimize オプシ ョ ンで
除去す る こ と が可能にな り ます。
Type 3 フ ォ ン ト のサブ セ ッ ト 化 Type 3 フ ォ ン ト を文書で使え る よ う にす る には、 その
前に まず (グ リ フ の幅が必要なので) それを定義 し なければな ら ず、 ひいては埋め込ま な
ければな り ません。 と こ ろがその一方でサブセ ッ ト 化は、 すべてのページ を作成 し た後で
は じ めて可能にな る も のです (正 し いサブセ ッ ト を決定す る には、 ど のグ リ フ が文書内で
使われたかを知 る 必要があ る ので)。 こ の矛盾を避け る ために PDFlib は、 幅オン リ ー Type
3 フ ォ ン ト に対応 し てい ます。 Type 3 フ ォ ン ト についてサブセ ッ ト 化が必要な と き は、 以
下の 2 回に分けて フ ォ ン ト を定義す る 必要があ り ます。
128
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> 1 回目は、フ ォ ン ト を使 う 前に、begin_font( ) で widthsonly オプシ ョ ン を指定 し て行 う 必
要があ り ます。こ こ ではフ ォ ン ト と グ リ フ の メ ト リ ッ ク (幅) だけ を定義 し ます。begin_
font( ) の フ ォ ン ト マ ト リ ッ ク ス と 、 begin_glyph( ) の wx と グ リ フ外接枠を与え る 必要
があ り 、 かつ実際のグ リ フ の メ ト リ ッ ク を正確に記述す る 必要があ り ます。 グ リ フ ご
と に begin_glyph( ) と end_glyph( ) だけが必要であ り 、 それ以外に実際のグ リ フ の形を
定義す る 呼び出 し は一切不要です。 グ リ フ定義の開始 と 終了の間で他の関数を呼び出
し た場合、 それは PDF 出力に対 し て何 ら 効力を持たず、 例外 も 一切発生 し ません。
> 2 回目は、 こ の フ ォ ン ト のテ キ ス ト をすべて作成 し た後に行 う 必要があ り 、実際のグ リ
フ のア ウ ト ラ イ ンか ビ ッ ト マ ッ プ を定義 し ます。 フ ォ ン ト と グ リ フ の メ ト リ ッ ク は、 1
回目ですでにわか っ てい る ので無視 さ れ ま す。 最後のページが作成 さ れた後、 PDFlib
は ど のグ リ フ が文書内で使われてい る か も 知っ てい る ので、 必要な グ リ フ定義だけ を
埋め込んで フ ォ ン ト サブセ ッ ト を構成 し ます。
1 回目 と 2 回目では、 同 じ グ リ フ群を与え なければな り ません。 サブセ ッ ト 化を伴 う Type
3 フ ォ ン ト は、 load_font( ) で 1 回だけ読み込む こ と がで き ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/type3_subsetting ト ピ ッ ク にあ り ます。
5.5 フ ォ ン ト の埋め込み ・ サブ セ ッ ト 化
129
5.6 フ ォ ン ト 情報 を取得
info_font( ) を利用す る と 、 フ ォ ン ト ・ エン コ ーデ ィ ン グ ・ Unicode ・ グ リ フ に関 し て有用
な情報を取得す る こ と がで き ます。 取得 し たい情報の種類に よ っ ては、 有効な フ ォ ン ト ハ
ン ド ルが こ の関数の引数 と し て必要な場合 も あ り ます。 以下すべての例で、 表 5.2 に挙げ
る 変数を用い る こ と に し ます。
表 5.2 info_font( ) の利用例で用いる変数一覧
変数
注釈
int uv;
Unicode の数値。 あるいは、 グ リ フ名参照か ら 「&」 ・ 「;」 修飾を除いた ものを オプ シ ョ ン リ
ス ト 内で用いる こ と も で き ます (unicode=euro 等)。 詳 し く は、 PDFlib API リ フ ァ レ ン スの
Unichar オプ シ ョ ン リ ス ト デー タ 型の解説を参照 し て く だ さ い。
int c;
8 ビ ッ ト 文字 コ ー ド
int gid;
グ リ フ ID
int cid;
CID 値
String gn;
グ リ フ名
int gn_idx;
グ リ フ名の文字列番号。 gn_idx が -1 以外な ら ば、 対応する文字列を下記のよ う に取得で き
ます :
gn = p.get_parameter("string", gn_idx);
String enc;
エ ン コ ーデ ィ ング名
int font;
load_font( ) で取得 し た有効な フ ォ ン ト ハン ド ル
求め ら れた キー ワー ド と オプシ ョ ン (群) の組み合わせが得 ら れない と き は、 info_font( )
は -1 を返 し ます。 こ れは、 ク ラ イ ア ン ト アプ リ ケーシ ョ ン側でチ ェ ッ ク す る 必要があ り 、
ま た こ れを用いて、求め る グ リ フ が フ ォ ン ト 内にあ る か ど う かをチ ェ ッ ク す る こ と がで き
ます。
以下のサ ン プル コ ー ド 行は、 互いに依存 し てい ませんので、 独立に抜 き 出 し て利用す
る こ と がで き ます。
5.6.1 フ ォ ン ト 非依存のエ ン コ ーデ ィ ン グ ・ Unicode ・ グ リ フ 名取得
エ ン コ ーデ ィ ン グ取得 エ ン コ ーデ ィ ン グ の取得には、 有効な フ ォ ン ト ハン ド ルは必要
ではあ り ません。 すなわち、 info_font( ) の font 引数に値 -1 を与え る こ と がで き ます。 gn
には、 PDFlib が内部的に知っ てい る グ リ フ名だけ を与え る こ と がで き 、 フ ォ ン ト 独自のグ
リ フ名を与え る こ と はで き ません。
Unicode キ ャ ラ ク タ 、指名 し た グ リ フ の 8 ビ ッ ト エン コ ーデ ィ ン グ内の 8 ビ ッ ト コ ー ド
を取得 :
c = (int) p.info_font(-1, "code", "unicode=" + uv + " encoding=" + enc);
c = (int) p.info_font(-1, "code", "glyphname=" + gn + " encoding=" + enc);
8 ビ ッ ト コ ー ド 、 指名 し た グ リ フ の 8 ビ ッ ト エン コ ーデ ィ ン グ内の Unicode 値を取得 :
uv = (int) p.info_font(-1, "unicode", "code=" + c + " encoding=" + enc);
uv = (int) p.info_font(-1, "unicode", "glyphname=" + gn + " encoding=" + enc);
8 ビ ッ ト コ ー ド 、Unicode 値の 8 ビ ッ ト エン コ ーデ ィ ン グ内の登録 さ れた グ リ フ名を取得 :
130
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
gn_idx = (int) p.info_font(-1, "glyphname", "code=" + c + " encoding=" + enc);
gn_idx = (int) p.info_font(-1, "glyphname", "unicode=" + uv + " encoding=" + enc);
/* 文字列番号を用いて実際のグリフ名を取得 */
gn = p.get_parameter("string", gn_idx);
Unicode ・ グ リ フ 名取得
info_font( ) を利用す る と 、 特定の 8 ビ ッ ト エン コ ーデ ィ ン グに
依存せず、Unicode 値 と PDFlib が内部的に知っ てい る 名前 と の関係にかかわ る 情報取得を
行 う こ と も 可能です。 こ れ ら の情報取得はいかな る フ ォ ン ト に も 依存 し ませんので、 有効
な フ ォ ン ト ハン ド ルは必要ではあ り ません。
内部的に知 ら れてい る グ リ フ名の Unicode 値を取得 :
uv = (int) p.info_font(-1, "unicode", "glyphname=" + gn + " encoding=unicode");
Unicode 値の内部グ リ フ名を取得 :
gn_idx = (int) p.info_font(-1, "glyphname", "unicode=" + uv + " encoding=unicode");
/* 文字列番号を用いて実際のグリフ名を取得 */
gn = p.get_parameter("string", gn_idx);
5.6.2 フ ォ ン ト 依存のエ ン コ ーデ ィ ン グ ・ Unicode ・ グ リ フ 名取得
以下の情報取得は、 特定のフ ォ ン ト にかかわ る も のですので、 有効な フ ォ ン ト ハン ド ルで
フ ォ ン ト を指定す る 必要があ り ます。 gn 変数を用いて、 内部的に知 ら れてい る グ リ フ だ
けでな く 、 フ ォ ン ト 独自のグ リ フ名を与え る こ と も で き ます。 以下すべての例において、
戻 り 値 -1 は、 求めた グ リ フ を その フ ォ ン ト が含んでいない こ と を意味 し ます。
8 ビ ッ ト エン コ ーデ ィ ン グで読み込んだ フ ォ ン ト 内の Unicode 値、 グ リ フ ID、 指名 し
た グ リ フ、 CID に対す る 8 ビ ッ ト コ ー ド を取得 :
c
c
c
c
=
=
=
=
(int)
(int)
(int)
(int)
p.info_font(font,
p.info_font(font,
p.info_font(font,
p.info_font(font,
"code",
"code",
"code",
"code",
"unicode=" + uv);
"glyphid=" + gid);
"glyphname=" + gn);
"cid=" + cid);
フ ォ ン ト 内の コ ー ド 、 グ リ フ ID、 指名 し た グ リ フ、 CID に対する Unicode 値を取得 :
uv
uv
uv
uv
=
=
=
=
(int)
(int)
(int)
(int)
p.info_font(font,
p.info_font(font,
p.info_font(font,
p.info_font(font,
"unicode",
"unicode",
"unicode",
"unicode",
"code=" + c);
"glyphid=" + gid);
"glyphname=" + gn);
"cid=" + cid);
フ ォ ン ト 内の コ ー ド 、 Unicode 値、 指名 し た グ リ フ、 CID に対する グ リ フ ID を取得 :
gid
gid
gid
gid
=
=
=
=
(int)
(int)
(int)
(int)
p.info_font(font,
p.info_font(font,
p.info_font(font,
p.info_font(font,
"glyphid",
"glyphid",
"glyphid",
"glyphid",
"code=" + c);
"unicode=" + uv);
"glyphname=" + gn);
"cid=" + cid);
任意の 8 ビ ッ ト エン コ ーデ ィ ン グにおけ る フ ォ ン ト 内の コ ー ド 、 Unicode 値、 指名 し た グ
リ フ に対す る グ リ フ ID を取得 :
gid = (int) p.info_font(font, "glyphid", "code=" + c + " encoding" + enc);
gid = (int) p.info_font(font, "glyphid", "unicode=" + uv + " encoding=" + enc);
gid = (int) p.info_font(font, "glyphid", "glyphname=" + gn + " encoding=" + enc);
5.6 フ ォ ン ト 情報を取得
131
コ ー ド ・ Unicode 値 ・ CID で指定 し た グ リ フ の フ ォ ン ト 独自の名前を取得 :
gn_idx
gn_idx
gn_idx
gn_idx
=
=
=
=
(int)
(int)
(int)
(int)
p.info_font(font,
p.info_font(font,
p.info_font(font,
p.info_font(font,
"glyphname",
"glyphname",
"glyphname",
"glyphname",
"code=" + c);
"unicode=" + uv);
"glyphid=" + gid);
"cid=" + cid);
/* 文字列番号を用いて実際のグリフ名を取得 */
gn = p.get_parameter("string", gn_idx);
グ リ フ 互換性 を調べ る info_font( ) を利用す る と 、 自分のアプ リ ケーシ ョ ン で必要な グ
リ フ を あ る 特定の フ ォ ン ト が含んでい る か ど う かを調べ る こ と がで き ます。 た と えば、 下
記の コ ー ド はユー ロ グ リ フ が フ ォ ン ト 内に含まれてい る か ど う か を調べます :
/* "unicode=U+20AC"でもよい */
if (p.info_font(font, "code", "unicode=euro") == -1)
{
/* ユーログリフに対するグリフがフォント内で得られない */
}
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/glyph_availability ト ピ ッ ク にあ り ます。
あ る いは info_textline( ) を使っ て、 所与のテ キ ス ト 文字列におけ る マ ッ プな し キ ャ ラ ク タ
の数を、 すなわち文字列内の、 フ ォ ン ト 内で適当な グ リ フ が得 ら れないキ ャ ラ ク タ の数を
調べ る こ と も で き ます。 下記の コ ー ド では、 ユー ロ キ ャ ラ ク タ (グ リ フ名参照で表現) 1
個だけ を内容 と す る 文字列についての結果を取得 し てい ます。 も し も マ ッ プな し キ ャ ラ ク
タ が 1 個見つかれば、 こ れはすなわちその フ ォ ン ト がユー ロ 記号に対す る グ リ フ を一切含
んでいない こ と を意味 し ます :
String optlist = "font=" + font + " charref";
if (p.info_textline("&euro;", "unmappedchars", optlist) == 1)
{
/* ユーロ記号に対するグリフはフォント内で得られない */
}
5.6.3 コ ー ド ページ網羅性 と 予備 フ ォ ン ト を取得
info_font( ) を利用す る と 、 あ る 特定の言語ない し 用字系のテ キ ス ト 出力を生成す る のに
フ ォ ン ト が適 し てい る か ど う かを調べ る こ と も で き ます。 そのためには、 そのテ キ ス ト で
ど の コ ー ド ページが必要かがわかっ てい る 必要があ り ます。 コ ー ド ページ網羅性は、 フ ォ
ン ト の OS/2 テーブル内にエン コ ー ド さ れてい ます。 ただ し 、 フ ォ ン ト があ る 特定の コ ー
ド ページに対応 し てい る と は正確には何を意味す る のかは、フ ォ ン ト デザ イ ナーの考え方
一つで決ま り ます。 フ ォ ン ト があ る 特定の コ ー ド ページに対応 し てい る と 言っ てい る か ら
と いっ て、必ず し も それがその コ ー ド ページ内のすべてのキ ャ ラ ク タ に対す る グ リ フ を含
んでい る と は限 り ません。 よ り 正確な網羅性情報が必要な場合は、 131 ページ 「5.6.2 フ ォ
ン ト 依存のエ ン コ ーデ ィ ン グ ・ Unicode ・ グ リ フ名取得」 で示 し た よ う に し てすべての必
要な キ ャ ラ ク タ の入手可能性を取得す る こ と がで き ます。
フ ォ ン ト が コ ー ド ページに対応 し てい るかど う か を調べる 下記の コ ー ド では、 フ ォ ン
ト があ る 特定の コ ー ド ページに対応 し てい る か ど う か を調べてい ます :
String cp="cp1254";
result = (int) p.info_font(font, "codepage", "name=" + cp);
132
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
if (result == -1)
System.err.println("コードページ網羅性不明");
else if (result == 0)
System.err.println("コードページはこのフォントでは対応していません");
else
System.err.println("コードページはこのフォントで対応しています");
対応 し てい る全 コ ー ド ページの リ ス ト を取得 下 記 の コ ー ド で は、 TrueType ま た は
OpenType フ ォ ン ト が対応 し てい る すべての コ ー ド ページの リ ス ト を取得 し てい ます :
cp_idx = (int) p.info_font(font, "codepagelist", "");
if (cp_idx == -1)
System.err.println("コードページリスト不明");
else
{
System.err.println("コードページリスト:");
System.err.println(p.get_parameter("string", cp_idx));
}
こ れは、 広 く 用い ら れてい る Arial フ ォ ン ト に対 し ては下記の リ ス ト を生成 し ます :
cp1252 cp1250 cp1251 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 cp874 cp932 cp936 cp949
cp950 cp1361
予備 フ ォ ン ト を取得 info_font( ) を利用す る と 、 予備フ ォ ン ト 機構の結果を取得す る こ
と がで き ます (予備フ ォ ン ト について詳 し く は 123 ページ 「5.4.5 予備フ ォ ン ト 」 を参照)。
下記の コ ー ド では、 指定 し た Unicode キ ャ ラ ク タ を表すのに用い ら れてい る ベース フ ォ ン
ト か予備フ ォ ン ト の名前を調べてい ます :
result = p.info_font(basefont, "fallbackfont", "unicode=U+03A3");
/* result==ベースフォントならば、ベースフォントが使われ予備フォントは必要なかった */
if (result == -1)
{
/* キャラクタはベースフォントでも予備フォントでも表示できない */
}
else
{
idx = p.info_font(result, "fontname", "api");
fontname = p.get_parameter("string", idx);
}
5.6 フ ォ ン ト 情報を取得
133
134
第 5 章 : フ ォ ン ト 処理 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
6 テキス ト 出力
6.1 さ ま ざ ま な テキス ト 出力方式
PDFlib は、 テ キ ス ト 出力にい く つかの レベルで対応 し てい ます :
> show( ) や類似の関数群に よ る 低レベルテ キ ス ト 出力。
> fit_textline( ) に よ る 一行に組まれたテ キ ス ト 出力。こ の関数はパ ス上のテ キ ス ト に も 対
応 し てい ます。
> テ キ ス ト フ ロ ーに よ る 複数行テ キ ス ト 組版出力 (fit_textflow( ) お よ び関連す る 関数
群)。 テ キ ス ト フ ロ ー組版機能は、 ベ ク ト ルベース の形状の内側ま たは外側にテ キ ス ト
を回 り こ ませ る こ と も で き ます。
> 表内のテ キ ス ト 。 表組版機能は、 表セル内のテ キ ス ト 行 ・ テ キ ス ト フ ロ ー内容に対応
し てい ます。
低 レ ベルテキス ト 出力 show( ) の よ う な関数群を使 う と 、 テ キ ス ト をページ上のあ る 特
定の場所に、 いかな る 組版支援を も 利用せずに配置する こ と がで き ます。 こ れは、 非常に
基本的な出力要請を持つアプ リ ケーシ ョ ン (プ レーン テ キ ス ト フ ァ イ ルを PDF へ変換す
る 等) 、 あ る いはすでに完全なテ キ ス ト 配置情報を持っ てい る アプ リ ケーシ ョ ンの場合に
のみ推奨 し ます (別形式のページ を PDF へ変換す る ド ラ イ バ等)。
下記の コ ー ド は低レベル関数群でテ キ ス ト 出力を生成 し ます :
font = p.load_font("Helvetica", "unicode", "");
p.setfont(font, 12);
p.set_text_pos(50, 700);
p.show("Hello world!");
p.continue_text("(says Java)");
テキス ト 行で組まれた一行テキス ト 出力 fit_textline( ) は、一行だけのテ キ ス ト 出力を生
成 し 、 さ ま ざ ま な組版機能を提供 し ます。 ただ し 、 テ キ ス ト 行ご と の位置は ク ラ イ ア ン ト
アプ リ ケーシ ョ ンが決定す る 必要があ り ます。
下記の コ ー ド はテ キ ス ト 行でテ キ ス ト 出力を生成 し ます。 フ ォ ン ト ・ エ ン コ ーデ ィ ン
グ ・ 文字サ イ ズはオプシ ョ ン と し て指定で き ますので、 こ れに先立っ て load_font( ) を呼
び出 し てお く 必要はあ り ません :
p.fit_textline(text, x, y, "fontname=Helvetica encoding=unicode fontsize=12");
テ キ ス ト 行について詳 し く は 183 ページ 「8.1 テ キ ス ト 行の配置 と はめ込み」 を参照 し て
く だ さ い。
テキス ト フ ロ ーに よ る複数行テキス ト 出力 fit_textflow( ) は、 任意の行数のテ キ ス ト 出
力を生成 し 、 ま た、 テ キ ス ト を複数の段組みま たはページにわた ら せ る こ と も で き ます。
テ キ ス ト フ ロ ー組版機能はた く さ んの組版機能に対応 し てい ます。
下記の コ ー ド はテ キ ス ト フ ロ ーでテ キ ス ト 出力を生成 し ます :
tf = p.add_textflow(tf, text, optlist);
result = p.fit_textflow(tf, llx, lly, urx, ury, optlist);
p.delete_textflow(tf);
6.1 さ ま ざ ま な テキス ト 出力方式
135
テ キ ス ト フ ロ ーについて詳 し く は 191 ページ 「8.2 複数行のテ キ ス ト フ ロ ー」 を参照 し て
く だ さ い。
表内のテキス ト テ キ ス ト 行 と テ キ ス ト フ ロ ーを使っ て、表セル内にテ キ ス ト を配置す る
こ と も で き ます。表機能について詳 し く は Section 8.3, ?Table Formatting?, page 209 を参照
し て く だ さ い。
136
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
6.2 フ ォ ン ト メ ト リ ッ ク と テキス ト バ リ エーシ ョ ン
6.2.1 フ ォ ン ト と グ リ フ の メ ト リ ッ ク
テキス ト 位置 PDFlib はテ キ ス ト 位置を、 グ ラ フ ィ ッ ク 描画のカ レ ン ト 点 と は独立に保
持 し ます。 前者は textx/texty パ ラ メ タ で取得で き 、 後者は currentx/currenty で取得で き
ます。
グ リ フ の メ ト リ ッ ク PDFlib では、PostScript や PDF で用い ら れてい る グ リ フ と フ ォ ン ト
の メ ト リ ッ ク の体系を用いてい ます。 こ こ で簡単に説明 し てお き ま し ょ う 。
PDFlib のユーザーが指定す る 必要のあ る 文字サ イ ズ と い う のは、 テ キ ス ト の行 と 行の
間で文字が重な り あわないために必要な最小間隔の こ と です。文字サ イ ズは一般に フ ォ ン
ト 内の各文字 よ り も 大 き く な っ てい ます。なぜな ら その中にはベース ラ イ ン よ り 上の部分
も 下の部分 も 含んでい る か ら であ り 、 ま た、 それに加え て行 と 行の間の間隔を も っ と 広 く
と っ てい る こ と も あ る か ら です。
leading (行送 り ) は、 テ キ ス ト の 1 つの行のベース ラ イ ン と 次の行のベース ラ イ ン と
の間の縦の間隔を指定 し ます。デフ ォ ル ト では こ れは文字サ イ ズ と 同 じ 値に設定 さ れてい
ます。 capheight (キ ャ ッ プハ イ ト ) は、 多 く の欧文フ ォ ン ト では T や H の よ う な大文字
の高 さ です。 xheight (x ハ イ ト ) は、 多 く の欧文フ ォ ン ト では x の よ う な小文字の高 さ で
す。 ascender (アセ ン ダ) は、 多 く の欧文フ ォ ン ト では f や d の よ う な小文字の高 さ です。
descender (デ ィ セ ン ダ) は、 多 く の欧文フ ォ ン ト では、 ベース ラ イ ンか ら j や p の よ う な
小文字の下端 ま で の間隔です。 デ ィ セ ン ダ はふつ う 負の値です。 xheight ・ capheight ・
ascender ・ descender の値は文字サ イ ズに対す る 割合 と し て表 さ れてい る ので、 必要な文
字サ イ ズ を掛けてか ら 用い る 必要があ り ます。
gaplen プ ロ パテ ィ は TrueType・OpenType フ ォ ン ト でのみ得 ら れます (それ以外の フ ォ
ン ト では算出 さ れます)。 gaplen 値はフ ォ ン ト フ ァ イ ルか ら 読み出 さ れ、 ベース ラ イ ン間
の推奨間隔 と アセ ン ダ+デ ィ セ ン ダ と の差を示 し ます。
PDFlib は、 こ れ ら の値の う ちの 1 つない し 複数を、 推算で求めなければな ら ない場合
も あ り ます。 なぜな ら こ れ ら の値は、 フ ォ ン ト や メ ト リ ッ ク フ ァ イ ルの中に存在 し てい る
と い う 保証がないためです。 用い ら れてい る 値が本当の値なのか、 それ と も 推測値なのか
を知 る には、info_font( ) を呼び出 し てオプシ ョ ン faked で xheight を取得 し ます。あ る フ ォ
ン ト のキ ャ ラ ク タ メ ト リ ッ ク を PDFlib で取得す る には下記の よ う に記述 し ます :
font = p.load_font("Times-Roman", "unicode", "");
capheight = p.info_font(font, "capheight", "");
ascender = p.info_font(font, "ascender", "");
図 6.1 フ ォ ン ト と キ ャ ラ ク タ の メ ト リ ッ ク
ascender
capheight
font size
baseline
descender
6.2 フ ォ ン ト メ ト リ ッ ク と テキス ト バ リ エーシ ョ ン
137
descender = p.info_font(font, "descender", "");
xheight = p.info_font(font, "xheight", "");
注 上付き ・ 下付きの位置 と サイ ズは PDFlib では取得で き ません。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/font_metrics_info ト ピ ッ ク にあ り ます。
CPI の計算 多 く の フ ォ ン ト は可変の字幅を持っ てい ますが、 等幅フ ォ ン ト と い う 種類の
フ ォ ン ト ではすべての文字に対 し て等 し い幅を用い ます。 PDF の フ ォ ン ト メ ト リ ッ ク と 、
高速印刷環境で よ く 用い ら れ る characters per inch (CPI) 表記 と の関係を理解す る には、
等幅の Courier フ ォ ン ト での計算例が役に立つのではないで し ょ う か。 Courier では、 文字
矩形の全幅がポ イ ン ト あ た り 1000 単位であ る のに対 し て、 すべての文字は 600 単位の幅
を持っ てい ます( こ の値はそれぞれのAFM メ ト リ ッ ク フ ァ イ ルか ら 得 る こ と がで き ます)。
た と えば 12 ポ イ ン ト のテ キ ス ト では、 すべての文字の実際の幅は次の よ う にな り ます。
12 ポイント ×(600 ÷ 1000)= 7.2 ポイント
最適行送 り が 12 ポ イ ン ト です。 1 イ ンチは 72 ポ イ ン ト ですので、 Courier 12 ポ イ ン ト の
文字は 1 イ ンチの中にち ょ う ど 10 個収ま る こ と にな り ます。つま り 、12 ポ イ ン ト の Courier
は 10 cpi フ ォ ン ト であ る と い う こ と にな り ます。 10 ポ イ ン ト のテ キ ス ト の場合は、 字幅
は 6 ポ イ ン ト ですので、 すなわち 72 ÷ 6 = 12 cpi フ ォ ン ト と な り ます。 同様に、 8 ポ イ
ン ト の Courier は 15 cpi と な り ます。
6.2.2 カ ーニ ン グ
さ ま ざ ま な文字の組み合わせのなかには、望ま し く ない見ばえにな っ て し ま う も のがあ り
ます。 た と えば、 2 つの V が隣 り 合 う と W の よ う に見え て し ま い ます し 、 T と e の間の間
隔は縮めない と 広 く あ き すぎ て不恰好にな っ て し ま い ます。 こ の よ う な補正の こ と を カー
ニ ン グ と いい ます。 フ ォ ン ト のなかには、 問題 と な る 文字の組それぞれに対す る 間隔調整
値を記述 し た包括的な カーニ ン グ テーブルを持つ も のがた く さ んあ り ます。 PDFlib には、
カーニ ン グの動作を制御す る 方式が次の 2 種類あ り ます :
図 6.2 カ ーニ ング
ࠞ࡯࠾ࡦࠣߥߒ
ࠞ࡯࠾ࡦࠣㆡ↪
ࠞ࡯࠾ࡦࠣߦࠃࠆᢥሼ⒖േ
138
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> デフ ォ ル ト では、 フ ォ ン ト 内のカーニ ン グ情報は フ ォ ン ト 読み込み時に読み込ま れ ま
す。 カーニ ン グが必要でない場合は、 load_font( ) で readkerning オプシ ョ ン を false に
設定 し ます。
> テ キ ス ト 出力に対す る カーニ ン グは、テ キ ス ト 出力関数群が対応 し てい る kerning テ キ
ス ト 書式オプシ ョ ンで有効にす る 必要があ り ます。
一時的にカーニ ン グ を無効にす る こ と がた と えばど んな と き に有用か と い う と 、数表を組
みたい と き に、カーニ ン グデー タ が数字ど う し の組み合わせを含んでい る 場合 と い う のが
挙げ ら れます。 カーニ ン グ さ れた数字は表内で き れいに並ばないか ら です。 なお、 今ど き
の TrueType ・ OpenType フ ォ ン ト は こ の目的のための特殊な数字を含んでお り 、 こ れは等
幅数字レ イ ア ウ ト 機能 と オプシ ョ ン features={tnum} で利用で き ます。
カーニ ン グは、 ど の よ う な字間 ・ 単語間隔 ・ 横倍率が指定 さ れていた と し て も 、 それ
に加え て適用す る こ と がで き ます。 PDFlib では、 1 つの フ ォ ン ト 内のカーニ ン グ対の数に
ついてはま っ た く 無制限です。
6.2.3 テキス ト バ リ エーシ ョ ン
擬似 フ ォ ン ト ス タ イル フ ォ ン ト のボール ド 体や イ タ リ ッ ク 体は通常、 適切な フ ォ ン ト
を選ぶ こ と に よ っ て印字す る べ き も のです。 それ以外の方法 と し て、 PDFlib は擬似フ ォ ン
ト ス タ イ ルに も 対応 し てい ます。 こ れは、 レ ギ ュ ラ ーフ ォ ン ト に基づいて、 Acrobat が、
ベー ス フ ォ ン ト を太 く し た り 斜体に し た り す る こ と に よ っ て ボール ド 体や イ タ リ ッ ク 体
やボール ド イ タ リ ッ ク 体を擬似的に実現す る も のです。擬似フ ォ ン ト ス タ イ ルの美的な質
は、 フ ォ ン ト デザ イ ナーが作 り 込んだ本当のボール ド フ ォ ン ト や イ タ リ ッ ク フ ォ ン ト にか
な う も のではあ り ません。 し か し 、 あ る フ ォ ン ト ス タ イ ルを直接利用す る こ と がで き ない
場面においては、 擬似ス タ イ ルがその代用 と し て活用で き ます。 と り わけ擬似フ ォ ン ト ス
タ イ ルは標準日中韓フ ォ ン ト に対 し て有用です。標準日中韓フ ォ ン ト には ノ ーマルフ ォ ン
ト し かな く 、 ボール ド 体や イ タ リ ッ ク 体が一切ないか ら です。
注 フ ォ ン ト ス タ イ ル機能を標準日中韓 フ ォ ン ト 以外の フ ォ ン ト に対 し て用い る こ と は推奨
し ません。 また、 フ ォ ン ト ス タ イル機能は Adobe Acrobat 以外の PDF ビ ュ ーア では動作 し
ない こ と に も留意 し て く だ さ い。
Adobe Acrobat が持つ制約のため、 擬似フ ォ ン ト ス タ イ ルは、 以下のすべての条件がみた
さ れた時にのみ動作 し ます。
> ベース フ ォ ン ト が TrueType フ ォ ン ト か OpenType フ ォ ン ト であ る こ と 。標準ま たはカ ス
タ ムの日中韓フ ォ ン ト を含みます。 ベース フ ォ ン ト が PDF コ ア フ ォ ン ト の う ちのいず
れかであ っ てはな り ません(118 ページ「欧文 コ ア フ ォ ン ト 」参照)。TrueType Collections
(TTC) にはフ ォ ン ト ス タ イ ルは適用で き ません。
> エン コ ーデ ィ ン グが winansi であ る か、macroman であ る か、ま たは、表 4.3 に挙げ る 定
義済み日中韓 CMap の う ちのいずれかであ る こ と (なぜな ら そ う でない場合 PDFlib は
強制的に フ ォ ン ト を埋め込むので)。
> embedding オプシ ョ ンは false に設定 し てい る 必要があ り ます。
> PDF の表示 さ れ る 相手先のシ ス テ ムにベース フ ォ ン ト が イ ン ス ト ール さ れてい る 必要
があ り ます。
PDFlib は最初の 3 つの条件はチ ェ ッ ク し ますが、最後の条件をみたす こ と はユーザー側の
役割 と な り ます。
擬似フ ォ ン ト ス タ イ ルを使 う には、 次の よ う に、 load_font( ) の fontstyle オプシ ョ ンに
normal (ベース フ ォ ン ト その ま ま) ・ bold ・ italic ・ bolditalic のいずれかのキーワー ド を用
い ます。
6.2 フ ォ ン ト メ ト リ ッ ク と テキス ト バ リ エーシ ョ ン
139
font = p.load_font("HeiseiKakuGo-W5", "UniJIS-UCS2-H", "fontstyle bold");
fontstyle 機能は、 Windows の フ ォ ン ト ス タ イ ル名 と 一見似た概念ですが、 混同 し てはいけ
ません。 フ ォ ン ト ス タ イ ルが上記の条件の も と でのみ動作 し 、 擬似フ ォ ン ト ス タ イ ルの実
現は Acrobat に依存 し てい る のに対 し て、 Windows の ス タ イ ル名は完全に Windows の フ ォ
ン ト 選択エン ジ ンに基づいてお り 、存在 し ない ス タ イ ルを こ れで実現す る こ と はで き ませ
ん。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/artificial_fontstyles ト ピ ッ ク にあ り ま
す。
擬似ボール ド フ ォ ン ト fontstyle 機能が フ ォ ン ト に作用する のに対 し て、 PDFlib は、 個
別のテ キ ス ト 文字列を擬似的なボール ド テ キ ス ト にする 代用機能に も 対応 し てい ます。 こ
れは fakebold パ ラ メ タ かオプシ ョ ンで制御 さ れます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの fonts/simulated_fontstyles ト ピ ッ ク にあ り ま
す。
擬似斜体 フ ォ ン ト fontstyle 機能のかわ り に italicangle パ ラ メ タ ま たはオプシ ョ ン を使っ
て、 レ ギ ュ ラ ーフ ォ ン ト し か利用で き ない と き に イ タ リ ッ ク フ ォ ン ト の よ う な効果を出す
こ と も で き ます。 こ の方式は偽 イ タ リ ッ ク フ ォ ン ト を作 り 出すために レ ギ ュ ラ ーフ ォ ン ト
を ユーザーか ら 与え ら れた角度だけ傾け る も のであ り 、フ ォ ン ト ス タ イ ルに関す る 上述の
制約には縛 ら れません。 負の値でテ キ ス ト は右に傾き ます。 も ち ろん、 本物の イ タ リ ッ ク
や斜体フ ォ ン ト を使っ たほ う がは る かに き れいな出力が得 ら れ る こ と を忘れてはいけ ま
せん。 し か し イ タ リ ッ ク フ ォ ン ト が入手で き ない と き に italicangle パ ラ メ タ かオプシ ョ ン
を使えば、 簡単にそれに似た効果を出す こ と がで き ます。 こ の機能は特に日中韓フ ォ ン ト
で便利です。 italicangle パ ラ メ タ かオプシ ョ ンの値は普通 -12 か ら -15 度の範囲です。
注 italicangle パラ メ タ ・ オプ シ ョ ンは縦書き では使え ません。
注 PDFlib はグ リ フ 幅を、 斜体化 し たグ リ フ の新 し い外接枠には合わせません。 た と えばテキ
ス ト を均等配置す る と き、 斜体化 し たグ リ フ ははめ こ み枠か ら はみ出す可能性があ り ま
す。
影付 き テキス ト PDFlib は、 同 じ テ キ ス ト を場所を少 し ずつず ら し て複数個印字す る こ
と に よ っ て影付 き 効果 を 生み出す こ と がで き ま す。 影付 き テ キ ス ト は fit_textline( ) の
shadow オプシ ョ ンで生成で き ます。 影の色や、 その主テ キ ス ト に対す る 相対位置、 グ ラ
フ ィ ッ ク 状態パ ラ メ タ 群は、 サブオプシ ョ ンで指定で き ます。
テキス ト の下線 ・ 上線 ・ 取 り 消 し 線 PDFlib では、 テ キ ス ト の下や上や中央に線をひ く
こ と がで き ます。 線幅やベース ラ イ ンか ら の間隔は、 フ ォ ン ト の メ ト リ ッ ク 情報に基づい
て計算 さ れます。 ま た、 横倍率やテ キ ス ト マ ト リ ッ ク ス のカ レ ン ト 値 も 線幅の計算には加
味 さ れます。 下線 ・ 上線 ・ 取 り 消 し 線の有無を切 り 替え る には、 それぞれ set_parameter( )
で underline・overline・strikeout パ ラ メ タ を、 ま たはテ キ ス ト 出力関数群で同名のオプシ ョ
ン を オ ン オ フ し ます。 underlineposition ・ underlinewidth パ ラ メ タ かオプシ ョ ン を使っ て
微調整 も で き ます。
線の色にはカ レ ン ト 描線色が用い ら れます。 し か し 、 カ レ ン ト の linecap ・ dash パ ラ メ
タ は無視 さ れます。 体裁上の注意 : 多 く の フ ォ ン ト では、 下線は文字のベース ラ イ ン よ り
下の部分 と ぶつかっ て し ま い、ま た、上線は文字の上の付加記号 と ぶつかっ て し ま い ます。
140
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/starter_textline ト ピ ッ ク にあ り ま
す。
テキス ト 表現モー ド PDFlib は、 テ キ ス ト の見栄え を変更す る 表現モー ド にい く つか対
応 し てい ます。 こ れを用い る と 、 テ キ ス ト の輪郭を描いた り 、 テ キ ス ト を ク リ ッ ピ ン グパ
ス と し て利用 し た り す る こ と がで き ます。 ま た、 テ キ ス ト を不可視にする こ と も で き 、 こ
れはた と えば、 ス キ ャ ン画像の上にテ キ ス ト を乗せてテ キ ス ト 検索や索引生成を可能に し
つつ、 テ キ ス ト 自体は隠す、 と いっ た活用がで き る で し ょ う 。 表現モー ド の一覧は PDFlib
API リ フ ァ レ ン スに挙げて あ り ます。 表現モー ド は、 textrendering パ ラ メ タ かオプシ ョ ン
で設定す る こ と がで き ます。
テ キ ス ト を描線す る と 、 線幅や色 と い っ た グ ラ フ ィ ッ ク 状態のパ ラ メ タ 群がグ リ フ の
輪郭に適用 さ れます。 表現モー ド は、 Type 3 フ ォ ン ト を用いて印字 さ れ る テ キ ス ト には何
の効果 も 持ち ません。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの
text_output/text_as_clipping_path ・ text_
output/invisible_text ト ピ ッ ク にあ り ます。
テキス ト の色 テ キ ス ト は通常、 カ レ ン ト 塗 り 色で印字 さ れます。 塗 り 色は setcolor( ) を
用いて設定で き ます。 ただ し 、 表現モー ド で 0 以外が選択 さ れてい る 時は、 その選択 さ れ
てい る 表現モー ド に よ っ て、描線色 と 塗 り 色はど ち ら も テ キ ス ト に対 し て効力を持つ可能
性があ り ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/starter_textline ト ピ ッ ク にあ り ま
す。
6.2 フ ォ ン ト メ ト リ ッ ク と テキス ト バ リ エーシ ョ ン
141
6.3 OpenType レ イ ア ウ ト 機能
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/starter_opentype ト ピ ッ ク にあ り ま
す。
6.3.1 対応 し てい る OpenType レ イ アウ ト 機能
PDFlib は、い く つかの フ ォ ン ト 内の追加情報に従っ た高度なテ キ ス ト 出力に対応 し てい ま
す。 こ れ ら の フ ォ ン ト 拡張を OpenType レ イ ア ウ ト 機能 と いい ます。 た と えば、 フ ォ ン ト
が liga 機能を含んでい る か も し れません。 こ の機能は、 f ・ f ・ i グ リ フは結合 し て合字を
形作れ る と い う 情報を含んでい ます。 他に よ く 利用 さ れ る 例 と し ては、 smcp 機能に よ る
ス モールキ ャ ピ タ ル、 すなわち通常の大文字キ ャ ラ ク タ よ り も 小 さ な大文字キ ャ ラ ク タ
や、 onum 機能に よ る オール ド ス タ イ ル数字、 すなわち アセ ン ダ と デ ィ セ ン ダ を持つ数字
(ベース ラ イ ン上にすべて配置 さ れ る 横並びの数字 と は異な る ) な ど が挙げ ら れ ます。 合
字は非常に広 く 利用 さ れ る OpenType 機能ではあ り ますが、 可能な何ダース も の機能の う
ちの 1 つにすぎ ません。 OpenType 形式 と OpenType 機能テーブルに関す る あ ら ま し は下
記にあ り ます :
www.microsoft.com/typography/developers/opentype/default.htm
PDFlib は下記のグループの OpenType 機能に対応 し てい ます :
> 表 6.1 に挙げ る 欧文 タ イ ポグ ラ フ ィ のための OpenType 機能群。 こ れ ら は features オプ
シ ョ ン で司 ら れます。
> 表 6.7 に挙げ る 日本語 ・ 中国語 ・ 韓国語テ キ ス ト のための OpenType 機能群。 こ れ ら も
features オプシ ョ ンで司 ら れますが、 詳 し く は 159 ページ 「6.5.4 OpenType レ イ ア ウ ト
機能 と 高度な日中韓テ キ ス ト 出力」 で解説 し ます。
> 複雑用字系のシ ェーピ ン グ と 縦書 き テ キ ス ト 出力のための OpenType 機能群。こ れ ら は
shaping ・ script オプシ ョ ンに従っ て自動的に評価 さ れます (148 ページ 「6.4 複雑用字
系出力」 を参照)。 こ の vert 機能は vertical フ ォ ン ト オプシ ョ ンで司 ら れます。
> カーニ ン グのための OpenType 機能テーブル群。 ただ し 、 PDFlib はカーニ ン グ を
OpenType 機能 と し ては扱い ません。 なぜな ら カーニ ン グデー タ は OpenType 機能テー
ブル以外の手段で表現す る こ と がで き る か ら です。 カーニ ン グ を制御す る のではな く 、
readkerning フ ォ ン ト オプシ ョ ン と kerning テ キ ス ト オプシ ョ ン を用いて く だ さ い。
OpenType レ イ ア ウ ト 機能について詳 し い解説は下記にあ り ます :
www.microsoft.com/typography/otspec/featuretags.htm
OpenType 機能 を見つけ る OpenType 機能テーブルを見つけ る には下記の ツールが使え
ます :
> FontLab フ ォ ン ト エデ ィ タ はフ ォ ン ト を作成 ・ 編集す る ためのアプ リ ケーシ ョ ンです。
その無償デモ版 (www.fontlab.com) は OpenType 機能を表示 ・ プ レ ビ ュ ー し ます。
> DTL OTMaster Light (www.fonttools.org) はフ ォ ン ト を表示 ・ 分析す る ための無償ア
プ リ ケーシ ョ ン であ り 、 OpenType 機能テーブル も 表示 ・ 分析で き ます。
> Microsoft の無償の「font properties extension」1 は、フ ォ ン ト 内で得 ら れ る OpenType 機能
の リ ス ト を表示 し ます (図 6.3 参照)。
> PDFlib の info_font( ) イ ン タ フ ェース を使っ て、対応 し てい る OpenType 機能を取得す る
こ と も で き ます (147 ページ 「OpenType 機能をプ ロ グ ラ ム的に取得」 を参照)。
1. www.microsoft.com/typography/TrueTypeProperty21.mspx を参照。
142
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 6.1 欧文 タ イ ポグ ラ フ ィ のための対応 OpenType 機能一覧 (日中韓テキス ト のための OpenType 機能は表 6.7 に
挙げます)
キー
ワー
ド
名前
説明
_none 全機能無効
表 6.1 ・ 表 6.7 に挙げるすべての OpenType 機能を無効に。
afrc
別形式分数
ス ラ ッ シ ュ で区切 られた数字群を別形式へ置き換え。
c2pc
大文字か らのプ
テ ィ ッ ト キャ ピ タ
ル
大文字キ ャ ラ ク タ を プ テ ィ ッ ト キ ャ ピ タ ルに変え ます。
c2sc
大文字か らのス
モールキ ャ ピ タ ル
大文字キ ャ ラ ク タ を スモールキ ャ ピ タ ルに変え ます。
case
ケースセ ン シ テ ィ
ブ字体
さ ま ざ ま な句読点を上へず ら し て、 全大文字シーケ ン スや横並び数字のセ ッ ト と の
調和を高めます。 また、 オール ド ス タ イル数字を横並び数字に変え ます。
dlig
随意合字
複数グ リ フ のシーケ ン ス を、 タ イ ポグ ラ フ ィ 的観点から よ り 好ま し い 1 個のグ リ フ
へ置き換え
dnom
分母
ス ラ ッ シ ュの直後の数字を分母数字へ置き換え
frac
分数
ス ラ ッ シ ュ で区切 られた数字群を、 「通用の」 (斜め線に よ る) 分数へ置き換え
hist
歴史的字体
デ フ ォル ト の (現行の) 字体を歴史的字体へ置き換え。 い く つかの字の字体は過去
には広 く 用い られていま し たが、 現在では時代遅れに見え ます。
hlig
歴史的合字
この機能はデ フ ォ ル ト の (現行の) 合字を歴史的合字へ置き換え ます。
liga
標準合字
複数グ リ フ のシーケ ン ス を、 タ イ ポグ ラ フ ィ 的観点から よ り 好ま し い 1 個のグ リ フ
へ置き換え
lnum
横並び数字
数字を オール ド ス タ イルから デ フ ォル ト の横並び字体へ変え ます。
locl
ロー カ ラ イ ズ字体
グ リ フのデ フ ォル ト 字体から ロー カ ラ イ ズ字体への置換を有効に し ます。 こ の機能
は script ・ language オプ シ ョ ン を必要 と し ます。
Enable localized forms of glyphs to be substituted for default forms. This feature requires
the script and language options.
mgrk
数学ギ リ シ ャ文字
ギ リ シ ャ文字グ リ フの標準 タ イ ポグ ラ フ ィ 字体を、 広 く 用い ら れている数学的表記
へ置き換え。
numr
分子
スウ ォ ッ シ ュの直前の数字を分子数字へ置き換え、 タ イ ポグ ラ フ ィ ス ラ ッ シ ュ を分
数ス ラ ッ シ ュへ置き換え。
onum
オール ド ス タ イル
数字
数字を、 デ フ ォル ト の横並び形式か ら オール ド ス タ イル字体に変え ます。
ordn
序数
デ フ ォル ト のアル フ ァ ベ ッ ト グ リ フ を、 数字の後に用いる ための、 対応する序数字
体へ置き換え。 概 し て Numero (U+2116) キ ャ ラ ク タ も 生成 し ます。
ornm
飾 り 文字
ビ ュ レ ッ ト キ ャ ラ ク タ と ASCII キ ャ ラ ク タ 群を飾 り 文字へ置き換え。
pcap
プテ ィ ッ ト キャ ピ
タル
小文字キ ャ ラ ク タ を プ テ ィ ッ ト キ ャ ピ タ ルに、 すなわち通常のス モールキ ャ ッ プ よ
り 背の低い大文字に変え ます。
pnum
プ ロポーシ ョ ナル
数字
等幅 (表形式) 数字を、 プ ロポーシ ョ ナル幅を持つ数字へ置き換え。
salt
ス タ イ リ ステ ィ ッ
ク 字体
デ フ ォル ト 字体を ス タ イ リ ス テ ィ ッ ク字体へ置き換え。 こ れら の異体字は、 ス
ウ ォ ッ シ ュや歴史的 と い っ た決ま っ た分類には必ず し も あてはま り ません。
6.3 OpenType レ イ アウ ト 機能
143
表 6.1 欧文 タ イ ポグ ラ フ ィ のための対応 OpenType 機能一覧 (日中韓テキス ト のための OpenType 機能は表 6.7 に
挙げます)
キー
ワー
ド
名前
説明
sinf
科学的下付き
横並びまたはオール ド ス タ イル数字を、 主に化学や数学表記用の下付き数字 (よ り
小 さ なグ リ フ) へ置き換え。
smcp
ス モールキ ャ ピ タ
ル
小文字キ ャ ラ ク タ を ス モールキ ャ ピ タ ルに変え ます。
ss01
...
ss20
ス タ イ リ ステ ィ ッ
ク イ セ ッ ト 1 ∼ 20
個々のグ リ フのス タ イ リ ス テ ィ ッ ク 字体 (salt 機能を参照) に加えて、 あるいはそ
れに替えて、 フ ォ ン ト によ っ ては、 その文字セ ッ ト の一部 (複数可) に対応する ス
タ イ リ ス テ ィ ッ クバ リ ア ン ト グ リ フ 群のセ ッ ト を含んでいる も のがあ り ます。 例 :
欧文フ ォ ン ト 内の小文字に対 し て複数のバ リ ア ン ト 。
subs
下付き
デ フ ォル ト グ リ フ を下付き グ リ フへ置き換え。
sups
上付き
横並びまたはオール ド ス タ イル数字を上付き数字へ置き換え (主に脚注表示用)、
小文字を上付き文字へ置き換え (主に フ ラ ン ス語敬称の省略形用)。
swsh
スウ ォ ッ シ ュ
デ フ ォル ト グ リ フ を、 対応する スウ ォ ッ シ ュ グ リ フへ置き換え。
titl
見出 し 化
デ フ ォル ト グ リ フ を、 見出 し 用にデザイ ン さ れた、 対応する字体へ置き換え。
tnum
等幅数字
プ ロポーシ ョ ナル数字を等幅 (表形式) 数字へ置き換え。
unic
ユニケース
大文字 と 小文字を、 小文字 と ス モールキ ャ ピ タ ル字体の混在する セ ッ ト へマ ッ プ し
て、 高 さ 一定のアルフ ァ ベ ッ ト に し ます。
zero
ス ラ ッ シ ュ付きゼ
ロ
数字ゼロ に対するグ リ フ を、 中空部に斜め線を引いた字体へ置き換え。
6.3.2 テキス ト 行 ・ テキス ト フ ロ ーで OpenType レ イ アウ ト 機能
PDFlib は、 テ キ ス ト 行 ・ テ キ ス ト フ ロ ー関数群では OpenType レ イ ア ウ ト 機能に対応 し て
い ますが、 低レベルテ キ ス ト 出力関数群 (show( ) 等) では対応 し てい ません。
OpenType レ イ ア ウ ト 機能のための要件 OpenType レ イ ア ウ ト 機能 と と も に使 う フ ォ ン
ト は、 下記の要件を満たす必要があ り ます :
> フ ォ ン ト は、 TrueType (*.ttf) ・ OpenType (*.otf) ・ TrueType コ レ ク シ ョ ン (*.ttc) フ ォ
ン ト のいずれかであ る 必要があ り ます。 標準日中韓フ ォ ン ト については、 その フ ォ ン
ト フ ァ イ ルが得 ら れ る 必要があ り ます。
> フ ォ ン ト フ ァ イ ルは、テ キ ス ト 内で使いたい OpenType 機能に対す る 対応ル ッ ク ア ッ プ
を持つ GSUB テーブルを含んでい る 必要があ り ます (後述)。
> フ ォ ン ト は、encoding=unicode か glyphid で、ま たは Unicode CMap を指定 し て読み込む
必要があ り ます。
> load_font( ) の readfeatures オプシ ョ ンは false に設定する 必要があ り ます。
> load_font( ) の fallbackfonts オプシ ョ ン を用いてい る 場合は、1 つのテ キ ス ト 区間内のテ
キ ス ト は、 ベー ス フ ォ ン ト か ら のグ リ フ と 予備フ ォ ン ト か ら のグ リ フ を (ま たは複数
の予備フ ォ ン ト か ら のグ リ フ を) 同時に含んではいけ ません。
注 PDFlib は、 GSUB ル ッ ク ア ッ プ種別 1 (一対一置換) と 4 (多対一置換) を持つ OpenType
機能に対応 し ています。 PDFlib は、 GPOS テーブルに基づ く OpenType レ イ アウ ト 機能に
は対応 し ていません。
注意
144
OpenType 機能を扱 う 際には下記に留意 し て く だ さ い :
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 6.3
Microsoft の font property extension は フ ォ
ン ト 内の OpenType 機能一覧を表示 し ます
> OpenType 機能 (オプシ ョ ン features ・ script ・ language) は、 同一フ ォ ン ト 内のグ リ フ
群に対 し てのみ適用 さ れ ますので、 予備フ ォ ン ト を指定 し てい る 場合は、 ベース フ ォ
ン ト と 1 個ない し 複数の予備フ ォ ン ト と にわた る グ リ フ群には適用 さ れません。
> 必ず、 必要な場面でそのつど各機能を有効 ・ 無効を切 り 替えて く だ さ い。 OpenType 機
能を う っ か り 全テ キ ス ト に対 し て有効な ま ま に し てお く と 、 予期 し ない結果が生 じ る
こ と があ り ます。
OpenType 機能の有効 ・ 無効 を切 り 替え る テ キ ス ト の部分部分に対 し て、必要に応 じ て
OpenType 機能 の 有効 と 無効 を 切 り 替 え る こ と が で き ま す。 機能 を 有効 に す る に は、
features テ キ ス ト オプシ ョ ン を用いてその名前を与え ます。 機能名の頭に no をつけ る と
それを無効にで き ます。 た と えば、 テ キ ス ト フ ロ ーに対す る イ ン ラ イ ン オプシ ョ ン リ ス ト
では機能制御は下記の よ う にな り ます :
<features={liga}>ffi<features={noliga}
テ キ ス ト 行に対 し ては OpenType 機能を下記の よ う に有効にで き ます :
p.fit_textline("ffi", x, y, "features={liga}");
OpenType 機能は、 PDFlib Personalization Server (PPS) で利用す る ためのブ ロ ッ ク プ ロ パ
テ ィ と し て有効にす る こ と も 可能です。
複数の機能 を 同一テ キ ス ト に対 し て適用す る こ と も 可能ですが、 フ ォ ン ト 内の機能
テーブル群が こ の状況に対 し て整備 さ れてい る 必要があ り 、対応す る 機能ル ッ ク ア ッ プ を
正 し い順序で含んでい る 必要があ り ます。 た と えば、 単語 office に対 し て合字機能 (liga)
と ス モールキ ャ ピ タ ル機能 (smcp) を適用す る 場合を考え ま す。 両方の機能を有効にす
る 場合 (対応す る 機能エン ト リ 群が フ ォ ン ト に含まれてい る 前提で) 、 ス モールキ ャ ピ タ
ル機能が適用 さ れ、 合字機能は適用 さ れない こ と を期待する と 思い ます。 こ れが フ ォ ン ト
6.3 OpenType レ イ アウ ト 機能
145
のテーブル内に正 し く 実装 さ れてい る 場合は、 PDFlib は期待どお り の出力を生成 し ます。
すなわち合字な し で ス モールキ ャ ピ タ ルを適用 し ます。
制御キ ャ ラ ク タ で合字 を無効に 言語に よ っ ては、 あ る 特定の状況では合字を使っ ては
いけない も のがあ り ます。 ド イ ツ語な ど の言語におけ る タ イ ポグ ラ フ ィ 規則では、 複合語
の境界を ま た ぐ合字の使用を禁 じ てい ます。 た と えば f+i の組み合わせは、 単語 Schilfinsel
内では合字へ置 き 換え てはいけ ません。合成 さ れた 2 つの単語の境界を ま たいでい る か ら
です。
先述の よ う に、 合字な ど の OpenType 機能の処理は、 features オプシ ョ ン で有効 ・ 無効
を切 り 替え る こ と がで き ます。上記の よ う な例外的場合のたびに合字を オプシ ョ ンで無効
に し てい く のは面倒です。 シ ンプルな合字制御を提供す る ために、 テ キ ス ト 内の制御キ ャ
ラ ク タ で合字を無効にす る 機能があ り ますので、 こ れを利用すれば、 機能の有効 ・ 無効を
た く さ んのオプシ ョ ンで切 り 替え る 必要はな く な り ます。連続す る キ ャ ラ ク タ の間にゼロ
幅非接合子 (U+200C、 &zwnj。 表 6.4 も 参照) キ ャ ラ ク タ を挿入すれば、 合字が features
オプシ ョ ン で有効に し て あ っ て も 、 その箇所は合字へ置 き 換わ ら な く な り ま す。 た と え
ば、 下記の コ ー ド は f+i 合字を生成 し ません :
<features={liga charref=true}>Schilf&zwnj;insel
用字系 ・ 言語固有の OpenType レ イ ア ウ ト 機能 OpenType 機能は、 あ ら ゆ る 場面で適用
さ れ る も の も あ り ます し 、 あ る 特定の用字系に対 し て実装 さ れてい る も の も あ り ます。 あ
る 特定の用字系 と 言語 と の組み合わせに対 し て実装 さ れてい る も の も あ り ま す。 こ のた
め、 features オプシ ョ ンに加え て script ・ language テ キ ス ト オプシ ョ ン を与え る こ と が可
能です。 こ れ ら が実効性を持つのは、 その機能が フ ォ ン ト 内で用字系ま たは言語に固有な
形で実装 さ れてい る 場合のみです。
た と えば、 f ・ i グ リ フ に対す る 合字は、 い く つかの フ ォ ン ト においては、 ト ル コ 語が
選ばれてい る と き には得 ら れません (なぜな ら ト ル コ 語では点のない i が頻出す る ため、 i
の合字形はそれ と 混同 し やすいか ら です) 。 その よ う な フ ォ ン ト を用いてい る 場合に、 下
記のテ キ ス ト フ ロ ーオプシ ョ ンは、用字系 / 言語を一切指定 し ていないので合字を生成 し
ます :
<features={liga}>fi
し か し 、 下記のテ キ ス ト フ ロ ーオプシ ョ ン リ ス ト は、 ト ル コ 語オプシ ョ ンがあ る ので合字
を生成 し ません :
<script=latn language=TRK features={liga}>fi
locl 機能は、 明示的に言語固有のキ ャ ラ ク タ 字体を選択 し ます。 liga 機能は、 言語固有の
合字を含んでい ます。 言語固有機能のい く つかの例 :
セルビア語用キャラクタ字体:
<features={locl} script=cyrl language=SRB charref>&#x0431;
ウルドゥー語用数字字体:
<features={locl} script=arab language=URD charref>&#x0662;&#x0663;&#x0664;&#x0665;
使え る 言語 ・ 用字系キー ワー ド については 150 ページ 「6.4.2 用字系 と 言語」 を参照 し て
く だ さ い。
OpenType 機能 と シ ェ ー ピ ン グ を組み合わせ 複雑用字系の シ ェ ー ピ ン グ (148 ページ
「6.4 複雑用字系出力」 を参照) は、 自動的に選ばれ る OpenType フ ォ ン ト 機能に大 き く 依
146
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
存 し てい ま す。 し か し 、 フ ォ ン ト に よ っ ては、 シ ェ ー ピ ン グ のために自動的に選ばれ る
OpenType 機能を、 ク ラ イ ア ン ト アプ リ ケーシ ョ ンが選んだ OpenType 機能 と 組み合わせ
る こ と が意味を持つ場合があ り ます。 PDFlib は、 まずユーザーが選んだ OpenType 機能を
適用 し (オプシ ョ ン features)、 ついでシ ェ ーピ ン グ関連の機能を自動的に適用 し ます (オ
プシ ョ ン shaping ・ script ・ language)。
OpenType 機能 を プ ロ グ ラ ム的に取得 フ ォ ン ト 内の OpenType 機能を info_font( ) で取得
す る こ と がで き ます。 下記の コ ー ド では、 フ ォ ン ト 内で得 ら れ る 、 かつ PDFlib が対応 し
てい る すべての OpenType 機能を カ ン マで区切っ た リ ス ト を取得 し てい ます :
result = (int) p.info_font(font, "featurelist", "");
if (result != -1)
{
/* スペース区切りされた機能リストを内容として持つ文字列を取得 */
featurelist = p.get_parameter("string", result);
}
else
{
/* 対応機能は全く見つからなかった */
}
あ る 特定の機能に PDFlib と 対象 フ ォ ン ト が対応 し てい る か ど う か を調べ る には下記の
コ ー ド を用い ます。 こ の場合は合字 (liga) :
result = (int) p.info_font(font, "feature", "name=liga");
if (result == 1)
{
/* 機能にフォントとPDFlibが対応している */
}
6.3 OpenType レ イ アウ ト 機能
147
6.4 複雑用字系出力
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの scripts/starter_shaping ト ピ ッ ク にあ り ます。
6.4.1 複雑用字系
欧文用字系では基本的に左か ら 右へ、 1 つのキ ャ ラ ク タ の後に次のキ ャ ラ ク タ を置いてい
き ます。 それ以外の書記系では、 正 し いテ キ ス ト 出力のためには追加の要請があ り ます。
こ の よ う な書記系を複雑用字系 と 呼ぶ こ と に し ます。 PDFlib は、 表 6.2 に挙げ る も のを含
む さ ま ざ ま な用字系に対 し て、 複雑用字系のためのテ キ ス ト 処理を実行 し ます。
こ の項では、 複雑用字系におけ る シ ェ ーピ ン グについて詳 し く 解説 し ます。 西洋の諸
言語の多 く は単純に左か ら 右へ1つのキ ャ ラ ク タ の後に次のキ ャ ラ ク タ を置いていけば書
け る のに対 し 、 書記系 (用字系) に よ っ ては追加の処理を必要 と する も のがあ り ます :
> ア ラ ビ ア文字 と ヘブ ラ イ 文字の用字系では、テ キ ス ト を右か ら 左へ置いてい き ます。混
合テ キ ス ト (ア ラ ビ ア文の中に欧文がは さ ま っ た) は、 右書 き の部分 と 左書 き の部分
の両方を含みます。 こ れ ら の部分は並べ替えの必要があ り 、 こ れを双方向 (Bidi) 問題
と いい ます。
> い く つかの用字系、 と り わけア ラ ビ ア文字では、 キ ャ ラ ク タ の位置 (単独、 語頭 / 語中
/ 語尾) に よ っ て異な る キ ャ ラ ク タ 形状を用い ます。
> キ ャ ラ ク タ 列を必須合字へ置 き 換え ます。
> グ リ フ の位置を縦 ・ 横へ調整す る 必要があ り ます。
> イ ン ド 系用字系では、 い く つかのキ ャ ラ ク タ の並べ替えが必要です。 すなわち、 キ ャ
ラ ク タ はテ キ ス ト 内での位置が変わ る こ と があ り ます。
> い く つかの用字系には、 特殊な単語境界 ・ 均等配置規則が適用 さ れます。
こ れ ら の処理ス テ ッ プを 1 つない し 複数必要 と す る 用字系を複雑用字系 と 呼びます。入力
さ れた論理テ キ ス ト か ら 正 し い表記を作 り 上げ る 処理を シ ェ ーピ ン グ と いい ます ( こ の用
語は並べ替え と 双方向処理を も 含んでい ます) 。 ユーザーはつねに、 シ ェーピ ン グ さ れて
いない形で論理的順序のテ キ ス ト を与え、 それに対 し て PDFlib が、 必要なシ ェーピ ン グ
を実行 し てか ら PDF 出力を生成 し ます。
複雑用字系のシ ェーピ ン グは、 shaping テ キ ス ト オプシ ョ ンで有効にで き ます。 こ のオ
プシ ョ ンは script オプシ ョ ン を必要 と し 、 ま た、 language オプシ ョ ン を あわせて指定す る
こ と も で き ま す。 下記のオプシ ョ ン リ ス ト はア ラ ビ ア文字のシ ェ ー ピ ン グ ( と 双方向処
理) を可能に し ます :
shaping script=arab
注意 複雑用字系のシ ェーピ ン グ を扱 う 際には下記に留意 し て く だ さ い :
> PDFlib は shaping・script オプシ ョ ン を自動的には設定せず、ユーザーがそれ ら を与え る
と 前提 し てい ます。
> 用字系固有のシ ェーピ ン グ (オプシ ョ ン shaping ・ script ・ language) は、 同一フ ォ ン ト
か ら のグ リ フ群に対 し てのみ適用 さ れ、 複数の フ ォ ン ト にわた る グ リ フ群には適用 さ
れ ません。 予備フ ォ ン ト を使っ てい る 場合は、 シ ェ ーピ ン グは同一 (ベー ス ま たは予
備) フ ォ ン ト のテ キ ス ト 区間内でのみ適用 さ れます。
> シ ェ ーピ ン グはテ キ ス ト 内のキ ャ ラ ク タ の順番を変え る こ と があ り ますので、 単語内
の属性変更については注意を払 う 必要があ り ます。 た と えば、 テ キ ス ト フ ロ ー内で イ
ン ラ イ ン オプシ ョ ン を用いて単語内の 2 番目のキ ャ ラ ク タ に色をつけ よ う と し てい る
場合に、シ ェーピ ン グが 1 番目 と 2 番目のキ ャ ラ ク タ を入れ替えた ら ど う な る ので し ょ
う か。 こ の理由か ら 、 書式の変更は単語の途中では行わずに、 単語の境界でのみ行 う
必要があ り ます。
148
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 6.2 複雑用字系 と script オプ シ ョ ンのキーワー ド 一覧
スク リプ ト
キーワー ド
書記系
用字系の名前
用字系指定な し
-
用字系自動検出
-
こ のキーワー ド は、 テキス ト 内のキ ャ ラ ク タ の
多数が属する用字系を選択 し ます。 その際、
_latn ・ _none は無視 さ れます。
_auto
欧州アルフ ァ ベ ッ
ト
欧文
多 く の欧州な どの諸語
latn
ギ リ シ ャ文字
ギ リ シ ャ語
grek
キ リ ル文字
ロ シ ア語な ど多 く のス ラ ブ諸語
cyrl
ア ラ ビ ア文字
ア ラ ビ ア語 ・ ペルシ ャ 語 (フ ァ ールシー) ・ ウル arab
ド ゥ ー語 ・ パシ ュ ト ー語な ど
ヘブ ラ イ文字
ヘブ ラ イ語 ・ イ デ ィ ッ シ ュ語な ど
hebr
シ リ ア文字
シ リ ア正教会 ・ マ ロ ン派 ・ ア ッ シ リ ア教会
syrc
タ ーナ文字
デ ィ ベ ヒ 語 / モルデ ィ ブ
thaa
デーヴ ァ ナーガ
リー
ヒ ンデ ィ ー ・ 古典サン ス ク リ ッ ト
deva
ベン ガル文字
ベン ガル語 ・ ア ッ サム語
beng
グルムキー文字
パン ジ ャ ーブ語
guru
グジ ャ ラ ー ト 文字
グジ ャ ラ ー ト 語
gujr
オ リ ヤー文字
オ リ ヤー語 / オ リ ッ サ
orya
タ ミ ル文字
タ ミ ル語 / タ ミ ルナー ド ゥ ・ ス リ ラ ン カ
taml
テルグ文字
テルグ語 / アーン ド ラ プ ラ デーシ ュ
telu
カ ンナダ文字
カ ンナダ語 / カルナー タ カ
knda
マ ラ ヤー ラ ム文字
マ ラ ヤー ラ ム語 / ケー ラ ラ
mlym
タ イ文字
タ イ語
thai
ラ ーオ文字
ラ ーオ語
ク メ ール文字
ク メ ール語 (カ ンボジ ア語)
khmr
漢字
中国語 ・ 日本語 ・ 韓国語
hani
ひ らがな
日本語
hira
カ タ カナ
日本語
kana
ハングル
韓国語
hang
中東
南ア ジ ア (イ ン ド )
東南ア ジ ア
東ア ジ ア
その他
言語 / 地域 (不完全な リ ス ト )
_none
「lao 」1
OpenType 仕様に従 っ たその他の 4 文字 コ ー ド も働き ますが、 対応 し ていません。 全一覧は
下記にあ り ます。
www.microsoft.com/typography/developers/OpenType/scripttags.aspx
1. 末尾の空白キャラクタに注意。
6.4 複雑用字系出力
149
シ ェ ー ピ ン グのための要件 複雑用字系のシ ェ ーピ ン グ と と も に用い る ための フ ォ ン ト
は、 対象用字系のグ リ フ群を含んでい る と い う こ と に加えて、 下記の要件を満た し てい る
必要があ り ます :
> GDEF・GSUB・GPOS 機能テーブルを持ち、かつ、対象用字系に適合 し た正 し い Unicode
マ ッ ピ ン グ を持つ TrueType ま たは OpenType フ ォ ン ト であ る 必要があ り ます。 あ る い
は こ う し た OpenType テーブルを持たずに、 ア ラ ビ ア文字 ・ ヘブ ラ イ 文字の場合は、
フ ォ ン ト が Unicode の表示形を含んでい る こ と も で き ます (Arabic Apple フ ォ ン ト 等は
こ の方式で構築 さ れてい ます)。 こ の場合は内部テーブルがシ ェーピ ン グ処理に使われ
ま す。 タ イ 文字テ キ ス ト については、 Microsoft ・ Apple ・ Monotype Worldtype (い く つ
かの IBM 製品等で用い ら れてい ます) の タ イ 文字用規則に従っ た コ ン テ キ ス ト 依存字
体を フ ォ ン ト が含んでい る 必要があ り ます。
> 標準日中韓フ ォ ン ト を使 う 場合は、 その フ ォ ン ト フ ァ イ ルが得 ら れ る 必要があ り ます。
> フ ォ ン ト を encoding=unicode か glyphid で読み込む必要があ り ます。
> load_font( ) の monospace・vertical オプシ ョ ンは用いてはいけ ません。ま た、readshaping
オプシ ョ ン を false に設定 し てはいけ ません。
> load_font( ) の fallbackfonts オプシ ョ ンが用い ら れた場合は、1 つのテ キ ス ト 区間内のテ
キ ス ト が予備フ ォ ン ト か ら のグ リ フ を含んではいけ ません。
6.4.2 用字系 と 言語
用字系 と 言語は、 以下に挙げ る 機能面での役割を果た し ます。 こ れ ら は以下のオプシ ョ ン
で制御で き ます :
> script テ キ ス ト オプシ ョ ンは対象用字系 (書記系) を指定 し ます。表 6.2 に挙げた 4 文字
のキー ワー ド を使え ます。 例 :
script=latn
script=cyrl
script=arab
script=hebr
script=deva
script={lao }
script=_auto にする と 、 PDFlib は、 テ キ ス ト 内のキ ャ ラ ク タ の多数が属す る 用字系を自
動的に割 り 当て ます。 欧文テ キ ス ト はシ ェ ーピ ン グ を必要 と し ませんので、 こ の用字
系を自動的に決定す る 際には考慮 さ れません。
info_textline( ) の scriptlist キー ワー ド を使 う と 、 テ キ ス ト に対 し て用い ら れてい る 用字
系を取得す る こ と がで き ます。
> language オプシ ョ ンは、テ キ ス ト が書かれてい る 自然言語を指定 し ます。表 6.2 に挙げ
る 3 キ ャ ラ ク タ のキー ワー ド が使え ます。 例 :
language=ARA
language=URD
language=ZHS
language=HIN
複雑用字系処理 複雑用字系処理 (オプシ ョ ン shaping) には script オプシ ョ ンが必要で
す。 language オプシ ョ ン を追加で与え る こ と も で き ます。 こ れはシ ェ ーピ ン グの言語固
有の側面を制御 し ます。 た と えばア ラ ビ ア語 と ウ ル ド ゥ ー語で数字が別にな り ます。 し か
し 、 言語固有用字系シ ェーピ ン グ テーブルを含むフ ォ ン ト はわずかですので、 多 く の場合
は script オプシ ョ ン を指定すれば充分であ り 、language オプシ ョ ン を指定 し て も シ ェーピ
ン グは改善で き ません。
150
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
OpenType レ イ ア ウ ト 機能 フ ォ ン ト は、 OpenType レ イ ア ウ ト 機能を言語固有なや り 方
で実装す る こ と がで き ます (146 ページ 「用字系 ・ 言語固有の OpenType レ イ ア ウ ト 機能」
を参照)。 若干の機能は、 script ・ language オプシ ョ ンに従っ て動作が変わ る こ と があ り ま
すが、 こ れ ら のオプシ ョ ン な し で も 使え る のに対 し (liga 等)、 locl 機能は script ・ language
オプシ ョ ン と 組み合わせてのみ意味を持ち ます。
注 テキス ト フ ローにおけ る高度な改行 (206 ページ 「8.2.9 高度な用字系固有の改行」 を参
照) で も、 言語固有の処理が行われますが、 これは language オプ シ ョ ン によ っ て司 られ
るのではな く 、 locale オプ シ ョ ンによ っ て司ら れます。 locale オプ シ ョ ンは言語だけでな
く 、 国 と 地域を も特定する ものです。
表 6.3 language オプ シ ョ ンのキーワー ド 一覧
キー
ワー
ド
キー
ワー
ド
言語
キー
ワー
ド
言語
_none 言語指定な し
FIN
フ ィ ンラン ド語
NEP
ネパール語
AFK
ア フ リ カ ーン ス
FRA
フ ラ ン ス語
ORI
オ リ ヤー語
SQI
アルバニア語
GAE
ゲール語
PAS
パシ ュ ト ー語
ARA
ア ラ ビ ア語
DEU
ド イ ツ語
PLK
ポー ラ ン ド 語
HYE
アル メ ニア語
ELL
ギ リ シ ャ語
PTG
ポル ト ガル語
ASM
ア ッ サム語
GUJ
グジ ャ ラ ー ト 語
ROM
ルーマニ ア語
EUQ
バス ク語
HAU
ハウサ語
RUS
ロ シ ア語
BEL
ベ ラ ルーシ語
IWR
ヘブ ラ イ語
SAN
サン ス ク リ ッ ト
BEN
ベン ガル語
HIN
ヒ ンデ ィ ー
SRB
セルビ ア語
BGR
ブルガ リ ア語
HUN
ハン ガ リ ー語
SND
シン ド語
CAT
カ タ ルーニ ャ語
IND
イ ン ド ネシ ア語
SNH
シ ンハラ 語
CHE
チ ェ チ ェ ン語
ITA
イ タ リ ア語
SKY
ス ロバキア語
ZHP
中国語注音符号
JAN
日本語
SLV
ス ロベニ ア語
ZHS
中国語簡体字
KAN
カ ンナダ語
ESP
スペ イ ン語
ZHT
中国語繁体字
KSH
カ シ ミ ール語
SVE
スウ ェ ーデン語
COP
コプ ト語
KHM
ク メ ール語
SYR
シ リ ア語
HRV
ク ロ アチア語
KOK
コ ン カ ニ語
TAM
タ ミ ル語
CSY
チ ェ コ語
KOR
韓国語
TEL
テルグ語
DAN
デン マー ク語
MLR
改正マ ラ ヤー ラ ム語
THA
タ イ語
NLD
オ ラ ン ダ語
MAL
伝統マ ラ ヤー ラ ム語
TIB
チベ ッ ト 語
DZN
ゾンカ
MTS
マル タ 語
TRK
ト ル コ語1
ENG
英語
MNI
マニ プ リ 語
URD
ウル ド ゥ ー語
ETI
エ ス ト ニア語
MAR
マ ラ ーテ ィ ー語
WEL
ウ ェ ールズ語
FAR
ペルシ ア語
MNG
モ ン ゴル語
JII
イ デ ィ ッ シ ュ語
言語
1. い く つかの フ ォ ン ト は ト ル コ 語に対 し て誤 っ て TUR を用いていますので、 PDFlib は こ の タ グ を TRK と 等価 と し て
扱います。
6.4 複雑用字系出力
151
6.4.3 複雑用字系のシ ェ ー ピ ン グ
シ ェーピ ン グ処理は、 キ ャ ラ ク タ が単語の先頭 ・ 途中 ・ 末尾ま たは単独位置のいずれにあ
る かに よ っ て適切な グ リ フ字体を選択 し ます。シ ェ ーピ ン グは、ア ラ ビ ア文字・ ヒ ンデ ィ ー
文字テ キ ス ト 処理の不可欠な要素です。 シ ェ ーピ ン グは、 2 個以上のキ ャ ラ ク タ 列を適切
な合字へ置 き 換え る こ と も あ り ます。シ ェーピ ン グ処理は適切な キ ャ ラ ク タ 字体を自動的
に決定 し ますので、 明示的な合字 と Unicode の表示形 (U+FB50 のア ラ ビ ア文字表示形 A
等) を入力キ ャ ラ ク タ と し て用いてはいけ ません。
複雑用字系は、1 つのキ ャ ラ ク タ に対 し て複数の異な る グ リ フ字体を必要 と し 、 かつ こ
れ ら のグ リ フ を選択 し 配置す る ための追加の規則を要する こ と か ら 、複雑用字系のシ ェー
ピ ン グはあ ら ゆ る 種類の フ ォ ン ト で働 く わけではな く 、必要な情報を含んだ適当な フ ォ ン
ト が必要です。 シ ェ ーピ ン グは、 必要な機能テーブルを含む TrueType ・ OpenType フ ォ ン
ト で働 き ます (要件の詳細は 150 ページ 「シ ェーピ ン グのための要件」 を参照)。
シ ェーピ ン グは、同一フ ォ ン ト 内のキ ャ ラ ク タ 群に対 し てのみ行 う こ と がで き ます。な
ぜな ら シ ェーピ ン グ情報は特定の フ ォ ン ト に固有の も のだか ら です。 た と えば、 複数の異
な る フ ォ ン ト にわた る 合字を形成す る こ と は意味があ り ませんので、複雑用字系のシ ェー
ピ ン グは、複数の異な る フ ォ ン ト か ら のキ ャ ラ ク タ を含む単語には適用す る こ と がで き ま
せん。
シ ェ ー ピ ン グ動作 を上書 き 場合に よ っ ては、 ユーザーがデ フ ォ ル ト のシ ェ ーピ ン グ動
作を上書 き し たい こ と も あ り ます。 PDFlib は こ の目的のためにい く つかの Unicode 組版
キ ャ ラ ク タ に対応 し てい ます。 利用の便宜のため、 こ れ ら の組版キ ャ ラ ク タ は実体で指定
す る こ と も 可能です (表 6.4 参照)。
表 6.4 デ フ ォル ト シ ェ ーピ ング動作を上書き する ための Unicode 制御キ ャ ラ ク タ 一覧
組版
キャ ラ ク タ
実体名
Unicode 名
機能
U+200C
ZWNJ
ゼロ幅非接合子
隣 り 合 う 2 個のキ ャ ラ ク タ が続け字にな
ら ないよ う に し ます
U+200D
ZWJ
ゼロ幅接合子
隣 り 合 う 2 個のキ ャ ラ ク タ が続け字にな
る よ う に し ます
6.4.4 双方向組版
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クのcomplex_scripts/bidi_formatting ト ピ ッ ク にあ り
ます。
右書 き のテ キ ス ト (ア ラ ビ ア文字 ・ ヘブ ラ イ 文字をは じ め と す る さ ま ざ ま な用字系) にお
いては、 ア ド レ スや別言語に よ る 引用等で、 左書 き の欧文テ キ ス ト 列が入れ子にな る こ と
が非常に頻繁にあ り ます。 こ の よ う な混在テ キ ス ト 列では双方向 (Bidi) 組版が必要にな
り ます。 数字はつねに左書 き さ れますので、 双方向問題は、 全 く ア ラ ビ ア文字 ・ ヘブ ラ イ
文字だけで書かれたテ キ ス ト に も 生 じ ます。PDFlib は双方向テ キ ス ト 並べ替え を、Unicode
規格付録 #91 に示 さ れた Unicode 双方向アルゴ リ ズ ムに従っ て実装 し てい ます。 双方向処
理は、 オプシ ョ ンで有効にす る 必要はな く 、 右書 き のテ キ ス ト が適切な script オプシ ョ ン
と と も に現れた際には、 シ ェーピ ン グ処理の一環 と し て自動的に適用 さ れます。
注 双方向処理は現在の と こ ろ、 複数行テキス ト フ ローでは対応 し てお ら ず、 テキス ト 行 (す
なわち一行テキス ト 出力) でのみ対応 し ています。
1. www.unicode.org/unicode/reports/tr9/ を参照。
152
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
双方向アルゴ リ ズム を上書 き 自動双方向処理は多 く の場合において適切な結果を与え
ますが、 場合に よ っ ては明示的なユーザー制御が必要な こ と も あ り ます。 PDFlib では こ の
目的のためにい く つかの方向組版 コ ー ド に対応 し てい ます。 利用の便宜のため、 こ れ ら の
組版キ ャ ラ ク タ は実体で指定す る こ と も 可能です (表 6.5 参照)。 こ れ ら の双方向組版 コ ー
ド は、 下記の よ う な場合にデフ ォ ル ト の双方向アルゴ リ ズ ム を上書き する のに有用です :
> 右書 き の段落が左書 き のキ ャ ラ ク タ 群で始ま る 場合。
> 混在テ キ ス ト 列が入れ子にな っ てい る 場合。
> 左書 き テ キ ス ト と 右書 き テ キ ス ト と の間の境界に、 句読点等の弱いキ ャ ラ ク タ 群があ
る 場合。
> 混在テ キ ス ト を含む製品番号等の場合。
表 6.5 双方向アルゴ リ ズムを上書き する ための方向組版 コ ー ド 一覧
組版 コ ー ド
実体名
Unicode 名
機能
U+202A
LRE
左書き埋め込み (LRE)
埋め込み左書き列を開始 し ます
U+202B
RLE
右書き埋め込み (RLE)
埋め込み右書き列を開始 し ます
U+200E
LRM
左書き マー ク (LRM)
左書きのゼロ幅キ ャ ラ ク タ
U+200F
RLM
右書き マー ク (RLM)
右書きのゼロ幅キ ャ ラ ク タ
U+202D
LRO
左書き上書き (LRO)
キ ャ ラ ク タ 群を強い左書き キ ャ ラ ク タ 群
と し て扱 う よ う 強制
U+202E
RLO
右書き上書き (RLO)
キ ャ ラ ク タ 群を強い右書き キ ャ ラ ク タ 群
と し て扱 う よ う 強制
U+202C
PDF
方向組版ポ ッ プ (PDF)
直前の LRE ・ RLE ・ RLO ・ LRO の前の双
方向状態へ復帰
右書 き文書処理の向上のためのオ プ シ ョ ン さ ま ざ ま な組版オプシ ョ ンや Acrobat の動
作のデフ ォ ル ト 設定は、 左書 き テ キ ス ト 出力に合わせて設定 さ れてい ます。 右書 き のテ キ
ス ト 組版 と 文書表示のためには、 下記のオプシ ョ ン を用い ます :
> テ キ ス ト 行を、 下記のはめ込みオプシ ョ ンで右揃えで配置 し ます :
position={right center}
> リ ーダ を、 テ キ ス ト と 左枠の間に生成 し ます :
leader={alignment=left text=.}
> begin/end_document( ) の下記のオプシ ョ ン を用いて、 Acrobat での右書 き 文書 ・ ページ
表示を改善 し ます :
viewerpreferences={direction=r2l}
コ ー ド 内で双方向テキス ト を扱 う 双方向テ キ ス ト を扱 う 際には下記 も 有用で し ょ う :
> info_textline( ) の startx/starty・endx/endy キー ワー ド を用い る と 、それぞれ論理的開始・
終了キ ャ ラ ク タ の座標を知 る こ と がで き ます。
> info_textline( ) の writingdirx キーワ ー ド を用い る と 、テ キ ス ト の主流な書記方向を知 る
こ と がで き ます。 こ の方向は、 テ キ ス ト の先頭キ ャ ラ ク タ 群か ら 、 ま たは表 6.5 に従っ
た方向組版 コ ー ド (テ キ ス ト 内にあれば) か ら 推定 さ れます。
> info_textline( )のpositionオプシ ョ ンでautoキー ワー ド を用い る と 、自動的にア ラ ビ ア文
字ま たはヘブ ラ イ 文字のテ キ ス ト は右枠へ、 欧文テ キ ス ト は左枠へ寄せ ら れ ます。 た
6.4 複雑用字系出力
153
と えば下記のテ キ ス ト 行オプシ ョ ンは、 テ キ ス ト をベー ス ラ イ ン上に右寄せま たは左
寄せ し ます :
boxsize={width 0} position={auto bottom}
6.4.5 ア ラ ビ ア文字テキス ト 組版
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの complex_scripts/arabic_formatting ト ピ ッ ク にあ
り ます。
上述の双方向組版 と テ キ ス ト のシ ェーピ ン グに加え、ア ラ ビ ア用字系のテ キ ス ト 出力の生
成に関 し ては、 ほかに も 組版上の側面がい く つかあ り ます。
ア ラ ビ ア合字 ア ラ ビ ア用字系は合字を多用 し ます。多 く のア ラ ビ ア文字フ ォ ン ト は 2 種
類の合字を含んでお り 、 それぞれ PDFlib では異な る 扱いを受け ます :
> 必須合字 (rlig 機能) はつねに適用す る 必要があ り ます。 ラ ーム - ア リ フお よ びその派
生形等が こ れにあ た り ます。 必須合字は、 script=arab で shaping オプシ ョ ン を有効に
し てい る 場合に用い ら れます。
> 任意ア ラ ビ ア合字 (liga ・ dlig 機能) は自動的には用い ら れず、 他のユーザー制御の
OpenType 機能 と 同様に、 features={liga} で有効にす る こ と がで き ます。 任意ア ラ ビ ア
合字は、 複雑用字系処理 と シ ェーピ ン グの後に適用 さ れます。
ア ラ ビ ア文字テキス ト 内の欧文合字 テ キ ス ト 行では、 OpenType 機能の用字系固有処理
は予期 し ない結果を生み出す こ と があ り ます。 た と えば、 欧文合字は同一テ キ ス ト 行内で
ア ラ ビ ア文字テ キ ス ト と 混在す る と 働 き ません。 その原因は、 テ キ ス ト 行の内容に対 し て
は script オプシ ョ ン を一度 し か与え る こ と がで き ず、 それが shaping ・ feature オプシ ョ ン
の両方に効力を持つか ら です :
shaping script=arab features={liga}
誤り。多くのフォントでは働きません!
し か し 、 ア ラ ビ ア文字フ ォ ン ト は通常、 欧文合字を、 ア ラ ビ ア用字系指定に対 し ては含ん
でお ら ず、 デフ ォ ル ト ま たは欧文用字系に対 し てのみ含んでお り 、 し か し 1 つのテ キ ス ト
行の中で script オプシ ョ ンは変え る こ と がで き ません。 こ のため、 PDFlib は欧文合字を一
切見つけ る こ と がで き ずに、 プ レーン な キ ャ ラ ク タ を出力 し ます。
合字 を さ せない あ る 種の略称等、場合に よ っ ては、隣 り 合 う キ ャ ラ ク タ を合字に さ せた
く ない こ と があ り ます。 こ の場合には、 表 6.4 に挙げた組版キ ャ ラ ク タ を用いて、 合字を
強制 し た り 禁止 し た り す る こ と がで き ま す。 た と えば、 下記の例のゼ ロ 幅非結合子は、
キ ャ ラ ク タ が合字を形成す る こ と を禁止 し て、 正 し い略称表記を生成 し てい ます :
&#x0623;&#x064A;&ZWNJ;&#x0628;&#x064A;&ZWNJ;&#x0625;&#x0645;
ア ラ ビ ア文字テキス ト におけ る タ ト ウ ィ ール タ ト ウ ィ ールキ ャ ラ ク タ U+0640 (カ シー
ダ と も い う ) を 1 個ない し 複数挿入す る こ と に よ っ て、 ア ラ ビ ア単語を引 き 伸ばす こ と が
で き ます。PDFlib は自動的に タ ト ウ ィ ールキ ャ ラ ク タ を挿入す る こ と に よ る テ キ ス ト の均
等揃えは行い ませんが、 こ のキ ャ ラ ク タ を自分で入力テ キ ス ト 内に挿入 し て単語を引 き 伸
ばす こ と はで き ます。
ア ラ ビ ア文字 フ ォ ン ト に欧文キ ャ ラ ク タ を追加 い く つか の ア ラ ビ ア 文字 フ ォ ン ト は、
欧文キ ャ ラ ク タ に対す る グ リ フ を一切含んでい ません。Apple Mac OS X に同梱 し てい る ア
ラ ビ ア文字フ ォ ン ト 等が こ れにあ た り ます。 こ の場合は fallbackfonts オプシ ョ ン を使っ
て、 欧文キ ャ ラ ク タ を ア ラ ビ ア文字フ ォ ン ト に連結する こ と がで き ます。 PDFlib は、 欧文
154
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
ま たはア ラ ビ ア文字のテ キ ス ト 入力に従っ て自動的に両フ ォ ン ト を切 り 替え ます。すなわ
ち、 アプ リ ケーシ ョ ン側で フ ォ ン ト を切 り 替え る 必要はな く 、 欧文 と ア ラ ビ ア文字が混在
す る テ キ ス ト を 1 個の フ ォ ン ト 指定で与え る こ と がで き ます。
fallbackfonts オプシ ョ ン に対 し て下記の フ ォ ン ト 読み込みオプシ ョ ン リ ス ト を用い る
と 、 読み込んだア ラ ビ ア文字フ ォ ン ト へ Helvetica フ ォ ン ト か ら 欧文キ ャ ラ ク タ を追加す
る こ と がで き ます :
fallbackfonts={
{fontname=Helvetica encoding=unicode forcechars={U+0021-U+00FF}}
}
6.4 複雑用字系出力
155
6.5 日本語 ・ 中国語 ・ 韓国語テキス ト 出力
6.5.1 標準日中韓 フ ォ ン ト
Acrobat は、日中韓フ ォ ン ト 用の さ ま ざ ま な標準フ ォ ン ト に対応 し てい ます。こ う し た フ ォ
ン ト は、 Acrobat の イ ン ス ト ール と と も に (ま たは Asian FontPack で) 提供 さ れますので、
PDF フ ァ イ ルに埋め込む必要があ り ません。 こ の よ う な フ ォ ン ト は、 よ く 利用 さ れ る エン
コ ーデ ィ ン グに必要な キ ャ ラ ク タ をすべて含んでお り 、 ま た、 縦書 き に も 横書 き に も 対応
し てい ます。 標準フ ォ ン ト の一覧を、 適用可能な CMap と と も に表 6.6 に示 し ます (日中
韓 CMap についての詳細は 95 ページ「4.3 日本語・中国語・韓国語エン コ ーデ ィ ン グ」参照)。
注 カ ス タ ム日中韓 フ ォ ン ト に対 し ては、 Unicode
encoding=unicode の使用を推奨 し ます。
CMap (UCS2 または UTF16) ではな く 、
注 Acrobat の標準日中韓フ ォ ン ト はボール ド 体 と イ タ リ ッ ク 体に対応 し ていません。し か し 、
擬似 フ ォ ン ト ス タ イル機能で擬似的に印字 さ せる こ と はで き ます (139 ページ 「6.2.3 テキ
ス ト バ リ エーシ ョ ン」 参照)。
表 6.6 日本語 ・ 中国語 ・ 韓国語テキス ト 用の Acrobat 標準 フ ォ ン ト ・ CMap (エ ン コ ーデ ィ ング) 一覧
ロ ケール
フォン ト名
印字例
1
対応 CMap (エ ン コ ーデ ィ ング)
日本語
KozMinPro-Regular-Acro
KozGoPro-Medium2
KozMinProVI-Regular2
中国語
簡体字
AdobeSongStd-Light2
UniGB-UCS2-H, UniGB-UCS2-V, UniGB-UTF16H3, UniGB-UTF16-V3
中国語
繁体字
AdobeMingStd-Light2
UniCNS-UCS2-H, UniCNS-UCS2-V, UniCNSUTF16-H3, UniCNS-UTF16-V3
韓国語
AdobeMyungjoStd-Medium2
UniKS-UCS2-H, UniKS-UCS2-V, UniKS-UTF16H3, UniKS-UTF16-V3
UniJIS-UCS2-H, UniJIS-UCS2-V, UniJIS-UCS2HW-H1, UniJIS-UCS2-HW-V1, UniJIS-UTF16-H3 ,
UniJIS-UTF16-V3
1. HW CMap 群は、 KozMinPro-Regular-Acro ・ KozGoPro-Medium-Acro フ ォ ン ト に対 し ては用いる こ と はで き ません。 なぜな ら
こ れ ら の フ ォ ン ト にはプ ロポーシ ョ ナル ASCII キ ャ ラ ク タ し かな く 、 半角文字がないためです。
2. PDF 1.6 以上を生成する と きのみ利用可能
3. PDF 1.5 以上を生成する と きのみ利用可能
ネ イ テ ィ ブ な日中韓 レ ガ シ コ ー ド を保持 keepnative=true の場合には、選択 さ れた CMap
に従っ たネ イ テ ィ ブな レ ガシ キ ャ ラ ク タ コ ー ド (Shift-JIS 等) が PDF 出力へ書 き 込まれま
す。 そ う でなければテ キ ス ト は Unicode へ変換 さ れます。 keepnative=true の利点は、 その
よ う な フ ォ ン ト は埋め込みな し で フ ォーム フ ィ ール ド で使え る こ と です (keepnative フ ォ
ン ト 読み込み オ プ シ ョ ン の 説明 は PDFlib API リ フ ァ レ ン ス を 参照 し て く だ さ い) 。
keepnative=false の場合には、 レ ガシ コ ー ド は CID 値へ変換 さ れた う えで PDF 出力へ書 き
込まれます。 その利点は、 OpenType 機能が利用で き る こ と と 、 テ キ ス ト フ ロ ー組版機能
が利用で き る こ と です。 見た目はど ち ら の場合 も 同等です。
横書 き と 縦書 き PDFlib は、 横書 き に も 縦書 き に も 対応 し てい ます。 縦書 き は さ ま ざ ま
な方法で要求で き ます (ただ し Type 1 フ ォ ン ト では縦書 き には対応 し てい ません) :
> 標準日中韓フ ォ ン ト ・ CMap については、 横書 き か縦書 き かは、 適切な CMap 名を選ぶ
こ と に よ っ てエン コ ーデ ィ ン グ と と も に選択 さ れます。 CMap 名の末尾が -H な ら 横書
き が選択 さ れ、 -V な ら 縦書 き が選択 さ れます。
156
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> CMap以外のエン コ ーデ ィ ン グ を持つフ ォ ン ト の場合は、vertical オプシ ョ ン を与えれば
縦書 き で利用で き ます。
> 「@」 キ ャ ラ ク タ で始ま る フ ォ ン ト 名はつねに縦書き で処理 さ れます。
注 PDFlib 関数のなかには、 横書きか縦書きかによ っ て意味の変わる ものがあ り ます。 た と え
ば、 continue_text( ) は縦書き では用いてはいけません。 また、 字間は縦書き では負の値で
なければな り ません。 これは、 文字を 1 個ずつ印字 し ては戻る ためです。
標準日中韓 フ ォ ン ト の利用例 標準日中韓フ ォ ン ト を選択す る には、 load_font( ) イ ン タ
フ ェース を用いて、 CMap 名を encoding パ ラ メ タ と し て与え ます。 し か し 、 あ る 1 つの日
中韓フ ォ ン ト はあ る 特定の CMap のセ ッ ト に し か対応 し てい ま せん し (表 6.6 参照) 、
Unicode 利用可能な言語バ イ ンデ ィ ン グは UCS2 互換の CMap に し か対応 し ていない こ と
を考慮す る 必要があ り ます。 表 6.6 にあ る KozMinPro-Regular-Acro の印字例は下記の コ ー
ド で生成す る こ と がで き ます :
font = p.load_font("KozMinPro-Regular-Acro", "UniJIS-UCS2-H", "");
if (font == -1) { ... }
p.setfont(font, 24);
p.set_text_pos(50, 500);
p.show("\u65E5\u672C\u8A9E");
上記の命令群は日本語の標準フ ォ ン ト の 1 つを特定 し 、 Shift-JIS 互換の CMap (Ext-RKSJ)
と 横書 き (H) を選びます。 fontname 引数はフ ォ ン ト の正確な名前でなければな ら ず、 エ
ン コ ーデ ィ ン グや縦書 き 横書 き を表す接尾辞は一切つけてはいけ ません。encoding 引数は
対応 CMap の う ちのいずれかの名前であ り (どれを選ぶかはフ ォ ン ト に よ り ます)、 縦書
き か横書 き か も その中で表 さ れます (上述)。 PDFlib は、 Acrobat のすべてのデフ ォ ル ト
CMap に対応 し てお り 、 要求 さ れた フ ォ ン ト と CMap と が合わない こ と を発見 し た と き に
はその こ と を知 ら せて き ます。 た と えば、 韓国語フ ォ ン ト を日本語エン コ ーデ ィ ン グで使
用す る よ う 要求 さ れて も PDFlib は拒否 し ます。
等幅 フ ォ ン ト を強制 ア プ リ ケーシ ョ ン のなかには、 プ ロ ポーシ ョ ナルな日中韓 フ ォ ン
ト を取 り 扱 う 仕組みを持たず、テ キ ス ト 幅の計算を固定グ リ フ幅×グ リ フ数で済ませて し
ま う も の も あ り ます。 PDFlib では、 グ リ フ の幅が通常一定でない フ ォ ン ト に対 し て も 、 等
幅のグ リ フ を強制 さ せ る こ と が可能です。load_font( ) で monospace オプシ ョ ン を用いて、
すべてのグ リ フ に対 し て と ら せたい幅を指定 し ます。 標準日中韓フ ォ ン ト に対 し ては、 下
記の よ う に値 1000 を指定すれば満足で き る 結果が得 ら れます :
font = p.load_font("KozMinPro-Regular-Acro", "UniJIS-UCS2-H", "monospace=1000");
こ の monospace オプシ ョ ンは、 標準日中韓フ ォ ン ト に対 し てのみ推奨 さ れます。
6.5.2 カ ス タ ム日中韓 フ ォ ン ト
注 PDFlib GmbH では、 MS ゴ シ ッ ク ・ MS 明朝フ ォ ン ト を www.pdflib.com で無償ダウン ロー
ド 提供 し ています。 PDFlib の ラ イ セ ン ス を お持ちの方は これらのフ ォ ン ト を、 別途フ ォ ン
ト ラ イ セ ン ス を得る必要な く 利用する権利を有 し ます。
Acrobat の標準日中韓フ ォ ン ト のほかに、 PDFlib は、 TrueType 形式 (TrueType Collections
= TTC を含む) や OpenType 形式のカ ス タ ム日中韓フ ォ ン ト (表 6.6 の一覧にない フ ォ ン
ト ) に も 対応 し てい ます。 カ ス タ ム日中韓フ ォ ン ト は次の よ う に処理 さ れます。
> embedding オプシ ョ ンが true な ら ば、フ ォ ン ト は CID フ ォ ン ト に変換 さ れて、PDF 出力
に埋め込まれます。
6.5 日本語 ・ 中国語 ・ 韓国語テキス ト 出力
157
> Windows 上の日中韓ホ ス ト フ ォ ン ト 名は、UTF-16 形式で load_font( ) に与え る こ と がで
き ます。 し か し 、 Mac では非欧文ホ ス ト フ ォ ン ト 名に対応 し てい ません。
> keepnative オプシ ョ ンはデフ ォ ル ト で false です。Acrobat での面倒な問題を避け る ため、
フ ォ ン ト 埋め込み を し な く て よ い な ら keepnative=false に設定す る こ と を、 ま た、
keepnative=true に し たいな ら embedding=true に設定する こ と を推奨 し ます。
中国語 Unicode テキス ト での カ ス タ ム日中韓 フ ォ ン ト の利用例 下記の例では、 中国語
テ キ ス ト を ArialUnicodeMS フ ォ ン ト で印字 し てい ます。 フ ォ ン ト は、 シ ス テ ムに イ ン ス
ト ール さ れてい る か、 あ る いは 116 ページ 「5.4.3 フ ォ ン ト を検索」 に従っ て設定 さ れて
い る 必要があ り ます :
font = p.load_font("Arial Unicode MS", "unicode", "");
p.setfont(font, 24);
p.set_text_pos(50, 500);
p.show("\u4e00\u500b\u4eba");
TrueType Collection (TTC) 内の個々の フ ォ ン ト を利用 TTCフ ァ イ ルは、複
数の別々の フ ォ ン ト を持っ てい ます。 各フ ォ ン ト を利用す る にはその適切な
名前を与え ます。 ただ し 、 TTC フ ァ イ ル内がど のフ ォ ン ト を持っ てい る か を
知 ら ない場合には、 各フ ォ ン ト を番号で指定す る こ と も 可能です。 具体的に
は、 コ ロ ン と フ ォ ン ト 番号 (0 か ら 始ま る ) を追加す る こ と に よ り 指定 し ま
す。 番号が 0 の場合には省略可能です。 た と えば、 TTC フ ァ イ ル msgothic.ttc は複数の
フ ォ ン ト を持っ てお り 、 load_font( ) で下記の よ う に指定す る こ と がで き ます (各行内の
フ ォ ン ト 名は等価) :
msgothic:0
msgothic:1
msgothic:2
MS Gothic
MS PGothic
MS UI Gothic
msgothic:
ただ し 、 msgothic (接尾辞をつけない) はフ ォ ン ト 名 と し ては扱われません。 なぜな ら そ
れではフ ォ ン ト を一意に特定で き ないか ら です。 フ ォ ン ト 名の別名 (116 ページ 「フ ォ ン
ト デー タ の情報源」 参照) を TTC 番号 と 組み合わせて用い る こ と も 可能です。 指定 さ れ
た番号の フ ォ ン ト が見つか ら ない と き には、 関数呼び出 し は失敗 し ます。
TTC フ ォ ン ト フ ァ イ ルは 1 回のみ設定 し なければな り ません。 TTC フ ァ イ ル内のすべ
ての番号づけ ら れた フ ォ ン ト は自動的に発見 さ れます。 以下に、 msgothic.ttc 内のすべて
の番号づけ ら れた フ ォ ン ト を設定す る ために充分な コ ー ド を示 し ます (116 ページ 「5.4.3
フ ォ ン ト を検索」 参照) :
p.set_parameter("FontOutline", "msgothic=msgothic.ttc");
6.5.3 EUDC ・ SING フ ォ ン ト で外字キ ャ ラ ク タ を利用
PDFlib は、日中韓テ キ ス ト のためのカ ス タ ム外字キ ャ ラ ク タ を利用で き る Windows EUDC
(エン ド ユーザー定義キ ャ ラ ク タ 、 *.tte) ・ SING フ ォ ン ト (*.gai) に対応 し てい ます。 最 も
便利なのは、カ ス タ ム キ ャ ラ ク タ を持っ た フ ォ ン ト を予備フ ォ ン ト 機構で他の フ ォ ン ト へ
統合す る こ と で し ょ う 。 外字キ ャ ラ ク タ は多 く の場合、 EUDC ま たは SING フ ォ ン ト で提
供 さ れます。 あ る いは、 外字キ ャ ラ ク タ を Type 3 フ ォ ン ト と し て与え る こ と も で き ます
が、 こ れにはプ ロ グ ラ ミ ン グ工数が よ り 多 く 必要にな り ます。
158
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
予備 フ ォ ン ト で外字キ ャ ラ ク タ を利用 通常、 外字キ ャ ラ ク タ は Windows EUDC ま たは
SING グ リ フ レ ッ ト か ら 持っ て来ますが、fallbackfonts オプシ ョ ンはあ ら ゆ る 種類の フ ォ ン
ト を受け付け ます。 ですので こ の方法は外字キ ャ ラ ク タ に限 ら ず、 あ ら ゆ る 種類の記号に
対 し て利用す る こ と がで き ます (例 : 企業 ロ ゴが別フ ォ ン ト 内にあ る 場合)。 fallbackfonts
オプシ ョ ンに対 し て下記の フ ォ ン ト 読み込みオプシ ョ ン を用いれば、読み込んだ フ ォ ン ト
に対 し て、 EUDC フ ォ ン ト か ら のユーザー定義 (外字) キ ャ ラ ク タ を追加す る こ と がで き
ます :
fallbackfonts={
{fontname=EUDC encoding=unicode forcechars=U+E000 fontsize=140% textrise=-20%}
}
ベース フ ォ ン ト をひ と たび こ の予備フ ォ ン ト 設定で読み込めば、テ キ ス ト 内の EUDC キ ャ
ラ ク タ は、 フ ォ ン ト を変え る 必要な く 使 う こ と がで き ます。
SING フ ォ ン ト の場合、 Unicode 値は PDFlib に よ っ て自動的に決定 さ れますので、 与え
る 必要はあ り ません :
fallbackfonts={
{fontname=PDFlibWing encoding=unicode forcechars=gaiji}
}
EUDC フ ォ ン ト を用意 Windows で得 ら れ る EUDC エデ ィ タ を利用す る と 、PDFlib で使 う
カ ス タ ム キ ャ ラ ク タ を作成す る こ と がで き ます。 以下の よ う に操作 し ます :
> eudcedit.exe を使っ て、1 個ない し 複数のカ ス タ ム キ ャ ラ ク タ を、望む Unicode 位置に作
成 し ます。
> デ ィ レ ク ト リ \Windows\fonts 内で EUDC.TTE フ ァ イ ルを見つけ、それを ど こ か別のデ ィ
レ ク ト リ へ複製 し ます。 こ の フ ァ イ ルは Windows Explorer では不可視ですので、 DOS
ボ ッ ク ス内で dir ・ copy コ マ ン ド を用いて フ ァ イ ルを見つけ ます。 そ し て こ の フ ォ ン ト
を PDFlib で利用で き る よ う 、 116 ページ 「5.4.3 フ ォ ン ト を検索」 で示 し た方式のいず
れかで設定 し ます :
p.set_parameter("FontOutline", "EUDC=EUDC.TTE");
p.set_parameter("SearchPath", "...ディレクトリ名...");
ま たは EUDC.TTE を カ レ ン ト デ ィ レ ク ト リ 内に置 き ます。
あ る いは、 こ の よ う に明示的に フ ォ ン ト フ ァ イ ル設定をす る のではな く 、 下記の関数
呼び出 し を用いて、 Windows デ ィ レ ク ト リ か ら 直接フ ォ ン ト フ ァ イ ルを設定す る こ と
も で き ます。 こ う す る と 、 Windows 内で用い ら れてい る カ レ ン ト EUDC フ ォ ン ト をつ
ねに利用す る こ と にな り ます :
p.set_parameter("FontOutline", "EUDC=C:\Windows\fonts\EUDC.TTE");
> EUDC フ ォ ン ト を、任意のベース フ ォ ン ト に対 し て、先述の よ う にfallbackfontsオプシ ョ
ン を用いて統合 し ます。 フ ォ ン ト を直接利用 し たい場合は、 下記の呼び出 し を用いて
フ ォ ン ト を通常どお り に PDFlib へ読み込みます :
font = p.load_font("EUDC", "unicode", "");
そ し て最初の ス テ ッ プで選んだ Unicode 値を与えて キ ャ ラ ク タ を出力 し ます。
6.5.4 OpenType レ イ ア ウ ト 機能 と 高度な日中韓テキス ト 出力
142 ページ 「6.3 OpenType レ イ ア ウ ト 機能」 で解説 し た よ う に、 PDFlib は OpenType ・
TrueType フ ォ ン ト 内の高度な タ イ ポグ ラ フ ィ レ イ ア ウ ト テーブルに対応 し てい ます。 た
6.5 日本語 ・ 中国語 ・ 韓国語テキス ト 出力
159
と えば、 OpenType 機能を用いて、 欧文グ リ フ のプ ロ ポーシ ョ ナル幅か半角かいずれかの
字体を選択 し た り 、 異体字を選択 し た り す る こ と が可能です。 表 6.7 に、 日中韓テ キ ス ト
出力のための OpenType 機能を挙げます。
vert 機能 (縦書 き ) は、 縦書 き の フ ォ ン ト (すなわち、 load_font( ) に vertical オプシ ョ
ン を与え ていた場合) に対 し ては自動的に有効にな り 、 横書 き の フ ォ ン ト に対 し ては無効
にな り ます。
表 6.7 日本語 ・ 中国語 ・ 韓国語テキス ト 用対応 OpenType レ イ アウ ト 機能一覧 ( こ れに加え て表 6.1 に、 一般的利
用のための OpenType レ イ アウ ト 機能を挙げています)
キー
ワー
ド
名前
説明
expt
エキスパー ト 字形
JIS78 字 と 同様、 この機能は、 標準の和文字形を、 対応する、 タ イ ポグ ラ フ ァ ーが
望む字形へ置き換え ます。
fwid
全角
他の幅に設定 さ れたグ リ フ を、 全角 (たいていは em) に設定 さ れたグ リ フへ置き
換え。 こ れは欧文キ ャ ラ ク タ や さ ま ざ ま な記号を含む可能性があ り ます。
hkna
横組み用仮名
標準の仮名を、 横書き専用に特にデザイ ン さ れた字形へ置き換え。
hngl
ハングル
韓文漢字キ ャ ラ ク タ を、 対応するハングル (音素) キ ャ ラ ク タ へ置き換え。
hojo
補助漢字字形 (JIS
X 0212-1990)
JIS X 0213:2004 字形がデ フ ォ ル ト と し てエ ン コ ー ド さ れている場合に、 JIS X 02121990 字形 (「補助漢字」 と も いいます) を利用。
hwid
半角
プ ロポーシ ョ ナル幅の、 ま たは em の半分以外の等幅のグ リ フ を、 em の半分 (en)
の幅のグ リ フへ置き換え。
ital
イタリック
ローマ ン体のグ リ フ を、 対応する イ タ リ ッ ク体のグ リ フ へ置き換え。
jp04
JIS2004 字形
(nlck 機能のサブ セ ッ ト ) JIS X 0213:2004 グ リ フ を利用。
jp78
JIS78 字形
デ フ ォル ト (JIS90) の和文グ リ フ を、 対応する JIS C 6226-1978 (JIS78) の字形へ
置き換え。
jp83
JIS83 字形
デ フ ォル ト (JIS90) の和文グ リ フ を、 対応する JIS X 0208-1983 (JIS83) の字形へ
置き換え。
jp90
JIS90 字形
JIS78 または JIS83 の和文グ リ フ を、 対応する JIS X 0208-1990 (JIS90) の字形へ
置き換え。
locl
ロー カ ラ イ ズ字形
グ リ フのロー カ ラ イ ズ さ れた字形で、 デ フ ォ ル ト 字形を置き換え る こ と を可能に し
ます。 こ の機能は script ・ language オプ シ ョ ン を必要 と し ます。
nalt
修飾字形
デ フ ォル ト のグ リ フ を、 さ ま ざ ま な表記字形へ置き換え (白丸囲み ・ 黒丸囲み ・ 四
角囲み ・ 括弧付き ・ 菱形囲み ・ 角丸四角囲み等)。
nlck
国語審議会漢字字
形
日本の国語審議会 (NLC) が多 く の JIS キ ャ ラ ク タ に対 し て 2000 年に制定 し た新
たなグ リ フ形状を利用。
pkna
プ ロポーシ ョ ナル
仮名
等幅 (半角ま たは全角) に設定 さ れた仮名および仮名関連のグ リ フ を、 プ ロポー
シ ョ ナルなグ リ フへ置き換え。
pwid
プ ロポーシ ョ ナル
グリ フ
等幅 (通常、 全角ま たは em の半分) に設定 さ れたグ リ フ を、 プ ロポーシ ョ ナルな
字送 り のグ リ フ へ置き換え。
qwid
4 分の 1 幅
他の幅のグ リ フ を、 em の 4 分の 1 (en の半分) の幅に設定 さ れたグ リ フへ置き換
え。
ruby
ルビ表記字形
デ フ ォル ト の仮名グ リ フ を、 (通常、 上付き に さ れた) ルビ用にデザイ ン さ れた、
よ り 小 さ いグ リ フへ置き換え。
smpl
簡体字
和文漢字または中文繁体字を、 対応する簡体字へ置き換え。
160
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 6.7 日本語 ・ 中国語 ・ 韓国語テキス ト 用対応 OpenType レ イ アウ ト 機能一覧 ( こ れに加え て表 6.1 に、 一般的利
用のための OpenType レ イ アウ ト 機能を挙げています)
キー
ワー
ド
名前
説明
tnam
名前旧字体
和文新字体を、 対応する旧字体へ置き換え。 こ れは trad 機能 と 等価ですが、 ただ
し 個人の名前における使用が適切であ る と 認め ら れる旧字体に限られます。
trad
旧字体
和文漢字または中文簡体字を、 対応する旧字体 / 繁体字へ置き換え。
twid
3 分の 1 幅
他の幅のグ リ フ を、 em の 3 分の 1 の幅に設定 さ れたグ リ フへ置き換え。
vert
縦組み
デ フ ォル ト の字形を、 縦書き用に調整 さ れた異体字へ置き換え。
vkna
縦組み用仮名
標準の仮名を、 縦書き専用に特にデザイ ン さ れた字形へ置き換え。
vrt2
縦組み異体字 ・ 回
転
(vrt2 機能のサブ セ ッ ト であ る vert 機能を上書き し ます) 等幅 (半角 ・ 全角 ・ 4 分
の 1 幅のいずれか) ま たはプ ロポーシ ョ ナル幅 (多 く は欧文ま たはカ タ カ ナ) のグ
リ フ を、 縦書き に適 し た字形へ置き換え (すなわち、 90°時計回 り に回転)。
6.5 日本語 ・ 中国語 ・ 韓国語テキス ト 出力
161
162
第 6 章 : テキス ト 出力 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
7 画像 ・ PDF ページの取 り 込み
PDFlib は、 ラ ス タ 画像や既存 PDF 文書内ページ を取 り 込んでページ上に配置す る ための
さ ま ざ ま な機能を提供 し ます。 こ の章では、 ラ ス タ 画像の取 り 扱いや既存 PDF 文書内ペー
ジの取 り 込みに関す る 詳細を解説 し ます。 ま た、 画像や PDF ページ を出力ページ上に配
置す る 方法については 176 ページ 「7.3 画像 と 取 り 込み PDF ページの配置」 を参照 し て く
だ さ い。
ク ッ ク ブ ッ ク 画像の諸側面に関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの images カ テ ゴ リ にあ り ま
す。
7.1 ラ ス タ 画像の取 り 込み
7.1.1 基本的な画像処理
PDFlib で ラ ス タ 画像を貼 り 付け る のは簡単です。 まず、 画像パ ラ メ タ 群の簡単な解析を行
う PDFlib 関数で画像を開 く 必要があ り ます。 その load_image( ) 関数は、 画像記述子の役
割をす る ハン ド ルを返 し ます。 こ のハン ド ルを使っ て fit_image( ) を呼び出す こ と がで き
る ので、 その際に位置 ・ 縮尺パ ラ メ タ も 与え ます。 具体的には以下の よ う にな り ます。
image = p.load_image("auto", "image.jpg", "");
if (image == -1)
throw new Exception("エラー:" + p.get_errmsg());
p.fit_image(image, 0.0, 0.0, "");
p.close_image(image);
fit_image( ) の最後の引数は、 画像の位置 ・ 縮尺 ・ 回転を指定で き る さ ま ざ ま なオプシ ョ ン
を持たせ る こ と ので き る オプシ ョ ン リ ス ト です。 こ のオプシ ョ ン群については 176 ページ
「7.3 画像 と 取 り 込み PDF ページの配置」 で詳 し く 説明 し ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの images/starter_image ト ピ ッ ク にあ り ます。
画像デー タ の再利用 ラ ス タ 画像の反復利用のための重要な PDF 最適化技法に PDFlib は
対応 し てい ます。 複数のページに同 じ ロ ゴや背景を使 う レ イ ア ウ ト を考え てみま し ょ う 。
その よ う な場合には画像デー タ 本体は一度 し か PDF 内に取 り 込まずに、 その画像を使 う
各ページか ら そ こ への参照だけ を生成す る こ と が可能です。画像フ ァ イ ルを一度読み込ん
でおいて、各ページに ロ ゴや背景を配置す る たびに fit_image( ) を呼び出せば よ いのです。
複数のページにその画像を配置 し た り 、同 じ 画像で も 貼 り 付け る たびに縮尺を変えた り す
る こ と も で き ます (画像を閉 じ ていない限 り ) 。 画像の容量や使用回数に よ っ ては こ の技
法は顕著な容量節減を も た ら すで し ょ う 。
拡縮 と dpi 計算 取 り 込んだ画像のピ ク セル数を PDFlib が変え る こ と はあ り ません。 拡
縮す る と 画像の ピ ク セルは膨 ら んだ り 縮んだ り し ますが、ダ ウ ンサンプ リ ン グが行われ る
こ と はあ り ません (画像の ピ ク セル数はいつ も 同 じ ま ま です)。 縮尺が 1 な ら ば 1 ピ ク セ
ルの大 き さ はユーザー座標の 1 単位 と 同 じ にな り ます。 いいかえれば、 ユーザー座標系が
拡縮 さ れていなければ画像はその元の解像度で (その画像が解像度情報を持っ ていなけれ
ば 72 dpi で) 取 り 込まれます (デフ ォ ル ト では 1 イ ンチが 72 単位なので)。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの images/image_dimensions ト ピ ッ ク にあ り ます。そ
こ に、 画像の寸法を得る方法や、 それを さ ま ざ ま な大き さ で貼る方法を示 し てあ り ます。
7.1 ラ ス タ 画像の取 り 込み
163
取 り 込み画像の色空間 load_image( ) で与え ら れたオプシ ョ ンに従っ て ICC プ ロ フ ァ イ
ルの追加 ・ 削除を し た り ス ポ ッ ト カ ラ ーを適用 し た り す る 場合を除いて、 PDFlib は一般
に、 取 り 込んだ画像の元の色空間を保持 し よ う と し ます。 し か し 、 まれに こ れが不可能な
組み合わせがあ り ます。 その一例 と し て、 TIFF におけ る YCbCr は RGB に変換 さ れます。
PDFlib は、 RGB と CMYK と の間の変換は一切行い ません。 その よ う な変換が必要な と
き は、 画像を PDFlib に取 り 込む前にその画像デー タ に適用 し てお く 必要があ り ます。
複数ページ画像 PDFlib は、 複数の画像を持つ GIF ・ TIFF ・ JBIG2 画像に対応 し てい ま
す。 こ れを複数ページ画像フ ァ イ ル と も いい ます。 複数ページ画像を利用する には、 load_
image( ) で page オプシ ョ ン を用い ます :
image = p.load_image("tiff", filename, "page=2");
こ の page オプシ ョ ンは、 複数画像フ ァ イ ルが利用 さ れ る こ と を示 し 、 利用 し たい画像の
番号を指定 し ます。 先頭画像の番号は 1 です。 こ のオプシ ョ ンは、 load_image( ) が フ ァ イ
ル内で も う 画像が得 ら れない こ と を示す -1 を返すま で値を増や し てい く こ と がで き ます。
ク ッ ク ブ ッ ク 複数画像TIFF フ ァ イル内のすべての画像を複数ページ PDF フ ァ イルへ変換する完全な コ ー
ド サン プルが ク ッ ク ブ ッ クの images/multi_page_tiff ト ピ ッ ク にあ り ます。
イ ン ラ イ ン画像 再利用可能画像は Image XObject と し て PDF 出力へ書 き 出 さ れますが、
こ れに対 し て イ ン ラ イ ン画像は各 コ ン テ ン ト ス ト リ ーム (ページかパ タ ーンかテ ンプ レー
ト かグ リ フ定義) の中に直接書 き 込ま れ ます。 こ れに よ り 若干の容量が節約で き ますが、
PDF リ フ ァ レ ン ス中の推奨に従い、 容量の小 さ な画像デー タ (4 KB ま で) での利用に留
め る べ き です。 イ ン ラ イ ン画像の主用途は Type 3 フ ォ ン ト のビ ッ ト マ ッ プグ リ フ定義で
す。
イ ン ラ イ ン画像を生成す る には load_image( ) イ ン タ フ ェース で inline オプシ ョ ン を与
え ます。 イ ン ラ イ ン画像の再利用はで き ません。 すなわちそのハン ド ルを画像ハン ド ル と
し て呼び出 し に与え てはいけ ません。 そのため、 inline オプシ ョ ンが与え ら れ る と load_
image( ) の内部動作は以下 と 等価にな り ます。
p.fit_image(image, 0, 0, "");
p.close_image(image);
イ ン ラ イ ン画像は、 imagetype=ccitt ・ jpeg ・ raw でのみ対応 し てい ます。 他の種類の画像
では、 inline オプシ ョ ンは静かに無視 さ れます。
OPI 対応 画像を読み込む際には、 OPI (Open Prepress Interface) バージ ョ ン 1.3 ま たは
2.0 に従っ た追加の情報を、 load_image( ) への呼び出 し で与え る こ と がで き ます。 PDFlib
は、 すべての標準 OPI 1.3 ま たは 2.0 PostScript コ メ ン ト (対応す る PDF キーワー ド では
あ り ません!) をオプシ ョ ン と し て受け付け、 その与え ら れた OPI 情報を、 一切変更を加
えずに生成 PDF 出力へパス スルー し ます。 下記の例では、 OPI 情報を画像に添付 し てい
ます :
String optlist13 =
"OPI-1.3 { ALDImageFilename bigfile.tif " +
"ALDImageDimensions {400 561} " +
"ALDImageCropRect {10 10 390 550} " +
"ALDImagePosition {10 10 10 540 390 540 390 10} }";
image = p.load_image("tiff", filename, optlist13);
164
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
注 Helios EtherShare に内蔵 さ れている ものな どい く つかの OPI サーバは、PDF の画像 XObject
に対する OPI 処理を正 し く 実装 し ていません。 PDFlib はデ フ ォル ト では画像 XObject を生
成 し ますが、 このよ う な場合には、 load_image( ) に template オプ シ ョ ン を与え る こ と で
フ ォ ーム XObject の生成を強制する こ と がで き ます。
画像内の XMP メ タ デー タ 画像フ ァ イ ルは XMP メ タ デー タ を含んでい る こ と があ り ま
す。 PDFlib はデフ ォ ル ト で、 TIFF ・ JPEG ・ JPEG 2000 形式の画像に対す る 画像 メ タ デー
タ に対応 し ます。 こ の XMP メ タ デー タ は、 出力 PDF 文書内の生成画像に添付あれます。
画像の メ タ デー タ は通常、 保持 し てお く こ と が推奨 さ れ ますが、 出力フ ァ イ ルサ イ ズ
を抑え る ために無効化す る こ と も 可能です。 load_image( ) の下記のオプシ ョ ン を用い る
と 、 取 り 込み画像内に XMP メ タ デー タ があ っ た と き にはそれを破棄 し ます :
metadata={keepxmp=false}
無効な XMP があ る と 画像は読み込まれませんので、 上記のオプシ ョ ン リ ス ト は、 無効な
XMP を回避す る ために利用す る こ と も で き ます。
7.1.2 対応画像 フ ァ イル形式
以下に述べ る 画像フ ァ イ ル形式を PDFlib は取 り 扱い ます。 デフ ォ ル ト では PDFlib は、 圧
縮 さ れた画像デー タ については可能な限 り 無変更の ま ま PDF 出力に送 り ます。 なぜな ら 、
よ く 利用 さ れ る 画像フ ァ イ ル形式で用い ら れ る 圧縮方式の多 く に PDF は標準対応 し てい
る か ら です。 こ の技法 (以下の解説では 「パススルーモー ド 」 と 呼びます) では画像デー
タ を展開 し て ま た再圧縮す る 必要がないため、 画像の取 り 込みが非常に速 く な り ます。 し
か し こ のモー ド では圧縮画像デー タ の整合性を PDFlib が検査す る こ と はで き ません。 画
像デー タ が不完全だっ た り 壊れていた り す る と 、 PDF 文書を Acrobat で利用す る 時にエ
ラ ーや警告の メ ッ セージが出ます (た と えば 「Read less image data than expected」)。 パ ス
スルーモー ド は、 load_image( ) の passthrough オプシ ョ ンで制御す る こ と がで き ます。
画像フ ァ イ ルの取 り 込みが不成功の時は load_image( ) はエ ラ ー コ ー ド を返 し ます。 そ
の画像の失敗について も っ と 詳 し く 知 る 必要があ る 場合には、 get_errmsg( ) を呼び出 し て
詳 し いエ ラ ー メ ッ セージ を取得 し ます。
PNG 画像 あ ら ゆ る 種類の PNG 画像 (ISO 15948) に PDFlib は対応 し てい ます。 PNG 画
像は多 く の場合パ ス ス ルーモー ド で処理 さ れ ます。 PNG 画像が透過情報を持っ てい る 場
合、 その透過は生成 PDF 内で保たれます (168 ページ 「7.1.4 画像マ ス ク と 透過」 参照)。
JPEG 画像 JPEG 画像 (ISO 10918-1) は決 し て圧縮 さ れ ません。 ただ し その種類に よ っ
ては、 Acrobat におけ る 適切な表示のために変換が必要な場合があ り ます。 PDFlib は、 あ
る 種の JPEG 画像に対 し て自動的に変換を適用 し ます。し か し 変換の制御は、load_image( )
の passthrough オプシ ョ ンで行 う こ と も で き ます (変換は、 ピ ク セルの数ま たは画像の色
を変え ません)。 以下の種類の JPEG 画像圧縮に PDFlib は対応 し てい ます。
> グ レース ケール ・ RGB (通常は YCbCr エン コ ー ド さ れてい る ) ・ CMYK カ ラ ー。
> ベース ラ イ ン JPEG 圧縮。 JPEG 画像の圧倒的大多数は こ の種類です。
> プ ロ グ レ ッ シブ JPEG 圧縮。
JPEG 画像は何種類かの フ ァ イ ル形式に納め る こ と がで き ます。 よ く 利用 さ れ る あ ら ゆ る
JPEG フ ァ イ ル形式に PDFlib は対応 し てお り 、 ま た、 以下の種類の中か ら 解像度情報を読
み取 り ます。
> JFIF。 さ ま ざ ま な画像処理アプ リ ケーシ ョ ンに よ っ て生成 さ れます。
> Adobe Photoshop な ど の Adobe アプ リ ケーシ ョ ンに よ っ て出力 さ れ る JPEG フ ァ イ ル。
Photoshop 由来の CMYK の JPEG フ ァ イ ルについては、正 し く 処理す る ために必要な特
7.1 ラ ス タ 画像の取 り 込み
165
別の動作を PDFlib は行い ます。 ま た PDFlib は、 Adobe Photoshop で作成 さ れた JPEG
画像か ら ク リ ッ ピ ン グパ ス を読み取 り ます。
多 く のデジ タ ルカ メ ラ が生成す る EXIF 形式の JPEG 画像は、sRGB 画像 と し て扱われます
ので、画像には sRGB ICC プ ロ フ ァ イ ルが添付 さ れます。 ただ し 、honoriccprofile オプシ ョ
ン を false に し てい る か、 あ る いは画像に iccprofile オプシ ョ ンで他の ICC プ ロ フ ァ イ ルを
割 り 当ててい る 場合は こ の限 り ではあ り ません。
JPEG 2000 画像 JPEG 2000 画像 (ISO 15444-2) には PDF 1.5 以上が必要で、 つねにパ
ス スルーモー ド で処理 さ れます。PDFlib に よ る JPEG 2000 画像への対応は以下の と お り で
す。
> JP2・JPX ベース ラ イ ン画像 (通常 *.jp2 ま たは *.jpf) に対応 し てい ます。ただ し 下記の色
空間条件に従 う 必要があ り ます。 すべての有効な色深度値に対応 し てい ます。
次の色空間に対応 し てい ま す : sRGB ・ sRGB グ レー ・ ROMM-RGB ・ sYCC ・ e-sRGB ・
e-sYCC ・ CIELab ・ ICC ベース の色空間群 (制限 さ れた、 ま たは完全な ICC プ ロ フ ァ イ
ル) ・ CMYK。 PDFlib は、 JPEG 2000 画像フ ァ イ ル内の元の色空間に変更を加え ません。
> 1 個・3 個・4 個の色要素を持つ、JPX ラ ッ パのない生の JPEG 2000 コ ー ド ス ト リ ーム( し
ば し ば *.j2k) に対応 し てい ます。
> ソ フ ト マ ス ク を持つ画像は、 mask オプシ ョ ン を用いて、 他の画像にそのマ ス ク を適用
さ せ る こ と がで き ます。
> 外部 ICC プ ロ フ ァ イ ルは JPEG 2000 画像には適用で き ません。すなわち、iccprofile オプ
シ ョ ンは用い る こ と がで き ません。 JPEG 2000 画像が持つ ICC プ ロ フ ァ イ ルはつねに
保持 さ れます。 すなわち、 honoriccprofile オプシ ョ ンはつねに true です。
JBIG2 画像 PDFlib は、 単ページ ・ 複数ページの JBIG2 画像 (ISO 14492) に対応 し てい
ます。 JBIG2 画像はつねに単色ピ ク セルデー タ を内容 と し て持ち、 PDF 1.4 以上を必要 と
し ます。
JBIG2 圧縮の性質か ら 、複数ページ JBIG2 ス ト リ ーム内のい く つかのページが同一のグ
ロ ーバルセグ メ ン ト を参照 し てい る 場合があ り ます。複数ページ JBIG2 ス ト リ ームの 1 つ
ない し 複数のページが変換 さ れ る 際、 グ ロ ーバルセグ メ ン ト は、 生成 PDF 画像間で共用
で き ます。 load_image( ) への呼び出 し は互いに独立ですので、 あ ら か じ め PDFlib に、 同
一 JBIG2 ス ト リ ームか ら 複数ページ を変換す る と 知 ら せてお く 必要があ り ます。 こ れは下
記の よ う に行い ます :
> 先頭ページ を読み込む際に、すべてのグ ロ ーバルセグ メ ン ト をPDFへ複製 し ます。load_
image( ) に対 し て下記のオプシ ョ ン リ ス ト を用い ます :
page=1 copyglobals=all
> 同一 JBIG2 ス ト リ ームか ら 、以降のページ を読み込む際に、ページ 1 に対す る 画像ハン
ド ル <N> を与え て、 ページ 1 と と も に複製 さ れた グ ロ ーバルセグ メ ン ト への参照を
PDFlibが生成で き る よ う にす る 必要があ り ます。load_image( )に対 し て下記のオプシ ョ
ン リ ス ト を用い ます :
page=2 imagehandle=<N>
ク ラ イ ア ン ト アプ リ ケーシ ョ ン側では必ず、同一 JBIG2 画像ス ト リ ームか ら 抽出 さ れた複
数ページに対 し てのみ こ の copyglobals/imagehandle 機構が適用 さ れ る よ う にす る 必要が
あ り ます。 copyglobals オプシ ョ ンがない場合は、 PDFlib は自動的にカ レ ン ト ページに対
す る 必要デー タ をすべて複製 し ます。
166
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
GIF 画像 PDFlib は、 ピ ク セルデー タ が イ ン タ レース さ れてい る も の と さ れていない も の
の両方の、 あ ら ゆ る パレ ッ ト サ イ ズの、 あ ら ゆ る 種類の GIF (具体的には GIF 87a ・ 89a)
に対応 し てい ます。 GIF 画像はつねに Flate 圧縮で再圧縮 さ れます。
TIFF 画像 PDFlib は、 ほ と ん どすべての種類の TIFF 画像を取 り 込みます :
> 圧縮方式 : 非圧縮 ・ CCITT (グループ 3 ・ グループ 4 ・ RLE) ・ ZIP (= Flate) ・ PackBits
(= RunLength) ・ LZW ・ (旧方式 ・ 新方式) JPEG に加え、 い く つかの まれな圧縮方式。
> 色 : 単色 ・ グ レース ケール ・ RGB ・ CMYK ・ CIELab ・ YCbCr 画像。
> 複数の画像を含んだ TIFF フ ァ イ ル (164 ページ 「 複数ページ画像」 参照)。
> 色深度はカ ラ ーサンプルあ た り 1 ・ 2 ・ 4 ・ 8 ・ 16 ビ ッ ト のいずれかでなければな り ませ
ん。 PDF 1.5 モー ド では 16 ビ ッ ト 色深度はたいていの場合パ ス スルーモー ド で保持 さ
れますが、 あ る 種の画像フ ァ イ ル ( リ ト ルエンデ ィ ア ン /Intel バ イ ト 順序の ZIP 圧縮、
16 ビ ッ ト パレ ッ ト 画像) については 8 ビ ッ ト に減色 さ れます。
> TIFF 画像内のアルフ ァ チ ャ ン ネルを取 り 込み可能です (168 ページ 「7.1.4 画像マ ス ク
と 透過」 参照)。
PDFlib は Orientation タ グ を完全に解釈 し ます。 Orientation タ グ と は、 画像の望ま し い向
き を指定す る も ので、 TIFF フ ァ イ ルのな かには こ れ を含む も のが あ り ま す。 PDFlib が
Orientation タ グ を無視す る よ う (多 く のアプ リ ケーシ ョ ン同様) に指示す る こ と も 可能
で、 そのためには ignoreorientation オプシ ョ ン を true に設定 し ます。
PDFlib は、ignoreclippingpath オプシ ョ ンが設定 さ れていない限 り 、Adobe Photoshop お
よ び互換 ソ フ ト ウ ェ アで作成 さ れた TIFF 画像内の ク リ ッ ピ ン グパ ス に対応 し ます。
TIFF のい く つかの機能 (た と えば ス ポ ッ ト カ ラ ー) や、 あ る 種の機能の組み合わせ
(た と えば CMYK 画像 と マ ス ク ) には対応 し てい ません。
BMP 画像 BMP 画像はパ ス スルーモー ド では処理で き ません。以下の種類の BMP 画像に
PDFlib は対応 し てい ます。
> BMP バージ ョ ン 2 ・ 3。
> 色深度は コ ン ポーネ ン ト あ た り 1・4・8 ビ ッ ト 。3 × 8 = 24 ビ ッ ト の TrueColor を含みま
す。 16 ビ ッ ト 画像は 5+5+5 プ ラ ス未使用 1 ビ ッ ト と し て扱われます。 32 ビ ッ ト 画像は
3 × 8 ビ ッ ト 画像 と し て扱われます (残 り の 8 ビ ッ ト は無視 さ れます)。
> 単色か RGB カ ラ ー ( イ ンデ ッ ク ス ・ 直接)。
> 非圧縮 と 4 ビ ッ ト ・ 8 ビ ッ ト RLE 圧縮。
> ピ ク セルがボ ト ム ア ッ プ順で格納 さ れてい る 場合 PDFlib は画像を反転 さ せません ( こ
の BMP の機能はめっ たに使われず、 アプ リ ケーシ ョ ンに よ っ て異な っ た解釈を さ れま
す)。
CCITT 画像 グループ 3 ・ グループ 4 の FAX 圧縮 さ れた画像デー タ はつねにパ ス スルー
モー ド で処理 さ れます。 こ の形式は実は生の CCITT 圧縮 さ れた画像デー タ と い う 意味で
あ り 、 CCITT 圧縮を用いた TIFF フ ァ イ ル と い う 意味ではない こ と に注意 し て く だ さ い。
生の CCITT 圧縮画像フ ァ イ ルはエン ド ユーザーアプ リ ケーシ ョ ン ではふつ う 対応 し てお
ら ず、 こ れを生成で き る のは FAX 関係の ソ フ ト ウ ェ アだけです。 PDFlib は CCITT 画像を
分析す る 能力 を 持 た な い の で、 すべ て の画像関連パ ラ メ タ は ク ラ イ ア ン ト か ら load_
image( ) に渡す必要があ り ます。
RAW デー タ 非圧縮の (RAW) 画像デー タ はい く つかの特殊な応用では有用で し ょ う 。
画像の種類は色要素の数か ら 推測で き ます。 1 要素な ら グ レース ケール画像、 3 要素な ら
RGB 画像、 4 要素な ら CMYK 画像であ る こ と を それぞれ示唆 し てい ます。
7.1 ラ ス タ 画像の取 り 込み
167
7.1.3 ク リ ッ ピ ン グパス
PDFlib は、 Adobe Photoshop で作成 さ れた TIFF ・ JPEG 画像の中の ク リ ッ ピ ン グパ ス に対
応 し てい ます。1 つの画像フ ァ イ ルには、複数の名前付 き パ ス を含む場合があ り ます。load_
image( ) の clippingpathname オプシ ョ ン を使えば、名前付 き パ ス の う ちの 1 つを選ぶ こ と
がで き 、 それが ク リ ッ ピ ン グパス と し て使われます。 す る と 画像は、 ク リ ッ ピ ン グパ ス の
内部だけが可視 と な り 、 それ以外の部分は不可視にな り ます。 こ れは背景 と 前景を分離 し
た り 、 画像の不要部分を除去 し た り す る のに有用です。
あ る いは、画像フ ァ イ ルはデフ ォ ル ト ク リ ッ ピ ン グパス を含む場合があ り ます。PDFlib
は、 画像フ ァ イ ル内に ク リ ッ ピ ン グパス を見つけた場合、 それを自動的に画像に適用 し ま
す (図 7.1 参照) 。 デフ ォ ル ト ク リ ッ ピ ン グパ ス が適用 さ れない よ う にす る には、 load_
image( ) で honorclippingpath オプシ ョ ン を false に設定 し ます。 同 じ 画像の イ ン ス タ ン ス
が複数あ っ て、 し か も その う ち一部の イ ン ス タ ン ス に し か ク リ ッ ピ ン グパ ス を適用 し た く
ない と き は、 fit_image( ) に ignoreclippingpath オプシ ョ ン を与え て ク リ ッ ピ ン グパ ス を無
効にす る こ と がで き ます。 ク リ ッ ピ ン グパス が適用 さ れ る と 、 画像の配置やはめ込みに関
す る すべての計算は、 切 り 抜かれた画像の外接枠を も と に行われます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クのimages/integrated_clipping_path ト ピ ッ ク にあ り
ます。
7.1.4 画像マ ス ク と 透過
3 種類の画像内透過情報に PDFlib は対応 し てい ます : アルフ ァ チ ャ ン ネルに よ る 内在透
過、 外在透過、 画像マ ス ク です。
アル フ ァ チ ャ ン ネルに よ る内在透過 ラ ス タ 画像は、 部分的に透明にす る こ と も で き ま
す。 すなわち、 画像を透か し て背景が見え る よ う にす る こ と が可能です。 こ れはた と え
ば、 画像の背景を無視 し て、 前景の人物や物体だけ を見せたい と き に有用です。 透過情報
は、 別途の アル フ ァ チ ャ ン ネル内に、 あ る いは (パ レ ッ ト ベー ス の画像の場合) 透過パ
レ ッ ト 項目 と し て格納で き ます。 透過画像は、 PDF/A-1 ・ PDF/X-1 ・ PDF/X-3 では許 さ
れてい ません。 PDFlib は、 下記の画像形式の透過情報を処理 し ます :
> GIF 画像フ ァ イ ルは、 1 個の透過色値 (パレ ッ ト 項目) を持つ こ と がで き 、 PDFlib はそ
れに従い ます。
> TIFF 画像は、1 個の関連づけ ら れた アルフ ァ チ ャ ン ネルを含む こ と がで き 、PDFlib はそ
れに従い ます。 あ る いは TIFF 画像は、 関連づけ ら れていない、 名前で指定 さ れ る チ ャ
ン ネルを任意の数含む こ と も で き ます。 こ れ ら のチ ャ ン ネルは、 透過な ど の情報を伝
図 7.1
ク リ ッ ピ ングパス を利用 し て
前景 と 背景を分離
168
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
達する ために利用す る こ と がで き ます。関連づけ ら れていないチ ャ ン ネルが TIFF 画像
内に見つか っ た と き は、 PDFlib はデフ ォ ル ト では先頭チ ャ ン ネルを アルフ ァ チ ャ ン ネ
ル と し て用い ます。 し か し 、 関連づけ ら れていないアルフ ァ チ ャ ン ネルを、 その名前
を与え る こ と で明示的に選択す る こ と も 可能です :
image = p.load_image("tiff", filename, "alphachannelname={apple}");
> PNG 画像は、1 個の関連づけ ら れた アルフ ァ チ ャ ン ネルを含む こ と がで き 、PDFlib はそ
れを自動的に用い ます。
> PNG 画像は、 完全なアルフ ァ チ ャ ン ネルではな く 、 1 個の透過色値を持つ こ と も で き 、
PDFlib はそれに従い ます。複数の色値がアルフ ァ 値つき で与え ら れてい る 場合、50 パー
セ ン ト 未満のアルフ ァ 値を持つ も のの う ちの初めの 1 個が用い ら れます。
注 Photoshop では、 完全なアルフ ァ チ ャ ン ネルに加えて、 固有形式で透過背景を作成する こ
と がで き ます。 し か し PDFlib は こ の形式を理解 し ません。 こ のよ う な透過画像を PDFlib
で利用するには、 Photoshop で こ れを TIFF フ ァ イル形式で保存 し 、 その際に 「TIFF オプ
シ ョ ン」 ダ イ ア ログボ ッ ク スで 「透明部分を保持」 を選択 し ます。
場合に よ っ ては、 暗黙的な透過が画像フ ァ イ ルに含まれていて も 、 それをすべて無視 し た
い こ と も あ り ます。 PDFlib の透過対応は、 画像を読み込む際に ignoremask オプシ ョ ンで
無効化す る こ と が可能です :
image = p.load_image("tiff", filename, "ignoremask");
外在透過 外在の場合には、 2 つの段階が必要で、 ど ち ら も 画像操作を伴い ます。 第一に、
マ ス ク と し て後で使 う ためのグ レース ケール画像を 1 つ用意す る 必要があ り ます。そのた
めにはマ ス ク 画像を読み込みます。 マ ス ク を構築する には、 下記の種類の画像を使 う こ と
がで き ます :
> PNG 画像
> TIFF 画像 : マルチ ス ト リ ッ プ画像を避け る ため、 load_image( ) で nopassthrough オプ
シ ョ ン を推奨 し ます。
> RAW 画像デー タ
マ ス ク 内で ピ ク セル値が 0 (ゼ ロ ) の部分の画像は塗 ら れ、 ピ ク セル値が 0 でない部分は
背景が透けて見え ます。 ピ ク セルあ た り のビ ッ ト 数が 1 よ り 大き い場合、 中間値は前景画
像を背景にブ レ ン ド さ せて透過効果を生みます。
第二段階 と し て、 そのマ ス ク を別の画像に masked オプシ ョ ン で適用 し ます :
mask = p.load_image("png", maskfilename, "");
if (mask == -1)
throw new Exception("エラー:" + p.get_errmsg());
String optlist = "masked=" + mask;
image = p.load_image(type, filename, optlist)
if (image == -1)
throw new Exception("エラー:" + p.get_errmsg());
p.fit_image(image, x, y, "");
画像 と マ ス ク は縦横の ピ ク セル数が違っ てい る 可能性 も あ り ます。 マ ス ク は画像サ イ
ズに合わせて自動的に拡縮 さ れます。
注 場合によ っ ては PDFlib は、 マルチス ト リ ッ プの TIFF 画像を PDF 上の複数の画像に変換す
り こ と があ り 、 その場合、 マス ク はその各画像に対 し て独立にかかる こ と にな り ます。 通
常こ のよ う な こ と は意図 さ れていないので、 こ の種の画像はマス ク と し て も マス ク対象画
7.1 ラ ス タ 画像の取 り 込み
169
像 と し て も拒否 さ れます。 また、 内在の場合 と 外在の場合 と を互いに混在 さ せない こ と が
重要です。 つま り 、 透過色値を持つ画像を マス ク と し て使っ てはいけません。
注 マ ス ク は、 背景画像 と 同 じ 向き を持つ必要があ り ます。 そ う で ない と それは拒否 さ れま
す。 向きは画像フ ァ イル形式やその他の要因に依存 し ますので、 検出が困難です。 このた
め、 マス ク と 画像の両方について、 同 じ フ ァ イル形式 と 作成ソ フ ト ウ ェ ア を用いる こ と を
推奨 し ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの images/image_mask ト ピ ッ ク にあ り ます。
画像マ ス ク と ソ フ ト マ ス ク 画像マ ス ク と はビ ッ ト 深度が 1 の画像 (ビ ッ ト マ ッ プ) で
あ り 、 ゼ ロ のビ ッ ト が透過 と し て扱われます。 ページの既存内容が画像内の透過部分を通
し て見え ます。 1 のビ ッ ト の ピ ク セルはカ レ ン ト 塗 り 色で着色 さ れます。
ソ フ ト マ ス ク は、画像マ ス ク の概念を、複数ビ ッ ト のマ ス ク へ一般化 し た も のです。 こ
れは画像を、 何 ら かの既存の背景に溶け込ませます。 PDFlib は、 あ ら ゆ る 種類のシ ン グル
チ ャ ン ネル (グ レース ケール) 画像を ソ フ ト マ ス ク と し て受け付け ます。 なお、 マ ス ク と
し て使え る のは真の グ レ ー ス ケールの画像だけで あ り 、 イ ンデ ッ ク ス 付 き の (パ レ ッ ト
ベース の) 色は使え ません。 こ れは画像マ ス ク と 同 じ よ う に利用で き ます。 画像マ ス ク と
し て使え る のは以下の種類の画像です :
> PNG 画像
> TIFF 画像 (シ ン グルス ト リ ッ プで も マルチ ス ト リ ッ プで も )
> JPEG 画像 ( ソ フ ト マ ス ク と し てのみ。 後述)
> BMP。BMP 画像は他の種類の画像 と 向き が違 う こ と に注意 し て く だ さ い。そのため BMP
画像はマ ス ク と し て使 う には まず x 軸を軸 と し て反転 さ せ る 必要があ り ます。
> RAW 画像デー タ
画像マ ス ク はただ mask オプシ ョ ン をつければ開 く こ と がで き 、 希望の塗 り 色を設定 し た
後にページ上に配置す る こ と がで き ます。
mask = p.load_image("tiff", maskfilename, "mask");
p.setcolor("fill", "rgb", 1.0, 0.0, 0.0, 0.0);
if (mask != -1)
{
p.fit_image(mask, x, y, "");
}
ゼ ロ の ビ ッ ト の ピ ク セルを透過にせずに画像を着色 し たい場合は colorize オプシ ョ ン を使
う 必要があ り ます (170 ページ 「7.1.5 画像の着色」 参照)。
7.1.5 画像の着色
画像マ ス ク では画像の不透明部分が着色 さ れますが、類似機能 と し て ス ポ ッ ト カ ラ ーに よ
る 画像の着色に PDFlib は対応 し てい ます。 こ の機能は、 単色かグ レース ケールの画像で
動作 し ます。
RGB パレ ッ ト を持つ画像に関 し ては、 着色が意味を持つのは、 そのパレ ッ ト がグ レー
値だけ を持ち、 パ レ ッ ト イ ンデ ッ ク ス がグ レー値 と 等価な場合だけです。 し か し PDFlib
は こ の条件に関す る 検査は行い ません。
画像を ス ポ ッ ト カ ラ ーで着色す る には、画像を読み込む時に colorize オプシ ョ ン を与え
る 必要が あ り 、 それ と と も にその ス ポ ッ ト カ ラ ーハン ド ルを与え る 必要が あ り ま す。 ス
ポ ッ ト カ ラ ーハン ド ルはあ ら か じ め makespotcolor( ) で取得 し てお く 必要があ り ます。
p.setcolor("fillstroke", "cmyk", 1, .79, 0, 0);
spot = p.makespotcolor("PANTONE Reflex Blue CV");
170
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
String optlist = "colorize=" + spot;
image = p.load_image("tiff", "image.tif", optlist);
if (image != -1)
{
p.fit_image(image, x, y, "");
}
7.1 ラ ス タ 画像の取 り 込み
171
7.2 PDI で PDF ページ を取 り 込み
注 この節で解説するすべての関数は PDFlib+PDI を必要 と し ます。 PDF 取 り 込みラ イ ブ ラ リ
(PDI) は PDFlib 基本製品には含まれていません。PDI は PDFlib のすべての コ ンパイル済み
版に内蔵 さ れていますが、 それを利用するには PDI (または PPS。 PPS は PDI を含んでい
ます) のための ラ イ セ ン スキーが必要です。
7.2.1 PDI の機能 と 用途
PDFlib+PDI ラ イ ブ ラ リ を利用す る こ と で、 既存 PDF 文書内のページ を取 り 込む こ と がで
き ます。 PDI は PDF フ ァ イ ル形式に対す る パーサを持っ ていて、 既存 PDF 文書内のペー
ジ を PDFlib で簡単に利用で き る よ う に し ます。 概念的に、 取 り 込まれた PDF ページは取
り 込まれた TIFF や PNG の よ う な ラ ス タ 画像 と 同様に扱われます。 すなわち、 PDF 文書を
開 き 、 取 り 込むページ を選び、 それを出力ページ上に配置 し 、 取 り 込んだページに PDFlib
の変形関数を適用 し て並行移動 ・ 拡縮 ・ 回転 ・ 斜形化 さ せます。 取 り 込んだページは簡単
に新 し い内容 と 組み合わせ る こ と がで き ます。 そのためには、 取 り 込んだ PDF ページ を
出力ページ上に配置 し た後に PDFlib の任意のテ キ ス ト ・ グ ラ フ ィ ッ ク 関数を使えば よ い
のです (取 り 込んだページは新 し い内容の背景 と な る と 捉え ら れます)。 PDFlib と PDI を
活用すれば以下の よ う な課題が簡単に実現で き ます。
> 複数の PDF 文書内の複数のページ を重ね合わせ (た と えば、 既存文書に便箋を追加 し
て印刷済み用紙の よ う にす る )。
> 既存文書内に PDF 広告を配置。
> PDF のページの表示領域を切 り 抜いて、 見せた く ない要素 ( ト ン ボな ど) を取 り 除 く 。
ま たは、 ページの拡縮。
> 複数ページ を 1 枚の紙に印刷。
> 複数の PDF/X か PDF/A の文書を処理 し て、新 し い PDF/X か PDF/A の フ ァ イ ルを作 る 。
> フ ァ イ ルの PDF/X か PDF/A の出力 イ ン テ ン ト を コ ピー。
> 既存 PDF のページにテ キ ス ト (ヘ ッ ダ ・ フ ッ タ ・ ス タ ンプ ・ ページ番号な ど) や画像
(企業 ロ ゴ な ど) を追加。
> 入力文書内の全ページ を出力文書に コ ピー し て、 各ページにバー コ ー ド を配置。
> pCOS イ ン タ フ ェース を使っ て、PDF 文書の任意のプ ロ パテ ィ を取得 (231 ページ 「9 章
pCOS イ ン タ フ ェース」 参照)。
PDF の背景ページ を配置 し てそ こ に動的なデー タ を入れ込みたい場合には(た と えば メ ー
ルのマージや、 Web 上のパー ソ ナ ラ イ ズ さ れた PDF 文書や、 フ ォーム記入な ど)、 PDI を
PDFlib ブ ロ ッ ク と あわせて利用 さ れ る こ と をおすすめ し ます (275 ページ 「11 章 PPS と
PDFlib Block Plugin」 参照)。
7.2.2 PDFlib で PDI 関数 を利用
ク ッ ク ブ ッ ク PDF 取 り 込みの諸側面に関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ ク の pdf_import カ テ ゴ
リ にあ り ます。
一般的考察 重要な注意点 と し て、 PDI は実際のページ内容だけ を取 り 込みますので、 取
り 込む PDF 文書内に存在 し てい る か も し れない イ ン タ ラ ク テ ィ ブ機能 (た と えばサ ウ ン
ド ・ ムービー ・ フ ァ イ ル添付 ・ ハ イ パーテ キ ス ト リ ン ク ・ フ ォーム フ ィ ール ド ・ JavaScript ・
し お り ・ サム ネール ・ ノ ー ト ) は一切取 り 込みません。 こ う し た イ ン タ ラ ク テ ィ ブ機能は
各 PDFlib 関数で生成す る こ と がで き ます。 PDFlib ブ ロ ッ ク も ページ取 り 込み時には無視
さ れます。 タ グ付 き PDF 内の文書構造 も 、 文書を取 り 込む際には失われます。
172
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
取 り 込んだページ内の個々の要素を他の PDFlib 関数で再利用す る こ と はで き ません。
た と えば、取 り 込んだ文書内の フ ォ ン ト を他の何 ら かの内容のために再利用す る こ と は不
可能です。 必要な フ ォ ン ト はすべて PDFlib 内で設定す る 必要があ り ます。 取 り 込んだ複
数の文書が同 じ フ ォ ン ト の埋め込みフ ォ ン ト デー タ を それぞれ持っ ていた と し て も 、 フ ォ
ン ト デー タ の重複を PDI は解消 さ せません。 他方、 取 り 込んだ PDF 内で欠けてい る フ ォ
ン ト があれば、 生成 さ れ る PDF 出力フ ァ イ ル内で も その フ ォ ン ト は欠けた ま ま です。 最
適な方法 と し ては、 取 り 込む文書はな る べ く 開いた ま ま に し ておいたほ う が、 同 じ フ ォ ン
ト が何度 も 出力文書内に埋め込まれずにすみます。
取 り 込んだ PDF 文書内の色に対 し て PDI は ま っ た く 変更を加え ません。た と えば、PDF
が ICC カ ラ ープ ロ フ ァ イ ルを持っ ていればそれは出力文書内で も 保持 さ れます。
取 り 込んだ PDF のページ を出力ページ上に配置す る ために PDFlib はテ ンプ レー ト 機能
を利用 し ます。 サー ド パーテ ィ の PDF ソ フ ト ウ ェ アのなかにはテ ンプ レー ト に正 し く 対
応 し ていない も の も あ る ため、 Acrobat 以外の特定の環境では制約が存在 し ます (66 ペー
ジ 「3.2.4 テ ンプ レー ト 」 参照)。
他の PDF 文書か ら 取 り 込んだページ を含む PDFlib 生成出力は再度 PDFlib+PDI で処理
す る こ と も で き ます。
PDF ページ取 り 込みのための コ ー ド 既存 PDF 文書内のページの取 り 込みは非常に単純
な コ ー ド 構造で実現可能です。 次の コ ー ド は、 既存文書のページ を開き 、 そのページ内容
を出力 PDF 文書内に コ ピー し ます (出力 PDF 文書はあ ら か じ め開いてい る 必要があ り ま
す)。
int
String
doc, page, pageno = 1;
filename = "input.pdf";
if (p.begin_document(outfilename, "") == -1) {...}
...
doc = p.open_pdi_document(infilename, "");
if (doc == -1)
throw new Exception("エラー:" + p.get_errmsg());
page = p.open_pdi_page(doc, pageno, "");
if (page == -1)
throw new Exception("エラー:" + p.get_errmsg());
/* ダミーのページサイズ。この後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);
fit_pdi_page( ) の最後の引数は、 取 り 込むページの位置指定 ・ 拡縮 ・ 回転を指示す る さ ま
ざ ま なオプシ ョ ン を持ち う る オプシ ョ ン リ ス ト です。 こ のオプシ ョ ンについては詳 し く は
176 ページ 「7.3 画像 と 取 り 込み PDF ページの配置」 で解説 し てい ます。
取 り 込んだ PDF ページの寸法 取 り 込んだ PDF ページは取 り 込んだ ラ ス タ 画像 と 同様に
扱われ、 fit_pdi_page( ) を用いて出力ページ上に配置する こ と がで き ます。 デフ ォ ル ト で
は、 Acrobat での表示 と ま っ た く 同 じ 形で PDI はページ を取 り 込みます。 と り わけ次の よ
う な動作を し ます :
7.2 PDI で PDF ページ を取 り 込み
173
> ク ロ ッ ピ ン グは保持 さ れます (技術的にいえば、 CropBox が存在す る 場合には、 PDI は
MediaBox よ り も CropBox を優先採用 し ます。 63 ページ 「3.2.2 ページサ イ ズ」 参照)。
> ページに適用 さ れてい る 回転は保持 さ れます。
cloneboxes オプシ ョ ンは PDFlib+PDI に対 し て、 取 り 込みページのすべてのページ枠を生
成出力ページへ複製す る よ う 指示 し 、 その結果、 すべてのページサ イ ズ情報を複製 さ れま
す。
あ る いは、 pdiusebox オプ シ ョ ン を用い て明示的に、 ページの MediaBox ・ CropBox ・
TrimBox ・ ArtBox 項目の う ちのいずれか を ( も し あれば) 用いて取 り 込みページのサ イ ズ
を決め る よ う PDI に指示す る こ と も で き ます。
レ イ ヤー を持つ PDF ページの取 り 込み Acrobat 6 (PDF 1.5) ではレ イ ヤー機能が導入 さ
れま し た (技術的には 「オプシ ョ ナル コ ン テ ン ト 」 と いい ます) 。 フ ァ イ ルに存在 し てい
る か も し れない レ イ ヤー情報を PDI は一切無視 し ます。取 り 込んだページ内のすべての レ
イ ヤーは、 不可視レ イ ヤーを含めて、 生成出力内では可視にな り ます。
GeoPDF を PDI で取 り 込み GeoPDF を PDI で取 り 込む際には、 地理空間情報は、 それが
下記のいずれかの方式で作成 さ れていれば保持 さ れます (画像ベース の地理空間参照) :
> PDFlib で load_image( ) の georeference オプシ ョ ンで
> Acrobat で地理空間情報を持つ画像を取 り 込んで。
地理空間情報はページ を取 り 込んだ後、それが下記のいずれかの方式で作成 さ れていた場
合には失われます (ページベース の地理空間参照) :
> PDFlib で begin/end_page_ext( ) の viewports オプシ ョ ン で
> Acrobat で手作業で PDF ページ を地理登録 し て。
OPI 情報 を持つ PDF ページの取 り 込み
さ れない ま ま保持 さ れます。
入力 PDF 内の存在す る OPI 情報は出力内で変更
複数の取 り 込み文書間での最適化 PDFlib 自体は、 高度に最適化 し た PDF 出力を生成 し
ますが、 取 り 込んだ PDF には も し かす る と 冗長なデー タ 構造があ っ て、 最適化の余地が
あ る か も し れません。 さ ら に、 取 り 込む PDF が も し 複数であれば、 その複数の フ ァ イ ル
が等価な リ ソ ース (フ ァ イ ル等) を含む場合には、 出力す る フ ァ イ ルのサ イ ズはふ く れあ
が る 可能性があ り ます。 こ の よ う な場面では、 begin_document( ) の optimize オプシ ョ ン
を使 う こ と がで き ます。 こ れは取 り 込んだ フ ァ イ ル内の冗長なオブジ ェ ク ト を検知 し て、
生成す る 出力の体裁や品質を そ こ な う こ と な く そ う し たオブジ ェ ク ト を削除 し ます。
7.2.3 受け入れ可能な PDF 文書
一般に、Acrobat で開 く こ と ので き る あ ら ゆ る 種類の PDF 文書を PDI は適切に処理で き ま
す。 PDF のバージ ョ ン番号や、 フ ァ イ ル内で使用 さ れてい る 機能には左右 さ れません。 暗
号化文書 (すなわち権限設定やパス ワー ド を持つフ ァ イ ル) 内のページ を取 り 込むにはそ
のマ ス タ ーパ ス ワー ド を与え る 必要があ り ます。
PDI は破損 PDF のための修復モー ド を実装 し てお り 、 あ る 種の破損文書 も 開 く こ と が
で き ます。 し か し 、 まれに PDF 文書や文書内の特定ページが PDI に よ っ て拒否 さ れ る こ
と があ り ます。
PDF 文書やページが う ま く 取 り 込めなか っ た場合 open_pdi_document( ) と open_pdi_
page( ) はエ ラ ー コ ー ド を返 し ま す。 失敗について も っ と 詳 し く 知 り たい場合には、 get_
errmsg( ) で原因を取得す る こ と がで き ます。 ま たは、 errorpolicy オプシ ョ ンかパ ラ メ タ を
true に設定 し ておけば、 文書が開けなか っ た と き に例外が発生する よ う にな り ます。
174
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
下記の種類の PDF 文書は、 デフ ォ ル ト では拒絶 さ れますが、 infomode オプシ ョ ン を
true に設定すれば、 pCOS で情報を取得す る ために開 く こ と はで き ます。
> カ レ ン ト で生成中の PDF 出力文書 よ り も 高い PDF バージ ョ ン番号を用いてい る PDF 文
書は、 PDI で取 り 込め ません。 理由は、 高いバージ ョ ン番号の PDF を取 り 込んだ後で
は、 求め ら れてい る PDF バージ ョ ンに出力が本当に準拠す る か ど う か、 も はや PDFlib
は確信を持てないか ら です。 解決策 : 出力 PDF のバージ ョ ン を begin_document( ) の
compatibility オプシ ョ ン を使っ て必要な水準に設定 し ます。
PDF 1.7ext 3 (すなわち Acrobat 9) 文書お よ びそれ よ り 高い拡張レベルは、 PDI に関す
る 限 り PDF 1.7 と 互換です。
PDF/A モー ド では、 PDF バージ ョ ンヘ ッ ダは PDF/A 内では無視 さ れなければな ら な
いので、 入力 PDF バージ ョ ン番号は無視 さ れます。
> 暗号化 さ れた PDF 文書でそのパ ス ワー ド がない も の (infomode 規則に対する 例外 :
Distiller の設定 「オブジ ェ ク ト レベルの圧縮 : 最高」 を用いて作成 さ れた PDF 1.6 文書。
こ れは情報モー ド で も 開 く こ と がで き ません)。
> タ グ付 き PDF で begin_document( ) の tagged オプシ ョ ンが true の場合。
> カ レ ン ト 出力文書の PDF/A か PDF/X の レベル と 非互換な PDF/A か PDF/X の文書(例:
PDF/A-1a を PDF/A-1b 文書へ取 り 込 も う と し た)。 詳 し く は 256 ページ 「10.3.4 PDI
に よ る PDF/X 文書の取 り 込み」 ・ 262 ページ 「10.4.3 PDF/A 文書を PDI で取 り 込み」 を
参照 し て く だ さ い。
7.2 PDI で PDF ページ を取 り 込み
175
7.3 画像 と 取 り 込み PDF ページの配置
ラ ス タ 画像 と テ ンプ レー ト を配置す る ための関数 fit_image( ) と 、 取 り 込み PDF ページ を
配置す る ためのfit_pdi_page( )は、ページ上への配置を制御す る ための さ ま ざ ま なオプシ ョ
ン を提供 し てい ま す。 こ の節では、 い く つかの代表的な応用作業を見てみ る こ と に よ っ
て、 も っ と も 重要ない く つかのオプシ ョ ンの動作を示 し ます。 すべてのオプシ ョ ンの完全
な一覧 と 説明については、 PDFlib API リ フ ァ レ ン ス を参照 し て く だ さ い。
ラ ス タ 画像の埋め込みは、PDFlib な ら 簡単に実現で き ます。画像フ ァ イ ルは まず、load_
image( ) で読み込む必要が あ り ま す。 こ の関数は画像ハ ン ド ル を返すので、 それ を fit_
image( ) の位置合わせや拡大縮小のオプシ ョ ン と と も に使 う こ と がで き ます。
取 り 込み PDF ページの埋め込みについて も 、 こ れ と 同様に動作 し ます。 PDF ページ を
open_pdi_page( ) で開いてページハン ド ルを取得 し 、 それを fit_pdi_page( ) で使 う 必要が
あ り ます。 位置合わせや拡大縮小のオプシ ョ ンは、 ラ ス タ 画像の も の と 同 じ も のが使え ま
す。
こ の節に載せ る 作成例はすべて、 ラ ス タ 画像で も テ ンプ レー ト で も 取 り 込み PDF ペー
ジで も 、 同 じ く 動作 し ま す。 コ ー ド の作成例は ラ ス タ 画像のための も の し か載せ ま せん
が、 オブジ ェ ク ト 一般の配置方法を そ こ では語っ てい る のです。 あ ら ゆ る fit 関数はすべ
て、 それを呼び出す前にはかな ら ず、 load_image( ) か open_pdi_document( ) と open_pdi_
page( ) への呼び出 し を行 う 必要があ り ます。 簡潔のため、 こ れ ら の呼び出 し は こ こ ではあ
ら ためて示 し ません。
ク ッ ク ブ ッ ク 画像 と 取 り 込み PDF ページに関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの images・pdf_
import カ テ ゴ リ にあ り ます。
7.3.1 単純にオ ブ ジ ェ ク ト を配置
画像 を参照点に置 く デ フ ォ ル ト では、 オブジ ェ ク ト はその元のサ イ ズで、 左下隅を参
照点に配置 さ れます。 こ の例では、 画像の下端中央を参照点に配置 し てみま し ょ う 。 下記
の コ ー ド は、 画像の下端中央を参照点 (0, 0) に配置 し ます。
p.fit_image(image, 0, 0, "position={center bottom}");
同様に、 position オプシ ョ ン を キー ワー ド left ・ right ・ center ・ top ・ bottom か ら 別の組み
合わせで使 う こ と に よ っ て、 オブジ ェ ク ト それぞれ左端 ・ 右端 ・ 中央 ・ 上端 ・ 下端を参照
点に配置す る こ と がで き ます。
画像 を拡大縮小 し て配置
き さ も 変更で き ます。
コ ー ド を下記の よ う に変え る と 、 画像を配置す る 際にその大
p.fit_image(image, 0, 0, "scale=0.5");
こ の コ ー ド は、 オブジ ェ ク ト の左下隅を ユーザー座標系の点 (0, 0) に配置 し ます。 と 同時
に、 オブジ ェ ク ト は x ・ y 方向に倍率 0.5 で拡大縮小 さ れ る ので、 元の 50 パーセ ン ト の大
き さ にな り ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの images/starter_image ト ピ ッ ク にあ り ます。
7.3.2 オ ブ ジ ェ ク ト を枠内に置 く
オブジ ェ ク ト を置 く ためには、あ ら か じ め定義 し た幅 と 高 さ の枠を あわせて使 う こ と も で
き ます。 図 7.2 に、 以下のい く つかの例の出力を示 し ます。 なお、 青い枠 と 線は、 枠の大
き さ が見 ら れ る よ う に描 き 足 し て あ る だけで、 実際の出力にはあ り ません。
176
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
画像 を枠内に置 く 枠を定義 し て、 画像を その枠の右上に配置 し ま し ょ う 。 枠は幅 70 単
位、 高 さ 45 単位で、 参照点 (0, 0) に配置 し ます。 画像は こ の枠の右上に配置 し ます (図
7.2a 参照)。 同様に、 画像を下端中央に配置す る こ と も で き ます。 こ れを図示 し たのが図
7.2b です。 なお、 画像が枠 よ り 大 き い場合は枠か ら はみ出 し ます。
図 7.2 さ ま ざ ま な位置合わせオプ シ ョ ン に従っ て画像を枠内に配置
生成 さ れる出力
fit_image に与え る オプ シ ョ ン リ ス ト
a)
boxsize={70 45} position={right top}
b)
boxsize={70 45} position={center bottom}
適切なはめ込み方式 を用い る 次に、 さ ま ざ ま なはめ込み方式を使っ て、 オブジ ェ ク ト
を枠にはめ込みま し ょ う 。 まずはデフ ォ ル ト 、 すなわちはめ込み方式を使わず、 切 り 抜 き
や拡大縮小 も 行わない場合か ら 始め ま し ょ う 。 画像は幅 70 ・ 高 さ 45 単位の枠の中央に配
置 し ます。その枠は参照点 (0, 0) に配置 し ます。図 7.3a にその単純な ケース を図示 し ます。
枠の幅を 70 か ら 35 単位に縮めて も 、 出力には何の影響 も あ り ません。 画像は元の大
き さ を保ち、 枠か ら ははみ出 し ます (図 7.3b 参照)。
画像 を枠の中央にはめ込み あ ら か じ め定義 し た矩形の中央に画像 を 置 き た い と き は、
自 分 で 計 算 を す る 必 要 は 全 く な く 、 適 切 な オ プ シ ョ ン を 使 え ば 実 現 で き ま す。
position=center を使っ て、 幅 70 ・ 高 さ 45 単位の枠 (boxsize={70 45}) の中央に画像を配
置 し ま し ょ う 。 fitmethod=meet を使 う と 、 画像は縦横比を保ちつつ、 その上下が枠に収
ま り き る ま で拡大縮小 さ れます (図 7.3c 参照)。
枠の幅を 70 か ら 35 単位に縮め る と 、 画像はその左右が枠に収ま り き る ま で縮小 さ れ
ます (図 7.3d 参照)。
こ れは画像配置で も っ と も よ く 使われ る 方式です。 fitmethod=meet では、 画像がつぶ
さ れない こ と が保証 さ れ る と と も に、 必ず枠内に、 で き る だけ大 き く 配置 さ れます。
画像 を枠全体にはめ込み 画像を も っ と 枠に合わせて、 枠全体を画像が埋め る よ う にす
る こ と も で き ます。 こ れは fitmethod=entire で実現で き ます。 し か し 、 こ の組み合わせは
画像をつぶす こ と が多いので、 有用な場合は まれで し ょ う (図 7.3e 参照)。
画像 を枠にはめ込む際に切 り 抜 き 別のはめ込み方式 (fitmethod=clip) を使 う と 、 オブ
ジ ェ ク ト がはめ込んだ枠か ら はみ出 し た と き に、そのオブジ ェ ク ト を切 り 抜 く こ と がで き
ます。 枠の大 き さ を縦横 と も 30 単位に縮めて、 画像を その枠の中央に元の大 き さ の ま ま
置いてみま し ょ う (図 7.3f 参照)。
画像 を枠の中央に置 く こ と に よ っ て、 画像はすべての端が均等に切 り 落 と さ れ ま す。
同様に、画像の右上部分をすべて見せたいな ら ば、position={right top} で置けば よ いで し ょ
う (図 7.3g 参照)。
7.3 画像 と 取 り 込み PDF ページの配置
177
図 7.3 さ ま ざ ま なはめ込み方式に従っ て画像を枠にはめ込み
生成 さ れる出力
fit_image に与え る オプ シ ョ ン リ ス ト
a)
boxsize={70 45} position=center
b)
boxsize={35 45} position=center
c)
boxsize={70 45} position=center fitmethod=meet
d)
boxsize={35 45} position=center fitmethod=meet
e)
boxsize={70 45} position=center fitmethod=entire
f)
boxsize={30 30} position=center fitmethod=clip
g)
boxsize={30 30} position={right top} fitmethod=clip
オ ブ ジ ェ ク ト を ページに合わせ る 与え ら れたページサ イ ズにオブジ ェ ク ト を合わせた
い と き は、オブジ ェ ク ト を配置す る はめ込み枠 と し てそのページ を選べば簡単に実現で き
ます。 下記の命令は、 縦横 595 × 842 の A4 サ イ ズのページ を使っ てい ます。
p.fit_image(image, 0, 0, "boxsize={595 842} position={left bottom} fitmethod=slice");
こ の コ ー ド では、 ページの左下隅に 1 つの枠を配置 し てい ます。 その枠の大き さ は、 A4
ページの大 き さ と 同 じ です。 オブジ ェ ク ト は こ の枠の左下隅に配置 さ れ、 縦横比を保つ
つ、 枠全体を覆 う ま で拡大縮小 さ れ ま すので、 ひいてはページ全体を覆 う こ と にな り ま
す。 オブジ ェ ク ト が枠か ら はみ出す場合は切 り 落 と さ れます。 fitmethod=slice はオブジ ェ
ク ト の拡大縮小を伴 う のです (fitmethod=clip がオブジ ェ ク ト を拡大縮小 し ないの と 異な
り )。 も ち ろん こ の例で も 、 position や fitmethod オプシ ョ ンは変え て も か ま い ません。
7.3.3 オ ブ ジ ェ ク ト の向 き を変え る
画像の向 き を変え て配置 今度の例 と し ては、 画像の向 き を西向 き に変え てみ ま し ょ う
(orientate=west)。 こ れはすなわち、 画像が 90°反時計回 り に回転 さ れ、 その回転後のオ
ブジ ェ ク ト の左下隅が参照点 (0, 0) へ並行移動 さ れ る こ と を意味 し ます。 画像はその場で
回転 し ます (図 7.6a 参照)。 はめ込み方式を指定 し ていないので、 画像は元の大 き さ の ま
ま出力 さ れて、 枠か ら はみ出 し ます。
178
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 7.5
orientate オプ シ ョ ン
図 7.4
rotate オプ シ ョ ン
画像の向 き を変え て縦横比 を保 ち つつ枠 ち ょ う ど にはめ込み 今度は、 画像を西に向け
た う えで、 あ ら か じ め定義 し た大 き さ にす る こ と に挑戦 し てみま し ょ う 。 求め る 大 き さ の
枠を定義 し て、 画像の縦横比を変えずにその枠にはめ込みます (fitmethod=meet) 。 向 き
は orientate=west と 指定 し ます。 デフ ォ ル ト では、 画像は枠の左下隅に配置 さ れます (図
7.6b 参照)。 東に向けた画像を図 7.6c に、 南向 き を図 7.6d に示 し ます。
orientate オプシ ョ ンは、 図 7.5 に示す と お り 、 向 き のキー ワー ド と し て north ・ east ・
west ・ south に対応 し てい ます。
なお、orientate オプシ ョ ンは、座標系全体にはいっ さ い影響せずに、配置す る オブジ ェ
ク ト にだけ影響を及ぼ し ます。
図 7.6 画像の向き を変え る
生成 さ れる出力
fit_image に与え る オプ シ ョ ン リ ス ト
a)
boxsize={70 45} orientate=west
b)
boxsize={70 45} orientate=west fitmethod=meet
c)
boxsize={70 45} orientate=east fitmethod=meet
d)
boxsize={70 45} orientate=south fitmethod=meet
e)
boxsize={70 45} position={center bottom} orientate=east
fitmethod=clip
7.3 画像 と 取 り 込み PDF ページの配置
179
向 き を変え た画像 を枠にはめ込んで切 り 抜 き 画像を東に向けて (orientate=east)、枠の
下端中央に位置を合わせま し ょ う (position={center bottom}) 。 さ ら に、 画像を元の大 き
さ の ま ま 配置 し 、 も し 画像が枠か ら はみ出 し た ら 切 り 落 と し ま す (fitmethod=clip) (図
7.6e 参照)。
7.3.4 オ ブ ジ ェ ク ト を回転
オブジ ェ ク ト の回転は、 向 き の変更 と 同 じ よ う に動作 し ます。 し か し 、 配置す る オブジ ェ
ク ト だけでな く 、 座標系全体に影響を与え ます。
画像 を回転 さ せて配置 まずは じ めに、 画像を 90°反時計回 り に回転 さ せ る こ と に挑戦
し てみま し ょ う 。 オブジ ェ ク ト を配置す る 前に、 座標系は参照点 (50, 0) で 90°反時計回
り に回転 さ れます。 回転後のオブジ ェ ク ト の右下隅 (回転前のオブジ ェ ク ト の左下隅だっ
た所) が、 最終的に参照点の位置にな り ます。 こ の場合を示 し たのが図 7.7a です。
回転は座標系全体に影響す る ので、 枠の回転 さ れます。 同様に、 画像を 30°反時計回
り に回転す る こ と がで き ます (図 7.7b 参照)。 図 7.4 に、 rotate オプシ ョ ンの一般的な動
作を図示 し ます。
画像 を回転 し てはめ込み 今度は、 画像を 90°反時計回 り に回転 さ せて、 縦横比を保ち
つつ枠にはめ込む こ と に挑戦 し てみま し ょ う 。 こ れは fitmethod=meet を使えば実現で き
ます (図 7.7c 参照)。 同様に、 画像を 30°反時計回 り に回転 さ せて、 その画像を縦横比を
保ちつつ枠にはめ込む こ と がで き ます (図 7.7d 参照)。
図 7.7 画像を回転
生成 さ れる出力
fit_image に与え るオプ シ ョ ン リ ス ト
a)
boxsize={70 45} rotate=90
(x, y)
boxsize={70 45} rotate=30
b)
(x, y)
boxsize={70 45} rotate=90 fitmethod=meet
c)
(x, y)
boxsize={70 45} rotate=30 fitmethod=meet
d)
(x, y)
180
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 7.8
ページサイ ズの調
整。 左から 、 ち ょ
う ど ・ 大きめ ・ 小
さめ
7.3.5 ページサ イ ズの調整
ページサ イ ズ を画像に合わせ る 今度の例 と し ては、 ページの大 き さ を オブジ ェ ク ト の
大 き さ に自動的に合わせま し ょ う 。 こ れはた と えば、 さ ま ざ ま な画像を PDF 形式でアー
カ イ ブ し てお き たい と き な ど に有用です。 参照点 (x, y) を使えば、 ページ を オブジ ェ ク ト
のサ イ ズ と ち ょ う ど同 じ にす る か、 それ と も 多少大き めや小 さ めにする か を、 指定す る こ
と がで き ます。 ページサ イ ズ を大 き めにす る と (図 7.8 参照)、 画像の ま わ り にふちが残
り ま す。 ページサ イ ズ を画像 よ り 小 さ く す る と 、 画像の一部は切 り 落 と さ れ ま す。 ま ず
は、 ページサ イ ズ を オブジ ェ ク ト の大 き さ と ち ょ う ど同 じ に し ま し ょ う 。
p.fit_image(image, 0, 0, "adjustpage");
次の コ ー ド は、 ページサ イ ズ を x ・ y 方向に 40 単位ずつ増や し てい ますので、 オブジ ェ ク
ト の ま わ り に白ふちがで き ます。
p.fit_image(image, 40, 40, "adjustpage");
次の コ ー ド は、 ページサ イ ズ を x ・ y 方向に 40 単位ずつ減 ら し てい ます。 オブジ ェ ク ト は
ページの端で切 り 落 と さ れますので、 オブジ ェ ク ト の一部 (幅 40 単位の) は見え な く な
り ます。
p.fit_image(image, -40, -40, "adjustpage");
x ・ y 座標を手段 と し て配置す る 方法 (ページの端、 ま たは一般には座標軸か ら の、 オブ
ジ ェ ク ト ま での間隔を指定す る 方法) のほかに、 はめ込み枠を指定す る 方法 も あ り ます。
こ れは、 さ ま ざ ま な組版規則に従っ てオブジ ェ ク ト が配置 さ れ る 矩形の領域です。 こ の組
版規則は、 boxsize ・ fitmethod ・ position オプシ ョ ンで制御する こ と がで き ます。
取 り 込み PDF ページのページ枠 を複製 取 り 込み PDF ペー ジ の、 関連す る ペー ジ 枠
(MediaBox ・ CropBox 等) すべ て を、 カ レ ン ト 出力ペー ジ へ複製す る こ と が で き ま す。
cloneboxes オプシ ョ ン を、 すべての関連す る 枠の値を読み取 る ために open_pdi_page( ) に
与え る 必要があ り 、 そ し てその枠の値を カ レ ン ト ページに適用す る ために fit_pdi_page( )
に も 与え る 必要があ り ます :
/* ページを開き、ページ枠項目群を複製 */
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");
7.3 画像 と 取 り 込み PDF ページの配置
181
こ の技法を活用す る と 、 生成 PDF のページサ イ ズや裁ち落 と し 等が必ず入力文書のペー
ジ と 同 じ にな る よ う にす る こ と がで き ま す。 こ れは特にプ リ プ レ ス 分野において重要で
す。
7.3.6 配置画像 ・ PDF ページ に関す る情報 を取得
配置画像に関す る情報 info_image( ) 関数を使っ て画像情報を取得で き ます。こ の関数で
使え る キー ワ ー ド は、 一般的な画像情報 (例 : 幅 ・ 高 さ を ピ ク セル単位で) のみな ら ず、
その画像の出力ページ上への配置に関す る 情報 も 網羅 し てい ます (例 : はめ込み計算実行
後の幅 ・ 高 さ を絶対値で)。
下記の コ ー ド は、 ピ ク セルサ イ ズ と 、 あ る 特定のはめ込みオプシ ョ ン に よ り 画像を配
置 し た後の絶対サ イ ズの両方を取得 し てい ます :
String optlist = "boxsize={300 400} fitmethod=meet orientate=west";
p.fit_image(image, 0.0, 0.0, optlist);
imagewidth = (int) p.info_image(image, "imagewidth", optlist);
imageheight = (int) p.info_image(image, "imageheight", optlist);
System.err.println("画像サイズ(ピクセル単位): " + imagewidth + " x " + imageheight);
width = p.info_image(image, "width", optlist);
height = p.info_image(image, "height", optlist);
System.err.println("画像サイズ(ポイント単位): " + width + " x " + height);
配置 PDF ページ に関す る情報 info_pdi_page( ) 関数を使っ て、配置 PDF ページに関す る
情報を取得で き ます。 こ の関数で使え る キーワ ー ド は、 元のページに関す る 情報 (例 : そ
の幅 ・ 高 さ ) のみな ら ず、 その取 り 込み PDF の出力ページ上への配置に関す る 情報 も 網
羅 し てい ます (例 : はめ込み計算実行後の幅 ・ 高 さ )。
下記の コ ー ド は、 取 り 込みページの元のサ イ ズ と 、 あ る 特定のはめ込みオプシ ョ ン に
よ り そのページ を配置 し た後のサ イ ズの両方を取得 し てい ます :
String optlist = "boxsize={400 500} fitmethod=meet";
p.fit_pdi_page(page, 0, 0, optlist);
pagewidth = p.info_pdi_page(page, "pagewidth", optlist);
pageheight = p.info_pdi_page(page, "pageheight", optlist);
System.err.println("元のページサイズ: " + pagewidth + " x " + pageheight);
width = p.info_pdi_page(page, "width", optlist);
height = p.info_pdi_page(page, "height", optlist);
System.err.println("配置ページサイズ: " + width + " x " + height);
182
第 7 章 : 画像 ・ PDF ページの取 り 込み (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
8 テキス ト ・ 表組版
8.1 テキス ト 行の配置 と はめ込み
一行のテ キ ス ト をページ上に配置す る ための関数 fit_textline( ) には さ ま ざ ま な組版オプ
シ ョ ンがあ り ます。 こ の節では も っ と も 重要なオプシ ョ ン をい く つか よ く 使われ る 応用例
を用いて解説 し ます。 こ う し たオプシ ョ ンの完全な説明は PDFlib API リ フ ァ レ ン スにあ り
ます。 fit_textline( ) のオプシ ョ ンの多 く は fit_image( ) のオプシ ョ ン と 同 じ です。 ですの
で こ こ ではテ キ ス ト 関連の利用例のみを示 し ま す。 画像の組版については、 176 ページ
「7.3 画像 と 取 り 込み PDF ページの配置」 にあ る 作成例を参照す る よ う 推奨 し ます。
以下の利用例では fit_textline( ) への呼び出 し のみを示 し ます。 必要な フ ォ ン ト はすで
に読み込ま れて希望の文字サ イ ズに設定 さ れてい る も の と し ます。
fit_textline( ) は、 仮想的なテ キ ス ト 枠を用いてテ キ ス ト の位置合わせを決めてい ます。
テ キ ス ト 枠の幅はテ キ ス ト の幅 と 同 じ で あ り 、 枠の高 さ は フ ォ ン ト の大文字の高 さ と 同
じ です。 テ キ ス ト 枠は、 テ キ ス ト 枠を定義す る matchbox オプシ ョ ン で変更す る こ と がで
き ます。
以下の作成例では、 参照点の座標は fit_textline( ) の x ・ y 引数 と し て与え ら れます。 テ
キ ス ト 行に対す る はめ込み枠は、 テ キ ス ト が配置 さ れ る 領域です。 それは fit_textline( ) の
x ・ y 引数 と 適切なオプシ ョ ン (boxsize ・ position ・ rotate) で指定 さ れ る 矩形領域 と し て
定義 さ れます。 はめ こ み枠は、 margin オプシ ョ ン を用いて、 左 / 右ま たは上 / 下へ縮め
る こ と も で き ます。
ク ッ ク ブ ッ ク テキス ト 出力の諸側面に関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの text_output カ テ
ゴ リ にあ り ます。
8.1.1 単純な テキス ト 行配置
テキス ト を参照点に置 く デフ ォ ル ト では、 テ キ ス ト は左下隅を参照点に合わせて配置
さ れ ま す。 し か し こ の例では、 テ キ ス ト の下端中央を参照点に合わせて配置 し たいので
す。 下記の コ ー ド は、 テ キ ス ト 枠の下端中央を参照点 (30, 20) に合わせて配置 し ます。
p.fit_textline(text, 30, 20, "position={center bottom}");
図 8.1 に、 中央揃えのテ キ ス ト 配置の様子を図示 し ます。 同様に、 キーワ ー ド left ・ right ・
center ・ top ・ bottom の組み合わせを変えた position オプシ ョ ン を使っ て、 参照点にテ キ
ス ト を配置す る こ と がで き ます。
図 8.1
テキス ト の
中央揃え
y
Kraxi
x
y
Kraxi
テキス ト の向 き を変え て配置 次は、 テ キ ス ト を回転 さ せて、 その左下隅 (回転後の) を
参照点に合わせて配置 し てみま し ょ う 。 下記の コ ー ド は、 テ キ ス ト を西 (90˚ 反時計回 り )
に向けた後、 その回転 し た テ キ ス ト の左下隅を参照点 (0, 0) へ並行移動 さ せます。
図 8.2
西向きの
単純な テキス ト
x
8.1 テキス ト 行の配置 と はめ込み
183
ᨒߩฝ਄ߦ࠹ࠠࠬ࠻
Kraxi ᨒߩ᏷50࡮㜞ߐ22
20
30
Kraxi
20
ᨒߩਅ┵ਛᄩߦ࠹ࠠࠬ࠻
ᨒߩ᏷50࡮㜞ߐ0
20
図 8.3 テキス ト を枠内に置 く
p.fit_textline(text, 0, 0, "orientate=west");
図 8.2 に、 単純なテ キ ス ト の向 き を変えて配置 し た様子を図示 し ます。
8.1.2 テキス ト を枠内に置 く
テ キ ス ト を置 く には、 幅 と 高 さ を あ ら か じ め定義 し た枠を あわせて使 う こ と も で き 、 テ キ
ス ト はその場合枠に対 し て相対的な位置に置 く こ と が可能です。 図 8.3 に、 その一般的な
はた ら き を図示 し ます。
テキス ト を枠内に置 く 矩形の枠 を 定義 し て、 こ の枠内の右上に テ キ ス ト を 配置 し ま
し ょ う 。 コ ー ド 上で、 幅 50 単位 ・ 高 さ 22 単位の枠を、 参照点 (30, 20) に定義 し ます。 図
8.4a の よ う に、 テ キ ス ト は枠の右上に配置 さ れます。
同様に、 下端中央にテ キ ス ト を配置す る こ と も で き ます。 こ の場合を図示 し たのが図
8.4b です。
枠 と テ キ ス ト の間に間隔を あ け る には、 margin オプシ ョ ン を付け加え ます (図 8.4c 参
照)。
なお、 図中の青い矩形や線は、 枠のサ イ ズ を見せ る ために描いた も ので、 実際の出力
には現れません。
図 8.4 さ ま ざ ま な位置合わせオプ シ ョ ンに従 っ て テキス ト を枠内に配置
生成 さ れる出力
Kraxi
a)
b)
Kraxi
c)
Kraxi
d)
184
Kraxi
e)
Kraxi
fit_textline( ) に与え るオプ シ ョ ン リ ス ト
boxsize={50 22} position={right top}
boxsize={50 22} position={center bottom}
boxsize={50 22} position={center bottom} margin={0 3}
boxsize={50 0} position={center bottom}
boxsize={0 35} position={left center} orientate=west
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
テキス ト を横線や縦線で整列 さ せ る テ キ ス ト の位置合わせを、 横線や縦線 (すなわち
高 さ や幅がゼ ロ の枠) に沿っ て行 う と い う のは、 若干極端な ケース ではあ り ますが、 有用
な場合 も あ り ます。 図 8.4d は、 テ キ ス ト を枠に対 し て下端中央揃えで配置 し た も のです。
幅を 50、 高 さ を 0 と し た こ と で、 枠は ま る で横線の よ う にな っ てい ます。
テ キ ス ト を縦線に沿っ て中央揃えす る ためには、 西向 き に し て、 枠に対 し て左端中央
に置 き ま し ょ う 。 こ の場合を図 8.4e に示 し ます。
8.1.3 テキス ト を枠にはめ込み
こ の項では、 さ ま ざ ま なはめ込み方式を用いて、 テ キ ス ト を枠にはめ込みま し ょ う 。 カ レ
ン ト の フ ォ ン ト と 文字サ イ ズはど の例で も 同 じ と し てお き 、 さ ま ざ ま なはめ込み方式に と
も な っ て文字サ イ ズな ど のプ ロ パテ ィ が変わ る 様子がわか る よ う に し ます。
デフ ォ ル ト の場合か ら 始め ま し ょ う 。 すなわち、 何のはめ込み方式 も 用いないで、 切
り 落 と し も 拡縮 も 一切 さ れない よ う にす る 場合です。 テ キ ス ト は、 幅 100 単位 ・ 高 さ 35
単位の枠の中央に配置 さ れます (図 8.5a 参照)。
枠の幅を 100 か ら 50 単位に縮めて も 、 出力には全 く 影響を与え ません。 テ キ ス ト は元
の文字サ イ ズ を保ち、 枠か ら はみ出 し ます (図 8.5b 参照)。
テキス ト を小 さ な枠につめ込み それでは、 テ キ ス ト 全体を枠の中に、 体裁を保ち なが
ら つめ込んでみま し ょ う 。 こ れは fitmethod=auto オプシ ョ ンで実現で き ます。 図 8.5c で
は、 枠の幅が充分広いので、 テ キ ス ト は ま っ た く 元の大 き さ の ま ま、 変わ ら ずに枠に収
ま っ てい ます。
枠の幅を 100 か ら 58 に縮小す る と 、 テ キ ス ト は長すぎ て収ま り き ら な く な り ます。 は
め込み方式 auto はテ キ ス ト に長体を、 shrinklimit オプシ ョ ン (デフ ォ ル ト : 0.75) を限度
と し てかけ よ う と し ます。 図 8.5d は、 テ キ ス ト が元の長 さ の 75 パーセ ン ト ま で圧縮 さ れ
た様子を示 し ます。
枠の幅を さ ら に 30 単位ま で縮め る と 、 テ キ ス ト は長体をかけて も 収ま り き ら な く な り
ます。 す る と 、 meet 方式が適用 さ れます。 meet 方式は、 テ キ ス ト 全体が枠に収ま る ま で
文字サ イ ズ を下げます。 こ の場合を示 し たのが図 8.5e です。
テキス ト の文字サ イ ズ を上げて枠にはめ込み テ キ ス ト を枠の幅 (ま たは高 さ ) い っぱ
いに拡げて、 ただ し 縦横比は保っ た ま ま、 はめ込みたい時があ る か も し れません。 テ キ ス
ト よ り 大 き い枠に対 し て fitmethod=meet を用い る と 、 テ キ ス ト の幅が枠の幅 と 一致す る
ま でテ キ ス ト が大 き く な り ます。 こ の場合を図示 し たのが図 8.5f です。
テキス ト を枠い っ ぱいにはめ込み さ ら に、 テ キ ス ト が枠の中を埋めつ く す よ う にはめ
込む こ と も 可能です。 こ の場合は、 fitmethod=entire を使い ます。 し か し こ の設定は、 テ
キ ス ト をほぼ確実にゆがめて し ま う ので、 使 う こ と はめっ たにないで し ょ う (図 8.5g 参
照)。
テキス ト を枠で切 り 落 と し てはめ込み こ れ も レ ア な ケー ス ですが、 テ キ ス ト を元のサ
イ ズの ま ま はめ込んで、 も し も 枠か ら はみ出た部分は切 り 落 と し たい時 も あ る か も し れま
せん。 その場合は fitmethod=clip が使え ます。 図 8.5h では、 テ キ ス ト を枠の左端に配置 し
てい ますが、 枠の幅が足 り ません。 テ キ ス ト は右側が切 り 落 と さ れます。
8.1 テキス ト 行の配置 と はめ込み
185
図 8.5 さ ま ざ ま なオプ シ ョ ンに従 っ て テキス ト をページ上の枠にはめ込み
生成 さ れる出力
fit_textline( ) に与え る オプ シ ョ ン リ ス ト
a)
Kraxi Systems
boxsize={100 35} position=center fontsize=12
b)
Kraxi Systems
boxsize={50 35} position=center fontsize=12
c)
Kraxi Systems
boxsize={100 35} position=center fontsize=12
fitmethod=auto
d)
Kraxi Systems
boxsize={58 35} position=center fontsize=12
fitmethod=auto
e)
Kraxi Systems
boxsize={30 35} position=center fontsize=12
fitmethod=auto
f)
Kraxi Systems
boxsize={100 35} position=center fontsize=12
fitmethod=meet
g)
Kraxi Systems
h)
Kraxi Sys
boxsize={100 35} position=center fontsize=12
fitmethod=entire
boxsize={50 35} position={left center}
fontsize=12 fitmethod=clip
テキス ト の縦中央揃え fit_textline( ) におけ る テ キ ス ト の高 さ は、デフ ォ ル ト ではキ ャ ッ
プハ イ ト 、 すなわち大文字の H の高 さ です。 テ キ ス ト を枠の中央に置 く と 、 縦方向にはそ
のキ ャ ッ プハ イ ト に も と づいて中央揃え さ れます (図 8.6a 参照)。
それ以外の高 さ を テ キ ス ト 枠に対 し て指定す る には、範囲枠機能を使い ます (226 ペー
ジ 「8.4 範囲枠」 も 参照)。 fit_textline( ) の matchbox オプシ ョ ンは、 テ キ ス ト 行の高 さ を
定義 し てお り 、 与え ら れた文字サ イ ズの キ ャ ッ プハ イ ト がそのデフ ォ ル ト にな っ てい ま
す。 こ の範囲枠の高 さ は、 その boxheight サブオプ シ ョ ン に も と づい て算出 さ れ ま す。
boxheight サブオプシ ョ ンは、 ベース ラ イ ンか ら テ キ ス ト 上端 ・ 下端ま での距離を決定 し
ます。 デフ ォ ル ト の設定は matchbox={boxheight={capheight none}}、 すなわち範囲枠の上
端はベース ラ イ ン よ り 上にあ っ て キ ャ ッ プハ イ ト に一致 し 、範囲枠の下端はベース ラ イ ン
を下へ越え ません。
範囲枠の大 き さ を図示す る ため、 こ こ では赤 く 色を塗 り ま し ょ う (図 8.6b 参照)。 図
8.6c では、 テ キ ス ト が xheight に も と づいて縦中央揃え さ れ る よ う に、 その高 さ の範囲枠
を定義 し てい ます。
186
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 8.6d ∼ f に、 有用な さ ま ざ ま な boxheight 設定の範囲枠 (赤) と 、 それの決め る 高
さ に も と づいて枠 (青) の中で中央揃え さ れた テ キ ス ト を示 し ます。
図 8.6 さ ま ざ ま な範囲枠高 さ に従っ て テキス ト を枠にはめ込み
fit_textline( ) に与え るオプ シ ョ ン リ ス ト
生成 さ れる出力
a)
Kraxi Systems
boxsize={80 20} position=center fitmethod=auto
b)
Kraxi Systems
boxsize={80 20} position=center fitmethod=auto
matchbox={boxheight={capheight none}
fillcolor={rgb 1 0.8 0.8}}
c)
Kraxi Systems
boxsize={80 20} position=center fitmethod=auto
matchbox={boxheight={xheight none}
fillcolor={rgb 1 0.8 0.8}}
d)
Kraxi Systems
boxsize={80 20} position=center fitmethod=auto
matchbox={boxheight={ascender none}
fillcolor={rgb 1 0.8 0.8}}
e)
Kraxi Systems
boxsize={80 20} position=center fitmethod=auto
matchbox={boxheight={ascender descender}
fillcolor={rgb 1 0.8 0.8}}
f)
Kraxi Systems
boxsize={80 20} position=center fitmethod=auto
matchbox={boxheight={fontsize none}
fillcolor={rgb 1 0.8 0.8}}
8.1.4 テキス ト を文字で整列 さ せる
テキス ト を文字で整列 さ せ る テ キ ス ト を、 あ る 特定の文字で整列 さ せたい場合があ る
か も し れません。 た と えば数値の小数点揃え な ど です。 図 8.7a に示す よ う に、 テ キ ス ト
ははめ込み枠の中央に置かれてい ます。fit_textline( ) で alignchar=. オプシ ョ ン を用い る こ
と で、 数値が点で揃い ます。
点を枠の中央に配置 し てい る position オプシ ョ ン を省 く こ と も で き ます。 そ う すれば、
デフ ォ ル ト の position={left bottom} が用い ら れ る ので、 点は参照点に配置 さ れます (図
8.7b 参照)。 一般に、 整列文字はその右下隅が参照点に配置 さ れます。
図 8.7 テキス ト 行を点で整列 さ せる
生成 さ れる出力
fit_textline( ) に与え る オプ シ ョ ン リ ス ト
a)
127.123
12.01
123.0
4025.20
boxsize={70 8} position={center bottom} alignchar=.
b)
127.123
12.01
123.0
4025.20
boxsize={70 8} position={left bottom} alignchar=.
8.1.5 ス タ ン プ を配置
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/simple_stamp ト ピ ッ ク にあ り ます。
8.1 テキス ト 行の配置 と はめ込み
187
テ キ ス ト の回転を指定 し な く て も 、 ス タ ンプ と い う 便利な機能を使えば、 テ キ ス ト を枠内
に対角線に沿っ て配置す る こ と がで き ます。 ス タ ン プ機能は洗練 さ れた自動計算を行い、
テ キ ス ト が枠内いっぱいに拡が る よ う 文字サ イ ズ と 回転角を決定 し ます。対角線ス タ ンプ
を、 た と えばページの背景な ど に配置す る には、 fit_textline( ) で stamp オプシ ョ ン を指定
し ます。 stamp=ll2ur を指定す る と 、 テ キ ス ト ははめ込み枠の左下隅か ら 右上隅へ配置 さ
れます。 こ れに対 し 、 stamp=ul2lr を指定す る と 、 テ キ ス ト ははめ込み枠の左上隅か ら 右
下隅へ配置 さ れます。 図 8.8 では、 showborder=true を用いてはめ込み枠 と ス タ ンプの外
接枠を図示 し てい ます。
図 8.8 左下から右上へのス タ ン プのよ う にテキス ト 行をはめ込み
fit_textline( ) に与え るオプ シ ョ ン リ ス ト
生成 さ れる出力
g
n
Giant Wi
fontsize=8 boxsize={160 50} stamp=ll2ur showborder=true
8.1.6 リ ーダ を利用
リ ーダ を使 う と 、 はめ込み枠の端 と テ キ ス ト と の間の余白を埋め る こ と がで き ます。 た と
えば点 リ ーダは、目次の各項目 と そのページ番号をつないで見やすい よ う に よ く 利用 さ れ
ます。
目次の リ ーダ fit_textline( ) で leader オプシ ョ ン と alignment={none right} サブオプシ ョ
ン を用い る と 、 テ キ ス ト 行の右に リ ーダが付加 さ れて、 テ キ ス ト 枠の右端ま で繰 り 返 さ れ
ます。 リ ーダ右端 と 右枠 と の間隔は一定ですが、 テ キ ス ト と リ ーダ左端 と の間隔は変動の
可能性があ り ます (図 8.9a 参照)。
ク ッ ク ブ ッ ク テ キ ス ト 行の中 での点 リ ーダの使用例 を 示す完全な コ ー ド サ ン プ ルが ク ッ ク ブ ッ ク の
text_output/leaders_in_textline ト ピ ッ ク にあ り ます。
ク ッ ク ブ ッ ク テキス ト フ ロ ーの中での点 リ ーダの使用例を示す完全な コ ー ド サン プルが ク ッ ク ブ ッ ク
の text_output/dot_leaders_with_tabs ト ピ ッ ク にあ り ます。
ニ ュ ース電光掲示板の リ ーダ 別の用例 と し ては、 ニ ュ ー ス 電光掲示板ふ う に し たい場
合 も あ る か も し れません。 こ こ ではプ ラ ス と スペース 「+ 」 を リ ーダに使い ま し ょ う 。 テ
キ ス ト 行 は 中 央 に 配 置 し、 リ ー ダ は そ の テ キ ス ト 行 の 前 と 後 に 印 字 さ せ ま す
(alignment={left right}) 。 リ ーダの左右端は左右の枠に揃い、 テ キ ス ト と の間隔は変動の
可能性があ り ます (図 8.96b 参照)。
図 8.9 リ ーダ を使 っ た テキス ト 行をはめ込み
生成 さ れる出力
fit_textline( ) に与え るオプ シ ョ ン リ ス
ト
Features of Giant Wing ....................................................
a)
Description of Long Distance Glider.................................
boxsize={200 10}
leader={alignment={none right}}
Benefits of Cone Head Rocket .........................................
188
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
fit_textline( ) に与え るオプ シ ョ ン リ ス
ト
生成 さ れる出力
boxsize={200 10}
position={center bottom}
leader={alignment={left right}
text={+ }}
+ + + + + + + + + Giant Wing in purple! + + + + + + + + +
b)
++
Long Distance Glider with sensational range! + +
+ + + + + Cone Head Rocket incredibly fast! + + + + +
8.1.7 パス上のテキス ト
テ キ ス ト を 直線上に配置す る の で は な く 、 任意の パ ス 上に配置す る こ と も で き ま す。
PDFlib は個々のキ ャ ラ ク タ をパ ス上に、テ キ ス ト がそのパ ス の曲線に沿 う よ う に配置 し ま
す。パ ス上のテ キ ス ト を作成す る には fit_textline( ) の textpath オプシ ョ ン を用い ます。パ
ス はそれ以前に作成済みであ る 必要があ り 、 パ ス ハン ド ルで表 し ます。 パ ス ハン ド ルは、
add_path_point( ) お よ び関連す る パ ス オブジ ェ ク ト 関数群で明示的にパ ス を構築す る か、
あ る いは既存の ラ ス タ 画像内の ク リ ッ ピ ン グ パ ス に対す る ハ ン ド ル を 取得す る こ と に
よ っ て作成で き ます。 下記の コ ー ド は、 1 個のパ ス を作成 し 、 テ キ ス ト を そのパ ス上に配
置 し ます (図 8.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");
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/text_on_a_path ト ピ ッ ク にあ り ま
す。
Dis
t
er with sen
sa
tio
図 8.10
パス上のテキス ト
l ra
nge !
Long
Glid
e
nc
na
a
画像の ク リ ッ ピ ン グパス を用いて テキス ト を配置 パ ス関数群でパ ス オブジ ェ ク ト を手
作業で構築す る のではな く 、 画像か ら ク リ ッ ピ ン グパス を抽出 し て、 そのパ ス上にテ キ ス
ト を配置す る こ と も で き ます。 こ の画像は honorclippingpath オプシ ョ ン と と も に読み込
んであ る 必要があ り 、 かつ、 求め る パ ス がその画像のデフ ォ ル ト の ク リ ッ ピ ン グパ ス でな
い場合には clippingpathname も load_image( ) に与え る 必要があ り ます :
8.1 テキス ト 行の配置 と はめ込み
189
image = p.load_image("auto", "image.tif", "clippingpathname={path 1}");
/* 画像のクリッピングパスからパスオブジェクトを作成 */
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}");
パス と テキス ト の間 を あけ る デフ ォ ル ト では、 PDFlib は個々のキ ャ ラ ク タ をパ ス上に
配置 し ますので、 グ リ フ と パス の間にはあ き はあ り ません。 パ ス と テ キ ス ト の間を あ けた
い と き は、 単純にキ ャ ラ ク タ 枠を延長す る こ と がで き ます。 こ れは、 matchbox オプシ ョ
ンの boxheight サブオプシ ョ ンでキ ャ ラ ク タ 枠の縦延長を指定す る こ と で簡単に実現で き
ます。 下記のオプシ ョ ン リ ス ト はデ ィ セ ン ダ を考慮に入れてい ます (図 8.11 参照) :
Di s
sa
図 8.11
パス上のテキス ト で、 パス と テ
キス ト の間を あけた
ti o
nge!
Long
e r w it h s e n
l ra
190
nc
li d
G
e
na
ta
p.fit_textline("Long Distance Glider with sensational range!", x, y,
"textpath={path=" + path + "} position={center bottom} " +
"matchbox={boxheight={capheight descender}}");
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
8.2 複数行のテキス ト フ ロ ー
1 行のテ キ ス ト をページ上に配置す る 機能だけでな く 、 PDFlib は、 任意の長 さ のテ キ ス ト
を配置で き る テ キ ス ト フ ロ ー と い う 機能に も 対応 し てい ます。 テ キ ス ト は何行に も 、 何段
に も 、 あ る いは何ページに も わた る こ と がで き 、 ま たその見ばえは さ ま ざ ま なオプシ ョ ン
で制御す る こ と がで き ます。 フ ォ ン ト ・ サ イ ズ ・ 色 と いっ た文字属性を、 テ キ ス ト の ど の
部分にで も 適用す る こ と がで き ます。 テ キ ス ト の両端揃え ・ 片端揃えや、 段落の イ ンデン
ト や、 タ ブ位置 と い っ たテ キ ス ト フ ロ ー属性を指定で き ます。 テ キ ス ト の中に ソ フ ト ハ イ
フ ンで示 し た改行機会が考慮 さ れます。 図 8.12 ・ 図 8.13 は、 請求書の さ ま ざ ま な部分が
ページ上にテ キ ス ト フ ロ ー機能を用いて配置で き てい る さ ま を例示 し た も のです。 こ う し
た出力を制御す る ためのオプシ ョ ンについて、 以下の項で詳 し く 説明 し ます。
図 8.12
テキス ト フ ロー
の組版
Kraxi Systems, Inc.
Paper Planes
17, Aviation Road
Paperfield
Phone 7079-4301
Fax 7079-4302
Kraxi Systems, Inc.
17, Aviation Road
[email protected]
www.kraxi.com
Paperfield
John Q. Doe
255 Customer Lane
Suite B
12345 User Town
Everland
INVOICE
hortabmethod
tabalignment
ruler
ruler
right
30
left
45
ITEM
1
2
3
4
5
6
7
DESCRIPTION
Super Kite
Turbo Flyer
Giga Trash
Bare Bone Kit
Nitty Gritty
Pretty Dark Flyer
Free Gift
14.03.2004
right
275
right
375
right
475
QUANTITY
2
5
1
3
10
1
1
PRICE
20,00
40,00
180,00
50,00
20,00
75,00
0,00
AMOUNT
40,00
200,00
180,00
150,00
200,00
75,00
0,00
845,00
leftindent
= 55
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
replaces the product under warranty. This warranty is not transferable. Returns or
exchanges are not possible for wet products.
parindent
= 7%
Have a look at our new paper plane models!
Our paper planes are the ideal way of passing the time. We offer revolutionary
new developments of the traditional common paper planes. If your lesson,
conference, or lecture turn out to be deadly boring, you can have a wonderful time
with our planes. All our models are folded from one paper sheet.
They are exclusively folded without using any adhesive. Several models are
equipped with a folded landing gear enabling a safe landing on the intended location
provided that you have aimed well. Other models are able to fly loops or cover long
distances. Let them start from a vista point in the mountains and see where they
touch the ground.
leading
= 140%
leftindent = 75
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.
2.
Giant Wing
An unbelievable sailplane! It is amazingly robust and can even do
leftindent = 105
alignment
= left
alignment
= justify
rightindent
= 60
minlinecount
=2
8.2 複数行のテキス ト フ ロー
191
複数行のテ キ ス ト フ ロ ーは、 1 つの矩形 (はめ込み枠 と い う ) 内に も 複数の矩形内に も
配置す る こ と がで き ます。 こ のはめ込み枠は 1 ページ上にあ っ て も 複数ページ上にあ っ て
も か ま い ません。テ キ ス ト フ ロ ーをページ上に配置す る には以下の手順を踏む必要があ り
ます。
> 関数 add_textflow( ) が、テ キ ス ト を一部分ずつ、その組版オプシ ョ ン と と も に受け入れ
て、 そ し て 1 つのテ キ ス ト フ ロ ーオブジ ェ ク ト を作成 し てハン ド ルを返 し ます。 ま た
は関数 create_textflow( ) が、 組版制御のための イ ン ラ イ ンオプシ ョ ン を含む こ と ので
き る テ キ ス ト の全体を、 一度の呼び出 し で分析 し ます。 こ れ ら の関数ではページ上に
テ キ ス ト は配置 さ れません。
> 関数 fit_textflow( ) が、 こ のテ キ ス ト フ ロ ーの全部ない し 一部を、 与え ら れたはめ込み
枠内に配置 し ます。 すべてのテ キ ス ト を配置す る には、 こ の段階を数回繰 り 返す必要
があ る か も し れ ません。 その場合は こ の関数を呼び出すたびに新 し いはめ込み枠を与
え る 必要があ る で し ょ う 。 こ のはめ込み枠は同 じ ページにあ っ て も 別のページにあ っ
て も か ま い ません。
> 関数 delete_textflow( ) が、 テ キ ス ト フ ロ ーを文書内に配置 し た後に、 こ のテ キ ス ト フ
ロ ーオブジ ェ ク ト を削除 し ます。
テ キ ス ト フ ロ ーを作成す る ための関数 add/create_textflow( ) は、組版処理を制御す る ため
の さ ま ざ ま なオプシ ョ ンに対応 し てい ます。 こ のオプシ ョ ンは関数のオプシ ョ ン リ ス ト で
与え る こ と も で き ます し 、 あ る いは create_textflow( ) を使 う と き はテ キ ス ト 内に 「イ ン ラ
イ ン」 オプシ ョ ン と し て入れ込む こ と も で き ます。 info_textflow( ) を使 う と 、 組版の結果
や、 その他テ キ ス ト フ ロ ーに関す る た く さ んの詳細を取得する こ と がで き ます。 以下、 テ
キ ス ト フ ロ ーの配置について、 い く つかの よ く あ る 応用を例に し て説明 し ます。 テ キ ス ト
フ ロ ーオプシ ョ ンの完全な一覧は PDFlib API リ フ ァ レ ン スにあ り ます。
add/create_textflow( ) で対応 し てい る オプシ ョ ンの中には fit_textline( ) と 同様の も のが
た く さ んあ り ます。 ですか ら 183 ページ 「8.1 テ キ ス ト 行の配置 と はめ込み」 の例を あわ
せて よ く 把握 し てお く と よ いで し ょ う 。 以下の項では、 複数行テ キ ス ト に関係のあ る オプ
シ ョ ンだけ を解説 し ます。
ク ッ ク ブ ッ ク テキス ト 出力の諸側面に関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの text_output カ テ
ゴ リ にあ り ます。
fillcolor, charspacing,
fontsize, fontname
aerobatics. But it is best suited to gliding.
192
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
aviation you can show your interest by letting it land on your teacher's
desk.
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 8.13
テキス ト フ ロー
の組版
8.2.1 テキス ト フ ロ ー をはめ込み枠に配置
テ キ ス ト 枠に対す る はめ込み枠は、 テ キ ス ト が配置 さ れ る 領域です。 それは fit_textflow( )
の llx ・ lly ・ urx ・ ury 引数で指定 さ れ る 矩形領域 と し て定義 さ れます。
テキス ト を 1 つのはめ込み枠に配置 簡単な例か ら 始め ま し ょ う 。下記の コ ー ド は、add_
textflow( ) への呼び出 し を 2 回使っ て、 ボール ド テ キ ス ト の部分 と 標準テ キ ス ト の部分を
く っつけ てい ま す。 フ ォ ン ト ・ 文字サ イ ズ ・ エ ン コ ーデ ィ ン グ を明示的に指定 し てい ま
す。 1 回目の add_textflow( ) への呼び出 し では、 -1 を与えれば、 テ キ ス ト フ ロ ーハン ド ル
が返っ て き ますので、その後に も し ま た add_textflow( ) を呼び出す と き があ る な ら それが
使え ます。 text1 ・ text2 には、 印字 し たい実際のテ キ ス ト が入っ てい る も の と し ます。
fit_textflow( ) を使っ て、 で き あがっ たテ キ ス ト フ ロ ーをページ上のはめ込み枠に、 デ
フ ォ ル ト の組版オプシ ョ ン を用いて配置 し ます。
/* テキストをボールドフォントで追加 */
tf = p.add_textflow(-1, text1, "fontname=Helvetica-Bold fontsize=9 encoding=unicode");
if (tf == -1)
throw new Exception("エラー:" + p.get_errmsg());
/* テキストを標準フォントで追加 */
tf = p.add_textflow(tf, text2, "fontname=Helvetica fontsize=9 encoding=unicode");
if (tf == -1)
throw new Exception("エラー:" + p.get_errmsg());
/* Place all text */
result = p.fit_textflow(tf, left_x, left_y, right_x, right_y, "");
if (!result.equals("_stop"))
{ /* ... */}
p.delete_textflow(tf);
テキス ト を複数ページ上の 2 つのはめ込み枠に配置 fit_textflow( ) で配置 し た テ キ ス ト
がはめ込み枠内に収ま り き ら なか っ た と き は、出力は中断 さ れて関数は文字列 _boxfull を
返 し ます。 PDFlib はすでに配置 し たテ キ ス ト の量を記憶 し ていて、 こ の関数が再び呼ばれ
た時には残 り のテ キ ス ト を引 き 続 き 配置 し ます。 こ の他に、 新規ページ を作成す る 必要 も
あ る か も し れません。 次の コ ー ド は、 1 つない し 複数のページ上の、 ページ あ た り 2 つの
はめ込み枠に、 1 つのテ キ ス ト フ ロ ーを、 テ キ ス ト をすべて配置 し おわ る ま で配置す る 方
法を例示 し た も のです (図 8.14 参照)。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/starter_textflow ト ピ ッ ク にあ り ま
す。
/* テキスト全部が配置されるまで回る。配置するべきテキストがまだあるなら新規ページを作成。
* 全ページに2段組を作成。
*/
do
{
String optlist = "verticalalign=justify linespreadlimit=120%";
p.begin_page_ext(0, 0, "width=a4.width height=a4.height");
/* 1段目に流し込み */
result = p.fit_textflow(tf, llx1, lly1, urx1, ury1, optlist);
/* まだテキストがあるなら2段目に流し込み */
8.2 複数行のテキス ト フ ロー
193
if (!result.equals("_stop"))
result = p.fit_textflow(tf, llx2, lly2, urx2, ury2, optlist);
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);
8.2.2 段落の組版のオ プ シ ョ ン
上の例では段落に、 デフ ォ ル ト の設定を用い ま し た。 デフ ォ ル ト は左揃え、 行送 り 100%
(文字サ イ ズその ま ま)、 な ど と な っ てい ます。
段落の組版を調整 し たいな ら 、 add_textflow( ) にオプシ ョ ン を追加で き ます。 た と え
ばテ キ ス ト を左余白か ら 15 単位、 右余白か ら 10 単位、 イ ンデン ト し たい と し ます。 各段
落の先頭行は さ ら に 20 単位 イ ンデン ト し ま し ょ う 。 テ キ ス ト を両端揃え と し 、 行送 り は
140% に拡げま し ょ う 。 そ し て文字サ イ ズ を 8 ポ イ ン ト に下げます。 こ れを実現す る には、
add_textflow( ) のオプシ ョ ン リ ス ト を下記の と お り 拡張 し ます (図 8.15 参照)。
はめ込み枠 1
ページ 1
1 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 2 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
3 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 4 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
5 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 6 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
7 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
194
はめ込み枠 2
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 8 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
9 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 10 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
11 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 12 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
13 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 14 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
はめ込み枠 3
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
15 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 16 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
17 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 18 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
19 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 20 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
はめ込み枠 4
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
ページ 2
21 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 22 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
23 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 24 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
25 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 26 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
27 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 8.14
テキス ト フ ローを
2 つのはめ込み枠
に配置
leftindent = 15
parindent = 20
leading = 140%
図 8.15
オプ シ ョ ン を用いて
テキス ト フ ローを配置
String
Have a look at our new paper plane models! Our paper planes
are the ideal way of passing the time. We offer revolutionary new
developments of the traditional common paper planes.
If your lesson, conference, or lecture turn out to be deadly boring,
you can have a wonderful time with our planes. All our models are
folded from one paper sheet.
They are exclusively folded without using any adhesive. Several
models are equipped with a folded landing gear enabling a safe landing
on the intended location provided that you have aimed well. Other
models are able to fly loops or cover long distances. Let them start
from a vista point in the mountains and see where they touch the
ground.
rightindent = 1 0
alignment =
justify
optlist =
"leftindent=15 rightindent=10 parindent=20 alignment=justify " +
"leading=140% fontname=Helvetica fontsize=8 encoding=unicode";
8.2.3 イ ン ラ イ ン オ プ シ ョ ン リ ス ト と マ ク ロ
図 8.15 のテ キ ス ト は ま だ完璧ではあ り ません。 見出 し 「Have a look at our new paper plane
models!」 を独立 し た行に し て、 フ ォ ン ト も も っ と 大 き く し て、 そ し て中央揃えに し ま し ょ
う 。 こ れを実現す る にはい く つかの方法があ り ます。
create_textflow( ) に イ ン ラ イ ン オ プ シ ョ ン リ ス ト を与え る こ こ ま では組版オ プ シ ョ ン
は、 関数に直接与え る オプシ ョ ン リ ス ト 内で指定 し て き ま し た。 今回 も こ れ と 同 じ や り 方
を続け る な ら ば、 テ キ ス ト を分割 し て二度の呼び出 し に分け る 必要があ り ます。 一度目で
見出 し を、 二度目で残 り のテ キ ス ト を配置す る わけです。 ですが、 場合に よ っ ては、 た と
えば書式変更箇所が多い と き な どは、 こ の方法は少々面倒か も し れません。
それな ら ば、add_texflow( ) のかわ り に create_textflow( ) を使 う こ と がで き ます。create_
textflow( ) はテ キ ス ト と 、 テ キ ス ト の中に直接入れ込まれた イ ン ラ イ ン オプシ ョ ン と い う
も のを解釈 し ます。 こ れは単純にオプシ ョ ン を テ キ ス ト 内に入れ込む と い う こ と です。 イ
ン ラ イ ン オプシ ョ ン リ ス ト はテ キ ス ト 本体の一部 と し て与え ら れ ます。 デフ ォ ル ト では、
イ ン ラ イ ンオプシ ョ ンはキ ャ ラ ク タ 「<」 と 「>」 では さ みます。 それでは次の よ う に、 見
出 し と 残 り の段落に対す る オプシ ョ ン を テ キ ス ト 本体の中に入れ込んでみま し ょ う 。
注 以下作成例ではすべて、 イ ン ラ イ ン オプ シ ョ ン リ ス ト に色をつけて示 し ます。 改段落キ ャ
ラ ク タ は矢印で図示 し ます。
<leftindent=15 rightindent=10 alignment=center fontname=Helvetica fontsize=12
encoding=winansi>Have a look at our new paper plane models!
<alignment=justify fontname=Helvetica leading=140% fontsize=8 encoding=winansi>
Our paper planes are the ideal way of passing the time. We offer
revolutionary new developments of the traditional common paper planes.
<parindent=20>If your lesson, conference, or lecture
turn out to be deadly boring, you can have a wonderful time
with our planes. All our models are folded from one paper sheet.
They are exclusively folded without using any adhesive. Several
models are equipped with a folded landing gear enabling a safe
landing on the intended location provided that you have aimed well.
Other models are able to fly loops or cover long distances. Let them
start from a vista point in the mountains and see
where they touch the ground.
8.2 複数行のテキス ト フ ロー
195
オプシ ョ ン リ ス ト をは さ むキ ャ ラ ク タ は begoptlistchar ・ endoptlistchar オプシ ョ ンで再定
義す る こ と がで き ます。begoptlistchar オプシ ョ ンにキーワー ド none を与え る と オプシ ョ
ン リ ス ト の検出は完全に無効にな り ます。 こ れは、 テ キ ス ト が イ ン ラ イ ンオプシ ョ ン リ ス
ト を ま っ た く 含ま ない場合に、 「<」 ・ 「>」 を確実に通常のキ ャ ラ ク タ と し て処理 さ せたい
と き に有用です。
記号キ ャ ラ ク タ と イ ン ラ イ ン オ プ シ ョ ン リ ス ト 記号キ ャ ラ ク タ はテ キ ス ト フ ロ ーにお
いて、 イ ン ラ イ ンオプシ ョ ン リ ス ト と 組み合わせ も 使 う こ と がで き ます。 イ ン ラ イ ンオプ
シ ョ ン リ ス ト を開始す る キ ャ ラ ク タ に対す る コ ー ド (デフ ォ ル ト では 「<」 U+003C) は、
encoding=builtin に よ る フ ォ ン ト に対す る テ キ ス ト 内では記号 コ ー ド と し て解釈 さ れませ
ん。 こ れ と 同 じ コ ー ド の記号グ リ フ を選択す る には、 テ キ ス ト フ ォ ン ト に対 し て利用可能
な回避策がその ま ま使え ます。 すなわち、 開始キ ャ ラ ク タ を begoptlistchar オプシ ョ ンで
再定義す る か、 あ る いは textlen オプシ ョ ン を用いて記号グ リ フ の数を指定 し ます。 なお、
先述の理由に よ り 、 文字参照 (&lt; 等) は回避策 と し ては使え ません。
マ ク ロ 上記のテ キ ス ト はい く つかの種類の段落でで き てい ます。すなわち見出 し と 本文
であ り 、 本文には さ ら に イ ンデン ト のあ る も の と ない も の と があ り ます。 こ う し た各種の
段落を それぞれの形に組版 し てい く わけですが、 し か し テ キ ス ト フ ロ ーが も っ と 長ければ
同 じ 指定を何度 も し なければな り ません。段落替えのたびに同 じ イ ン ラ イ ンオプシ ョ ン群
を何度 も 書かな く て も すむ よ う にす る には、 イ ン ラ イ ンオプシ ョ ン群を マ ク ロ に ま と めれ
ば、 テ キ ス ト 内か ら そのマ ク ロ を名前で参照す る こ と がで き ます。 図 8.16 に示す よ う な 3
つのマ ク ロ を定義 し ま し ょ う 。 H1 は見出 し 用、 Body は本文段落用、 Body_indented は イ
ンデン ト す る 段落用です。 マ ク ロ を利用す る には、 キ ャ ラ ク タ & を マ ク ロ 名の前につけ
た も のを オプシ ョ ン リ ス ト に書 き ます。 次の コ ー ド では、 上で用いた イ ン ラ イ ンオプシ ョ
ン群に従っ て 3 つのマ ク ロ を定義 し 、 それを テ キ ス ト 内で利用 し てい ます。
<macro {
H1 {leftindent=15 rightindent=10 alignment=center
fontname=Helvetica fontsize=12 encoding=winansi}
Body {leftindent=15 rightindent=10 alignment=justify leading=140%
fontname=Helvetica fontsize=8 encoding=winansi}
Body_indented {parindent=20 leftindent=15 rightindent=10 alignment=justify
leading=140% fontname=Helvetica fontsize=8 encoding=winansi}
}>
<&H1>Have a look at our new paper plane models!
H1
Body
Body_indented
図 8.16
イ ン ラ イ ン オプ シ ョ
ン と マ ク ロの併用
196
Have a look at our new paper plane models!
Our paper planes are the ideal way of passing the time. We offer
revolutionary new developments of the traditional common paper
planes.
If your lesson, conference, or lecture turn out to be deadly boring,
you can have a wonderful time with our planes. All our models are
folded from one paper sheet.
They are exclusively folded without using any adhesive. Several
models are equipped with a folded landing gear enabling a safe landing
on the intended location provided that you have aimed well. Other
models are able to fly loops or cover long distances. Let them start
from a vista point in the mountains and see where they touch the
ground.
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
<&Body>Our paper planes are the ideal way of passing the time. We offer
revolutionary new developments of the traditional common paper planes.
<&Body_indented>If your lesson, conference, or lecture
turn out to be deadly boring, you can have a wonderful time
with our planes. All our models are folded from one paper sheet.
They are exclusively folded without using any adhesive. Several
models are equipped with a folded landing gear enabling a safe
landing on the intended location provided that you have aimed well.
Other models are able to fly loops or cover long distances. Let them
start from a vista point in the mountains and see
where they touch the ground.
オ プ シ ョ ンの明示的設定 注意 し な ければな ら ないのは、 マ ク ロ の中で設定 し なか っ た
オプシ ョ ン ではすべて前の値が保持 さ れ る と い う こ と です。 オプシ ョ ン が勝手に 「継承」
さ れておか し な副作用を起 こ さ ない よ う に し たければ、そのマ ク ロ が必要 と す る 設定をす
べて明示的に指定す る 必要があ り ます。そ う すればそのマ ク ロ が他のオプシ ョ ン リ ス ト と
の順序や組み合わせにかかわ ら ずいつ も 確実に同 じ よ う に動作す る よ う にす る こ と がで
き ます。
あ る いは、 こ の動作を逆に利用 し て、 あ る 特定の設定群についてはあ え て明示的に与
えずに、それぞれの利用箇所におけ る 設定が保持 さ れ る よ う にす る と い う 方式 も あ り え ま
す。 た と えば、 フ ォ ン ト 名は指定す る けれど も fontsize オプシ ョ ンは与え ない と い う マ ク
ロ を作っ て も よ いのです。 す る と 、 文字サ イ ズ をつねに前のテ キ ス ト と 同 じ にす る こ と が
で き ます。
イ ン ラ イ ン オ プ シ ョ ンか、 関数の引数 と し て オ プ シ ョ ン を渡すか テ キ ス ト フ ロ ーを利
用す る 際には、 テ キ ス ト がプ ロ グ ラ ム コ ー ド 内に リ テ ラ ルに書かれてい る か、 それ と も ど
こ か外部の情報源か ら 来 る か と い う のは重大な違いです。 ま た、 組版指示がテ キ ス ト と は
別に あ る か、 それ と も テ キ ス ト 内に あ る か と い う の も 重大です。 たいていのア プ リ ケー
シ ョ ンではテ キ ス ト はデー タ ベース の よ う な何 ら かの外部情報源か ら 来 る で し ょ う 。現実
的には次の 2 通 り の状況が考え ら れます。
> テ キ ス ト 内容が外部情報源か ら 来て、 組版オプシ ョ ンはプ ロ グ ラ ム内にあ る 場合 : 実
行時に、 外部情報源か ら 来 る 短いテ キ ス ト 群を プ ロ グ ラ ム内で合成 し 、 それを組版オ
プシ ョ ン群 と (関数呼び出 し の所で) 組み合わせます。
> テ キ ス ト 内容 も 組版オプシ ョ ン も 外部情報源か ら 来 る 場合 : 大量のテ キ ス ト が組版オ
プシ ョ ン群を含んだ状態で外部情報源か ら 来ます。 組版はテ キ ス ト 内の イ ン ラ イ ン オ
プシ ョ ン群に よ っ て与え ら れ ます。 イ ン ラ イ ン オプシ ョ ンは単純なオプシ ョ ン と し て
書かれてい る こ と も あれば、 マ ク ロ と し て書かれてい る こ と も あ り え ます。 マ ク ロ に
関 し ては、 マ ク ロ 定義 と マ ク ロ 呼び出 し と を区別 し て考え る 必要があ り ます。 そ う す
る と 、 面白い中間的形態が作 り 出せます。 すなわち、 テ キ ス ト 内容は外部情報源か ら
来て組版のためのマ ク ロ 呼び出 し も その中に含んでい る のですが、 マ ク ロ 定義は別に
用意 し ておいて実行時には じ めて与え る よ う にす る のです。 こ の方式の利点は、 外部
のテ キ ス ト に手を加えずに組版を簡単に変更で き る こ と です。 た と えばグ リ ーテ ィ ン
グ カー ド を作 る 際な ど、 さ ま ざ ま な ス タ イ ルを マ ク ロ で定義 し ておけば、 カー ド の雰
囲気を ロ マ ンチ ッ ク に し た り 、 テ ク ニ カルに し た り 、 その他 さ ま ざ ま に変え る こ と が
でき るでし ょ う 。
8.2.4 タ ブ位置
次の例では タ ブキ ャ ラ ク タ を用いて左寄せ ・ 右寄せの列のあ る 簡単な表を配置 し ます。 表
は次の よ う な複数行のテ キ ス ト を持ち、 各項目が互いに タ ブキ ャ ラ ク タ (矢印で示す) で
区切っ て あ り ます。
8.2 複数行のテキス ト フ ロー
197
hortabmethod ruler
tabalignment left
ruler 30
図 8.17
テキス ト を
表 と し て配置
ITEM
1
2
3
DESCRIPTION
Super Kite
Turbo Flyer
Giga Trash
ITEM
DESCRIPTION
QUANTITY
1
Super Kite
2
20.00
2
Turbo Flyer
5
40.00
3
Giga Trash
1
180.00
TOTAL 420.00
right
150
right
250
right
350
QUANTITY
2
5
1
PRICE
20.00
40.00
180.00
AMOUNT
40.00
200.00
180.00
TOTAL 420.00
PRICE
40.00
200.00
180.00
AMOUNT
こ の簡単な表を配置す る には、 _add/create_textflow( ) で以下のオプシ ョ ン リ ス ト を用い
ます。 ruler オプシ ョ ンが タ ブ位置を定義 し てお り 、 tabalignment が タ ブ位置の整列方向
を指定 し てお り 、 hortabmethod オプシ ョ ンが タ ブ位置の処理方式を指定 し てい ます (出
力を図 8.17 に示 し ます)。
String optlist =
"ruler={30
150
250 350} " +
"tabalignment={left right right right} " +
"hortabmethod=ruler leading=120% fontname=Helvetica fontsize=9 encoding=winansi";
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/tabstops_in_textflow ト ピ ッ ク にあ
り ます。
注 複雑な表を作るには PDFlib の表機能を推奨 し ます (211 ページ 「8.3 表の組版」 参照)。
はめ込み枠 1
ページ 1
1 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 2 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
3 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 4 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
5 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 6 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
7 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
198
はめ込み枠 2
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 8 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
9 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 10 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
11 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 12 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
13 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 14 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
はめ込み枠 3
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
15 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 16 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
17 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 18 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
19 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 20 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
はめ込み枠 4
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
ページ 2
21 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 22 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
23 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 24 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
25 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim
id est laborum. 26 Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
27 Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 8.18
テキス ト フ ローを
2 つのはめ込み枠
に配置
8.2.5 番号 リ ス ト と 段落間隔
イ ン ラ イ ンオプシ ョ ン leftindent を用いて番号 リ ス ト を組む方法を下記に示 し ます(図8.19
参照)。
1.<leftindent 10>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.
<leftindent 0>2.<leftindent 10>Giant Wing: An unbelievable sailplane! It is amazingly
robust and can even do aerobatics. But it is best suited to gliding.
<leftindent 0>3.<leftindent 10>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.
ク ッ ク ブ ッ ク 箇条書き リ ス ト と 番号 リ ス ト の完全な コ ー ド サン プルがク ッ ク ブ ッ クの
bulleted_list ・ text_output/numbered_list ト ピ ッ ク にあ り ます。
text_output/
イ ンデン ト 値を設定 し た り 取 り 消 し た り し なければな ら ないのが面倒です。 し か も 各段落
ご と に行わなければな ら ないのですか ら なお さ ら です。 も っ と エ レ ガ ン ト な解決法 と し て
は list と い う マ ク ロ を定義 し ます。 あわせて便宜のためマ ク ロ indent を定義 し 、 定数 と し
て使用 し ます。 下記の よ う なマ ク ロ の定義にな り ます。
<macro {
indent {25}
list {parindent=-&indent leftindent=&indent hortabsize=&indent
hortabmethod=ruler ruler={&indent}}
}>
<&list>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.
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.
leftindent オプシ ョ ンで左余白か ら の間隔を指定 し てい ます。 parindent オプシ ョ ンには、
leftindent を負値に し た も のを設定 し 、 各段落の先頭行の イ ンデン ト を打ち消 し てい ます。
オプシ ョ ン hortabsize ・ hortabmethod ・ ruler では、 leftindent に合わせた タ ブ位置を指定
し てい ます。 こ れに よ っ て、 番号の後のテ キ ス ト は、 leftindent で指定 し た分だけ イ ンデ
ン ト さ れ る よ う にな り ます。図 8.20 に parindent・leftindent オプシ ョ ンの作用を示 し ます。
ニつの段落の間隔 を設定 多 く の場合、 と な り あ っ た段落の間隔は、 段落の中の行間 よ
り も 、 広 く と り たい も のです。 こ れ を 実現す る には、 空の行を挿入 し て (nextline オプ
シ ョ ンで作成で き ます) 、 その空行に適切な行送 り 値を設定 し ます。 こ の値は、 直前の段
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.
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.
図 8.19
番号 リ ス ト
8.2 複数行のテキス ト フ ロー
199
leftindent = &indent
parindent = – &indent 1.
2.
図 8.20
マ ク ロに よ る
番号 リ ス ト
3.
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.
Giant Wing: An unbelievable sailplane! It is amazingly robust and
can even do aerobatics. But it is best suited to gliding.
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.
落の最終行のベース ラ イ ン と 、 空行のベース ラ イ ン と の間隔です。 下記の作成例は、 2 つ
の段落の間に 80% のア キ を と り ます ( こ こ で 100% は、 も っ と も 最近に設定 さ れた文字サ
イ ズの値に等 し い)。
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.
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/distance_between_paragraphs ト ピ ッ
ク にあ り ます。
8.2.6 制御キ ャ ラ ク タ と キ ャ ラ ク タ マ ッ ピ ン グ
テキス ト フ ロ ー内で制御キ ャ ラ ク タ テ キ ス ト フ ロ ーの中では さ ま ざ ま な キ ャ ラ ク タ が
特別な扱いを受け ます。 PDFlib はシ ン ボ リ ッ ク キ ャ ラ ク タ 名に対応 し てお り 、 こ れはその
文字 コ ー ド のかわ り と し て charmapping オプシ ョ ン (テ キ ス ト を処理す る 前にその中の
キ ャ ラ ク タ を置換で き る オプシ ョ ン。 後述) 内で用い る こ と がで き ます。 表 8.1 に、 テ キ
ス ト フ ロ ー関数群が評価す る すべての制御キ ャ ラ ク タ を、それぞれのシ ン ボ リ ッ ク 名 と 意
味説明 と と も に挙げて あ り ます。 1 つのオプシ ョ ン リ ス ト の中で同 じ オプシ ョ ン を複数回
使 う こ と はで き ませんが、 複数のオプシ ョ ン リ ス ト を連続 し て与え る こ と は可能です。 た
と えば次の並びは空行を作成 し ます。
<nextline><nextline>
キ ャ ラ ク タ ・ 連続キ ャ ラ ク タ のマ ッ ピ ン グ / 除去 charmapping オプシ ョ ン を使 う と 、テ
キ ス ト 内のキ ャ ラ ク タ を別のキ ャ ラ ク タ にマ ッ プ し た り 除去 し た り す る こ と がで き ます。
まずは簡単な場合か ら 始め る こ と に し て、テ キ ス ト 内のすべての タ ブを スペース にマ ッ プ
し てみま し ょ う 。 こ れを行 う には charmapping オプシ ョ ン を次の よ う に し ます。
charmapping={hortab space}
こ の コ マ ン ド ではシ ン ボ リ ッ ク キ ャ ラ ク タ 名 hortab ・ space を用いてい ま す。 すべての
キ ャ ラ ク タ 名の一覧を PDFlib API リ フ ァ レ ン スに挙げて あ り ます。 複数のマ ッ ピ ン グ を一
度に行 う には、 次の コ マ ン ド の よ う にすれば、 すべての タ ブ と 改行キ ャ ラ ク タ 列を スペー
ス に置換す る こ と がで き ます。
charmapping={hortab space
CRLF space
LF space
CR space}
次の コ マ ン ド はすべての ソ フ ト ハ イ フ ン を削除 し ます。
charmapping={shy {shy 0}}
200
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 8.1 テキス ト フ ロー内の制御キ ャ ラ ク タ と その意味
Unicode キ ャ ラ ク タ 実体名
(等価 VB 表現)
等価な テキ
ス ト フ ロー
オプ シ ョ ン
テキス ト フ ロー内における意味
U+0020
SP, space
space
単語揃え ・ 改行
U+00A0
NBSP, nbsp
(な し )
(no-break space) 改行 し ない空白文字
U+0009 (VbTab)
HT, hortab
(な し )
水平 タ ブ。 ruler ・ tabalignchar ・ tabalignment オプ シ ョ ンに
従 っ て処理 さ れます
U+002D
HY, hyphen
(な し )
単語のハイ フ ネーシ ョ ンのための区切 り 文字
U+00AD
SHY, shy
(な し )
(soft hyphen) ハイ フ ネーシ ョ ン機会。 改行箇所でのみ表示 さ
れる
U+000B
U+2028
VT, verttab
LS, linesep
nextline
(next line) 次の行へ移る
U+000A (VbLf)
U+000D (VbCr)
U+000D ・
U+000A (VbCrLf)
U+0085
U+2029
LF, linefeed
CR, return
CRLF
nextparagraph
(next paragraph) nextline と 同効果。 それに加え、 parindent
オプ シ ョ ンが次の行に影響 し ます
U+000C
(VbFormFeed)
FF, formfeed
return
fit_textflow( ) 関数が中断 し て文字列 _nextpage を返 し ます。
NEL, newline
PS, parasep
次の コ マ ン ド は タ ブ 1 つにつ き スペース 4 つに置換 し ます。
charmapping={hortab {space 4}}
次の コ マ ン ド は任意長の連続linefeed キ ャ ラ ク タ 列を 1個のlinefeed キ ャ ラ ク タ に縮め ます。
charmapping={linefeed {linefeed -1}}
次の コ マ ン ド は CRLF キ ャ ラ ク タ 列を それぞれ 1 個の スペース に置換 し ます。
charmapping={CRLF {space -1}}
こ の最後の例について も う 少 し 詳 し く 見てみま し ょ う 。た と えばど こ かか ら テ キ ス ト を受
け取っ た時、何か他の ソ フ ト ウ ェ アのせいで行の途中に改行がブ ツブ ツ入っ ていた と し た
ら 、 その ま ま では適切に組版がで き ません。 適切にはめ込み枠内での組版が行え る よ う に
す る には、 こ れ ら の改行を スペース に置換 し たい と こ ろです。 こ れを行 う ため、 任意長の
連続改行を 1 個の スペース に置換 し ま し ょ う 。は じ めのテ キ ス ト は次の よ う な も のだ と し
ます。
To fold the famous rocket looper proceed as follows:
Take a sheet of 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.
次の コ ー ド は、無駄な改行キ ャ ラ ク タ を置換 し た う えでで き た テ キ ス ト を組版す る 方法を
例示す る も のです。
8.2 複数行のテキス ト フ ロー
201
To fold the famous rocket looper proceed as follows:
Take a sheet of 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.
To fold the famous rocket looper proceed as follows: Take a sheet of
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.
図 8.21
上 : 無駄な改行のある テキス ト
下 : charmapping オプ シ ョ ン で
改行を置換 し た も の
/* オプションリストを作成 */
String optlist = "fontname=Helvetica fontsize=9 encoding=winansi alignment=justify "
"charmapping {CRLF {space -1}}"
/* テキストフローをはめ込み枠に配置 */
textflow = p.add_textflow(-1, text, optlist);
if (textflow == -1)
throw new Exception("エラー:" + p.get_errmsg());
result = p.fit_textflow(textflow, left_x, left_y, right_x, right_y, "");
if (!result.equals("_stop"))
{ /* ... */ }
p.delete_textflow(textflow);
図 8.21 に、 処置前のテ キ ス ト のテ キ ス ト フ ロ ー出力 と 、 charmapping オプシ ョ ンに よ る
改善後の出力 と を示 し ます。
8.2.7 ハ イ フ ネーシ ョ ン
PDFlib は自動的にテ キ ス ト のハ イ フ ネーシ ョ ン を行 う 能力は持ち ませんが、テ キ ス ト 内で
ソ フ ト ハ イ フ ン キ ャ ラ ク タ に よ っ て明示的にハ イ フ ネーシ ョ ン機会が示 さ れてい る 場合
にはそ こ で単語を分割す る こ と がで き ます。 ソ フ ト ハ イ フ ン キ ャ ラ ク タ は Unicode では位
置 U+00AD にあ り ますが、非 Unicode 環境で ソ フ ト ハ イ フ ン を指定 し たい場合に も 以下の
よ う ない く つかの方式が利用可能です。
> cp1250 ∼ cp1258(winansi を含む) と iso8859-1 ∼ iso8859-16 のすべてのエン コ ーデ ィ ン グ
では ソ フ ト ハ イ フ ンは 10 進で 173、 8 進で 255、 16 進で 0xAD にあ り ます。
> エ ン コ ーデ ィ ン グ が ソ フ ト ハ イ フ ン キ ャ ラ ク タ を 含ん で い な い場合は (た と え ば
macroman)、 &shy; を用い る こ と がで き ます。
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
202
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
Our paper planes are the ideal way of
passing the time. We offer revolutionary brand new developments of the
traditional common paper planes. If
your lesson, conference, or lecture turn
out to be deadly boring, you can have
a wonderful time with our planes. All
our models are folded from one paper
sheet. They are exclusively folded
without using any adhesive. Several
models are equipped with a folded
landing gear enabling a safe landing
on the intended location provided that
you have aimed well. Other models are
able to fly loops or cover long distances. Let them start from a vista point
in the mountains and see where they
touch the ground.
Our paper planes are the ideal way of
passing the time. We offer revolutionary
brand new developments of the
traditional common paper planes. If
your lesson, conference, or lecture turn
out to be deadly boring, you can have
a wonderful time with our planes. All
our models are folded from one paper
sheet. They are exclusively folded
without using any adhesive. Several
models are equipped with a folded
landing gear enabling a safe landing
on the intended location provided that
you have aimed well. Other models are
able to fly loops or cover long
distances. Let them start from a vista
point in the mountains and see where
they touch the ground.
図 8.22
テキス ト 両端揃えで ソ フ ト ハイ フ ン あ り 。
デ フ ォル ト 設定 と 広いはめ込み枠を使用。
図 8.23
テキス ト 両端揃えで ソ フ ト ハイ フ ン な し 。
デ フ ォ ル ト 設定 と 広いはめ込み枠を使用。
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
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.
図 8.22 に、テ キ ス ト 両端揃えのデフ ォ ル ト 設定で生成 さ れたテ キ ス ト 出力を示 し ます。完
璧な見ばえ と な っ てい ます。 なぜな ら 条件が最適だか ら です。 すなわちはめ込み枠枠が充
分広 く て、 し か も 、 明示的なハ イ フ ネーシ ョ ン機会を ソ フ ト ハ イ フ ン キ ャ ラ ク タ で指定 し
て あ る か ら です。 図 8.23 を見 る と 、 明示的 ソ フ ト ハ イ フ ンがない場合で も 出力はおおむ
ね良好です。 オプシ ョ ン リ ス ト はど ち ら の場合 も 次の よ う にな り ます。
fontname=Helvetica fontsize=9 encoding=winansi alignment=justify
8.2.8 標準改行アルゴ リ ズムの制御
PDFlib は洗練 さ れた改行アルゴ リ ズ ム を実装 し てい ます。改行アルゴ リ ズ ム を制御す る テ
キ ス ト フ ロ ーオプシ ョ ン を表 8.2 に挙げます
改行規則 1 つの単語、 ない し 両端を スペース キ ャ ラ ク タ で挟まれた一連のテ キ ス ト が、
1 つの行に収ま り き ら ない場合、 次の行へ送 る 必要が出て き ます。 こ の よ う な状況で改行
アルゴ リ ズ ムは、 ど のキ ャ ラ ク タ の後で改行が可能かを決定 し ます。
た と えば、 -12+235/8*45 の よ う な数式は絶対に途中で改行 さ れませんが、 一方、 文字列
PDF-345+LIBRARY はマ イ ナ ス の所で次行に送 ら れ る 可能性があ り ます。 テ キ ス ト が ソ フ ト
ハ イ フ ン キ ャ ラ ク タ を含んでいればその う ちのいずれかの後で改行 さ れ る 可能性 も あ り
ます。
括弧 と 引用符については、 開 く 所 と 閉 じ る 所 と で規則が異な り ます。 括弧や引用符が
開 く 所では改行機会は一切与え ら れません。 引用符については、 どれが開いて どれが閉 じ
てい る のか を判定す る 手段 と し て、 引用符を 2 つずつ数え てい く 仕組みにな っ てい ます。
イ ン ラ イ ン オプシ ョ ン リ ス ト は通常は改行機会を生 じ ません。 それは単語内でのオプ
シ ョ ン変更を可能にす る ためです。 ただ し 、 オプシ ョ ン リ ス ト が スペース キ ャ ラ ク タ で挟
まれてい る 場合はオプシ ョ ン リ ス ト の開始位置に改行機会があ り ます。 も し そのオプシ ョ
ン リ ス ト で改行が起 き て し か も alignment=justify の場合、オプシ ョ ン リ ス ト の前にあ る ス
ペース群は破棄 さ れます。 オプシ ョ ン リ ス ト の後の スペース群は保持 さ れ、 次行先頭に表
れます。
8.2 複数行のテキス ト フ ロー
203
表 8.2 改行アルゴ リ ズム制御用オプ シ ョ ン一覧
オプ シ ョ ン
説明
adjustmethod
(キーワー ド ) minspacing ・ maxspacing オプ シ ョ ン で指定 さ れた制限内で単語間を詰めた り 拡げた
り し て も テキス ト が 1 行に収ま り き ら ない時に行の調整に用いる方式。 デ フ ォル ト : auto。
auto
shrink ・ spread ・ nofit ・ split 方式を順に適用。
clip
nofit (後述) と 同 じ 。 ただ し 、 はめ込み枠の右端 (rightindent オプ シ ョ ン を考慮) から
はみ出 し た部分を切 り 落 と し 。
nofit
最後の単語を次行へ送る。 ただ し 、 残 さ れる (短い) 行が、 nofitlimit オプ シ ョ ン で指
定 さ れたパーセ ン ト 値よ り も短 く な ら ない場合に限る。 均等配置の段落で も若干がたつ
いて見え る場合あ り 。
shrink
単語が行内に収ま ら ない と き、 収ま る ま で テキス ト を圧縮。 ただ し shrinklimit の制限に
従い、 それで収ま り き ら なければ nofit 方式を適用。
split
最後の単語を次行へ送 ら ず、 強制的にハイ フ ネーシ ョ ンする。 テキス ト フ ォ ン ト の場合
はハイ フ ンキ ャ ラ ク タ を挿入 し 、 記号フ ォ ン ト の場合は し ない。
spread
最後の単語を次行へ送 り 、 残 さ れた (短い) 行を均等配置する よ う 単語内の字間を拡げ
る。 ただ し spreadlimit の制限に従い、 それで均等配置で き なければ nofit 方式を適用。
advancedlinebreak
(論理値) 複雑用字系で必要な高度な改行アルゴ リ ズムを有効に し ます。 これは タ イ文字等、 単語
境界を示すのに空白キ ャ ラ ク タ を使わない用字系で改行を行 う ために必要です。 オプ シ ョ ン
locale ・ script に従います。 デ フ ォル ト : false
avoidbreak
(論理値) true な ら、 avoidbreak が false に再設定 さ れる ま で一切改行 し ない。 デ フ ォ ル ト : false。
charclass
(対の リ ス ト 。 こ こ で対の 1 番目の要素はキーワー ド であ り 、 2 番目の要素は Unichar または
Unichar の リ ス ト ) 指定 さ れた Unichar が、 指定 さ れたキーワー ド に分類 さ れます。 キーワー ド は、
そのキ ャ ラ ク タ の改行時動作を下記のよ う に決定 し ます。
letter
文字 (a B 等) と 同様に動作
punct
句読点文字 (+ / ; : 等) と 同様に動作
open
開きかっ こ ([ 等) と 同様に動作
close
閉 じ かっ こ (] 等) と 同様に動作
default
すべてのキ ャ ラ ク タ 分類を PDFlib 内蔵のデ フ ォ ル ト に リ セ ッ ト
例 : charclass={ close » open « letter {/ : =} punct & }
hyphenchar
(Unichar ま たはキーワー ド ) 改行箇所で ソ フ ト ハイ フ ンに置き換わるべきキ ャ ラ ク タ の Unicode
値。 デ フ ォル ト : U+00AD (SOFT HYPHEN)、 ただ し それがフ ォ ン ト 内になければ U+002D
(HYPHEN-MINUS)。
locale
(キーワー ド ) advancedlinebreak= true の場合に、 ロー カ ラ イ ズ さ れた改行方式のために用い られ
る ロ ケール。 キーワー ド は 1 個ない し 複数の構成要素から成 っ てお り 、 その中でオプ シ ョ ナルな
コ ンポーネ ン ト は下線キ ャ ラ ク タ 「_」 で区切られます (その文法は NLS/POSIX ロ ケール ID と は
若干異な っ ています。) :
> 必須の、ISO 639-2 に従っ た 2 文字か 3 文字の小文字の言語 コ ー ド (www.loc.gov/standards/iso6392 を参照)。 例 : en (英語) ・ de ( ド イ ツ語) ・ ja (日本語)。 こ れは language オプ シ ョ ン と は異
な り ます。
> オプ シ ョ ナルな、 ISO 15924 に従っ た 4 文字の用字系 コ ー ド (www.unicode.org/iso15924/iso15924codes.html を参照)。 例 : Hira (ひ らがな) ・ Hebr (ヘブ ラ イ文字) ・ Thai ( タ イ文字)。
> オプ シ ョ ナルな、 ISO 3166 に従っ た 2 文字の大文字の国 コ ー ド (www.iso.org/iso/country_codes/
iso_3166_code_lists を参照)。 例 : DE ( ド イ ツ) ・ CH (ス イ ス) ・ GB (イ ギ リ ス)
キーワー ド _none は、 ロ ケール固有の処理が一切行われない こ と を指定 し ます。
ロ ケールを指定する こ と は、 タ イ文字等い く つかの用字系では高度な改行のために必須です。 デ
フ ォル ト : _none
例 : Thai ・ de_DE ・ en_US ・ en_GB
maxspacing
minspacing
204
(float またはパーセ ン ト 値) 単語間の最大間隔 ・ 最小間隔 (ユーザー座標で表すか、 スペースキ ャ
ラ ク タ の幅に対するパーセ ン ト 値で指定)。 単語間隔の算出時は こ の値を限度 と する (ただ し
wordspacing オプ シ ョ ンが加算 さ れる)。 デ フ ォ ル ト : minspacing=50%、 maxspacing=500%。
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 8.2 改行アルゴ リ ズム制御用オプ シ ョ ン一覧
オプ シ ョ ン
説明
nofitlimit
(float またはパーセ ン ト 値) nofit 方式における行の長 さ の下限 (ユーザー座標で表すか、 収める
はめ込み枠の幅に対するパーセ ン ト 値で指定)。 デ フ ォル ト : 75%。
shrinklimit
(パーセ ン ト 値) shrink 方式における テキス ト 圧縮の下限。 縮小率の算出時は こ の値を限度 と する。
ただ し 、 horizscaling オプ シ ョ ンの値を掛け算 さ れる。 デ フ ォ ル ト : 85%。
spreadlimit
(float またはパーセ ン ト 値) spread 方式における 2 文字間の間隔の上限 (ユーザー座標で表すか、
文字サイ ズに対するパーセ ン ト 値で指定)。 計算 さ れる文字間は charspacing オプ シ ョ ンの値に加
算 さ れる。 デ フ ォル ト : 0。
改行 を防 ぐ charclass オプシ ョ ン を使 う と 、 テ キ ス ト フ ロ ーが特定のキ ャ ラ ク タ の後で
改行 さ れ る のを防 ぐ こ と がで き ます。 た と えば、 下記のオプシ ョ ンはキ ャ ラ ク タ / の直後
での改行を防ぎ ます。
charclass={letter /}
ひ と つなが り のテ キ ス ト が複数行に泣 き 別れて し ま う のを防ぐ には、それを avoidbreak ∼
noavoidbreak で く く る と い う 方法があ り ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/avoid_linebreaking ト ピ ッ ク にあ り
ます。
日中韓テキス ト の組版 テ キ ス ト フ ロ ーエ ン ジ ン は、 日中韓テ キ ス ト を扱え る よ う に作
ら れてい る ので、 Unicode 標準の通 り 、 日中韓キ ャ ラ ク タ を表意文字 と し て適切に取 り 扱
い ます。 その結果、 日中韓テ キ ス ト はけ っ し てハ イ フ ネーシ ョ ン さ れません。 組版の品質
を高め る ため、 日中韓テ キ ス ト でテ キ ス ト フ ロ ーを使 う と き は、 下記の組版オプシ ョ ン を
推奨 し ます。 こ う す る と 、 欧文テ キ ス ト が混在 し ていて も そ こ でハ イ フ ネーシ ョ ンが行わ
れな く な り 、 ま た、 均等に間隔を あ けた テ キ ス ト 出力が生成 さ れます。
hyphenchar=none
alignment=justify
shrinklimit=100%
spreadlimit=100%
縦書 き はテ キ ス ト フ ロ ーでは対応 し てい ません。
狭いはめ込み枠で テキス ト 両端揃え はめ込み枠が狭ければ狭いほ ど、 両端揃えのテ キ
ス ト を制御す る ためのオプシ ョ ンが重要にな っ てい き ます。 図 8.24 は、 狭いはめ込み枠
でテ キ ス ト が さ ま ざ ま な方式で両端揃え さ れた出力結果を例示 し てい ます。 図 8.24 のオ
プシ ョ ン設定は基本的におおむね良好ですが、 ただ、 maxspacing がやや広すぎ る 単語間
隔を与え てい る のが気にな り ます。 と はいえ、 狭いはめ込み枠に対 し ては こ れは こ の ま ま
に し てお く こ と を推奨 し ます。 でない と 、 split 方式に よ る 見苦 し い強制ハ イ フ ネーシ ョ ン
の発生頻度が高ま る で し ょ う 。
はめ込み枠が狭すぎ る ために不適切な箇所が強制ハ イ フ ネーシ ョ ン さ れて し ま う 場合
は、 対処 を考慮 し て、 ソ フ ト ハ イ フ ン を入れ る な り 、 テ キ ス ト 両端揃え を制御す る オプ
シ ョ ン を変え る な り す る 必要があ る で し ょ う 。
テキス ト 両端揃え で shrinklimit オ プ シ ョ ン 見 た 目に も っ と も 受け入れやすい解決策
は shrinklimit オプシ ョ ン を小 さ く す る こ と で し ょ う 。 こ のオプシ ョ ンは、 shrink 方式でか
8.2 複数行のテキス ト フ ロー
205
Our paper planes
are the ideal way of
passing the time.We
offer revolutionary
brand new developments of the traditional
common paper planes.
If your lesson, conference, or lecture
turn out to be deadly
boring, you can have
a wonderful time
with our planes. All
図 8.24 狭いはめ込み枠で テキス ト 両端揃え。 デ フ ォル ト 設定を用いています
単語間ツ メ (minspacing オプ シ ョ ン)
行に長体 (shrink 方式 ・ shrinklimit オプ シ ョ ン)
強制ハイ フ ネーシ ョ ン (split 方式)
単語間アケ (spread 方式 ・ maxspacing オプ シ ョ ン)
か る 長体の割合の下限を指定す る も のです。 図 8.25a は、 テ キ ス ト に shrinklimit=50% ま
で長体を かけ る こ と で強制ハ イ フ ネーシ ョ ン を防いでい る 様子を示 し てい ます。
テキス ト 両端揃え で spreadlimit オ プ シ ョ ン 字間 を 拡げ る こ と で改行 を 制御す る の も
一つの方法です。 こ れは spread 方式で行われ、 spreadlimit オプシ ョ ンで制御 さ れます。 し
か し こ の方式は美 し く ないのでめっ たに使われないで し ょ う 。 図 8.25b は、 spreadlimit=5
を使っ て、 字間の最大を非常に広 く 5 単位 と し た例です。
図 8.25 狭いはめ込み枠内の両端揃え テキス ト のためのオプ シ ョ ン
生成 さ れる出力
fit_textline( ) に与え る オプ シ ョ ン リ ス ト
a)
passing the time.We
offer revolutionary
brand new developments
of the traditional
common paper planes.
If your lesson, conference,
or lecture turn out to
alignment=justify shrinklimit=50%
b)
Our paper planes
are the ideal way of
passing the time.We
offer revolutionary
b r a n d n e w
developments of the
alignment=justify spreadlimit=5
c)
ments of the traditional
common paper planes.
If your lesson,
conference, or lecture
turn out to be deadly
boring, you can have
alignment=justify nofitlimit=50
テキス ト 両端揃え で nofitlimit オ プ シ ョ ン nofitlimit オプシ ョ ンは、 nofit 方式が適用 さ
れた と き の行の最小の幅を制御す る も のです。 はめ込み枠が非常に狭い場合は、 こ れをデ
フ ォ ル ト 値 75% か ら 下げたほ う が強制ハ イ フ ネーシ ョ ン よ り は ま し です。 図 8.25c は、 行
の最小幅 50% を指定 し た場合の出力結果を示 し てい ます。
8.2.9 高度な用字系固有の改行
PDFlib は、 標準の改行アルゴ リ ズ ム に加え て、 追加の改行アルゴ リ ズ ム を実装 し てい ま
す。 こ の高度な改行アルゴ リ ズ ムは、 い く つかの用字系では必須であ り 、 ま た、 必須でな
いその他の用字系 / ロ ケールの組み合わせのなかに も 、 こ れに よ り 改行動作が改善 さ れ る
206
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
も のがあ り ます。 こ れは advancedlinebreak オプシ ョ ン で有効にす る こ と がで き ます。 改
行はテ キ ス ト の言語に依存 し ますので、 高度な改行アルゴ リ ズ ムは script オプシ ョ ン (表
6.2 参照) と locale オプシ ョ ン (PDFlib API リ フ ァ レ ン ス参照) に従い ます。 高度な改行
は、 下記の状況において正 し い改行機会を決定 し ます :
> タ イ 文字等、 テ キ ス ト 内の空白キ ャ ラ ク タ の存在に改行が依拠 し ない用字系に対 し て。
下記のテ キ ス ト フ ロ ーオプシ ョ ンは、 タ イ 文字に対 し て高度な改行を有効に し ます :
<advancedlinebreak script=thai locale=THA>
> 仏文テ キ ス ト 内で引用符 と し て用い ら れ る «» ギユ メ キ ャ ラ ク タ 等、 あ る 特定の句読点
キ ャ ラ ク タ の特別な扱い を必要 と す る 用字系 / ロ ケールの組み合わせにおいて。 下記
のテ キ ス ト フ ロ ーオプシ ョ ンは、仏文テ キ ス ト に対 し て高度な改行を有効に し ます。そ
の結果、 単語を囲 う ギユ メ キ ャ ラ ク タ が行末で単語 と 泣 き 別れ し な く な り ます :
<advancedlinebreak script=latn locale=fr>
locale テ キ ス ト フ ロ ーオプシ ョ ンは language テ キ ス ト オプシ ョ ン (表 6.3 参照) と 違 う こ
と に留意 し て く だ さ い : locale オプシ ョ ンは同 じ 3 文字の言語識別子で始ま る こ と がで き
ますが、1 個ない し 2 個の追加部分を任意に含む こ と も で き ます。ただ し 、こ れ ら が PDFlib
で必要にな る こ と は まれです。
8.2.10 テキス ト をパス ・ 画像に回 り 込み
回 り 込み機能を利用す る と 、 任意の形状にテ キ ス ト を入れた り 、 テ キ ス ト をパ ス に回 り 込
ませ る こ と がで き ます。 範囲枠、 明示的な矩形 / 多角形 / 円 / 曲線、 パ ス オブジ ェ ク ト の
いずれか を用いて、 テ キ ス ト フ ロ ーに対す る 回 り 込み領域を指定する こ と がで き ます。 画
像が ク リ ッ ピ ン グパ ス を内蔵 し てい る 場合には、テ キ ス ト を その画像の ク リ ッ ピ ン グパ ス
に自動的に回 り 込ませ る こ と も 可能です。
範囲枠 を使 っ た テキス ト の画像回 り 込み 最初の作成例 と し て、 テ キ ス ト フ ロ ーの中に
画像を配置 し て、 テ キ ス ト を その画像全体の ま わ り に回 り 込ませてみま し ょ う 。 まず画像
を読み込み、 枠内の希望の位置に配置 し ます。 こ の画像を後で名前で参照する ために、 下
記の よ う にオプシ ョ ン リ ス ト matchbox={name=img margin=-5} で、 画像をはめ込む際に
img と い う 範囲枠を定義 し 、 5 単位の余白を指定 し ま し ょ う :
result = p.fit_image(image, 50, 35,
"boxsize={80 46} fitmethod=meet position=center matchbox={name=img margin=-5}");
テ キ ス ト フ ロ ーを追加 し ます。 そ し てそれを、 次の よ う に、 画像のはめ込み枠 img を回 り
込むべ き 領域 と し て wrap オプシ ョ ン を使っ て配置 し ま し ょ う (図 8.26 参照)。
図 8.26
範囲枠を使 っ た テキス ト の画像回 り 込み
Have a look at our new paper plane models! Our
paper planes are the ideal way of passing the time.
We offer
revolutionary new
developments of the traditional common paper planes.
If your lesson, conference,
or lecture
turn out to be
deadly boring, you can
have a wonderful time with our planes. All our
models are folded from one paper sheet. They are
exclusively folded without using any adhesive.
図 8.27
テキス ト を三角形のまわ り に回 り 込み
Our paper planes are50%
the ideal
way of passing the time.
80%
We offer a lot of revolutionary brand-new developments
of the traditional common paper planes. If your
lesson, conference, or
lecture turn out to be
deadly boring, you
can have a wonderful
time with our planes.
All our models are
folded from one
paper sheet. They
are exclusively
folded without
using
any
adhesive.
80% 30%
20% 30%
Several models are equipped with a folded landing gear.
enabling a safe landing on the intended location provided
that you have aimed well. Other models are able to fly
loops or cover long distances.
8.2 複数行のテキス ト フ ロー
207
result = p.fit_textflow(textflow, left_x, left_y, right_x, right_y,
"wrap={usematchboxes={{img}}}");
テ キ ス ト を配置す る 前に、同 じ 範囲枠名を使っ て さ ら にほかの画像をはめ込んでい く こ と
も で き ます。 その場合、 テ キ ス ト はすべての画像を回 り 込みます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/wrap_text_around_images ト ピ ッ ク に
あ り ます。
テキス ト を任意のパスに回 り 込み パ ス オブジ ェ ク ト を作成 し て (64 ページ 「3.2.3 直接
パ ス と パ ス オブジ ェ ク ト 」 参照) 、 それを回 り 込み形状 と し て用い る こ と も で き ます。 下
記の コ ー ド は、単純な形状 (1 個の円) のパ ス オブジ ェ ク ト を構築 し 、それを fit_textflow( )
の wrap オプシ ョ ンに与え てい ます。 パ ス を配置す る 参照点は、 はめ込み枠の幅 と 高 さ に
対す る パーセ ン ト 値 と し て表現 さ れてい ます :
path = p.add_path_point( -1,
0, 100, "move", "");
path = p.add_path_point(path, 200, 100, "control", "");
path = p.add_path_point(path,
0, 100, "circular", "");
/* パスを目に見えるようにしたければそうする */
p.draw_path(path, x, y, "stroke");
result = p.fit_textflow(tf, llx1, lly1, urx1, ury1,
"wrap={paths={" +
"{path=" + path + " refpoint={100% 50%} }" +
"}}");
p.delete_path(path);
inversefill オプシ ョ ン を用い る と 、 テ キ ス ト をパス の外側に回 り こ ませ る のではな く 、 パ ス
の内側に回 り こ ませ る こ と が可能です (すなわち、 パ ス はテ キ ス ト フ ロ ー内に穴を あ け る
のではな く 、 テ キ ス ト の入れ物 と し て機能 し ます) :
result = p.fit_textflow(tf, llx1, lly1, urx1, ury1,
"wrap={inversefill paths={" +
"{path=" + path + " refpoint={100% 50%} }" +
"}}");
テキス ト を画像の ク リ ッ ピ ン グパスに回 り 込ませ る TIFF ・ JPEG 画像は、 ク リ ッ ピ ン グ
パ ス を内蔵す る こ と がで き ます。 こ のパス は、 画像処理アプ リ ケーシ ョ ンで作成 さ れてい
る 必要があ り 、 PDFlib は こ れを評価 し ます。 デフ ォ ル ト ク リ ッ ピ ン グパ ス が画像内で見つ
かればそれが使われ ま すが、 画像内の他の任意の ク リ ッ ピ ン グパ ス を load_image( ) の
clippingpathname オプシ ョ ンで指定す る こ と も で き ます。画像が ク リ ッ ピ ン グパ ス と と も
に読み込まれていれば、そのパ ス を抽出 し て先述の よ う に fit_textflow( ) の wrap オプシ ョ
ンに与え る こ と がで き ます。 取 り 込んだ画像の ク リ ッ ピ ン グパ ス を拡大す る ために scale
オプシ ョ ン も 与え ます :
image = p.load_image("auto", "image.tif", "clippingpathname={path 1}");
/* 画像のクリッピングパスからパスオブジェクトを作成 */
path = (int) p.info_image(image, "clippingpath", "");
if (path == -1)
throw new Exception("エラー : クリッピングパスが見つかりません!");
result = p.fit_textflow(tf, llx1, lly1, urx1, ury1,
208
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
"wrap={paths={{path=" + path + " refpoint={50% 50%} scale=2}}}");
p.delete_path(path);
画像 を配置 し て テキス ト を それに回 り 込ませ る 前の項では画像の ク リ ッ ピ ン グパ ス だ
け を使い ま し た (画像自体ではな く ) が、 今度は画像をはめ込み枠の中に配置 し て、 テ キ
ス ト を そ れ に 回 り 込 ま せ て み ま し ょ う 。 こ れ を 実 現 す る に は、 今 度 も 画 像 を
clippingpathname オプシ ョ ン をつけて読み込んで、 それを fit_image( ) でページ上に配置
す る 必要があ り ます。テ キ ス ト を回 り 込ませ る のに適切なパ ス オブジ ェ ク ト を作成す る た
めに、fit_image( ) と 同 じ オプシ ョ ン リ ス ト をつけて info_image( ) を呼び出 し ま し ょ う 。最
後に、 参照点 (fit_image( ) の x/y 引数) を wrap オプシ ョ ンの paths サブオプシ ョ ンの
refpoint サブオプシ ョ ンに与え る 必要があ り ます :
image = p.load_image("auto", "image.tif", "clippingpathname={path 1}");
/* 画像を何らかのはめ込みオプション群でページ上に配置 */
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("エラー : クリッピングパスが見つかりません!");
result = p.fit_textflow(tf, llx1, lly1, urx1, ury1,
"wrap={paths={{path=" + path + " refpoint={" + x + " " + y + "} }}}");
p.delete_path(path);
fit_textflow( ) を複数回呼び出 し て同一の wrap オプシ ョ ン を与え る こ と も で き ます。 こ れ
は多段組等、配置 さ れた画像が複数のテ キ ス ト フ ロ ーはめ込み枠に重な っ てい る と き に有
用です。
テキス ト を非矩形形状に回 り 込ませ る テ キ ス ト は、 範囲枠で指定 さ れ る 矩形を回 り 込
ませ る だけでな く 、任意のグ ラ フ ィ ッ ク 要素を回 り 込み輪郭 と し て定義す る こ と も で き ま
す。 た と えば下記のオプシ ョ ン リ ス ト は、 三角形の ま わ り にテ キ ス ト を回 り 込 ま せ ま す
(図 8.27 参照) :
wrap={ polygons={ {50% 80%
20% 30%
80% 30%
50% 80%} } }
なお、 showborder=true オプシ ョ ン を使っ て輪郭を図示 し て あ り ます。 wrap オプシ ョ ンは
複数の輪郭を持つ こ と も で き ます。 下記のオプシ ョ ン リ ス ト は、 2 つの三角形の ま わ り に
テ キ ス ト を回 り 込ませます。
wrap={ polygons={ {50% 80%
{20% 90%
20% 30%
10% 70%
80% 30%
30% 70%
50% 80%}
20% 90%} } }
パーセ ン ト 値 (はめ込み枠内におけ る 相対座標) のかわ り に、 ページ上の絶対座標を使 う
こ と も で き ます。
注 水平で も垂直で も ない向きの線分を持つ輪郭を使 う と きは、fixedleading=true に設定する こ
と を推奨 し ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/wrap_text_around_polygons ト ピ ッ ク
にあ り ます。
8.2 複数行のテキス ト フ ロー
209
図 8.27
ひ し 形へテキス ト
を流 し 込み
10% 50%
図 8.28
重な り 合 う 輪郭へ流 し 込み
50% 100%
Our
paper
planes are
the ideal way
of passing the
time. We offer a lot
of revolutionary brandnew developments of the
traditional common paper
planes. If your lesson, conference, or lecture turn
out to be deadly boring, you can have
a wonderful
time with
our planes.
Our paper planes are
the ideal way of passing the time. We offer
revolutionary new developments of
the traditional common paper planes.
If your lesson, conference, or
lecture turn
out to be
deadly
boring,
you can have a wonderful
time with our planes. All
our models are folded
from one paper sheet.
90% 50%
50% 0%
非矩形の輪郭へ流 し 込み 回 り 込み機能を使えば、 任意の輪郭の領域の中にテ キ ス ト フ
ロ ーを配置す る こ と も で き ます。 こ れを実現す る には、 wrap オプシ ョ ン で addfitbox ま た
は inversefill サブオプシ ョ ン を使い ます。 テ キ ス ト は指定 さ れた輪郭の ま わ り に回 り 込む
のではな く 、 輪郭 (複数可) の中にテ キ ス ト が配置 さ れます。 下記のオプシ ョ ン リ ス ト を
使えば、 ひ し 形の中へテ キ ス ト を流 し 込む¥ こ と がで き ます。 こ こ で座標は、 はめ込み枠
の矩形に対す る パーセ ン ト 値 と し て与え てい ます (図 8.27 参照)。
wrap={ addfitbox polygons={ {50% 100%
10% 50%
50% 0%
90% 50%
50% 100%} } }
なお、 こ こ で も showborder=true オ プ シ ョ ン を 使 っ て輪郭 を 図示 し て あ り ま す。 も し
addfitbox オプシ ョ ン をつけなければ、 ひ し 形は空の ま ま、 その ま わ り にテ キ ス ト が回 り
込む こ と にな り ます。
重な り 合 う 輪郭へ流 し 込み 次の例 と し て、 重な り 合 う 2 つの多角形か ら 成 る 輪郭へ流
し 込みを行な っ てみま し ょ う 。 た と えば六角形の中に四角形が入っ た輪郭です。 addfitbox
オプシ ョ ン を使えば、 はめ込み枠自体は流 し 込みの範囲か ら 除外 さ れ、 その後の リ ス ト の
中の多角形は、 重な り 合っ てい る 領域を除いて流 し 込みが行われます (図 8.28 参照)。
wrap={ addfitbox polygons=
{ {20% 10% 80% 10%
{35% 35% 65% 35%
100% 50% 80% 90%
20% 90%
0% 50%
65% 65% 35% 65%
35% 35%} } }
20% 10%}
も し addfitbox オプシ ョ ン をつけなければ、 こ れ と 反対の効果を得ます。 すなわち、 さ っ
き流 し 込まれた領域は空の ま ま と な り 、 さ っ き空だっ た領域へテキ ス ト が流 し 込まれ る こ
と にな り ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/fill_polygons_with_text ト ピ ッ ク に
あ り ます。
210
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
8.3 表の組版
表組版機能を使 う と 、 複雑な表を自動組版す る こ と がで き ます。 表のセルには、 一行ない
し 複数行のテ キ ス ト や、 画像、 PDF グ ラ フ ィ ッ ク を入れ る こ と がで き ます。 表は 1 個のは
め込み枠に収ま ら な く て も よ く 、 複数のページにわた る こ と が可能です。
ク ッ ク ブ ッ ク 表の諸側面に関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの tables カ テ ゴ リ にあ り ます。
表のあ ら ま し 表整形機能の説明は、 以下の概念 と 用語に も と づ き ます (図 8.29 参照)。
> 表は、 矩形の輪郭を持つ仮想のオブジ ェ ク ト です。 横方向の表行 と 縦方向の列でで き
てい ます。
> 単純セルは、 表内の矩形の領域であ り 、 表行 と 列の交差 と し て定義 さ れ ます。 連結セ
ルは、 複数の列か複数の表行、 ない し 両方にわた っ てい ます。 セル と い う 用語を用い
る と き は、 単純セル と 連結セルの両方を指す も の と し ます。
> 表は、1 つのはめ込み枠に収ま り き る こ と も あ り ます し 、複数のはめ込み枠が必要にな
る こ と も あ り ます。1 つのはめ込み枠に配置 さ れた表行群は、 表イ ン ス タ ン ス を構成 し
ます。 fit_table( ) は、 1 回呼び出 さ れ る ご と に、 1 つのはめ込み枠に 1 つの表 イ ン ス タ
ン ス を配置 し ます (221 ページ 「8.3.5 表 イ ン ス タ ン ス」 参照)。
> ヘ ッ ダ と フ ッ タ は、 表の最初か最後にあ る 表行 (複数可) のかた ま り であ り 、 すべて
の表 イ ン ス タ ン ス の上端か下端に繰 り 返 し 現れ ます。 ヘ ッ ダに も フ ッ タ に も 属 さ ない
表行は本体表行 と 呼びます。
ヘッダ
Our Paper Plane Models
3 列連結セル
1 Giant Wing
単純セル
Material
Benefit
Offset print paper 220g/sqm
It is amazingly robust and
can even do aerobatics. But
it is best suited to gliding.
Amazingly robust!
2 Long Distance Glider
セルにテキ
ス ト フ ロー
Material
Drawing paper 180g/sqm
Benefit
With this paper rocket you
can send all your messages
even when sitting in the
cinema pretty near the back.
セルに画像 と
テキス ト 行
3 行連結セル
3 Cone Head Rocket
フッタ
Material
Kent paper 200g/sqm
Benefit
This paper arrow can be
thrown with big swing. It
stays in the air a long time.
With big swing!
図 8.29
表の例
例 と し て、 図 8.29 の表のすべての要素の作 り 方を説明 し てい き ます。 表組版オプシ ョ ン
の完全な説明については PDFlib API リ フ ァ レ ン ス を参照 し て く だ さ い。 表の作成はまず、
各表セルの内容 と 視覚的プ ロ パテ ィ を add_table_cell( ) で定義 し てい く こ と か ら 始ま り ま
す。 それか ら 、 fit_table( ) を 1 回ない し 複数回呼び出 し て、 その表を配置 し ます。
表を配置す る 際には、 そのはめ込み枠の大 き さ と 、 その表行や列の罫線 と 塗 り 分け を
指定す る こ と も で き ます。 セルご と の塗 り 分けな ど の細かい指定には、 範囲枠機能を使っ
て く だ さ い (詳 し く は 226 ページ 「8.4 範囲枠」 参照)。
8.3 表の組版
211
こ の節では、 表セルの定義 と 表のはめ込みに必要な、 も っ と も 重要なオプシ ョ ン のみ
を解説 し ます。 いずれの例において も 、 そのための add_table_cell( ) と fit_table( ) への呼
び出 し だけ を示 し ますが、 必要な フ ォ ン ト はすでに読み込まれてい る も の と し ます。
注 表の処理は、 カ レ ン ト グ ラ フ ィ ッ ク状態か らは独立です。 表セルの定義は文書ス コ ープ で
も で き ますが、 実際に表を配置するのはページス コ ープ で行 う 必要があ り ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの tables/starter_table ト ピ ッ ク にあ り ます。
8.3.1 単純な表 を配置
表の概念を さ ら に詳 し く 説明す る 前に、 単純な表作成の例を示 し ます。 表には 6 つのセル
があ り 、 3 表行 ・ 2 列に配 さ れてい ます。 4 つのセルにはテ キ ス ト 行があ り 、 1 つのセルに
は複数行のテ キ ス ト フ ロ ーがあ り ます。 セルの内容はすべて、 余白を 1 単位 と っ て横方向
に左寄せ、 縦方向に中央揃えにな っ てい ます。
こ の表を作成す る ために、 まずはテ キ ス ト 行セルに対す る オプシ ョ ン リ ス ト を作 る た
めに、 その fittextline サブオプシ ョ ン リ ス ト で、 必要なオプシ ョ ン font ・ fontsize と 位置
{left center} を定義 し ま し ょ う 。 さ ら に、 1 単位のセル余白を定義 し ま し ょ う 。 そ し て、 テ
キ ス ト 行セルを 1 つずつそれぞれの列 ・ 表行に追加 し 、 その際に中身のテ キ ス ト も 、 add_
table_cell( ) への呼び出 し に直接与え ます。
次に、 テ キ ス ト フ ロ ーを作成 し 、 そのテ キ ス ト フ ロ ーのハン ド ルを使っ て テ キ ス ト フ
ロ ー表セルに対す る オプシ ョ ン リ ス ト を構築 し た後、 そのセルを表に追加 し ま し ょ う 。
最後に、 fit_table( ) を使っ て表を配置 し 、 その際に、 表の外枠 と セルの各辺に黒い罫線
をつけ ま し ょ う 。 列の幅は一切与え ませんで し たので、 与えた テ キ ス ト 行 と 余白か ら 自動
的に計算 さ れます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの tables/vertical_text_alignment ト ピ ッ ク にあ り
ます。
下記の コ ー ド は、 こ の単純な表の作 り 方を示 し ます。 結果を図 8.30a に示 し ます。
/* 複数行のテキストフローで表セルに入れるテキスト */
String tf_text = "It is amazingly robust and can even do aerobatics. " +
"But it is best suited to gliding.";
/* 1列目と2列目の列幅を定義 */
int c1 = 80, c2 = 120;
/* 表インスタンスの左下隅と右上隅を定義(はめ込み枠)*/
double llx=100, lly=500, urx=300, ury=600;
/* フォントを読み込む */
font = p.load_font("Helvetica", "unicode", "");
if (font == -1)
throw new Exception("エラー:" + p.get_errmsg());
/* 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);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
/* 列1表行2にテキスト行セルを追加 */
212
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
tbl = p.add_table_cell(tbl, 1, 2, "Material", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
/* 列1表行3にテキスト行セルを追加 */
tbl = p.add_table_cell(tbl, 1, 3, "Benefit", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
/* 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);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
/* テキストフローを追加 */
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);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
p.begin_page_ext(0, 0, "width=200 height=100");
/* 表をはめ込むためのオプションリストを表枠とセル罫線つきで定義 */
optlist = "stroke={{line=frame linewidth=0.8} {line=other linewidth=0.3}}";
/* 表インスタンスを配置 */
result = p.fit_table(tbl, llx, lly, urx, ury, optlist);
/* 結果を調べる。「_stop」ならすべてOKを意味する。*/
if (!result.equals("_stop")) {
if (result.equals( "_error"))
throw new Exception("エラー:" + p.get_errmsg());
else {
/* それ以外の戻り値はすべて専用のコードで扱う必要がある */
}
}
p.end_page_ext("");
/* 表内で使われたテキストフローハンドルも一緒に削除 */
p.delete_table(tbl, "");
セルの内容の縦位置 を調整す る 表セルの縦方向中央に さ ま ざ ま な種類の内容を配置す
る と 、 その辺か ら の距離は ま ち ま ちにな り ます。 図 8.30a において、 4 つのテ キ ス ト 行セ
ルは次のオプシ ョ ン リ ス ト で配置 さ れてい ます。
optlist = "fittextline={position={left center} font=" + font +
" fontsize=8} colwidth=80 margin=4";
8.3 表の組版
213
テ キ ス ト フ ロ ーセルは特殊なオプシ ョ ン を一切使わずに追加 さ れてい ます。テ キ ス ト 行を
縦方向中央に配置 し たために、 Benefit の行がテ キ ス ト フ ロ ーの分だけ下へずれます。
図 8.30 テキス ト 行 と テキス ト フ ローを表セル内で整列 さ せる
生成 さ れる出力
Our Paper Planes
Material
Offset print paper 220g/sqm
Benefit
It is amazingly robust and can
even do aerobatics. But it is
best suited to gliding.
a)
Our Paper Planes
b)
Material
Offset print paper 220g/sqm
Benefit
It is amazingly robust and can
even do aerobatics. But it is
best suited to gliding.
図 8.30b に示 し た よ う に、 セルの辺か ら セルの中身ま での縦間隔は、 それがテ キ ス ト フ
ロ ーであ る かテ キ ス ト 行であ る かにかかわ ら ず、 すべて同 じ に し たい も のです。 こ れを実
現す る ために、 まずテ キ ス ト 行のためのオプシ ョ ン リ ス ト を用意 し ま し ょ う 。 表行の高 さ
を固定値 14 ポ イ ン ト 、テ キ ス ト 行の位置を左上で余白 4 ポ イ ン ト と し て定義 し ま し ょ う 。
さ き に与えたオプシ ョ ン fontsize=8 は、 文字の高 さ を正確には表 し てお ら ず、 上下に
い く ら かあ き がで き てい ます。 で も 、 大文字の高 さ はフ ォ ン ト の capheight 値で正確に表
さ れます。 ですので、 fontsize={capheight=6} を用いれば、 文字サ イ ズが結果的にほぼ 8 ポ
イ ン ト にな り 、 ま た (margin=4 と あわせて) 高 さ の合計が 14 ポ イ ン ト と な っ て rowheight
オプシ ョ ン と 合い ます。ですので全体 と し ては、 テ キ ス ト 行セルに対す る add_table_cell( )
のオプシ ョ ン リ ス ト は次の よ う に し ま し ょ う 。
/* テキスト行セルに用いるオプションリスト */
optlist = "fittextline={position={left top} font=" + font +
" fontsize={capheight=6}} rowheight=14 colwidth=80 margin=4";
テ キ ス ト フ ロ ーの追加にあ た っ ては、 上記のテ キ ス ト 行同様、 fontsize={capheight=6} を
用いれば、 文字サ イ ズが結果的にほぼ 8 ポ イ ン ト にな り 、 ま た (margin=4 と あわせて)
高 さ の合計が 14 ポ イ ン ト と な り ます。
/* テキストフローの追加に用いるオプションリスト */
optlist = "font=" + font + " fontsize={capheight=6} leading=110%";
さ ら に、 テ キ ス ト Benefit のベース ラ イ ンは、 テ キ ス ト フ ロ ーの 1 行目に整列 さ せたい も
のです。 と 同時に、 テ キ ス ト Benefit のセル上端か ら の間隔は、 テ キ ス ト Material と 同 じ
にな る べ き です。 上端に余白を生 じ さ せないために、 テ キ ス ト フ ロ ーセルの追加にあ た っ
ては fittextflow={firstlinedist=capheight} を用い ま し ょ う 。 そ し てテ キ ス ト 行 と 同 じ く 、 余
白 4 ポ イ ン ト を追加 し ま し ょ う 。
/* テキストフローセルの追加に用いるオプションリスト */
optlist = "textflow=" + tf + " fittextflow={firstlinedist=capheight} "
"colwidth=120 margin=4";
214
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの tables/vertical_text_alignment ト ピ ッ ク にあ り
ます。
8.3.2 表セルの さ ま ざ ま な内容
add_table_cell( ) で表にセルを追加す る と き は、 さ ま ざ ま な種類のセル内容を指定す る こ
と がで き ます。 表セルは、 同時に複数の種類の内容を含む こ と も で き ます。 罫線 ・ 塗 り の
追加 も 可能なほか、 範囲枠を使っ て表セル内に追加の内容を配置す る こ と も で き ます。
た と えば紙飛行機の表には、 図 8.31 に示す要素があ り ます。
࠹ࠠࠬ࠻ⴕ
࠹ࠠࠬ࠻ⴕ
࠹ࠠࠬ࠻ⴕ
࠹ࠠࠬ࠻ⴕ
࠹ࠠࠬ࠻ⴕ
࠹ࠠࠬ࠻ࡈࡠ࡯ ....................
..............................................
..............................................
࠹ࠠࠬ࠻ⴕ
図 8.31
表セルの さ ま ざ ま
な内容
テキス ト 行に よ る一行テキス ト テ キ ス ト は、 add_table_cell( ) の text 引数で与え ます。
fittextline オプシ ョ ンで、 fit_textline( ) の組版オプシ ョ ンのすべて を与え る こ と がで き ま
す。 デフ ォ ル ト のはめ込み方式は fitmethod=nofit です。 テ キ ス ト がセルに収ま り き ら な
い と き は、セルが大 き く な り ます。こ れを避け る には、fitmethod=auto を使えば、shrinklimit
オプシ ョ ンの範囲内でテ キ ス ト が縮ま り ます。 表行の高 さ が指定 さ れなか っ た場合は、 組
版機能はテ キ ス ト サ イ ズの 2 倍を表セルの高 さ と し ます ( よ り 正確にい う と boxheight の
2 倍。 こ れは、 別途指定 さ れない限 り デフ ォ ル ト 値 {capheight none} を持ち ます)。 テ キ ス
ト が回転 さ せて あ る と き の表行の幅について も 同 じ です。
テキス ト フ ロ ーに よ る複数行テキス ト テ キ ス ト フ ロ ーは、 表関数の外で用意 し ておい
て、 add_table_cell( ) を呼び出す前に create_textflow( ) か add_textflow( ) で作成 し てお く
必要が あ り ま す。 その テ キ ス ト フ ロ ーのハ ン ド ルは、 textflow オプ シ ョ ン で与え ま す。
fittextflow オプシ ョ ン で、fit_textflow( ) の組版オプシ ョ ンのすべて を与え る こ と がで き ま
す。
デフ ォ ル ト のはめ込み方式は fitmethod=clip です。すなわち次の よ う に動作 し ます。 ま
ず、 テ キ ス ト がセルに収ま り き る か ど う かが試 さ れます。 セルの大 き さ が充分でない と き
は、 その高 さ が増や さ れます。 それで も テ キ ス ト が収ま り き ら ない場合は、 末尾が切 り 落
と さ れます。 こ れを避け る には、 fitmethod=auto を使えば、 minfontsize オプシ ョ ンの範
囲内でテ キ ス ト が縮ま り ます。
セルが狭すぎ る と き は、1 つの単語を好ま し く ない箇所で分割 さ せ る よ う 、 テ キ ス ト フ
ロ ーに強制す る こ と も で き ます。 checkwordsplitting オプシ ョ ンが true の場合は、 単語が
分割 さ れな く な る ま でセル幅が拡が り ます。
画像 と テ ン プ レ ー ト 画像は、 add_table_cell( ) を呼び出す前に load_image( ) で読み込ん
でお く 必要があ り ます。 テ ンプ レー ト は、 begin_template_ext( ) で作成す る 必要があ り ま
す。 その画像やテ ンプ レー ト のハン ド ルは、 image オプシ ョ ンで与え ます。 fitimage オプ
シ ョ ンで、fit_image( ) の組版オプシ ョ ンのすべて を与え る こ と がで き ます。デフ ォ ル ト の
はめ込み方式は fitmethod=meet です。 すなわち画像 / テ ンプ レー ト は、 縦横比を変え な
い ま ま、 セル内に収ま り き る よ う 配置 さ れます。 セルの大 き さ が、 画像 / テ ンプ レー ト の
大 き さ に し たがっ て変わ る こ と はあ り ません。
8.3 表の組版
215
取 り 込み PDF 文書のページ PDI ページは、 add_table_cell( ) を呼び出す前に open_pdi_
page( ) で開いてお く 必要があ り ます。 その PDI ページのハン ド ルは、 pdipage オプシ ョ ン
で与え ます。 fitpdipage オプシ ョ ンで、 fit_pdi_page( ) の組版オプシ ョ ンのすべて を与え る
こ と がで き ます。 デフ ォ ル ト のはめ込み方式は fitmethod=meet です。 すなわち PDI ペー
ジは、 縦横比を変え ない ま ま、 セル内に収ま り き る よ う 配置 さ れます。 セルの大 き さ が、
PDI ページの大 き さ に し たがっ て変わ る こ と はあ り ません。
パス オ ブ ジ ェ ク ト パ ス オ ブ ジ ェ ク ト は、 add_table_cell( ) を 呼び出す前に add_path_
point( ) で作成 さ れてい る 必要があ り ます。 そのパ スハン ド ルは path オプシ ョ ンで与え ら
れます。fitpath オプシ ョ ン では、draw_path( ) のすべての組版オプシ ョ ン を指定可能です。
パ ス の外接枠が表セル内に配置 さ れます。 セル内枠の左下隅が、 パ ス を配置す る ための参
照点 と し て用い ら れます。
注釈 表セル内の注釈は、 create_annotation( ) の type 引数 (ただ し こ の関数を呼び出す
必要はあ り ません) に対応す る add_table_cell( ) の annotationtype オプシ ョ ンで作成す る
こ と がで き ます。 fitannotation オプシ ョ ンでは、 create_annotation( ) のすべてのオプシ ョ
ン を指定可能です。 セル枠が注釈矩形 と し て用い ら れます。
フ ォ ーム フ ィ ール ド 表セル内の フ ォーム フ ィ ール ド は、 create_field( ) の name ・ type 引
数 (た だ し こ の 関 数 を 呼 び 出 す 必 要 は あ り ま せ ん) に 対応す る add_table_cell( ) の
fieldname・fieldtype オプシ ョ ンで作成す る こ と がで き ます。fitfield オプシ ョ ンでは、create_
field( ) のすべてのオプシ ョ ン を指定可能です。 セル枠が フ ィ ール ド 矩形 と し て用い ら れま
す。
セル内枠内でのセル内容の位置合わせ デ フ ォ ル ト では、 セル内容の位置は、 セル枠に
合わせて決ま り ます。 add_table_cell( ) で margin オプシ ョ ン を使えば、 セルの端 と の間に
間隔を指定す る こ と がで き ます。 その結果で き る 矩形を、 セル内枠 と 呼びます。 余白が 1
つで も 定義 さ れていれば、 セル内容はセル内枠に合わせて配置 さ れます (図 8.32 参照)。
余白が 1 つ も 定義 さ れていない と き は、 セル内枠はセル枠 と 同 じ です。
こ れ と あわせて、 セルの内容は、 内容依存のはめ込みオプシ ョ ン で与え たオプシ ョ ン
に も 従 う こ と があ り ます。 218 ページ 「8.3.4 さ ま ざ ま な種類の内容を持っ た表」 で説明 し
ます。
਄૛⊕
࠮࡞ౝᨒ
Ꮐ૛⊕
ฝ૛⊕
図 8.32
内容を セル内枠に
はめ込み
࠮࡞ᨒ
ਅ૛⊕
8.3.3 表 と 列の幅
セルを表に追加す る 際には、 そのセルが ま たが る 列か表行、 ま たは両方の数を、 colspan ・
rowspan オプシ ョ ン で定義 し ます。 デフ ォ ル ト ではセルの列は 1 つ、 表行 も 1 つです。 表
216
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
の列 と 表行の総数は、 セルを追加す る ご と に、 それぞれの値だけ自動的に加算 さ れ ます。
図 8.33 に、 3 列 ・ 4 表行の表の例を示 し ます。
1
1
1
2
1
3
1
4
3 2
㧞ߟߩ ...... ೉ߦ ...... ࠊߚࠆ ...... ࠮࡞
ⴕ2
ⴕ3
ⴕ4
図 8.33
単純セル と 、 複数の表行や
列を連結 し たセル
㧟ߟߩ ............ ೉ߦ ............ ࠊߚࠆ ............ ࠮࡞
ⴕ1
න⚐࠮࡞
2 3
㧟ߟߩ ....
න⚐࠮࡞
.... ⴕߦ ....
න⚐࠮࡞
න⚐࠮࡞
.... ࠊߚࠆ࠮࡞
೉1
೉2
2 4
೉3
さ ら に、 colwidth オプシ ョ ン を使っ て、 セルが ま たが る 最初の列の幅を明示的に与え る こ
と も で き ます。 各セルご と に、 その最初の列の幅を決めて与え る と 、 それ ら の幅の値はす
べて、 表全体の幅に自動的に加算 さ れてい き ます。 図 8.34 に例を示 し ます。
1
1
1
2
1
3
1
4
colspan=3
colwidth=50
colspan=2
colwidth=50
colspan=1
colwidth=50
図 8.34
列幅を足 し 合わせる
と 表全体の幅に
3 2
2 3
rowspan=3
colwidth=90
colspan=1
colwidth=100
2 4
colspan=1
colwidth=50
colspan=1
colwidth=100
50
100
90
⴫ߩో᏷ 240
ま たは適当で あれば、 列幅を パーセ ン ト 値で指定す る こ と も で き ま す。 その場合 こ の値
は、 表のはめ込み枠の幅に対す る 割合にな り ま す。 パーセ ン ト 値に よ る 指定を行 う 場合
は、 すべての列に対 し て行 う 必要があ り ます。 でなければ一切 し てはいけ ません。
add_table_cell( ) の colscalegroup オプシ ョ ン を使っ て、 い く つかの列を列伸縮グループ
と し て ま と めて あ る 場合、 それ ら の幅は、 グループ内で も っ と も 幅の広い列 と 同 じ にな り
ます (図 8.35 参照)。
Max. Load
Range
Weight
Speed
೉᜛ᄢ❗ዊࠣ࡞࡯ࡊ
Giant Wing
12g
18m
14g
8m/s
Long Distance Glider
5g
30m
11.2g
5m/s
Cone Head Rocket
7g
7m
12.4g
6m/s
図 8.35
1 番目の表行の右 4 セルは、 同 じ 列伸縮
グループに属 し ているので、 同 じ 幅にな
り ます。
絶対座標が使われてい る 場合 (パーセ ン ト 値でな く ) 、 列幅を定義 さ れていないセルがあ
る と き は、 その未決定の幅は以下の よ う に し て算定 さ れます。 まず、 テ キ ス ト 行を含む各
セルについて、 列幅かテ キ ス ト の幅 (回転 さ れてい る テ キ ス ト の場合はテ キ ス ト の高 さ )
に も と づいて、 実際の幅が算出 さ れます。 それか ら 、 残 り の表幅が、 ま だ決定 し ていない
列幅に均等に分配 さ れます。
8.3 表の組版
217
8.3.4 さ ま ざ ま な種類の内容 を持 っ た表
以下のい く つかの項では、 図 8.36 に示す よ う な、 さ ま ざ ま な種類の内容を持っ た表の例
を、 一歩ずつ作成 し てい き ま し ょ う 。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの tables/mixed_table_contents ト ピ ッ ク にあ り ま
す。
前準備 と し て、 2 つの フ ォ ン ト を読み込む必要があ り ます。 表のはめ込み枠の大 き さ を、
その左下隅 と 右上隅の座標に よ っ て定義 し 、 3 つの表列の幅を指定 し ま し ょ う 。 そ し て、
新規ページ を A4 サ イ ズで開始 し ま し ょ う 。
double llx = 100, lly = 500, urx = 360, ury = 600; // 表の座標
int c1 = 50, c2 = 120, c3 = 90; // 3つの表列の幅
boldfont = p.load_font("Helvetica-Bold", "unicode", "");
normalfont = p.load_font("Helvetica", "unicode", "");
p.begin_page_ext(0, 0, "width=a4.width height=a4.height");
手順 1 : 最初のセル を追加 まずは、表の最初のセルか ら 始め ま し ょ う 。 こ のセルは 1 行
目の 1 列目に配置 し 、 3 つの列にわた ら せます。 1 列目の幅は 50 ポ イ ン ト です。 テ キ ス ト
行は縦横の中央に置 き 、 すべての端で余白を 4 ポ イ ン ト と り ます。 下記の コ ー ド に、 最初
のセルを追加す る 方法を示 し ます。
optlist = "fittextline={font=" + boldfont + " fontsize=12 position=center} " +
"margin=4 colspan=3 colwidth=" + c1;
tbl = p.add_table_cell(tbl, 1, 1, "Our Paper Plane Models", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
手順 2 : 2 列に ま たが る セル を追加 次の手順 と し て、 テ キ ス ト 行 1 Giant Wing を持つ
セルを追加 し ま し ょ う 。 こ れは 2 行目の 1 列目に配置 し 、 2 つの列にわた ら せます。 1 列
目の幅は 50 ポ イ ン ト です。 行の高 さ は 14 ポ イ ン ト です。 テ キ ス ト 行は左上に置 き 、 すべ
ての端で余白を 4 ポ イ ン ト と り ます。 213 ページ 「セルの内容の縦位置を調整す る 」 で述
べたの と 同様に、 fontsize={capheight=6} を用いて、 テ キ ス ト の縦揃え を統一 し ま し ょ う 。
こ の見出 し Giant Wing のセルは、 行全体でな く 3 列中 2 列 し か連結 し ないので、 行
ベース の塗 り 分けオプシ ョ ンでは色がつけ ら れません。 かわ り に範囲枠機能を使っ て、 セ
ルが覆 う 矩形を灰色の背景色で塗 り ま し ょ う (範囲枠機能については 226 ページ 「8.4 範
囲枠」 を参照)。 下記の コ ー ド に、 見出 し Giant Wing のセルを追加す る 方法を示 し ます。
optlist = "fittextline={position={left top} font=" + boldfont +
" fontsize={capheight=6}} rowheight=14 colwidth=" + c1 +
" margin=4 colspan=2 matchbox={fillcolor={gray .92}}";
tbl = p.add_table_cell(tbl, 1, 2, "1 Giant Wing", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
218
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 8.36 さ ま ざ ま な内容の表セルを一歩ずつ追加
生成 さ れる表
生成手順
Our Paper Plane Models
手順 2 : 2 列にまたがる セルを追加
1 Giant Wing
Material
Offset print paper 220g/sqm
Benefit
It is amazingly robust and can
even do aerobatics. But it is
best suited to gliding.
手順 1 : 3 列にまたがる セルを追加
手順 3 : さ ら にテキス ト 行セル 3 つ追加
Amazingly robust!
手順 4 : テキス ト フ ローセル追加
手順 5 : テキス ト 行つき画像セル追加
手順 6 : 表をはめ込む
手順 3 : さ ら に 3 つのテキス ト 行セル を追加 下記の コ ー ド は、Material・Benefit・ Offset
print paper…のセルを追加 し ます。Offset print paper…のセルは 2 列目で始ま る ので、同時
に 120 ポ イ ン ト の列幅を定義 し ます。 セルの内容は左上に置き 、 すべての端で余白を 4 ポ
イ ン ト と り ます。
optlist = "fittextline={position={left top} font=" + normalfont +
" fontsize={capheight=6}} rowheight=14 colwidth=" + c1 + " margin=4";
tbl = p.add_table_cell(tbl, 1, 3, "Material", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
tbl = p.add_table_cell(tbl, 1, 4, "Benefit", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
optlist = "fittextline={position={left top} font=" + normalfont +
" fontsize={capheight=6}} rowheight=14 colwidth=" + c2 + " margin=4";
tbl = p.add_table_cell(tbl, 2, 3, "Offset print paper 220g/sqm", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
手順 4 : テキス ト フ ロ ーセル を追加 下記 の コ ー ド は、 It is amazingly… の テ キ ス ト フ
ロ ーセルを追加 し ます。 テ キ ス ト フ ロ ーの入っ た表セルを追加す る には、 まずテ キ ス ト フ
ロ ーを追加 し ま し ょ う 。 上記のテ キ ス ト 行同様、 fontsize={capheight=6} を用いれば、 文
字サ イ ズが結果的にほぼ 8 ポ イ ン ト にな り 、 ま た (margin=4 と あわせて) 高 さ の合計が
14 ポ イ ン ト と な り ます。
tftext = "It is amazingly robust and can even do aerobatics. " +
"But it is best suited to gliding.";
optlist = "font=" + normalfont + " fontsize={capheight=6} leading=110%";
tf = p.add_textflow(-1, tftext, optlist);
if (tf == -1)
throw new Exception("Error: " + p.get_errmsg());
取得 し た テ キ ス ト フ ロ ーハン ド ルは、 表セルを追加する 時に使い ます。 テ キ ス ト フ ロ ーの
1 行目は、 テ キ ス ト 行 Benefit のベース ラ イ ン と 揃っ てい る べ き です。 と 同時に、 テ キ ス
ト Benefit は、 そのセル上端か ら の間隔がテ キ ス ト Material と 同 じ にな る べ き です。 テ キ
ス ト フ ロ ーを追加す る 際は、上に余白が生 じ ない よ う 、fittextflow={firstlinedist=capheight}
を用い ます。 そ し てテ キ ス ト 行 と 同 じ く 、 余白を 4 ポ イ ン ト 加え ます。
8.3 表の組版
219
optlist = "textflow=" + tf + " fittextflow={firstlinedist=capheight} " +
"colwidth=" + c2 + " margin=4";
tbl = p.add_table_cell(tbl, 2, 4, "", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
手順 5 : テキス ト 行の入 っ た画像セル を追加 5 番目の手順 と し て、Giant Wing 紙飛行機
の画像 と テ キ ス ト 行 Amazingly robust! の入っ たセルを追加 し ま し ょ う 。 こ のセルは 2 行
目の 3 列目で始ま り 、 3 つの行に ま たが り ます。 列幅は 90 ポ イ ン ト です。 セルの余白は 4
ポ イ ン ト に設定 し ます。 1 つ目の例 と し ては TIFF 画像を セル内に配置 し てみま し ょ う 。
image = p.load_image("auto", "kraxi_logo.tif", "");
if (image == -1)
throw new Exception("エラー:" + p.get_errmsg());
optlist = "fittextline={font=" + boldfont + " fontsize=8} image=" + image +
" colwidth=" + c3 + " rowspan=3 margin=4";
tbl = p.add_table_cell(tbl, 3, 2, "Amazingly robust!", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
あ る いは、 画像は PDF ページ と し て取 り 込む こ と も で き ます。 PDI ページ を閉 じ る のは必
ず、 fit_table( ) を呼び出 し た後に し て く だ さ い。
int doc = p.open_pdi("kraxi_logo.pdf", "", 0);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
page = p.open_pdi_page(doc, pageno, "");
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
optlist = "fittextline={font=" + boldfont + " fontsize=9} pdipage=" + page +
" colwidth=" + c3 + " rrowspan=3 margin=4";
tbl = p.add_table_cell(tbl, 3, 2, "Amazingly robust!", optlist);
if (tbl == -1)
throw new Exception("エラー:" + p.get_errmsg());
手順 6 : 表 をはめ込む 最後の手順 と し て、 表を 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}}";
result = p.fit_table(tbl, llx, lly, urx, ury, optlist);
if (result.equals("_error"))
throw new Exception("エラー:" + p.get_errmsg());
220
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
p.end_page_ext("");
8.3.5 表 イ ン ス タ ン ス
1 つのはめ込み枠に配置 さ れた表行群は、 表 イ ン ス タ ン ス を構成 し ます。 表全体を表現す
る には、 複数の表 イ ン ス タ ン ス が必要な こ と も あ り ます。 fit_table( ) は、 1 回呼び出 さ れ
る ご と に、 1 つのはめ込み枠に 1 つの表 イ ン ス タ ン ス を配置 し ます。 こ れ ら のはめ込み枠
は、 同 じ ページに多段組レ イ ア ウ ト 等で配置 し てお く こ と も 、 ま たは複数のページに配置
し てお く こ と も で き ます。
図 8.37 の表は、 3 つのページにわた っ てい ます。 各ページに 1 つずつあ る はめ込み枠
に、 各表 イ ン ス タ ン ス が 1 つずつ配置 さ れます。 fit_table( ) を呼び出すたびに、 最初の行
はヘ ッ ダ と し て定義 さ れ、 最後の行はフ ッ タ と し て定義 さ れます。
図 8.37
表は複数の表イ ン ス タ
ン スに分解 さ れ、 各は
め込み枠に 1 つずつ配
置 さ れます。
Our Paper Plane Models
3 Cone Head Rocket
Material
BenefitOur
Kent paper 200g/sqm
Paper
Plane
Models
This paper
arrow can
be
With big swing!
thrown with big swing. It
2 Long Distance Glider
stays in the air a long time.
Drawing paper 180g/sqm
Material
⴫ࠗࡦࠬ࠲ࡦࠬ
ࡋ࠶࠳
ⴕㅪേ
ࠣ࡞࡯ࡊ
Models
Benefit Our Paper
With this Plane
paper rocket
you
can send all your messages
even when sitting in the
Material
Offset print
paper pretty
220g/sqm
cinema
near the back.
Amazingly robust!
Benefit
It is amazingly robust and
can even do aerobatics. But
it is best suited to gliding.
1 Giant Wing
ࡍ࡯ࠫ3
ࡈ࠶࠲
ࡍ࡯ࠫ2
⴫ߩߪ߼ㄟߺᨒ
ࡍ࡯ࠫ1
下記の コ ー ド は、 表を配置 し き る ま で表 イ ン ス タ ン ス をはめ込みつづけ る ための、 一般的
なループ を示 し ます。 配置す る べ き 表 イ ン ス タ ン ス があ る 限 り 、 そのつど新規ページ を作
成 し ます。
do {
/* 新規ページを作成 */
p.begin_page_ext(0, 0, "width=a4.width height=a4.height");
/* 最初の行をヘッダとして使い、すべての表セルに線をひく */
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"));
8.3 表の組版
221
/* 結果を調べる。「_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, "");
ヘ ッ ダ ・ フ ッ タ fit_table( ) で header ・ footer オプシ ョ ン を使えば、 表の最初か最後の行
の数を定義 し て、それが各表 イ ン ス タ ン ス の上端か下端に配置 さ れ る よ う にす る こ と がで
き ます。 fill オプシ ョ ンで area=header か area=footer を使 う と 、 ヘ ッ ダ ・ フ ッ タ を別の色
で塗 る こ と がで き ます。 ヘ ッ ダ行群は表定義の最初の n 行か ら 成 り 、 フ ッ タ 行群は最後の
m 行か ら 成っ てい ます。
ヘ ッ ダ と フ ッ タ は、 fit_table( ) で表 イ ン ス タ ン ス ご と に指定 し ます。 結果 と し て、 表 イ
ン ス タ ン ス ご と に異な る も のに も な り え ます。 すなわち、 ヘ ッ ダ / フ ッ タ をつけた表 イ ン
ス タ ン ス と 省いた表 イ ン ス タ ン ス を混在 さ せ る 、 と いっ た こ と も 可能です。 それに よ り た
と えば、 最後の表 イ ン ス タ ン ス で特別な行を指定する 、 と い っ た こ と も 可能にな り ます。
表行の連動 い く つ か の 表 行 を 必 ず 同 じ 表 イ ン ス タ ン ス に 入 れ さ せ た い と き は、
rowjoingroup オプシ ョ ン を使っ て、それ ら を同 じ 表行連動グループに割 り 当て る こ と がで
き ます。 表行連動グループは、 連続す る 複数の表行を持ち ます。 こ のグループの表行はす
べて、 複数の表 イ ン ス タ ン ス に別れ さ せ ら れ る こ と がな く な り ます。
セルで複数表行を連結 し て も 、 それ ら の表行は自動的に連動グループにはな り ません。
はめ込み枠が低すぎ る はめ込み枠が低すぎ て、 必要なヘ ッ ダ ・ フ ッ タ 行 と 、 最低 1 つ
の本体表行ない し 行連動グループが入 ら ない と き は、 表がはめ込み枠に収ま る ま で、 行の
高 さ が一律に縮め ら れます。 ただ し 必要な縮小率が、 vertshrinklimit で設定 し た限界 よ り
も 小 さ い と き は、縮小は行われずに、fit_table( ) は文字列 _error、 ま たはそれぞれのエ ラ ー
メ ッ セージ を返 し ます。縮小を一切 さ せた く ない と き は、vertshrinklimit=100% を使い ます。
はめ込み枠が狭すぎ る 表のはめ込み枠の座標は、 fit_table( ) を呼び出す際に明示的に与
え ます。 与え た列幅を合計 し た実際の表幅が、 その表のはめ込み枠を超えた と き は、 表が
は め 込 み 枠 に 収 ま る ま で す べ て の 列 が 縮 め ら れ ま す。 た だ し 必 要 な 縮 小 率 が、
horshrinklimit で設定 し た限界 よ り も 小 さ い と き は、 縮小は行われずに、 fit_table( ) は文字
列 _error、 ま たはそれぞれのエ ラ ー メ ッ セージ を返 し ます。 縮小を一切 さ せた く ない と き
は、 horshrinklimit=100% を使い ます。
セルの分割 セルが行を連結 し てい る 場合、後のほ う の行がはめ込み枠に収ま ら ない と き
は、 そのセルは分割 さ れます。 画像 ・ PDI ページ ・ テ キ ス ト 行セルの場合は、 セル内容は
次の表 イ ン ス タ ン ス で も 繰 り 返 さ れます。 テ キ ス ト フ ロ ーセルの場合は、 セル内容は後の
表行のセルに続 き ます。
222
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 8.38 に、 テ キ ス ト フ ロ ーセルが分割 さ れて テ キ ス ト フ ロ ーが次の表行に続いてい る
様子を示 し ます。 図 8.39 に、 画像セルが次の表 イ ン ス タ ン ス の最初の行で繰 り 返 さ れ る
様子を示 し ます。
Material
Offset print paper 220g/sqm
Our paper planes are the
ideal way of passing the
time. We offer revolutionary
Benefit
It is amazingly robust and
can even do aerobatics. But
it is best suited to gliding.
new developments of the
traditional common paper
planes.
1 Giant Wing
⴫ࠗࡦࠬ
࠲ࡦࠬ1
⴫ࠗࡦࠬ
࠲ࡦࠬ2
図 8.38
セルの分割
表行の分割 表のはめ込み枠に最後の本体行が収ま り き ら ない と き 、それは普通は分割 さ
れません。 こ の動作は fit_table( ) の minrowheight オプシ ョ ン で制御 さ れ、 デフ ォ ル ト 値
は 100% です。 こ のデフ ォ ル ト 設定では、 表行は分割 さ れず、 ま る ご と 次の表 イ ン ス タ ン
スへ配置 さ れます。
minrowheight 値を減 ら せば、 最後の本体行を分割 さ せて、 表行の内容の う ち指定 し た
割合を 1 つ目の部分に、 残 り を次の部分に配置す る こ と がで き ます。
図 8.39 に、 テ キ ス ト フ ロ ー It's amazingly robust…が分割 さ れ、 次の表 イ ン ス タ ン ス の
最初の本体行へテ キ ス ト フ ロ ーが続 く 様子を示 し ます。複数行にわた る 画像セルが分割 さ
れ、 画像は繰 り 返 さ れます。 テ キ ス ト 行 Benefit も 繰 り 返 さ れます。
図 8.39
表行の分割
1 Giant Wing
⴫ࠗࡦࠬ
࠲ࡦࠬ1
⴫ࠗࡦࠬ
࠲ࡦࠬ2
Material
Offset print paper 220g/sqm
Benefit
It is amazingly robust and
can even do aerobatics. But
Benefit
it is best suited to gliding.
8.3.6 表組版のアルゴ リ ズム
こ の項では、 表組版機能が表を配置す る 際に行 う ス テ ッ プ を詳説 し ます。 以下、 横書 き テ
キ ス ト の場合について述べます。 し か し 、 「表行高 さ 」 と 「列幅」 と い う 言葉を互いに入
れ替えれば、 縦書 き や回転テ キ ス ト に も あ ては ま り ます。
fit_table( ) への最初の呼び出 し の際には、 オプシ ョ ン colwidth ・ rowheight ・ fittextline ・
fittextflow がすべてのセルについて吟味 さ れ、 表全体の幅 と 高 さ が、 列幅 ・ 表行高 さ ・ テ
キ ス ト 内容に基づいて算出 さ れます。
テキス ト 行 を持つ表セルの高 さ と 幅 を算出 表組版機能は ま ず、 テ キ ス ト 行を持つ表セ
ルの う ち、 colwidth ま たは rowheight のない表列ま たは表行にわた る も のすべてのサ イ ズ
を決定 し ます。 こ れを実現す る ために、 fittextline オプシ ョ ンに従っ てテ キ ス ト 行の、 ひ
いては表セルの幅を算出 し ます。 テ キ ス ト サ イ ズの 2 倍を表セルの高 さ と 見な し ます ( よ
り 正確にい う と boxheight の 2 倍。こ れは、別途指定 さ れない限 り デフ ォ ル ト 値 {capheight
none} を持ち ます) 。 縦書 き テ キ ス ト については、 も っ と も 幅の広いキ ャ ラ ク タ の幅がセ
ル幅 と し て用い ら れます。 西向 き ま たは東向 き のテ キ ス ト については、 テ キ ス ト 高 さ の 2
倍がセル幅 と し て用い ら れます。
8.3 表の組版
223
こ の求め ら れた表セルの幅 と 高 さ が、 そのあ と 、 その表セルがわた る 表列 ま たは表行
の う ち、colwidth ま たは rowheight が指定 さ れていない も のすべてに均等に按分 さ れます。
仮の表サ イ ズ を算出 次の ス テ ッ プ と し て組版機能は、 表の仮の幅 と 高 さ を、 それぞれ
列幅 ・ 表行高 さ すべての合計 と し て算出 し ます。 パーセ ン ト 値で指定 さ れてい る 列幅 と 表
行高 さ は、 先頭はめ込み枠の幅 と 高 さ に基づいて絶対値へ変換 さ れます。 colwidth ま たは
rowheight を持た ない列ま たは表行が ま だあ る 場合には、 仮の表サ イ ズが先頭はめ込み枠
に等 し く な る ま で、 残 り の余白が均等に按分 さ れます。
ですので各表セルに対 し て少な く と も 最小 rowheight は指定 し ておいたほ う が よ いで
し ょ う 。 でない と 表は自動的にはめ込み枠の高 さ に合わせて調整 さ れ る か ら です。
小 さ すぎ る セル を拡大 こ こ で組版機能はすべてのセル内枠を決定 し ます(図8.32参照)。
余白の合計がセルの幅ま たは高 さ よ り 小 さ い と き は、 そのセル枠は、 そのセルに属す る す
べての列 と 表行を均等に拡大す る こ と に よ っ て適切に拡大 さ れます。
テキス ト 行の横方向 をはめ込む 組版機能は、 テ キ ス ト 行を持つすべてのセルの幅を拡
げて、 テ キ ス ト 行が文字サ イ ズ を下げな く て も セルにはめ込め る よ う に し ます。 こ れが可
能でない と き は、 テ キ ス ト 行は自動的に fitmethod=auto で配置 さ れます。 こ れに よ っ て、
テ キ ス ト 行がセル内枠か ら はみ出 さ な い こ と が保証 さ れ ま す。 fittextline オプ シ ョ ン で
fitmethod=auto に設定す る と 、 セル幅が拡が る のを防ぐ こ と がで き ます。
colscalegroup オプシ ョ ン を用い る と 、 同一の列伸縮グループに属す る すべての列が必
ず等 し い幅に伸縮 さ れ る よ う に、 すなわち こ れ ら の幅が統一 さ れて、 グループ内で最 も 広
い幅に合わせ ら れ る よ う にす る こ と がで き ます (図 8.35 参照)。
強制ハ イ フ ネーシ ョ ン を避け る 算出 さ れた表幅がはめ込み枠 よ り 小 さ い と き は、 組版
機能はテ キ ス ト フ ロ ーセルの幅を拡げて、テ キ ス ト が強制ハ イ フ ネーシ ョ ン な し にはめ込
め る よ う に し ます。 こ れはオプシ ョ ン checkwordsplitting=false で回避す る こ と も で き ま
す。 こ の よ う なセルの幅は、 表幅がはめ込み枠の幅に等 し く な る ま で拡げ ら れます。
info_table( ) の horboxgap キーを用いて、 表幅 と はめ込み枠幅の差を取得で き ます。
テキス ト の縦方向 をはめ込む 組版機能は、 すべてのテ キ ス ト 行 ・ テ キ ス ト フ ロ ーセル
の高 さ を拡げて、テ キ ス ト 行ま たはテ キ ス ト フ ロ ーが文字サ イ ズ を下げずにセル内枠には
め込め る よ う 試みます。 ただ し 、 テ キ ス ト 行ま たはテ キ ス ト フ ロ ーに対 し てサブオプシ ョ
ン fitmethod=auto が設定 さ れてい る 場合、 ま たはテ キ ス ト フ ロ ーが continuetextflow オ
プシ ョ ンで他のセルに続いてい る 場合には、 セル高 さ は拡が り ません。
こ のセル高 さ を拡げ る 処理は、 テ キ ス ト 行ま たはテ キ ス ト フ ロ ーを内容 と し て持つセ
ルに対 し てのみ適用 さ れ、 それ以外の種類のセル内容、 すなわち画像 ・ PDI ページ ・ パ ス
オブジ ェ ク ト ・ 注釈 ・ フ ィ ール ド に対 し ては適用 さ れません。
rowscalegroup オプシ ョ ン を用い る と 、 同一の表行伸縮グループに属す る すべての表行
が必ず等 し い高 さ に伸縮 さ れ る よ う にす る こ と がで き ます。
表 を次のはめ込み枠に続け る 算出 さ れた表全体の高 さ がはめ込み枠 よ り も 大 き い (す
なわち、 すべての表セルをはめ込み枠に収め る こ と がで き ない) と き は、 組版機能は、 そ
のはめ込み枠に収ま ら ない初めての表行に出会 う 前に、そのはめ込み枠内に表行を配置す
る こ と を止め ます。
1 つのセルが複数行にわた り 、 そのすべての行がはめ込み枠に収ま ら ない と き は、 こ の
セルは分割 さ れます。 セルが画像 ・ PDI ページ ・ パ ス オブジ ェ ク ト ・ 注釈 ・ フ ォーム フ ィ ー
ル ド を内容 と し て持つ と き は、 repeatcontent=false が指定 さ れていない限 り 、 そのセル内
224
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
容は次のはめ込み枠内で繰 り 返 さ れます。 し か し テ キ ス ト フ ロ ーは、 セルがわた る 後続の
表行に続 き ます (図 8.38 参照)。
rowjoingroup オプシ ョ ン を用い る と 、 1 つの表行連動グループに属す る すべての表行
が必ず 1 つのはめ込み枠内に現れ る よ う にす る こ と がで き ます。ヘ ッ ダ ま たはフ ッ タ に属
す る すべての表行 と 1 つの本体行は、 自動的に表行連動グループ を形成 し ます。 ですので
組版機能は、はめ込み枠に収ま ら ない初めての行に出会 う 前に表行を配置す る こ と を止め
ます (図 8.37 参照)。
return オプシ ョ ン を用い る と 、 対象行を配置 し た後にその表 イ ン ス タ ン ス内に絶対 も
う 表行が配置 さ れない よ う にす る こ と がで き ます。
表行 を分割 表行は、 非常に高い と き 、 ま たは 1 個の本体行 し かない と き には、 分割 さ れ
る こ と があ り ます。 末尾の本体行が表のはめ込み枠に完全に収ま ら ない と き は、 それはま
る ご と 次のはめ込み枠へ移動 さ れます。 こ の動作は fit_table( ) の minrowheight オプシ ョ
ン で 制御す る こ と が で き ま す。 こ の オ プ シ ョ ン の デ フ ォ ル ト 値 は 100% で す。 こ の
minrowheight 値を小 さ く す る と 、 末尾本体行の内容の う ち指定 し た割合がカ レ ン ト はめ
込み枠に配置 さ れ、 その行の残 り は次のはめ込み枠に配置 さ れます (図 8.39 参照)。
info_table( ) の rowsplit キーを用い る と 、 表行が分割 さ れてい る か ど う か を調べ る こ と
がで き ます。
算出 さ れた表幅 を調節 算出 さ れ る 表幅は、 テ キ ス ト 行の横方向をはめ込んだ後な ど、決
定ス テ ッ プのいずれかの後に、 はめ込み枠 よ り も 大き く な る こ と があ り ます。 こ の場合に
は、 表幅がはめ込み枠の幅に等 し く な る ま で、 すべての列幅が均等に縮め ら れます。 こ の
縮小処理は horshrinklimit オプシ ョ ンに よ っ て制限 さ れます。
info_table( ) の horshrinking キーを用い る と 、 横縮小倍率を取得する こ と がで き ます。
horshrinklimit の閾値を超え る と 、 下記のエ ラ ー メ ッ セージが現れます :
Calculated table width $1 is too large (> $2, shrinking $3)")
こ こ で $1 は算出 さ れた表幅を示 し 、 $2 は可能な最大の幅、 $3 は horshrinklimit 値です。
表のサ イ ズ を小 さ いはめ込み枠に合わせて調整 直前のはめ込み枠に対 し て算出 さ れた
表幅が、 カ レ ン ト はめ込み枠に対 し て大 き すぎ る と き は、 組版機能は、 表幅がカ レ ン ト は
め込み枠の幅に等 し く な る ま ですべての列を縮め ま す。 ただ し セル内容は調整 さ れ ま せ
ん。 表幅を改めて計算 し なおすには、 fit_table( ) を rewind=1 をつけて呼び出 し ます。
8.3 表の組版
225
8.4 範囲枠
範囲枠を使 う と 、PDFlib がページ上に何 ら かの内容を配置 し た と き に算出 し た座標を利用
す る こ と がで き ま す。 範囲枠を定義す る には、 そのための専用の関数が あ る わけではな
く 、 実内容を配置す る fit_textline( ) や fit_image( ) な ど の関数で matchbox オプシ ョ ン を
指定 し ます。 範囲枠は さ ま ざ ま な目的に使え ます。
> 範囲枠は装飾で き ます。 例 : 色を塗 る 、 枠線で囲む。
> 範囲枠を使っ て、 注釈 (複数可) を create_annotation( ) で自動的に作成で き ます。
> 範囲枠はテ キ ス ト 行の高 さ を定義 し て、それが fit_textline( ) で枠にはめ込まれ る よ う に
し た り 、 テ キ ス ト フ ロ ー内のテ キ ス ト 範囲の高 さ を定義 し て、 それが装飾 さ れ る よ う
に し た り し ます (boxheight オプシ ョ ン)。
> 範囲枠は画像の切 り 抜 き を定義 し ます。
> 範囲枠の座標やその他のプ ロ パテ ィ は、 info_matchbox( ) で取得 し て、 他の作業に利用
す る こ と がで き ます。 例 : 画像を挿入。
PDFlib はそれぞれの要素について、 ページ上におけ る その要素の位置 (関連す る すべての
オプシ ョ ン で指定 さ れた) を記述す る 外接枠に対応す る 矩形 と し て、 範囲枠を算出 し ま
す。 テ キ ス ト フ ロ ー と 表セルの場合は、 改行や表行分割に よ っ て、 1 つの範囲枠が複数の
矩形か ら 成 る こ と も あ り ます。
範囲枠の矩形 (群) は、 配置す る 要素を描 く 前に描かれ ます。 そのため、 範囲枠の罫
や塗 り の効力は実内容では打ち消 さ れ る こ と があ り ますが、 その逆はあ り ません。 特に、
範 囲 枠 の 中 で、 画 像 で 覆 わ れ た 領 域 と 重 な る 部 分 は、 画 像 に 隠 れ ま す。 画 像 が
fitmethod=slice ま たは fitmethod=clip で配置 さ れてい る と き は、 画像のはめ込み枠の外の
範囲枠罫 も 切 り 落 と さ れます。 こ の現象を避け る には、 範囲枠の矩形を、 fit_image( ) を呼
び出 し た後に、 rect( ) 等の基本的な描画関数を使っ て描 く と い う 方法 も あ り ます。 範囲枠
の矩形の座標は、 info_matchbox( ) を使っ て取得で き ますが、 ただ し こ れはその範囲枠が
fit_image( ) への呼び出 し で名前を与え ら れていた場合に限 り ます。
以下のい く つかの項で、 範囲枠の利用例をい く つか示 し ます。 範囲枠のオプシ ョ ン リ
ス ト に対応 し てい る 関数については、 く わ し く は PDFlib API リ フ ァ レ ン ス を参照 し て く だ
さ い。
8.4.1 テキス ト 行 を装飾
テ キ ス ト 行の範囲枠か ら 話を始め ま し ょ う 。 fit_textline( ) においては範囲枠は、 与え ら れ
たテ キ ス ト のテ キ ス ト 枠 と 同 じ にな り ます。 デフ ォ ル ト では、 テ キ ス ト 枠の幅はテ キ ス ト
の幅に等 し く 、 高 さ は、 与え ら れた文字サ イ ズのキ ャ ッ プハ イ ト に等 し く な り ます。 範囲
枠の大 き さ を図示す る ために、 下記の コ ー ド では範囲枠を青の背景色で塗っ てい ます (図
8.40a 参照)。
String optlist =
"font=" + normalfont + " fontsize=8 position={left top} " +
"matchbox={fillcolor={rgb 0.8 0.8 0.87} boxheight={capheight none}}";
p.fit_textline("Giant Wing Paper Plane", 2, 20, optlist);
boxheight オプシ ョ ンは、 boxheight={capheight none} がデフ ォ ル ト 設定なので、 省略 し て
も か ま い ません。 boxheight オプシ ョ ンで枠の高 さ を も っ と 増や し てデ ィ セ ン ダ ま で覆 う
よ う にすれば、 よ り 美 し く な り ます (図 8.40b 参照)。
枠の高 さ を増や し て文字サ イ ズに一致 さ せたい と き は、 boxheight={fontsize descender}
が使え ます (図 8.40c 参照)。
226
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
次の ス テ ッ プ と し ては、 範囲枠の左 ・ 右 ・ 下へ変位を加え て拡げ、 枠のすべての端を
テ キ ス ト と 均等な間隔に し てみま し ょ う 。 さ ら に枠線幅を指定 し て、 範囲枠の ま わ り に矩
形を描 き ま し ょ う (図 8.40d 参照)。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/text_on_color ト ピ ッ ク にあ り ます。
図 8.40 さ ま ざ ま なサブオプ シ ョ ンの範囲枠を使 っ て テキス ト 行を装飾
fit_textline( ) の matchbox オプ シ ョ ンのサブオプ シ ョ
ン
生成 さ れる出力
a)
Giant Wing Paper Plane
boxheight={capheight none}
b)
Giant Wing Paper Plane
boxheight={ascender descender}
c)
Giant Wing Paper Plane
boxheight={fontsize descender}
d)
Giant Wing Paper Plane
boxheight={fontsize descender} borderwidth=0.3
offsetleft=-2 offsetright=2 offsetbottom=-2
8.4.2 テキス ト フ ロ ーで範囲枠 を利用
テキス ト フ ロ ーの一部分 を装飾 こ の項では、 テ キ ス ト フ ロ ー内の一部のテ キ ス ト を装
飾 し ま し ょ う 。 very dangerous と い う 言葉を マーカーペンの よ う に目立たせま し ょ う 。 こ
れを実現す る には、 言葉を matchbox イ ン ラ イ ンオプシ ョ ン と matchbox=end イ ン ラ イ ン
オプシ ョ ンで挟みます (図 8.41 参照)。
図 8.41 matchbox イ ン ラ イ ンオプ シ ョ ン を含んだテキス ト フ ロー
生成 さ れる出力
It is very dangerous to fly
the Giant Wing in a
thunderstorm.
create_textflow( ) に対する テキス ト と イ ン ラ イ ン オプ
ション
It is <matchbox={fillcolor={rgb 1 0 0}
boxheight={ascender descender}}>very dangerous
<matchbox=end> to fly the Giant Wing in a
thunderstorm.
テキス ト フ ロ ーの範囲枠に Web リ ン ク を追加 今度は、テ キ ス ト フ ロ ーの一部分に Web
リ ン ク を追加 し ま し ょ う 。 1 番目の手順 と し て、 リ ン ク をつけたい部分のテ キ ス ト を示す
kraxi と い う 範囲枠を含んだテ キ ス ト フ ロ ーを作成 し ま し ょ う 。 2 番目に、 URL を開 く ア
ク シ ョ ン を作成 し ま し ょ う 。 3 番目に、 枠が不可視の Link 型の注釈を作成 し ま し ょ う 。 そ
のオプシ ョ ン リ ス ト の中で、 範囲枠 kraxi を参照 し て リ ン ク の矩形 と し て使い ま し ょ う
(create_annotation( ) の矩形の座標は無視 さ れます)。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの text_output/weblink_in_textflow ト ピ ッ ク にあ り
ます。
/* 範囲枠「kraxi」を含んだテキストフローを作成してはめ込み */
String tftext =
"For more information about the Giant Wing Paper Plane see the Web site of " +
"<underline=true matchbox={name=kraxi boxheight={fontsize descender}}>" +
"Kraxi Systems, Inc.<matchbox=end underline=false>";
String optlist = "font=" + normalfont + " fontsize=8 leading=110%";
tflow = p.create_textflow(tftext, optlist);
if (tflow == -1)
8.4 範囲枠
227
throw new Exception("エラー:" + p.get_errmsg());
result = p.fit_textflow(tflow, 0, 0, 50, 70, "fitmethod=auto");
if (!result.equals("_stop"))
{ /* ... */ }
/* 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);
テ キ ス ト が複数の行にわた る 場合で も 、 1 回 create_annotation( ) を呼び出すだけで、 適切
な数の リ ン ク 注釈が自動的に作成 さ れます。 結果を図 8.42 に示 し ます。
For information about
Giant Wing Paper
Planes see the Web
site of Kraxi Systems,
Inc.
図 8.42
テキス ト フ ローの一部分に
Web リ ン ク を追加
8.4.3 範囲枠 と 画像
画像に リ ン ク を追加 画像で覆われた領域に Web リ ン ク を追加す る には、 画像の範囲枠
が使え ます。 コ ー ド は先述の 227 ページ 「テ キ ス ト フ ロ ーの範囲枠に Web リ ン ク を追加」
と 同 じ です。 ただ し 、 テ キ ス ト フ ロ ーを配置す る のでな く 、 画像を次のオプシ ョ ン リ ス ト
を使っ てはめ込みます。
String optlist = "boxsize={130 130} fitmethod=meet matchbox={name=kraxi}";
p.fit_image(image, 10, 10, optlist);
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの interactive/link_annotations ト ピ ッ ク にあ り ま
す。
画像にふ ち を つけ る こ の例では、 画像の範囲枠を使っ て、 画像の ま わ り にふち をつけ
ま し ょ う 。 画像に fitmethod=meet を使っ て、 縦横比を保ちつつま る ご と 、 与え ら れた枠
に収め ま し ょ う 。borderwidth サブオプシ ョ ン を使っ た matchbox オプシ ョ ン を使っ て、画
像の ま わ り に太い枠を描 き ま し ょ う 。strokecolor サブオプシ ョ ンで枠の色を決め、linecap・
linejoin サブオプシ ョ ン を使っ て角を丸め ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの images/frame_around_image ト ピ ッ ク にあ り ます。
範囲枠はつねに画像 よ り 前の時点で描かれ る ので、 一部が画像で隠 さ れて し ま い ます。 こ
れを避け る ために、 枠の幅の 50 パーセ ン ト の offset サブオプシ ョ ン群を使っ て、 画像が
覆 う 領域 よ り も ふち を大 き く し ま し ょ う 。 あ る いは、 枠を その分太 く す る と い う 方法 も あ
り ます。図 8.43 に、ふち をつけ る ために fit_image( ) で使 う オプシ ョ ン リ ス ト を示 し ます。
228
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 8.43 画像の範囲枠を使っ て画像にふち をつける
生成 さ れる出力
fit_image( ) に対する オプ シ ョ ン リ ス ト
boxsize={60 60} position={center} fitmethod=meet
matchbox={name=kraxi borderwidth=4 offsetleft=-2 offsetright=2
offsetbottom=-2 offsettop=2 linecap=round linejoin=round
strokecolor {rgb 0.0 0.3 0.3}}
テキス ト を画像に整列 さ せ る 以下の コ ー ド は、 縦方向のテ キ ス ト を、 画像の右余白に
合わせ る 方法を示 し てい ます。 画像ははめ込み方式 meet を用いて、 与え ら れた枠に縦横
比を保っ てはめ込まれてい ます。 はめ込み枠の具体的な座標は info_matchbox( ) で取得 さ
れ、 縦方向のテ キ ス ト ははめ込み枠の右下隅 (x2, y2) に合わせて配置 さ れてい ます。 範囲
枠の辺は描線 さ れてい ます (図 8.44 参照)。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの images/align_text_at_image ト ピ ッ ク にあ り ま
す。
/* このオプションリストを使って画像を読み込んではめ込む */
String optlist = "boxsize={300 200} position={center} fitmethod=meet " +
"matchbox={name=giantwing borderwidth=3 strokecolor={rgb 0.85 0.83 0.85}}";
/* 画像を読み込んではめ込む */
/* 範囲枠の右下(第二)隅の座標を取得 */
if ((int) p.info_matchbox("giantwing", 1, "exists") == 1)
{
x1 = p.info_matchbox("giantwing", 1, "x2");
y1 = p.info_matchbox("giantwing", 1, "y2");
}
/* その隅から2だけ間隔をあけてテキスト行を開始 */
p.fit_textline("Foto: Kraxi", x2+2, y2+2, "font=" + font + " fontsize=8 orientate=west");
図 8.44 画像の範囲枠の座標を使っ て テキス ト 行をはめ込む
生成 さ れる出力
生成手順
Foto: Kraxi
手順 1 : 画像を範囲枠 と と も にはめ込み
(x2, y2)
手順 2 : 範囲枠情報を得て座標 (x2, y2) を取得
手順 3 : 取得 し た座標 (x2, y2) か ら orientate=west オプ シ ョ ン で テキ
ス ト 行を開始
8.4 範囲枠
229
230
第 8 章 : テキス ト ・ 表組版 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
9 pCOS イ ン タ フ ェ ース
pCOS (PDFlib Comprehensive Object Syntax) イ ン タ フ ェース は、 PDF 文書のページ内容記
述以外のすべてのセ ク シ ョ ン、 すなわちページサ イ ズ ・ メ タ デー タ ・ イ ン タ ラ ク テ ィ ブ要
素な ど か ら 任意の情報を取得で き る 簡単でエ レ ガ ン ト な機能を提供 し ます。 pCOS を利用
す る には、 PDF の内部構造 と 辞書キーの基礎的な知識はあ る 程度必要ですが、 PDF の実
際の文法や検証を取 り 扱 う 必要はあ り ません。
pCOS を使 う 場合は、 PDF リ フ ァ レ ン ス を 1 部入手 さ れ る こ と を強 く 推奨 し ます。 入
手方法は下記の と お り です。
Adobe Systems Incorporated: PDF Reference, Sixth Edition: Version 1.7。 ダ ウ ン ロ ー ド 可
能な PDF が www.adobe.com/devnet/pdf/pdf_reference.html にあ り ます。
9.1 簡単な pCOS の例
ク ッ ク ブ ッ ク い く つかの特定の問題を解決する ための pCOS コ ー ド サン プル集が PDFlib ク ッ ク ブ ッ クの
pCOS クックブック にあ り ます。
有効な PDF 文書ハン ド ルが利用可能であれば、 pCOS 関数 PDF_pcos_get_number( ) ・ PDF_
pcos_get_string( ) ・ PDF_pcos_get_stream( ) を使っ て、 pCOS パス文法を用いて PDF か ら 情
報を取得す る こ と がで き ます。 よ く 用い ら れ る い く つかの pCOS パス と その意味を表 9.1
に挙げます。
表 9.1 よ く 用い られる PDF オブ ジ ェ ク ト に対する pCOS パス
pCOS パス
型
説明
length:pages
数値
文書内のページ数
/Info/Title
文字列
文書情報 フ ィ ール ド Title。 下記のフ ィ ール ド 名は PDF 内で定
義済みです :
Title ・ Author ・ Subject ・ Keywords ・ Creator ・ Producer ・
CreationDate ・ ModDate ・ Trapped
/Root/Metadata
ス ト リ ーム
文書の メ タ デー タ を持つ XMP ス ト リ ーム
fonts[...]/name
文字列
フ ォ ン ト の名前。 項目数を取得する には length:fonts を用いま
す
fonts[...]/vertical
論理値
フ ォ ン ト が縦書きかど う か
fonts[...]/embedded
論理値
フ ォ ン ト の埋め込み状況
pages[...]/width
数値
ページの表示可能領域の幅
ページ数
文書内のページの総数は以下の よ う に取得で き ます。
pagecount = p.pcos_get_number(doc, "length:pages");
文書情報 フ ィ ール ド
文書情報フ ィ ール ド は以下の コ ー ド で取得で き ます。
objtype = p.pcos_get_string(doc, "type:/Info/Title");
if (objtype.equals("string"))
{
/* 文書情報キーが見つかった */
9.1 簡単な pCOS の例
231
title = p.pcos_get_string(doc, "/Info/Title");
}
ページサ イ ズ MediaBox ・ CropBox ・ Rotate 項目は pCOS で直接取得す る こ と が可能です
が、そ こ か ら ページの実サ イ ズ を知 る にはそれ ら を組み合わせて評価 し なければな り ませ
ん。 ページサ イ ズ を知 り たいな ら ば、 pages 擬似オブジ ェ ク ト の width ・ height キーを用
いたほ う がは る かに簡単です。 以下の コ ー ド はページ 3 の幅 と 高 さ を取得 し ます (pages
擬似オブジ ェ ク ト の番号は 0 か ら 始ま る こ と に留意)。
pagenum = 2
width = p.pcos_get_number(doc, "pages[" + pagenum + "]/width");
height = p.pcos_get_number(doc, "pages[" + pagenum + "]/height");
文書内の全 フ ォ ン ト を列挙 以下の コ ー ド は、 文書内の全フ ォ ン ト を列挙 し 、 それぞれ
の埋め込み状況 も 付記 し ます。
fontcount = p.pcos_get_number(doc, "length:fonts");
for (i=0; i < fontcount; i++)
{
fontname = p.pcos_get_string(doc, "fonts[" + i + "]/name");
embedded = p.pcos_get_number(doc, "fonts[" + i + "]/embedded");
}
記述方向 pCOS と 、char_info 構造内で与え ら れ る fontid 値 と を用いれば、 フ ォ ン ト が縦
書 き か ど う かを以下の よ う に簡単に調べ る こ と がで き ます。
if (p.pcos_get_number(doc, "fonts[" + ci->fontid + "]/vertical"))
{
/* フォントは縦書き */
}
暗号化状態 pcosmode 擬似オブジ ェ ク ト を取得する と 、 その文書の pCOS モー ド を以下
の よ う に知 る こ と がで き ます。
if (p.pcos_get_number(doc, "pcosmode") == 2)
{
/* 完全pCOSモード */
}
XMP メ タ デー タ
き ます。
XMP メ タ デー タ を持つス ト リ ームは以下の コ ー ド で取得す る こ と がで
objtype = p.pcos_get_string(doc, "type:/Root/Metadata");
if (objtype.equals("stream"))
{
/* XMPメタデータを発見 */
metadata = p.pcos_get_stream(doc, "", "/Root/Metadata");
}
232
第 9 章 : pCOS イ ン タ フ ェ ース (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
9.2 PDF の基本デー タ 型の処理
pCOS は 3 つの関数 PDF_pcos_get_number( )・PDF_pcos_get_string( )・PDF_pcos_get_stream( )
を提供 し ます。 こ れ ら の関数を用い る と 、 PDF 文書内に含まれ る 可能性のあ る あ ら ゆ る 基
本デー タ 型を取得す る こ と がで き ます。
数値 整数型 と 実数型のオブジ ェ ク ト は PDF_pcos_get_number( ) で取得で き ます。 pCOS
は整数 と 浮動小数点数 と を一切区別 し ません。
名前 と 文字列 名前型 と 文字列型のオブジ ェ ク ト は PDF_pcos_get_string( ) で取得で き ま
す。 PDF 内の名前オブジ ェ ク ト は非 ASCII キ ャ ラ ク タ を含む可能性があ り 、 ま た # 文法
(修飾) に よ っ て あ る 種の特殊キ ャ ラ ク タ を入れ込んでい る 可能性があ り ます。 pCOS は
PDF の名前を以下の よ う に扱い ます。
> 名前オブジ ェ ク ト は返 さ れ る 前にデ コ レーシ ョ ン除去 さ れます(すなわち # 文法が解決
さ れます)。
> 多 く の言語バ イ ンデ ィ ン グでは名前オブジ ェ ク ト は Unicode 文字列 と し て返 さ れます。
ただ し C ・ C++ 言語バ イ ンデ ィ ン グでは BOM な し の UTF-8 と し て返 さ れます。
PDF 内の文字列の大多数はテ キ ス ト 文字列ですので、PDF_pcos_get_string( ) はそれ ら を そ
の よ う に扱い ます。 し か し 、 まれに PDF 内の文字列がバ イ ナ リ 情報を持た さ れてい る こ
と があ り ます。 その場合は文字列は、 バ イ ナ リ 文字列を保持 し て内容に一切変更を加え な
い関数 PDF_pcos_get_stream( ) を使っ て取得す る 必要があ り ます。
論理値 論理値型のオブジ ェ ク ト は PDF_pcos_get_number( ) で取得で き 、1 (真) か 0 (偽)
で返 さ れます。 PDF_pcos_get_string( ) を用いて論理値オブジ ェ ク ト を取得す る こ と も 可能
で、 その場合は文字列 true か false のいずれかで返 さ れます。
ス ト リ ーム ス ト リ ーム型の オブ ジ ェ ク ト は PDF_pcos_get_stream( ) で取得で き ま す。
pCOS デー タ 型に よ っ て (stream か fstream か)、 その内容は圧縮 さ れてい る も の と さ れ
ていない も のがあ り ます。PDF_pcos_get_stream( ) で keepfilter オプシ ョ ン を使 う と 、stream
型であ っ て も 圧縮デー タ の ま ま ク ラ イ ア ン ト 側へ取得す る こ と がで き ます。
PDF 内の ス ト リ ームデー タ は 1 つない し 複数の フ ィ ル タ に よ っ て前処理 さ れてい る こ
と があ り ます。 ス ト リ ームに存在す る フ ィ ル タ の リ ス ト は ス ト リ ーム辞書か ら 取得す る こ
と がで き ます。 ただ し 画像の場合は、 こ の情報はその画像の filterinfo 辞書か ら 取得す る
ほ う がずっ と 簡単です。 ス ト リ ームの フ ィ ル タ チ ェーンが含むフ ィ ル タ がすべて対応フ ィ
ル タ の場合はその型は stream にな り ます。stream オブジ ェ ク ト の内容を取得す る 際には、
PDF_pcos_get_stream( ) はすべての フ ィ ル タ を除去 し て、 結果 と し て フ ィ ル タ がかか っ て
いないデー タ を返 し ます。
注 pCOS は右記のス ト リ ーム フ ィ ル タ には対応 し ていません : JBIG2 ・ JPX。
ス ト リ ームの フ ィ ル タ チ ェーンの中に 1 つで も 非対応の フ ィ ル タ があ る 場合には、そのオ
ブジ ェ ク ト 型は fstream (filtered stream) と し て報告 さ れます。 fstream オブジ ェ ク ト の内
容を取得す る 際には、 PDF_pcos_get_stream( ) はフ ィ ル タ チ ェ ーンの冒頭の対応フ ィ ル タ
群は除去 し ますが、残 り の非対応フ ィ ル タ は適用 さ れた ま ま の状態で ス ト リ ームデー タ を
返 し ます。 適用 さ れてい る フ ィ ル タ の リ ス ト は ス ト リ ーム辞書か ら 取得す る こ と がで き 、
フ ィ ル タ がかか っ た ス ト リ ームの内容は PDF_pcos_get_stream( ) で取得す る こ と がで き ま
す。 なお対応フ ィ ル タ の名前は、 ス ト リ ームの フ ィ ル タ の名前を取得す る 際には除去 さ れ
ませんので、 ク ラ イ ア ン ト 側では対応フ ィ ル タ の名前は無視す る 必要があ り ます。
PDF 内の ス ト リ ームは、 一般にバ イ ナ リ デー タ を内容 と し て持ち ます。 ただ し 、 ご く
まれな場合において (テ キ ス ト ス ト リ ーム) 、 テ キ ス ト デー タ を内容 と し て持つ こ と があ
9.2 PDF の基本デー タ 型の処理
233
り ます (JavaScript ス ト リ ーム等)。 適切なテ キ ス ト 変換を さ せる ために、 get_stream( ) で
convert=unicode オプシ ョ ン を用いて く だ さ い。
234
第 9 章 : pCOS イ ン タ フ ェ ース (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
9.3 複合デー タ 構造 と ID
基本デー タ 型の う ちのいずれか 1 つの型を持つオブジ ェ ク ト は、 複数ま と めて、 複合デー
タ 構造にす る こ と が可能です。複合デー タ 構造には配列 と 辞書の 2 種類があ り ます。pCOS
は複合オブジ ェ ク ト を取得す る ための専用の関数は提供 し てい ません。 そのかわ り 、 辞書
か配列の中のオブジ ェ ク ト は個々に指 し 示 し て取得す る こ と がで き ます。
配列 配列 と は任意の数のオブジ ェ ク ト の 1 次元集合です。配列内の各オブジ ェ ク ト は任
意の型を持つ こ と がで き ます。
配列の内容を列挙す る には、 その配列が持つ要素の数 N を取得 し (その配列のパ ス の
前に length 接頭辞を用いて…表 9.2 参照)、 そ し て番号 0 か ら N-1 ま でのすべての要素に
ついて繰 り 返 し ます。
辞書 辞書 (連想配列 と も い う ) は任意の数のオブジ ェ ク ト 対を持ち ます。 各対の 1 つ目
のオブジ ェ ク ト は名前型を持ち、 キー と 呼ばれます。2 つ目のオブジ ェ ク ト は値 と 呼ばれ、
任意の型を持つ こ と がで き ます (null 以外)。
辞書の内容を列挙す る には、 その辞書が持つ要素の数 N を取得 し (その辞書のパ ス の
前に length 接頭辞を用いて…表 9.2 参照)、 そ し て番号 0 か ら N-1 ま でのすべての要素に
ついて繰 り 返 し ます。 辞書を列挙す る 際には、 その辞書のパ ス の末尾に .key 接尾辞を用い
れば、 すべての辞書キーが、 PDF 内に格納 さ れてい る 順序で得 ら れます。 同様に、 それに
対応す る 値は .val 接尾辞で列挙で き ます。 継承値 (後述) と 擬似オブジ ェ ク ト は、 辞書
キーを列挙す る 際には不可視であ り 、 length の数には入 り ません。
PDF 内のページ関連の辞書項目のなかには、 ツ リ ー状のデー タ 構造を持っ て継承 さ れ
てい る も のがあ り 、その分取得が難 し く な っ てい ます。た と えばページに対する MediaBox
はそのページ辞書の中に含まれてい る と い う 保証はな く 、任意の複雑なページ ツ リ ーか ら
継承 さ れてい る 可能性が あ り ま す。 pCOS は こ の問題を解消す る ために、 すべての継承
キー ・ 値を最終辞書内へ挿入 し てい ます。 いいかえれば、 pCOS を利用す る 際には、 すべ
ての継承可能な項目は辞書内で直接利用可能であ る と 見なす こ と がで き 、 ツ リ ー内のすべ
ての関連親項目を検索 し た り す る 必要はない と い う こ と です。 こ の継承項目の連結が利用
で き る のは、 pages[ ] 擬似オブジ ェ ク ト を通 じ てページ ツ リ ーにア ク セ スす る と き だけで
す。 /Pages ツ リ ーにア ク セ ス、 ま たは objects[ ] 擬似オブジ ェ ク ト にア ク セ ス、 ま たは
pages[ ][ ] を通 じ て キーを列挙す る と 、 それぞれの辞書の中に存在す る 実際の項目が返 さ
れ、 その際に継承は一切適用 さ れません。
辞書 と 配列の pCOS ID PDF オブジ ェ ク ト ID と 異な り 、 pCOS ID は、 pCOS パ ス で指 し
示 さ れた要素に対す る 一意の識別子を与え る こ と が保証 さ れてい ます (配列 も 辞書 も 入れ
子にす る こ と が可能なので、 オブジ ェ ク ト はその親配列や親辞書 と 同 じ PDF オブジ ェ ク
ト ID を持つ こ と があ り ます)。 pCOS ID を取得す る には、 その辞書か配列のパ ス の前に
pcosid 接頭辞をつけ ます (表 9.2 参照)。
し たがっ て pCOS ID は、 繰 り 返 し 利用す る 要素へのシ ョ ー ト カ ッ ト と し て利用す る こ
と が可能で、 明示的なパ ス指定が不要にな り ます。 た と えば、 大 き な配列のすべての要素
についてループす る と き に こ れはパフ ォーマ ン ス を改善 し ます。 objects[] 擬似オブジ ェ ク
ト を用いれば、 あ る 特定の ID で指 し 示 さ れた要素の内容を取得す る こ と がで き ます。
9.3 複合デー タ 構造 と ID
235
9.4 パス文法
pCOS イ ン タ フ ェ ース のバ ッ ク ボーンは簡単なパス文法であ り 、それを用いて PDF 文書内
に含 ま れてい る 任意のオブジ ェ ク ト を指 し 示 し て取得す る こ と がで き る よ う にな っ てい
ます。 オブジ ェ ク ト のデー タ 本体だけでな く 、 pCOS ではそのオブジ ェ ク ト に関す る 情報
も 取得す る こ と が可能です。 た と えばその型や長 さ 等です。 オブジ ェ ク ト の型 (それ自体
も 取得で き る ) に応 じ て関数 PDF_pcos_get_number( ) ・ PDF_pcos_get_string( ) ・ PDF_pcos_
get_stream( ) の う ちの 1 つを選び、 それを用いてオブジ ェ ク ト の値を取得す る こ と がで き
ます。 pCOS パス の一般文法は下記の通 り です。
[<接頭辞>:][擬似名[<番号>]]/<名前>[<番号>]/<名前>[<番号>] ... [.key|.val]
パ ス を構成す る こ の さ ま ざ ま な要素の意味は以下の通 り です。
> 接頭辞はオプシ ョ ン であ り 、 表 9.2 に挙げ る 値を と る こ と がで き ます。
> 擬似オブ ジ ェ ク ト 名はオプシ ョ ン であ り 、 238 ページ 「9.5 擬似オブジ ェ ク ト 」 で説明
す る 値の う ちの 1 つを持つ こ と がで き ます。
> 名前 と い う 構成要素は、文書内で見つか る 辞書キーです。複数の名前は / キ ャ ラ ク タ で
区切 り ます。 空のパ ス、 すなわちただ 1 つの / は、 文書の Trailer 辞書を表 し ます。 名
前はそれぞれ、 その前の辞書の中に存在す る 辞書キーでなければな り ません。 フルパ
スは、 初期辞書 (Trailer ま たは擬似オブジ ェ ク ト ) か ら 目的のオブジ ェ ク ト ま で辞書
キーの連鎖を記述 し ます。
> 配列か辞書を指 し 示すパ ス ない し パ ス 構成要素は数値の番号を持つ こ と がで き ま す。
こ の番号は括弧で挟んで 10 進形式で指定す る 必要があ り ます。 入れ子にな っ た配列や
辞書は複数の番号項目で指 し 示す こ と がで き ます。 配列や辞書の最初の項目は番号 0
を持ち ます。
> 辞書を指 し 示すパ ス ない し パ ス構成要素は、番号修飾子、お よ び接尾辞 .key か .val のい
ずれか を持つ こ と がで き ます。 こ れを用い る と 、 番号付け さ れてい る 辞書項目の、 そ
れぞれ辞書キー と それに対応す る 値を取得す る こ と がで き ます。 辞書に対す る パ ス が
番号修飾子を持つ場合には、 その後に こ の ど ち ら かの接尾辞をつけなければな り ませ
ん。
pCOS パスに対す る エ ン コ ーデ ィ ン グ 多 く の場合、 pCOS パス はプ レーン ASCII キ ャ ラ
ク タ のみを含みます。 ただ し 若干の場合においては (PDFlib ブ ロ ッ ク 名等)、非 ASCII キ ャ
ラ ク タ が必要にな る こ と も あ り ます。 pCOS パ ス は、 下記の規則に従っ てエン コ ー ド す る
必要があ り ます :
> パ ス構成要素がキ ャ ラ ク タ / ・ [ ・ ] ・ # のいずれかを含む場合には、 それは番号記号 # の
後に 2 桁の 16 進数をつけて表す必要があ り ます。
> Unicode 対応言語バ イ ンデ ィ ン グでは、 パ ス は通常の Unicode 文字列で構成 さ れますの
で、 ASCII キ ャ ラ ク タ も 非 ASCII キ ャ ラ ク タ も 含む こ と がで き ます。
> Unicode 非対応言語バ イ ンデ ィ ン グでは、パ ス は UTF-8 で与え る 必要があ り ます。文字
列は BOM を含んで も 含ま な く て も よ く 、 こ れは何 ら 違いを も た ら し ません。 BOM は、
パ ス の先頭に置 く こ と も で き ます し 、 個々のパ ス要素の先頭に (すなわち ス ラ ッ シ ュ
キ ャ ラ ク タ の後に) 置 く こ と も で き ます。
EBCDIC シ ス テ ム上では、 パ ス は一般的には ebcdic エン コ ーデ ィ ン グで与え る 必要が
あ り ます。 ASCII 文字セ ッ ト 外のキ ャ ラ ク タ は EBCDIC-UTF-8 (BOM つ き で も BOM
な し で も 可) と し て与え る 必要があ り ます。
パスの接頭辞 接頭辞を用い る と 、オブジ ェ ク ト の さ ま ざ ま な属性を取得す る こ と がで き
ます (その値自体ではな く )。 対応 し てい る 接頭辞をすべて表 9.2 に挙げます。
236
第 9 章 : pCOS イ ン タ フ ェ ース (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
length 接頭辞 と 、 番号を介 し た内容評価は、 プ レーン な PDF オブジ ェ ク ト と 配列型の
擬似オブジ ェ ク ト に対 し てのみ適用可能で、 それ以外の擬似オブジ ェ ク ト では使え ま せ
ん。 pcosid 接頭辞は擬似オブジ ェ ク ト には適用で き ません。 type 接頭辞は、 すべての擬似
オブジ ェ ク ト で対応 し てい ます。
表 9.2 pCOS パスの接頭辞
接頭辞
説明
length
(数値) オブ ジ ェ ク ト の長 さ 。 具体的に何を指すかは以下のよ う にオブ ジ ェ ク ト の型によ っ て異な
り ます。
array
その配列内の要素数
pcosid
dict
その辞書内のキー / 値の対の数
stream
そのス ト リ ーム辞書内のキー / 値の対の数 (ス ト リ ームの長 さ ではあ り ません。 ス ト
リ ームデー タ の長 さ をバイ ト 単位で得るには Length キーを使います)
fstream
stream と 同 じ
その他
0
(数値) 辞書型か配列型のオブ ジ ェ ク ト に対する一意な pCOS ID。
パスが PDF 内に存在 し ないオブ ジ ェ ク ト を記述 し ている場合は結果は- 1 にな り ます。 こ れを用い
る と 、 オブ ジ ェ ク ト が存在するかど う かを調べつつ、 も し 存在すればそれ と 同時に ID を取得する
こ と がで き ます。
type
(文字列か数値) オブ ジ ェ ク ト の型を以下の数値か文字列で表 し た もの。
0, null
null オブ ジ ェ ク ト か存在 し ないオブ ジ ェ ク ト (オブ ジ ェ ク ト が存在するかど う かを調べ
るのに使います)
1, boolean 論理値オブ ジ ェ ク ト
2, number 整数オブ ジ ェ ク ト か実数オブ ジ ェ ク ト
3, name
名前オブ ジ ェ ク ト
4, string
文字列オブ ジ ェ ク ト
5, array
配列オブ ジ ェ ク ト
6, dict
辞書オブ ジ ェ ク ト (かつス ト リ ームで ない もの)
7, stream ス ト リ ームオブ ジ ェ ク ト の う ち、 対応フ ィ ル タ のみを用いている もの
8, fstream ス ト リ ームオブ ジ ェ ク ト の う ち、 1 つない し 複数の非対応 フ ィ ル タ を用いている もの
C ・ C++ 開発者の便宜のため、 こ れら の型の enum が利用可能です。
9.4 パス文法
237
9.5 擬似オ ブ ジ ェ ク ト
擬似オブジ ェ ク ト は pCOS パ ス のセ ッ ト を拡張 し て、 い く つかの便利な要素を導入 し ま
す。 こ れを用い る と 、 PDF 内に存在 し なが ら も 1 つの値を読んだだけでは簡単に取得で き
ない情報を、 短縮形で利用す る こ と がで き る よ う にな り ます。 以下、 対応 し てい る 擬似オ
ブジ ェ ク ト をすべて挙げます。 dict 型の擬似オブジ ェ ク ト は列挙で き ません。
汎用擬似オ ブ ジ ェ ク ト 汎用擬似オブジ ェ ク ト は、暗号化やパス ワー ド にかかわ ら ず、つ
ねに利用で き ます。 こ れは有効な文書ハン ド ルが得 ら れ る こ と が前提なので、 文書を開 く
際に requiredmode オプシ ョ ン を適切に設定 し なければな ら ないか も し れません。 汎用擬
似オブジ ェ ク ト の全一覧を表 9.3 に示 し ます。
表 9.3 汎用擬似オブ ジ ェ ク ト 一覧
オブ ジ ェ ク
ト名
encrypt
説明
(辞書) 文書の暗号化状態を記述 し たキー群の辞書 :
length
(数値) 暗号化キーの長 さ を ビ ッ ト 単位で表 し た も の
algorithm (数値)
description(文字列) 文書内で用い られている暗号化アルゴ リ ズム
-1
未知の暗号化アルゴ リ ズム
0
暗号化な し
1
40 ビ ッ ト RC4 (Acrobat 2 ∼ 4)
2
128 ビ ッ ト RC4 (Acrobat 5)
3
128 ビ ッ ト RC4 (Acrobat 6)
4
128 ビ ッ ト AES (Acrobat 7)
5
128 ビ ッ ト RC4 に公開鍵 (Acrobat 5) (非対応)
6
128 ビ ッ ト AES に公開鍵 (Acrobat 7) (非対応)
7
Adobe Policy Server (Acrobat 7) (非対応)
8
Adobe Digital Editions (EBX) (非対応)
9
256 ビ ッ ト AES (Acrobat 9)
10
256 ビ ッ ト AES に公開鍵 (Acrobat 9) (非対応)
master
(論理値) PDF のセキ ュ リ テ ィ 設定 (各種権限 ・ ユーザーパスワー ド ・ マス タ ーパス
ワー ド ) を変え る ためにパスワー ド が必要な ら true、 そ う でなければ false
user
(論理値) PDF を開 く ためにユーザーパスワー ド が必要な ら true、 そ う でなければ false
noaccessible ・ noannots ・ noassemble ・ nocopy ・ noforms ・ nohiresprint ・ nomodify ・ noprint
(論理値) それぞれのア ク セス保護が設定 さ れている な ら true、 そ う でなければ false
plainmetadata
(論理値) PDF に暗号化 さ れていない メ タ デー タ があ る な ら true、 そ う でなければ false
extensionlevel
(文字列) ISO 32000 に基づいた Adobe 拡張レ ベル、 または拡張レ ベルが存在 し ないな ら 0。
Acrobat 9 は拡張レ ベル 3 の文書を作成 し ます。
filename
(文字列) PDF フ ァ イルの名前
filesize
(数値) PDF フ ァ イルのサイ ズをバイ ト 単位で表 し た もの
238
第 9 章 : pCOS イ ン タ フ ェ ース (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 9.3 汎用擬似オブ ジ ェ ク ト 一覧
オブ ジ ェ ク
ト名
説明
fullpdfversion
(数値) PDF バージ ョ ン番号に対する数値。 こ の数値は各 PDF/Acrobat なージ ョ ンに対 し て単調増
加 し ます。 値 100 × BaseVersion + ExtensionLevel が返 さ れます。 例 :
150
PDF 1.5 (Acrobat 6)
160
PDF 1.6 (Acrobat 7)
170
PDF 1.7 (Acrobat 8)
173
PDF 1.7 Adobe 拡張レ ベル 3 (Acrobat 9)
linearized
(論理値) PDF 文書が線形化 さ れている な ら true、 そ う でなければ false
major
minor
revision
(数値) それぞれ、 ラ イ ブ ラ リ の メ ジ ャ ー ・ マ イ ナー ・ リ ビ ジ ョ ン番号。
pcosinterface
(数値) 環境の pCOS 実装のイ ン タ フ ェ ース番号。 こ の仕様はイ ン タ フ ェ ース番号 5 を記述 し ま
す。 どのバージ ョ ンの製品がどの pCOS イ ン タ フ ェ ース番号を実装 し ているかを以下に示 し ます :
1
TET 2.0 ・ 2.1
pcosmode
pcosmodename
2
pCOS 1.0
3
PDFlib+PDI 7 ・ PPS 7 ・ TET 2.2 ・ pCOS 2.0 ・ PLOP 3.0 ・ TET 2.3
4
PLOP 4.0 ・ TET 3.0
5
PDFlib+PDI 8 ・ PPS 8
(数値 / 文字列) pCOS モー ド を数値か文字列で表 し た もの :
0
最小
1
制限
2
完全
pdfversion
(数値) PDF バージ ョ ン番号に 10 をかけた も の。 例 : 16 は PDF 1.6 の意
pdfversionstring
(文字列) さ ま ざ ま な API 関数が PDF 出力互換性を設定する ために受け付ける形の完全 PDF バー
ジ ョ ン文字列。 例 : 1.5 ・ 1.6 ・ 1.7 ・ 1.7ext3
version
(文字列) 完全な ラ イ ブ ラ リ バージ ョ ン文字列を、 < メ ジ ャ ー >.< マ イ ナー >.< リ ビ ジ ョ ン > と い う
形式で表 し た も の。 接尾辞 と し て beta ・ rc 等の修飾子が追加 さ れる場合も あ り ます。
PDF のオ ブ ジ ェ ク ト ・ ページ ・ イ ン タ ラ ク テ ィ ブ要素のための擬似オ ブ ジ ェ ク ト オ
ブジ ェ ク ト やページ情報の取得に使え る 、 ま たは さ ま ざ ま な イ ン タ ラ ク テ ィ ブ要素への
シ ョ ー ト カ ッ ト と し てはた ら く 擬似オブジ ェ ク ト の一覧を表 9.4 に示 し ます。
表 9.4 PDF のオブ ジ ェ ク ト ・ ページ ・ イ ン タ ラ ク テ ィ ブ要素のための擬似オブ ジ ェ ク ト 一覧
オブ ジ ェ ク
ト名
articles
説明
(辞書の配列) 文書のアーテ ィ ク ルス レ ッ ド 辞書を持つ配列。 文書にアーテ ィ クルス レ ッ ド がま っ
た く ない と きは こ の配列は長 さ 0 にな り ます。 標準の PDF キーのほかに pCOS では、 articles 配列
内の辞書に対 し て以下の擬似キーを使 う こ と も で き ます :
beads
(辞書の配列) 標準の PDF キー と 下記を持つアーテ ィ クル辞書 :
destpage (数値) 対象ページの番号 (先頭ページが 1)
9.5 擬似オブ ジ ェ ク ト
239
表 9.4 PDF のオブ ジ ェ ク ト ・ ページ ・ イ ン タ ラ ク テ ィ ブ要素のための擬似オブ ジ ェ ク ト 一覧
オブ ジ ェ ク
ト名
bookmarks
説明
(辞書の配列) 文書の し お り (アウ ト ラ イ ン) 辞書を持つ配列。 標準の PDF キーのほかに pCOS で
は、 bookmarks 配列内の辞書に対 し て以下の擬似キーを使 う こ と も で き ます :
level
(数値) し お り 構造内における階層レ ベル
destpage (数値) し お り が同一文書内のページ を指 し ている な ら対象ページの番号 (先頭ページ
が 1)、 そ う でないな ら -1。
fields
(辞書の配列) 文書のフ ォ ーム フ ィ ール ド 辞書を持つ配列。 フ ィ ール ド 辞書内の標準の PDF キー
と 、 関連づけ られたウ ィ ジ ェ ッ ト 注釈辞書内の項目のほかに、 pCOS では、 fields 配列内の辞書に
対 し て以下の擬似キーを使 う こ と も で き ます :
level
(数値) フ ィ ール ド 構造内における階層レ ベル (「.」 を区切 り キ ャ ラ ク タ と し て決定 さ
れる)
fullname (文字列) フ ォ ーム フ ィ ール ド の完全名。 Acrobat 7 と 同 じ 命名規則が適用 さ れます。
names
(辞書) 各項目か ら名前ツ リ ーを簡単に得ら れる辞書。 次の名前ツ リ ーに対応 し ています。 AP ・
AlternatePresentations ・ Dests ・ EmbeddedFiles ・ IDS ・ JavaScript ・ Pages ・ Renditions ・ Templates ・
URLS。
名前ツ リ ーの名前をキー と し て使 う こ と で、 その値を取得で き ます。 例 :
names/Dests[0].key で移動先の名前を取得 し ます。
names/Dests[0].val でその移動先辞書を取得 し ます。
標準の PDF 辞書項目のほかに、 Dests 名前ツ リ ー内の辞書に対 し て以下の擬似キーを使 う こ と も で
き ます :
destpage (数値) 移動先が同一文書内のページ を指 し ている な ら対象ページの番号 (先頭ページ
が 1)、 そ う でないな ら -1。
その他の名前ツ リ ー項目を取得 し たい と きは、 名前ツ リ ー擬似オブ ジ ェ ク ト 内にないので、 /Root/
Names/Dests 等で直接取得する必要があ り ます。
objects
240
(配列) pcosid 接頭辞を用いてすでに pCOS ID が取得 さ れている要素を指 し 示 し ます。 ID は配列の
添字 と し て 10 進形式で与え る必要があ り ます。 結果 と し て、 与えた ID を持つ PDF オブ ジ ェ ク ト
を指 し 示 し ます。 length 接頭辞は こ の配列では使用で き ません。
第 9 章 : pCOS イ ン タ フ ェ ース (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 9.4 PDF のオブ ジ ェ ク ト ・ ページ ・ イ ン タ ラ ク テ ィ ブ要素のための擬似オブ ジ ェ ク ト 一覧
オブ ジ ェ ク
ト名
pages
説明
(辞書の配列) 配列の各要素がそれぞれ文書の各ページ を指 し 示 し ます。 ページの番号から 1 を引
いて 10 進表記で添字に し た配列要素がそのページ を指 し 示 し ます (先頭ページの添字が 0)。
length 接頭辞を用いれば、 その文書内のページ数がわか り ます。 こ の方式で指 し 示 さ れたページオ
ブ ジ ェ ク ト は、 /Pages ツ リ ーを通 じ て継承 さ れたすべての属性を含んでいます。 項目 /MediaBox ・
/Rotate は存在する こ と が保証 さ れています。 標準の PDF 辞書項目のほかに、 各ページに対 し て以
下の擬似項目を使 う こ と も で き ます :
colorspaces ・ extgstates ・ fonts ・ images ・ patterns ・ properties ・ shadings ・ templates
(辞書の配列) 表 9.5 に従っ たページの リ ソ ース。
annots
(辞書の配列) 標準の PDF キーのほかに pCOS では、 annots 配列内の辞書に対 し て以下
の擬似キーを使 う こ と も で き ます。
destpage (数値。 Subtype=Link かつ Dest 項目が存在する場合のみ) 対象ページの番号
(先頭ページが 1)
blocks
(辞書の配列) pages[ ]/PieceInfo/PDFlib/Private/Blocks[ ]、 すなわちページのブ ロ ッ ク辞
書への近道。 標準の PDF キーのほかに pCOS では、 blocks 配列内の辞書に対 し て以下
の擬似キーを使 う こ と も で き ます。
rect
(矩形) Rect と 似ていますが、 関連するすべての CropBox/MediaBox を考慮
し 、 各項目を回転 し 、 座標の順番を標準化 し ている点が異な り ます。
height
(数値) ページの高 さ 。 MediaBox か CropBox (あれば) を用いて こ の高 さ が決定 さ れま
す。 回転項目も 適用 さ れます。
isempty (論理値) ページが空な ら true、 ページが空でないな ら false
label
(文字列) ページのページ ラ ベル (接頭辞があ る な ら それも 含む)。 ラ ベルは Acrobat で
表示 さ れる もの と 同 じ です。 ラ ベルが存在 し ない (ま たは PageLabel 辞書が破損 し てい
る) と きは、 こ の文字列はページ番号の 10 進表記にな り ます。 ローマ数字は Acrobat
の形式 (VL 等) で作成 さ れますが、 こ れは古典的な形式 (XLV 等) と は違 っ ています。
/Root/PageLabels が存在 し ない と きは、 文書にはページ ラ ベルがま っ た く あ り ません。
width
(数値) ページの幅 (height と 同 じ 規則)。
右記の項目は継承 さ れます : CropBox ・ MediaBox ・ Resources ・ Rotate。
pdfa
(文字列) 文書の PDF/A 準拠レ ベル。 と り う る値は none ・ PDF/A-1a:2005 ・ PDF/A-1b:2005 ・ PDF/A2a ・ PDF/A-2b ・ PDF/A-2u。
pdfe
(文字列) 文書の PDF/E 準拠レ ベル。 と り う る値は none ・ PDF/E-1。
pdfx
(文字列) 文書の PDF/X 準拠レ ベル。 と り う る値は none および下記の と お り です :
PDF/X-1:2001 ・ PDF/X-1a:2001 ・ PDF/X-1a:2003 ・
PDF/X-2:2003 ・
PDF/X-3:2002 ・ PDF/X-3:2003 ・
PDF/X-4 ・ PDF/X-4p ・
PDF/X-5g ・ PDF/X-5n ・ PDF/X-5p
tagged
(論理値) PDF 文書が タ グ付き な ら true, そ う で ないな ら false
リ ソ ース処理の簡単化のための擬似オ ブ ジ ェ ク ト リ ソ ー ス は、 ページの内容を完全に
記述す る た めに必要な さ ま ざ ま な種類のデー タ を 管理す る た めの キー コ ン セプ ト です。
PDF の リ ソ ース概念はたいへん強力で効果的ですが、さ ま ざ ま な技術的概念に よ っ て利用
が複雑にな っ てい ます。 た と えば再帰や リ ソ ース の継承な ど です。 pCOS では、 リ ソ ース
を取得を ぐ っ と 簡単にす る ため、 リ ソ ース の直接取得に使え る 擬似オブジ ェ ク ト のグルー
プ をい く つか提供 し てい ます。 こ れ ら の擬似 リ ソ ース辞書のなかには、 標準の PDF キー
以外の項目を持つ も の も あ り 、 リ ソ ース情報の取得を さ ら に簡単に し てい ます。 pCOS 擬
9.5 擬似オブ ジ ェ ク ト
241
似 リ ソ ース は、 ユーザーの視点か ら 見た リ ソ ース を反映 し てお り 、 ネ イ テ ィ ブな PDF リ
ソ ース と は異な っ てい ます :
> い く つかの項目が追加 (例 : イ ン ラ イ ン画像 ・ 単純色空間) ま たは削除 (例 : リ ス ト
さ れてい る フ ォ ン ト の う ち、 ど のページで も 使われていない も の) さ れてい ます。
> オ リ ジナルの PDF 辞書キーのほかに、 リ ソ ース辞書は、 補足情報を持っ たユーザーフ
レ ン ド リ ーな キーを持つ こ と がで き ます (フ ォ ン ト の埋め込み状態や、 色空間の要素
数な ど)。
pCOS では、 リ ソ ース取得のための擬似オブジ ェ ク ト と し て 2 つのグループが使え ます。
グ ロ ーバル リ ソ ース配列は、PDF 文書内の所与の種類のすべての リ ソ ース を内容 と し て持
ち、 一方、 ページベース の リ ソ ースは、 あ る 特定のページでのみ使われてい る リ ソ ース だ
け を内容 と し て持ち ます。 対応す る 擬似配列は、 表 9.5 に挙げ る すべての種類の リ ソ ース
に対 し て利用可能です :
> 文書内のすべての リ ソ ース の一覧は、 グ ロ ーバル リ ソ ース配列 (images[ ] 等) 内で得
ら れ ます。 いずれかのグ ロ ーバル リ ソ ー ス擬似配列の長 さ を取得す る と 、 全ページに
対す る リ ソ ース ス キ ャ ン (後述) が行われます。
> 各ページの リ ソ ース の一覧は、 ページベース の リ ソ ース配列 (pages[ ]/images[ ] 等) 内
で得 ら れ ます。 ページのいずれかの リ ソ ース擬似配列の長 さ を取得す る と 、 そのペー
ジに対す る リ ソ ー ス ス キ ャ ン が行われ ます (そのページ上で実際に使われてい る すべ
ての リ ソ ース を収集す る ため、 お よ びそのページ上の画像群を連結す る ために)。
リ ソ ーススキ ャ ンは、 Unicode マ ッ ピ ン グ と 画像連結を含む、 し か し Wordfinder 操作を含
ま ない、 ページの全体ス キ ャ ンです。 リ ソ ース全体列挙 と 全ページ内容を必要 と す る アプ
リ ケーシ ョ ンでは、通常のページ ス キ ャ ン以外に リ ソ ース ス キ ャ ンが行われ る こ と を防 ぐ
ために、 リ ソ ー ス 擬似オブジ ェ ク ト を取得す る 前に全ページ を処理す る こ と を推奨 し ま
す。
表 9.5 リ ソ ースに対する擬似オブ ジ ェ ク ト 一覧。 各擬似オブ ジ ェ ク ト P は、 2 つの リ ソ ース配列 P[ ] と pages[ ]/P[ ]
を生成 し ます。
オブ ジ ェ ク
ト名
colorspaces
説明
(辞書の配列) ページか文書のすべての色空間の辞書を持つ配列。 色空間 ・ ICC プ ロ フ ァ イルス ト
リ ーム辞書内の標準の PDF キーに加え、 下記の擬似キー も使え ます :
alternateid
(整数。 name=Separation ・ DeviceN の場合のみ) 背後にある代替色空間の、
colorspaces[] 擬似オブ ジ ェ ク ト 内の番号。
(整数。 name=Indexed の場合のみ) 背後にあ るベース色空間の、 colorspaces[] 擬似オブ
ジ ェ ク ト 内の番号。
colorantname
(名前。 name=Separation の場合のみ) 顔料の名前。 非 ASCII の日中韓色名は Unicode へ
変換 さ れます。
colorantnames
(名前の配列。 name=DeviceN の場合のみ) 複数の顔料の名前
baseid
components
(整数) 色空間の要素数
name
(文字列) 色空間の名前 : CalGray ・ CalRGB ・ DeviceCMYK ・ DeviceGray ・ DeviceN ・
DeviceRGB ・ ICCBased ・ Indexed ・ Lab ・ Separation
csarray
(配列。 name=DeviceGray/RGB/CMYK 以外の場合のみ) 背後にある ネ イ テ ィ ブ色空間を
記述 し た配列、 すなわち、 PDF 内の元の色空間オブ ジ ェ ク ト 。
色空間 リ ソ ースは、 ネ イ テ ィ ブ PDF リ ソ ース を一切必要 と し ない色空間 (すなわち DeviceGray ・
DeviceRGB ・ DeviceCMYK) を含めて、 あ ら ゆる種類のオブ ジ ェ ク ト から参照 さ れるすべての色空
間を包含 し ます。
242
第 9 章 : pCOS イ ン タ フ ェ ース (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 9.5 リ ソ ースに対する擬似オブ ジ ェ ク ト 一覧。 各擬似オブ ジ ェ ク ト P は、 2 つの リ ソ ース配列 P[ ] と pages[ ]/P[ ]
を生成 し ます。
オブ ジ ェ ク
ト名
説明
extgstates
(辞書の配列) ページか文書のすべての拡張グ ラ フ ィ ッ ク 状態 (ExtGStates) の辞書を持つ配列
fonts
(辞書の配列) ページか文書のすべての フ ォ ン ト の辞書を持つ配列。 フ ォ ン ト 辞書内の標準の PDF
キーに加え、 以下の擬似キー も使え ます :
name
(文字列) フ ォ ン ト の PDF 名から サブ セ ッ ト 接頭辞を外 し た もの。 非 ASCII 日中韓フ ォ
ン ト 名は Unicode へ変換 さ れます。
embedded (論理値) フ ォ ン ト の埋め込み状態
images
type
(文字列) フ ォ ン ト 種別 : (unknown) ・ Composite ・ Multiple Master ・ OpenType ・
TrueType ・ TrueType (CID) ・ Type 1 ・ Type 1 (CID) ・ Type 1 CFF ・ Type 1 CFF (CID) ・ Type 3
vertical
(論理値) 縦書き フ ォ ン ト な ら true、 そ う でないな ら false
(辞書の配列) ページか文書のすべての画像の辞書を持つ配列。 TET 製品では、 連結 (擬似) 画像
を images[ ] 配列に追加 し ます。
標準の PDF キーに加え、 下記の擬似キー も使え ます :
bpc
(整数) 要素あた り のビ ッ ト 数。 こ の項目は通常は BitsPerComponent と 同 じ ですが、 そ
れ と 違っ て利用可能である こ と が保証 さ れています。 JPEG 2000 画像の場合、 こ れは、
要素あた り のビ ッ ト 数を PDF 構造内で得ら れない こ と が原因で -1 にな る こ と があ り ま
す。
colorspaceid
(整数) 画像の色空間の、 colorspaces[] 擬似オブ ジ ェ ク ト 内の番号。 こ れを使 う と 、 詳
し い色空間のプ ロパテ ィ を取得で き ます。 JPEG 2000 画像の場合、 こ の色空間 ID は、
色空間が PDF 構造内で エ ン コ ー ド で き ない こ と が原因で -1 にな る こ と があ り ます。
filterinfo (辞書) 非対応のフ ィ ル タ を持つス ト リ ームの、 ま たは keepfilter オプ シ ョ ン を true に
設定 し てス ト リ ームデー タ を取得 し ている と きの、 残存 フ ィ ル タ を記述 し ます。 そのよ
う な フ ィ ル タ がない と きは filterinfo 辞書は得ら れません。 こ の辞書には下記の項目が
あ り ます :
name
(名前) フ ィ ル タ の名前
supported (論理値) 対応 フ ィ ル タ な ら true
decodeparms
(辞書) フ ィ ル タ 内にあれば DecodeParms 辞書
mergetype (整数) 下記の種類で画像の状態を記述 し ます :
0
(通常) 画像は、 PDF 内の画像に対応 し ます。
1
(擬似) 画像は、 複数の消費済画像 (すなわち mergetype=2 の画像) を連結
し て 1 個の画像に し た結果です。 この結果で き た擬似画像は、 PDF デー タ 構
造内にオブ ジ ェ ク ト と し て存在 し ていません。
(消費済) 画像は、 連結 さ れて大き い画像に さ れているので、 無視 さ れるべ
き。 こ の画像は PDF 内に存在 し ていますが、 擬似画像 (すなわち
mergetype=1 の画像) の一部分なので、 通常は抽出するべき ではあ り ません。
2
この項目は、 その時点ま でに処理 さ れたすべてのページに関する情報を反映
し ます。 文書内の他のページ を処理するにつれて こ の項目の値は変わる可能
性があ り ます。 最終的な (定ま っ た) 情報が必要な場合は、 文書内のすべて
のページが処理 さ れているか、 あるいは pCOS パス length:images の値が取
得 さ れている必要があ り ます。
patterns
(辞書の配列) ページか文書のすべてのパ タ ーンの辞書を持つ配列
properties
(辞書の配列) ページか文書のすべてのプ ロパテ ィ の辞書を持つ配列
9.5 擬似オブ ジ ェ ク ト
243
表 9.5 リ ソ ースに対する擬似オブ ジ ェ ク ト 一覧。 各擬似オブ ジ ェ ク ト P は、 2 つの リ ソ ース配列 P[ ] と pages[ ]/P[ ]
を生成 し ます。
オブ ジ ェ ク
ト名
説明
shadings
(辞書の配列)ページか文書のすべてのシェーディングの辞書を持つ配列。シェーディング辞書内
の標準の PDF キーに加え、 以下の擬似キー も使え ます :
colorspaceid
(整数) 背後にあ る色空間の、 colorspaces[] 擬似オブ ジ ェ ク ト 内の番号。
templates
(辞書の配列)ページか文書のすべてのテンプレート(Form XObject)の辞書を持つ配列。
244
第 9 章 : pCOS イ ン タ フ ェ ース (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
9.6 暗号化 PDF 文書
pCOS は、 入力 さ れ る PDF 文書 と し て、 暗号化 さ れた も のに も さ れていない も のに も 対応
し てい ます。 ただ し 、 暗号化 さ れた文書か ら フルにオブジ ェ ク ト を取得する には、 その文
書を開 く 際に正 し いマ ス タ ーパ ス ワ ー ド を与え る 必要があ り ます。 暗号化 さ れた文書は、
ユーザーパ ス ワー ド やマ ス タ ーパ ス ワー ド が利用可能か ど う かに よ っ て、以下に説明す る
pCOS モー ド の う ちのいずれかで処理 さ れます。
完全 pCOS モー ド (モー ド 2 ) 暗号化 さ れた PDF は、その フ ァ イ ルを開 く 際にマ ス タ ー
パ ス ワー ド を与え ておけば、 何の制約 も な く 処理する こ と がで き ます。 あ ら ゆ る オブジ ェ
ク ト は暗号化を解除 さ れて返 さ れます。暗号化 さ れていない文書はつねに完全 pCOS モー
ド で開かれます。
制限 pCOS モー ド (モー ド 1 ) 文書が正 し いマ ス タ ーパ ス ワ ー ド な し に開かれてい て、
かつユーザーパ ス ワー ド を必要 と し ない場合には (ま たはユーザーパ ス ワー ド を与え てお
いた場合には) 、 pCOS の動作は以下の制限下に置かれます。 すなわち、 以下の場合を例
外 と し て、 文字列 ・ stream ・ fstream 型のオブジ ェ ク ト の内容は取得で き ません。
> nocopy=false か plainmetadata=true な ら ば、/Root/Metadata と /Info/*(文書情報キー群)
は取得で き ます。
> nocopy=false な ら 、すなわちページ上の主テ キ ス ト についてテ キ ス ト 抽出が許可 さ れて
い る な ら ば、 オブジ ェ ク ト bookmarks[…]/Title ・ pages[...]/annots/Contents ( し お り ・
注釈内容) は取得で き ます。
最小 pCOS モー ド (モー ド 0 ) 暗号化状態 と パ ス ワ ー ド の入手可能性にかかわ ら ず、 表
9.3 に挙げた pCOS 汎用擬似オブジ ェ ク ト はつねに利用可能です。 た と えば encrypt 擬似
オブジ ェ ク ト を用い る と 、 文書の暗号化状態を取得する こ と がで き ます。 暗号化 さ れたオ
ブジ ェ ク ト は最小 pCOS モー ド では取得で き ません。
さ ま ざ ま なパス ワー ド の組み合わせで生起 さ れ る pCOS モー ド を表 9.6 に挙げます。文
書の暗号化状態 と 、 その フ ァ イ ル を開 く 際に与え ら れ る パ ス ワ ー ド に よ っ て、 最小 ・ 制
限 ・ 完全の う ちの ど の pCOS モー ド で PDF オブジ ェ ク ト パ ス が利用可能にな る かが決ま
り ます。 各モー ド に対 し て不適切な pCOS パ ス を取得 し よ う と す る と 例外が発生 し ます。
表 9.6 さ ま ざ ま なパスワー ド の組み合わせか ら導かれる pCOS モー ド 一覧
知 っ ているパスワー ド
その場合の pCOS モー ド
なし
ユーザーパスワー ド が設定 さ れなければ制限 pCOS
モー ド 、 そ う でなければ最小 pCOS モー ド
ユーザーパスワー ド のみ
制限 pCOS モー ド
マス タ ーパスワー ド
完全 pCOS モー ド
9.6 暗号化 PDF 文書
245
246
第 9 章 : pCOS イ ン タ フ ェ ース (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
10 PDF のバージ ョ ン と 規格
10.1 Acrobat ・ PDF のバージ ョ ン
ユーザー側での選択に従い、PDFlib は下記の PDF バージ ョ ンに従っ た出力を生成 し ます:
> PDF 1.3 (Acrobat 4)
> PDF 1.4 (Acrobat 5)
> PDF 1.5 (Acrobat 6)
> PDF 1.6 (Acrobat 7)
> PDF 1.7 (Acrobat 8)。 技術的には ISO 32 000-1 と 同等
> PDF 1.7 Adobe 拡張レベル 3 (Acrobat 9)
PDF 出力のバージ ョ ンは、 begin_document( ) の compatibility オプシ ョ ン で制御す る こ と
がで き ま す。 それぞれの PDF 互換モー ド におい ては、 それ よ り も 高い レ ベルのた めの
PDFlib 機能は利用で き ません (表 10.1 参照)。 その よ う な機能を利用 し よ う と す る と 例外
が発生 し ます。
PDI で取 り 込む文書の PDF バージ ョ ン ど の互換モー ド において も 、PDI で取 り 込め る の
はそれ以下の PDF バージ ョ ンの PDF 文書だけです。 それ よ り 新 し い PDF バージ ョ ンの
PDF を取 り 込む必要があ る 場合は、 それに合っ た compatibility オプシ ョ ン を設定す る 必
要があ り ます (174 ページ 「7.2.3 受け入れ可能な PDF 文書」 参照)。 ただ し こ の上位 PDF
バージ ョ ン 取 り 込み不可ルールの例外 と し て、 PDF 1.7 拡張 レ ベル 3 に従 っ た文書は
PDF 1.7 文書へ も 取 り 込む こ と が可能です。
文書の PDF バージ ョ ン を変更 あ る 特定の PDF バージ ョ ンに従っ て出力を生成す る 必要
があ る に も かかわ ら ず、 それ よ り も 高い PDF バージ ョ ン を用いた PDF を取 り 込む必要が
あ る 場合には、 その文書を PDI で取 り 込む前に まず、 出力 し たい PDF バージ ョ ンに下げ
る 変換を行 う 必要があ り ます。 Acrobat 7/8/9 Professional で メ ニ ュ ー項目 「ア ド バン ス ト 」
→ 「PDF の最適化」 → 「互換性」 を用いれば、 PDF バージ ョ ン を下記の よ う に変え る こ と
がで き ます :
> Acrobat 7 : PDF 1.3 ∼ PDF 1.6
> Acrobat 8 : PDF 1.3 ∼ PDF 1.7
> Acrobat 9 : PDF 1.3 ∼ PDF 1.7 拡張レベル 3
表 10.1 特定の PDF 互換モー ド を要する PDFlib 機能一覧
機能
PDFlib API 関数 ・ オプ シ ョ ン
PDF 1.7 拡張レ ベル 3 (Acrobat 9) を要する機能
地理空間 PDF
begin_document( ) : オプ シ ョ ン viewports
load_image( ) : オプ シ ョ ン georeference
PDF ポー ト フ ォ リ オ
begin_document( ) : オプ シ ョ ン portfolio
add_portfolio_folder( )
256 ビ ッ ト キーによ る AES 暗号化 begin_document( ) : 256 ビ ッ ト に よ る AES 暗号化は、 compatibility=1.7ext3 の
場合、 masterpassword ・ userpassword ・ attachmentpassword ・ permissions オ
プ シ ョ ンのいずれかが与え られている と きは自動的に用い られます。
レ イ ヤーバ リ ア ン ト
set_layer_dependency( ) : 依存種別 Variant
( こ の機能は PDF 1.7 ext 3 を要 し ませんが、 Acrobat 9 で し か動作 し ません)
10.1 Acrobat ・ PDF のバージ ョ ン
247
表 10.1 特定の PDF 互換モー ド を要する PDFlib 機能一覧
機能
PDFlib API 関数 ・ オプ シ ョ ン
参照 PDF
open_pdi_page( ) ・ begin_template_ext( ) の reference オプ シ ョ ン
( こ の機能は PDF 1.7 ext 3 を要 し ませんが、 Acrobat 9 で し か動作 し ません)
PDF 1.7 (Acrobat 8) を要する機能
PDF パ ッ ケージ
add_portfolio_file( )
PDF 1.6 (Acrobat 7) を要する機能
ユーザー単位
begin/end_document( ) : オプ シ ョ ン userunit
印刷の拡縮
begin/end_document( ) : viewerpreferences オプ シ ョ ンに対するサブオプ シ ョ
ン printscaling
文書を開 く モー ド
begin/end_document( ) : オプ シ ョ ン openmode=attachments
128 ビ ッ ト キーに よ る AES 暗号化 begin_document( ) : AES 暗号化は、 compatibility=1.6 または 1.7 の場合、
masterpassword ・ userpassword ・ attachmentpassword ・ permissions オプ シ ョ
ンのいずれかが与え ら れている と きは自動的に用い られます。
フ ァ イル添付のみを暗号化
begin/end_document( ) : オプ シ ョ ン attachmentpassword
添付の説明
begin/end_document( ) : オプ シ ョ ン attachments に対するサブオプ シ ョ ン
description
U3D モデル埋め込み
load_3ddata( ) ・ create_3dview( )。 create_annotation( ) : type=3D
PDF 1.5 (Acrobat 6) を要する機能
さ ま ざ ま な フ ィ ール ド オプ シ ョ ン
create_field( ) ・ create_fieldgroup( )
ページ レ イ アウ ト
begin/end_document( ) : オプ シ ョ ン pagelayout=twopageleft/right
さ ま ざ ま な注釈オプ シ ョ ン
create_annotation( )
拡張権限設定
begin_document( ) で permissions=plainmetadata、 表 3.4 参照
日中韓フ ォ ン ト に対する さ ま ざ ま
な CMap
load_font( )、 表 4.3 参照
タ グ付き PDF
begin_item( ) に対する さ ま ざ ま なオプ シ ョ ン。
begin/end_page_ext( ) : オプ シ ョ ン taborder
レ イ ヤー
define_layer( ) ・ begin_layer( ) ・ end_layer( ) ・ layer_dependency( )
JPEG 2000 画像
load_image( ) で imagetype=jpeg2000
圧縮オブ ジ ェ ク ト ス ト リ ーム
圧縮オブ ジ ェ ク ト ス ト リ ームは、 compatibility=1.5 以上の場合、 begin_
document( ) で objectstreams=none が設定 さ れていなければ自動的に生成 さ
れます。
PDF 1.4 (Acrobat 5) を要する機能
スムーズシ ェ ーデ ィ ン グ (カ ラ ー shading_pattern( ) ・ shfill( ) ・ shading( )
ブレン ド)
ソ フ ト マス ク
1 ビ ッ ト 以上のピ ク セル深度を持つ画像に対 し て masked オプ シ ョ ン をつけ
て load_image( )
JBIG2 画像
load_image( ) で imagetype=jbig2
128 ビ ッ ト 暗号化
userpassword ・ masterpassword ・ permissions オプ シ ョ ン をつけて begin_
document( )
拡張権限設定
permissions オプ シ ョ ン をつけて begin_document( )、 表 3.4 参照
248
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 10.1 特定の PDF 互換モー ド を要する PDFlib 機能一覧
機能
PDFlib API 関数 ・ オプ シ ョ ン
日中韓フ ォ ン ト に対する さ ま ざ ま
な CMap
load_font( )、 表 4.3 参照
透過な どのグ ラ フ ィ ッ ク 状態オプ
ション
オプ シ ョ ン alphaisshape ・ blendmode ・ opacityfill ・ opacitystroke ・
textknockout をつけて create_gstate( )
ア ク シ ョ ン に対する さ ま ざ ま なオ create_action( )
プシ ョ ン
注釈に対する さ ま ざ ま なオプ シ ョ
ン
create_annotation( )
さ ま ざ ま な フ ィ ール ド オプ シ ョ ン
create_field( ) ・ create_fieldgroup( )
タ グ付き PDF
begin_document( ) で tagged オプ シ ョ ン
参照 PDF
open_pdi_page( ) ・ begin_template_ext( ) で reference オプ シ ョ ン (ただ し 、
この機能は正 し く 表示 / 印刷 さ れるには Acrobat 9 を要 し ます)
10.1 Acrobat ・ PDF のバージ ョ ン
249
10.2 ISO 32000
PDF 1.7 は、 ISO 32000-1 と し て 標準化 さ れ て い ま す。 こ の国際標準の技術的内容は、
Acrobat 8 に フ ァ イ ル形式であ る Adobe の PDF 1.7 と 等価です。PDFlib は Adobe の PDF リ
フ ァ レ ン ス に忠実に準拠 し てい ますので、 ひいては ISO 32000-1 に も 忠実に準拠 し てい ま
す。 ただ し 、 現在の と こ ろ ISO 32000-1 準拠をチ ェ ッ ク す る 検証 ソ フ ト ウ ェ アは得 ら れま
せん。
執筆時点で、 こ の ISO 規格の次のバージ ョ ンが、 ISO 32000-2 の名の も と に用意 さ れつ
つあ り ます。 こ の規格は、 GeoPDF、 ヒ エ ラ ルキー構造のポー ト フ ォ リ オ、 AES-25 暗号化
と いっ た Acrobat 9 の機能 (詳 し い一覧は表 10.1 を参照) を取 り 込んだ も ので、 PDFlib は
compatibility=pdf1.7ext3 設定で こ れに現時点で対応 し てい ます。
250
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
10.3 PDF/X に よ る印刷出力
10.3.1 PDF/X 規格 フ ァ ミ リ
PDF/X 形式群は、 ISO 15930 規格フ ァ ミ リ で記述 さ れ、 商業印刷に適 し たデー タ の受け渡
し に利用で き る 一貫 し た堅牢な PDF のサブセ ッ ト を提供す る た めに努力 し て い ま す1。
PDFlib は、 以下に説明す る 種類の PDF/X に準拠 し た出力を生成 し 入力を処理す る こ と が
で き ます。
PDF/X-1a:2001 (ISO 15930-1 で定義) こ の 「ブ ラ イ ン ド 交換」 (事前の技術的す り 合わせ
を一切必要 と し ない印刷デー タ のや り 取 り ) 用規格は PDF 1.3 に基づいてお り 、 CMYK ・
ス ポ ッ ト カ ラ ーデー タ に対応 し てい ます。 RGB ・ デバ イ ス独立 (ICC ベース ・ Lab) 色は
明示的に禁止 さ れてい ます。 PDF/X-1a:2001 は、 出版広告のや り 取 り やその他の応用に広
く 利用 さ れてい ます (特に北米で)。
PDF/X-1a:2003 (ISO 15930-4 で定義) こ の規格は PDF/X-1a:2001 の後継です。 PDF 1.4
に基づいてお り 、 い く つかの機能 (透過な ど) が禁止 さ れてい ま す。 PDF/X-1a:2003 は
PDF/X-3:2003 の厳密なサブセ ッ ト であ り 、 CMYK ・ ス ポ ッ ト カ ラ ー ・ CMYK 出力デバ イ
ス に対応 し てい ます。
注 PANTONE® カ ラ ーは PDF/X-1a モー ド では使え ません。
PDF/X-3:2002 (ISO 15930-3 で定義) こ の規格は PDF 1.3 に基づいてお り 、グ レース ケー
ル ・ CMYK ・ ス ポ ッ ト カ ラ ーだけでな く デバ イ ス独立色に基づ く 現在の ワー ク フ ロ ーに対
応 し てい ます。 特に ヨ ー ロ ッ パの国々で広 く 利用 さ れてい ます。 出力デバ イ ス と し ては単
色 ・ RGB ・ CMYK のいずれか を使 う こ と がで き ます。
PDF/X-3:2003 (ISO 15930-6 で定義) こ の規格は PDF/X-3:2002 の後継です。 PDF 1.4 に
基づいてお り 、 い く つかの機能 (透過な ど) が禁止 さ れてい ます。
PDF/X-4 ( ISO 15930-7 で定義) こ の規格は、PDF/X-1a と PDF/X-3 の後継 と と ら え る こ
と がで き ます。 PDF 1.6 に基づいてお り 、 下記の種類か ら 成 り ます :
> PDF/X-4 では、 透過 と レ イ ヤーは許 さ れますが (い く つかの制限の も と に)、 それ以外
のい く つかの PDF 1.6 の機能は依然禁止 さ れてい ます。
> PDF/X-4p では、出力 イ ン テ ン ト ICC プ ロ フ ァ イ ルを、容量を抑え る ために PDF 文書の
外に置 く こ と が許 さ れます。
PDF/X-5 (ISO 15930-8 で定義) こ の規格は 「部分的交換」 のための も のです。 部分的交
換を行 う には、フ ァ イ ルの作 り 手 と 受け手の間で事前の協議が必要です。PDF/X-4 と PDF/
X-4p の拡張 と と ら え る こ と がで き (すなわち PDF 1.6 に基づいてお り )、 下記の種類か ら
成 り ます :
> PDF/X-5g では、 グ ラ フ ィ ッ ク 内容を PDF 文書の外に許 し てい ます。 こ れは、文書の送
り 手 と 受け手 と の間で何 ら かの コ ミ ュ ニ ケーシ ョ ンが必要です。
> PDF/X-5pgでは、外部グ ラ フ ィ ッ ク 内容 と 外部出力 イ ン テ ン ト ICCプ ロ フ ァ イ ルを許 し
ます。
> PDF/X-5n では、n- 顔料の印刷特性に対す る 外部出力 イ ン テ ン ト ICC プ ロ フ ァ イ ルに対
応 し てい ます。 こ の種類は PDFlib では対応 し てい ません。
1. www.globalgraphics.com/products/pdfx/index.html にあ る PDF/X FAQ を読む こ と を推奨 し ます。
10.3 PDF/X によ る印刷出力
251
PDF/X-5 特有の機能を何 も 要 し ない場合は、 文書は PDF/X-4 か PDF/X-4p に従っ て作成
す る べ き です。 なぜな ら こ ち ら のほ う が一般的な規格だか ら です。
ISO 15930-8:2008 規格は、 外部参照グ ラ フ ィ ッ ク に対する XMP 指定項目に関 し て、 い
く つか誤 り を含んでい ます。 こ れ ら の誤 り があ る こ と か ら 、 執筆の時点で、 こ の規格の改
訂版 ISO 15930-8:2010 が策定中です。 PDFlib ではすでに こ の改訂版規格に記 さ れた XMP
に関す る 変更点を実装 し てい ます。
注 Acrobat プ リ フ ラ イ ト 内の問題によ り 、外部ページ を参照 し ている場合、Acrobat バージ ョ
ン 9 (9.3.1 ま で を検証) での PDF/X-5 の検証は失敗 し ます。
10.3.2 PDF/X 準拠出力の生成
ク ッ ク ブ ッ ク PDF/X を生成する ための コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの pdfx カ テ ゴ リ にあ り ま
す。
PDF/X 準拠出力を PDFlib で作成す る には次の よ う な方法を用い ます。
> PDFlib では、PDF/X のい く つかの形式上の設定は自動的に行われます。PDF バージ ョ ン
番号や PDF/X 準拠キーの設定な ど です。
> PDFlib ク ラ イ ア ン ト では、 あ る 種の関数呼び出 し やオプシ ョ ンは明示的に行 う 必要が
あ り ます。 こ れにあ ては ま る も のを表 10.2 に詳述 し ます。
> PDFlib ク ラ イ ア ン ト では、 あ る 種の関数呼び出 し やオプシ ョ ンは用いない よ う にす る
必要があ り ます。 こ れにあ てはま る も のを表 10.3 に詳述 し ます。
> 既存の PDF/X 準拠文書か ら ページ を取 り 込む際には、上記以外に も 適用 さ れ る 規則が
あ り ます (256 ページ 「10.3.4 PDI に よ る PDF/X 文書の取 り 込み」 参照)。
必要な操作 表 10.2 に、 PDF/X 準拠出力の生成に必要な操作をすべて挙げます。 ど の項
目 も 、 特記な き 限 り 、 すべての PDF/X 準拠レベルにあ ては ま り ます。 PDF/X モー ド の時
に、 必要な関数の う ちのいずれか 1 つで も 呼ばなかっ た場合には、 例外が発生 し ます。
表 10.2 PDF/X 互換のために必要な操作一覧
項目
PDF/X 互換のために必要な PDFlib 関数 ・ オプ シ ョ ン
準拠レ ベル
begin_document( ) の pdfx オプ シ ョ ン を、 望みの PDF/X 準拠レ ベルに設定する必要があ り
ます。
出力条件 (出力イ
ンテン ト )
begin_document( ) の直後に、 load_iccprofile( ) で usage=outputintent を指定するか、 または
process_pdi( ) で action=copyoutputintent を指定 し て (ただ し 両方式の併用は不可) 呼び出
す必要があ り ます。 HKS スポ ッ ト カ ラ ー ・ Pantone スポ ッ ト カ ラ ー ・ ICC ベースのカ ラ ー ・
Lab カ ラ ーの う ちのいずれかが用い ら れている場合は、 出力デバイ スの ICC プ ロ フ ァ イル
を埋め込む必要があ り ます。 こ の場合、 標準出力条件は許 さ れません。
PDF/X-1a の場合 : 出力デバイ スは、 単色か CMYK のデバイ ス であ る必要があ り ます。
PDF/X-3/4/5 の場合 : 出力デバイ スは、 単色 ・ RGB ・ CMYK いずれかのデバイ ス であ る必
要があ り ます。
フ ォ ン ト 埋め込み
load_font( ) の embedding オプ シ ョ ン を true に設定 し て ( こ のオプ シ ョ ン を受け取る他の
関数で も同様) フ ォ ン ト 埋め込みを可能に し ます。 PDF コ ア フ ォ ン ト について も 埋め込み
が必要な こ と に注意 し て く だ さ い。
252
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 10.2 PDF/X 互換のために必要な操作一覧
項目
PDF/X 互換のために必要な PDFlib 関数 ・ オプ シ ョ ン
ページ枠
ページボ ッ ク スは、 cropbox ・ bleedbox ・ trimbox ・ artbox オプ シ ョ ン で設定可能ですが、
以下のすべての必要条件を満たす必要があ り ます。
> TrimBox か ArtBox を設定 し なければな り ません。 ただ し 、 両方のボ ッ ク ス項目を設定 し て
はな り ません。 TrimBox も ArtBox も ない場合は PDFlib は CropBox を ( も し あれば)
TrimBox と し て採用 し 、 CropBox も なければ MediaBox を採用 し ます。
> BleedBox が存在する場合、 それは ArtBox と TrimBox の中に収ま っ ていなければな り ませ
ん。
> CropBox が存在する場合、それは ArtBox と TrimBox の中に収ま っ ていなければな り ません。
グ レースケールカ
ラー
PDF/X-3/4/5 : グ レースケール画像 と 、 setcolor( ) でのグ レー色空間指定は、 出力条件がグ
レースケールまたは CMYK デバイ スの場合か、 あ るいは begin_page_ext( ) で defaultgray オ
プ シ ョ ン を設定 し ていた場合にのみ用いる こ と がで き ます。
RGBカ ラ ー
PDF/X-3/4/5 : RGB 画像 と 、 setcolor( ) での RGB 色空間指定は、 出力条件が RGB デバイ ス
の場合か、 あ るいは begin_page_ext( ) で defaultrgb オプ シ ョ ン を設定 し ていた場合にのみ
用いる こ と がで き ます。
CMYKカ ラ ー
PDF/X-3/4/5 : CMYK 画像 と 、 setcolor( ) での CMYK 色空間指定は、 出力条件が CMYK デバ
イ スの場合か、 あるいは begin_page_ext( ) で defaultcmyk オプ シ ョ ン を設定 し ていた場合
にのみ用いる こ と がで き ます。
文書情報キー
Creator 情報キー と Title 情報キーを、 set_info( ) で、 または (PDF/X-4 ・ PDF/X-5 で)
begin/end_document( ) の metadata オプ シ ョ ン で CreatorTool ・ dc:title XMP プ ロパテ ィ で、
空でない値に設定する必要があ り ます。
禁 じ ら れた操作 表 10.3 に、 PDF/X 準拠出力の生成時には禁 じ ら れてい る 操作をすべて
挙げます。 ど の項目 も 、 特記な き 限 り 、 すべての PDF/X 準拠レベルにあ ては ま り ます。
PDF/X モー ド の時に、 禁 じ ら れた関数の う ちのいずれか 1 つで も 呼んだ場合には、 例外
が発生 し ます。 同様に、 取 り 込まれた PDF ページがカ レ ン ト の PDF/X 準拠レベルに合わ
ない場合、 その PDI 呼び出 し は失敗 し ます。
表 10.3 PDF/X 互換のために禁止ま たは制約 さ れる操作一覧
項目
PDF/X 互換のために禁止ま たは制約 さ れる PDFlib 関数 ・ オプ シ ョ ン
グ レースケールカ
ラー
PDF/X-1a : begin_page_ext( ) の defaultgray オプ シ ョ ンは避ける必要があ り ます。
RGBカ ラ ー
PDF/X-1a : RGB 画像 と begin_page_ext( ) の defaultrgb オプ シ ョ ンは避ける必要があ り ま
す。
CMYKカ ラ ー
PDF/X-1a : begin_page_ext( ) の defaultcmyk オプ シ ョ ンは避ける必要があ り ます。
ICCベース カ ラ ー
PDF/X-1a : setcolor( ) での iccbasedgray/rgb/cmyk 色空間、 および、 setcolor:iccprofilegray/
rgb/cmyk パラ メ タ は避ける必要があ り ます。
Labカ ラ ー
PDF/X-1a : setcolor( ) での Lab 色空間は避ける必要があ り ます。
注釈 ・ フ ォ ーム
フ ィ ール ド
BleedBox (BleedBox が存在 し ない場合は TrimBox か ArtBox ) 内での注釈は避ける必要があ
り ます : create_annotation( ) ・ create_field( )。
アクシ ョ ン ・
JavaScript
JavaScript を含むすべてのア ク シ ョ ンは避ける必要があ り ます : create_action( )。
10.3 PDF/X によ る印刷出力
253
表 10.3 PDF/X 互換のために禁止または制約 さ れる操作一覧
項目
PDF/X 互換のために禁止または制約 さ れる PDFlib 関数 ・ オプ シ ョ ン
画像
PDF/X-1a : RGB ・ ICC-based ・ YCbCr ・ Lab カ ラ ーの画像は避ける必要があ り ます。 着色 さ
れた画像で用い ら れる スポ ッ ト カ ラ ーの代替色も こ れ と 同 じ 条件を満たす必要があ り ます。
PDF/X-1 ・ PDF/X-3 : JBIG2 画像は避ける必要があ り ます。
load_image( ) の OPI-1.3 ・ OPI-2.0 オプ シ ョ ンは避ける必要があ り ます。
透過画像 ・ グ ラ
フィ ック
PDF/X-1 ・ PDF/X-3 : 画像に対 し て ソ フ ト マ ス クは避ける必要があ り ます。 load_image( )
の masked オプ シ ョ ンは、 そのマス クが 1 ビ ッ ト 画像を参照する場合を除き、 避ける必要
があ り ます。 暗黙的透過 (アル フ ァ チ ャ ン ネル) を持つ画像は許 さ れませんので、 それら
は load_image( ) の ignoremask オプ シ ョ ン で読み込む必要があ り ます。 create_gstate( ) の
opacityfill ・ opacitystroke オプ シ ョ ンは、 それら が値 1 を持つ場合を除き、 避ける必要があ
り ます。
透過画像 ・ グ ラ フ ィ ッ ク は PDF/X-4 ・ PDF/X-5 では許 さ れています。
透過グループ
begin/end_page_ext( ) ・ begin_template_ext( ) ・ open_pdi_page( ) の transparencygroup オプ
シ ョ ンは、 PDF/X-1 ・ PDF/X-3 では許 さ れず、 PDF/X-4 ・ PDF/X-5 でのみ許 さ れます。
transparencygroup を用いる場合、 colorspace サブオプ シ ョ ンの値は下記の要件に従 う 必要
があ り ます :
> DeviceGray : PDF/X 出力条件はグ レースケールまたは CMYK デバイ スである必要があ り ま
す。 生成ページについては (テ ン プ レー ト と 取 り 込みページ では不可)、 かわ り に begin_
page_ext( ) で defaultgray オプ シ ョ ン を設定する こ と も で き ます。
> DeviceRGB : PDF/X 出力条件は RGB デバイ スである必要があ り ます。生成ページについて
は (テ ン プ レー ト と 取 り 込みページ では不可)、 かわ り に begin_page_ext( ) で defaultrgb
オプ シ ョ ン を設定する こ と も で き ます。
> DeviceCMYK : PDF/X 出力条件は CMYK デバイ スである必要があ り ます。 生成ページにつ
いては (テ ン プ レー ト と 取 り 込みページ では不可)、 かわ り に begin_page_ext( ) で
defaultcmyk オプ シ ョ ン を設定する こ と も で き ます。
表示設定、 表示 ・
印刷領域
begin/end_document( ) で viewerpreferences オプ シ ョ ンに対 し て viewarea ・ viewclip ・
printarea ・ printclip サブオプ シ ョ ン を用いる際には、 media ・ bleed 以外の値は避ける必要
があ り ます。
文書情報キー
set_info( ) で、 Trapped 情報キーに対 し て、 または対応する XMP プ ロパテ ィ pdf:Trapped
に対 し て、 True か False 以外の値は避ける必要があ り ます。
セキ ュ リ テ ィ
begin_document( ) で userpassword ・ masterpassword ・ permissions オプ シ ョ ンは避ける必要
があ り ます。
PDFバージ ョ ン ・ 互 PDF/X-1a:2001 ・ PDF/X-3:2002 は PDF 1.3 に基づいています。 PDF 1.4 以上を必要 と する操
換性
作 (透過設定やソ フ ト マス ク な ど) は避ける必要があ り ます。
PDF/X-1a:2003 ・ PDF/X-3:2003 は PDF 1.4 に基づいています。 PDF 1.5 以上を必要 と する操
作は避ける必要があ り ます。
PDF/X-4 ・ PDF/X-5 は PDF 1.6 に基づいています。 PDF 1.7 以上を必要 と する操作は避ける
必要があ り ます。
PDF取 り 込み (PDI)
254
取 り 込まれる文書は、 表 10.5 に従っ た互換 PDF/X レ ベルに準拠 し ている必要があ り 、 同 じ
出力イ ン テ ン ト に従っ て作られている必要があ り ます。
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 10.3 PDF/X 互換のために禁止ま たは制約 さ れる操作一覧
項目
PDF/X 互換のために禁止ま たは制約 さ れる PDFlib 関数 ・ オプ シ ョ ン
外部グ ラ フ ィ ッ ク
内容 (参照)
PDF/X-1/3/4 : begin_template_ext( ) ・ open_pdi_page( ) で reference オプ シ ョ ンは避ける必
要があ り ます。
PDF/X-5g ・ PDF/X-5pg : begin_template_ext( ) ・ open_pdi_page( ) で reference オプ シ ョ ン で
与え る タ ーゲ ッ ト は、 右記の規格のいずれかに準拠 し ている必要があ り ます : PDF/X1a:2003 ・ PDF/X-3:2002 ・ PDF/X-4 ・ PDF/X-4p ・ PDF/X-5g ・ PDF/X-5pg。 特定の XMP メ タ
デー タ 項目が タ ーゲ ッ ト 内に必要ですので、 あ ら ゆる PDF/X 文書が タ ーゲ ッ ト と し て受け
入れ可能なわけではあ り ません。 PDFlib 8 で生成 さ れた PDF/X 文書は タ ーゲ ッ ト と し て利
用可能です。
reference オプ シ ョ ン と 、 必要な Acrobat 設定について詳 し く は、 67 ページ 「3.2.5 外部 PDF
文書内の参照ページ」 を参照 し て く だ さ い。
レ イ ヤー
PDF/X-1 ・ PDF/X-3 : レ イ ヤーは PDF 1.5 を必要 と し ますので、 使用で き ません。
PDF/X-4 ・ PDF/X-5 : レ イ ヤーは使用で き ますが、 特定の PDF/X の規則に従 う 必要があ り
ます :
> レ イ ヤーの可視性は、 個々のレ イ ヤーに対 し て ビ ュ ーア制御を与え るのではな く 、 文書
バ リ ア ン ト で制御する必要があ り ます。 バ リ ア ン ト は、 set_layer_dependency( )、 引数
type=variant、 およびバ リ ア ン ト に対する さ ま ざ ま なオプ シ ョ ン で作成で き ます。
> define_layer( ) ・ set_layer_dependency( ) の さ ま ざ ま なオプ シ ョ ンは避ける必要があ り ます。
フ ァ イルサイ ズ
PDF/X-4 ・ PDF/X-5 : 生成 PDF 文書のフ ァ イルサイ ズは 2 GB を超え てはな ら ず、 PDF オ
ブ ジ ェ ク ト の数は 8,388,607 個未満でなければな り ません。 こ れらの制限について詳 し く は
59 ページ 「3.1.5 大容量 PDF 文書」 を参照 し て く だ さ い。
10.3.3 出力 イ ン テ ン ト と 標準出力条件
出力 イ ン テ ン ト (出力条件 と も いい ます) は、 意図 さ れ る 対象デバ イ ス を定義 し ます。 こ
れは主に、 校正の信頼性を得 る ために有用です。 出力 イ ン テ ン ト は、 名前 と し て指定す る
こ と も で き ます し (標準出力 イ ン テ ン ト と いい ます)、 ICC カ ラ ープ ロ フ ァ イ ルで指定す
る こ と も で き ます。 詳細は PDF/X の種類に よ っ て異な り ます :
> PDF/X-1/3/4 ・ PDF/X-5g : 出力 イ ン テ ン ト に対す る ICC プ ロ フ ァ イ ルを埋め込み こ と
に よ っ て。
> PDF/X-1 ・ PDF/X-3 : 標準出力 イ ン テ ン ト の名前を与え る こ と に よ っ て。 標準出力 イ
ン テ ン ト は、 PDFlib に内部的に知 ら れてい ます。 標準出力 イ ン テ ン ト 名 と 、 それに対
応す る 出力条件の説明の全一覧は、 PDFlib API リ フ ァ レ ン ス を参照 し て く だ さ い。 こ
れ ら の出力 イ ン テ ン ト に対する ICC プ ロ フ ァ イ ルは、 ロ ーカルに得 ら れ る 必要はあ り
ません。追加の標準出力 イ ン テ ン ト を、StandardOutputIntent リ ソ ース カ テ ゴ リ を用い
て定義する こ と も で き ます (55 ページ 「3.1.3 リ ソ ース設定 と フ ァ イ ル検索」 参照) 。
PDF/X 処理 ソ フ ト ウ ェ アに よ っ て認識 さ れ る であ ろ う 標準出力 イ ン テ ン ト の名前だけ
を与え る こ と はユーザー側の役割です。 標準出力 イ ン テ ン ト は下記の よ う に参照で き
ます :
if (p.load_iccprofile("CGATS TR 001", "usage=outputintent") == -1)
{
/* エラー */
}
PDF/X-3 出力を生成する 場合、 HKS ・ PANTONE ・ ICC ベース ・ Lab カ ラ ーのいずれか
を使用す る 際には、 標準出力 イ ン テ ン ト の名前を参照す る だけでは充分ではな く 、 そ
の出力デバ イ ス の ICC プ ロ フ ァ イ ルを埋め込む必要があ り ます。
> PDF/X-4p ・ PDF/X-5pg : 出力 イ ン テ ン ト に対す る 外部 ICC プ ロ フ ァ イ ルを参照す る こ
と に よ っ て (規格の名前の中の p は、 外部プ ロ フ ァ イ ルが参照 さ れ る こ と を意味 し て
10.3 PDF/X によ る印刷出力
255
い ます)。 標準出力 イ ン テ ン ト と 異な り 、 出力 イ ン テ ン ト ICC プ ロ フ ァ イ ルは名前に
よ っ て参照 さ れ る だけではな く 、 文書が生成 さ れ る 際に ICC プ ロ フ ァ イ ルが ロ ーカル
に得 ら れ る 必要があ る 強い参照が作成 さ れます。 こ の ICC プ ロ フ ァ イ ルは PDF 出力に
埋め込まれませんが、 それで も 強い参照を作成する ために こ れは PDF 生成時に得 ら れ
る 必要があ り ます。 urls オプシ ョ ンで、 ICC プ ロ フ ァ イ ルが見つか る 1 個ない し 複数の
URL を与え る 必要があ り ます :
if (p.load_iccprofile("CGATS TR 001",
"usage=outputintent urls={http://www.color.org}") == -1)
{
/* エラー */
}
適切な PDF/X 出力 イ ン テ ン ト を選ぶ PDF/X 出力 イ ン テ ン ト の選択は通常、 印刷出力を
と り し き る 印刷業者 と の話 し 合いで決ま り ます。出力 イ ン テ ン ト の選択に関す る 情報が印
刷所側か ら 出て こ ない と き は、 表 10.4 に挙げ る 標準出力 イ ン テ ン ト を たた き 台 と し て使
用す る こ と も で き ます (PDF/X FAQ よ り 引用)。
表 10.4 代表的な出力条件のための適切な PDF/X 出力イ ン テ ン ト
欧州
北米
雑誌広告
FOGRA28
CGATS TR 00
新聞広告
IFRA26
IFRA30
枚葉オ フ セ ッ ト
用紙に依存 :
タ イ プ 1 ・ 2 ( コ ー ト ) : FOGRA27
用紙に依存 :
グ レー ド 1 ・ 2 (プ レ ミ アム コ ー ト ) :
FOGRA27
タ イ プ 3 (LWC) : FOGRA28
タ イ プ 4 (非 コ ー ト ) : FOGRA29
グ レー ド 5 : CGATS TR 001
非 コ ー ト : FOGRA29
輪転オ フ セ ッ ト
用紙に依存 :
タ イ プ 1 ・ 2 ( コ ー ト ) : FOGRA28
用紙に依存 :
グ レー ド 5 : CGATS TR 001
タ イ プ 4 (非 コ ー ト ・ 白) : FOGRA29
非 コ ー ト (白) : FOGRA29
タ イ プ 5 (非 コ ー ト ・ 黄味) : FOGRA30
非 コ ー ト (黄味) : FOGRA30
10.3.4 PDI に よ る PDF/X 文書の取 り 込み
既存の PDF 文書のページ を PDF-X 準拠の出力文書へ取 り 込む場合には、 特別な規則が適
用 さ れます (詳 し く は 172 ページ 「7.2 PDI で PDF ページ を取 り 込み」 参照)。 取 り 込ま
れ る 文書はすべて、 表 10.5 に従っ た互換 PDF/X 準拠レベルに準拠 し てい る 必要があ り ま
す。 一般則 と し ては、 入力文書が生成出力文書 と 同 じ PDF/X 準拠レベルに準拠 し てい る
場合、 ない し 同 じ レベルの古いバージ ョ ンに準拠 し てい る 場合には利用可能です。 こ れに
加え、 あ る 種の組み合わせ も 利用可能です。 あ る 特定の PDF/X 準拠レベルが PDFlib で設
定 さ れていて、 かつ、 取 り 込まれた文書 も その互換レベルのいずれかを遵守 し てい る な ら
ば、 生成出力はその選択 さ れた PDF/X 準拠レベルに準拠 し てい る こ と が保証 さ れ ます。
取 り 込まれた文書で、 選ばれた PDF/X レベルを遵守 し ていない も のは拒否 さ れます。
複数の PDF/X 文書を取 り 込む場合は、 それ ら はすべて同一の出力条件に対 し て作成 さ
れてい る 必要があ り ます。た と えば、CMYK 出力 イ ン テ ン ト を持つ文書だけが、同 じ CMYK
出力 イ ン テ ン ト を用いてい る 文書へ取 り 込む こ と がで き ます。
PDFlib は、 い く つか特定の項目を修正す る こ と はで き ますが、 完全な PDF/X 検証動作
を行っ た り 、 取 り 込み文書に完全な PDF/X 互換を強制 し た り す る よ う には も と も と 作 ら
256
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 10.5 さ ま ざ ま な PDF/X 出力レ ベルに対する互換 PDF/X 入力レ ベル一覧
PDF/X-4
PDF/X-4p
PDF/X-5g
PDF/X-5pg
可
PDF/X-1a:2003
可
PDF/X-3:2002
可
PDF/X-3:2003
可
可
可
可
PDF/X-4
可
可
可
可
可
可
PDF/X-4p
可
可
可
可
可
可1
PDF/X-5g
可
可
可
可
可
可
可2
可2
PDF/X-5pg
可
可
可
可
可
可1
可2
可 1,2
PDF/X-3:2003
PDF/X-1a:2001
PDF/X-3:2002
PDF/X 出力レ ベル
PDF/X-1a:2001
PDF/X-1a:2003
取 り 込む文書の PDF/X レ ベル
可
可
1. process_pdi( ) で action=copyoutputintent を指定する と 、 参照が外部出力イ ン テ ン ト ICC プ ロ フ ァ イルへ複製 さ れます。
2. 取 り 込んだページが参照 XObject を含んでいる と きは、open_pdi_page( ) は代理 と 参照の両方を タ ーゲ ッ ト へ コ ピー し ま
す。
れてい ません。 た と えば PDFlib は、 取 り 込んだ PDF ページに欠けてい る フ ォ ン ト を埋め
込んだ り は し ません し 、 取 り 込んだページに対 し て色補正な ど も 一切行い ません。
ページ を取 り 込んだ結果 と し てで き る PDF 出力文書が、 入力文書 (1 つま たは複数)
と 同 じ PDF/X 準拠レベル と 出力条件に準拠す る よ う に し たい場合は、 次の よ う に、 取 り
込まれた PDF の PDF/X 状態を取得す る こ と がで き ます。
pdfxlevel = p.pcos_get_string(doc, "pdfx");
こ の ス テー ト メ ン ト は、 取 り 込まれた文書が ISO PDF/X レベルに準拠 し てい る 場合には、
PDF/X 準拠レベルを表す文字列を得ます。 そ う でない場合には none を得ます。 こ の返っ
て き た文字列を用いれば、begin_document( ) の pdfx オプシ ョ ン を用いて出力文書の PDF/
X 準拠レベルを適切に設定す る こ と がで き ます。
取 り 込み文書か ら PDF/X 出力 イ ン テ ン ト を コ ピ ー PDF/X 準拠レベルの取得の他に も 、
次の よ う に、取 り 込まれた文書か ら PDF/X 出力 イ ン テ ン ト を コ ピーす る こ と も で き ます。
ret = p.process_pdi(doc, -1, "action=copyoutputintent");
こ の方法は、 load_iccprofile( ) に よ る 出力 イ ン テ ン ト 設定のかわ り に利用す る こ と がで き 、
取 り 込み文書の出力 イ ン テ ン ト を、 生成す る 文書に コ ピー し ま す。 こ の出力 イ ン テ ン ト
は、標準名 と ICC プ ロ フ ァ イ ルの ど ち ら で定義 さ れた も ので も か ま い ません。出力 イ ン テ
ン ト を コ ピーす る 方法は、 取 り 込まれた PDF/A と PDF/X の文書に対 し て通用 し ます。
生成す る 文書の出力 イ ン テ ン ト は、取 り 込み文書の出力 イ ン テ ン ト を コ ピーす る か、あ
る いは明示的に load_iccprofile( ) で usage=outputintent に し て設定す る か、 その ど ち ら か
の方法で必ず一度だけ設定す る 必要があ り ます。
10.3 PDF/X によ る印刷出力
257
10.4 PDF/A に よ る アー カ イ ビ ン グ
10.4.1 各種の PDF/A 規格
ISO 19005 標準で定め ら れた各種の PDF/A 形式は、長期間にわた っ て安全にアーカ イ ブで
き る 、 あ る いは企業や政府の環境において信頼性を持っ たデー タ 交換に利用で き る 、 首尾
一貫、 かつ堅牢な PDF のサブセ ッ ト を提供す る こ と を目的 と し てい ます。
PDF/A 技術セ ン タ ー PDFlib GmbH は PDF/A
技術セ ン タ ー (PDF/A Competence Center) の
創立 メ ン バ ー で す。 こ の 組織 の 目的 は、 ISO
19005 に従っ た長期アーカ イ ビ ン グの分野にお
け る 情報 と 経験の交換の促進です。PDF/A 技術
セ ン タ ーの メ ンバーは、PDF/A 標準 と その実装
に関連す る 情報を積極的に交換 し てお り 、 こ の
テーマ に関す る セ ミ ナーや カ ン フ ァ レ ン ス を
開いてい ます。 詳 し く は PDF/A 技術セ ン タ ー
の ウ ェ ブサ イ ト www.pdfa.org を参照 し て く だ
さ い。
Member of…
ISO 19005-1 で定義 さ れた PDF/A-1a:2005 ・ PDF/A-1b:2005 PDF/A の目的は、 電子文書
の確実な長期保存です。 その規格は PDF 1.4 をベース に、 色 ・ フ ォ ン ト ・ 注釈な ど の要素
の使用にい く つかの制約を課 し てい ます。 下記の 2 種類の PDF/A-1 があ り 、 ど ち ら も
PDFlib で作成 ・ 処理が可能です。
> ISO 19005-1 レベル B 準拠 (PDF/A-1b) は、文書の体裁が長期にわた っ て保持 さ れ る こ
と を保証 し ます。 簡単にいえば PDF/A-1b は、 文書を将来いつの日か処理す る と き に
それが今 と 同 じ に見え る こ と を保証す る も のです。
> ISO 19005-1 レベル A 準拠 (PDF/A-1a) は、レベル B をベース に、「 タ グ付 き PDF」 で知
ら れた性質を追加 し ます。 すなわち、 文書の論理構造 と 自然な読み上げ順序を保持す
る ために、 構造情報 と 、 信頼で き る テ キ ス ト の意味を追加 し ます。 簡単にいえば PDF/
A-1a は、 文書を将来いつの日か処理す る と き にそれが今 と 同 じ に見え る こ と を保証す
る のみな ら ず、 その内容 (意味) を信頼性を持っ て解釈で き 、 身体障碍者に も 利用で
き る こ と を保証す る も のです。 PDFlib の PDF/A-1a 対応は、 タ グ付き PDF を制作す る
ための機能に も と づいてい ます (267 ページ 「10.5 タ グ付 き PDF」 参照)。
以下、 PDF/A-1 と 言 う と き (準拠レベルをつけずに) は、 両方の準拠レベルを指す も の
と し ます。
実装の根拠 下記の規格 ・ 文書が、 PDFlib の PDF/A-1 の実装の根拠を構成 し てい ます :
> PDF/A 規格 (ISO 19005-1:2005)
> 技術正誤表 1 (ISO 19005-1:2005/Cor 1:2007)。
> 技術正誤表 2 (ISO 19005-1:2005/Cor.2:2010)。
> PDF/A 技術セ ン タ ーが発行 し たすべての関連 TechNote。
10.4.2 PDF/A 準拠の出力 を生成
ク ッ ク ブ ッ ク PDF/A を生成する ための コ ー ド サン プルが PDFlib ク ッ ク ブ ッ ク の pdfa カ テ ゴ リ にあ り ま
す。
PDFlib に よ る PDF/A 準拠出力の作成は、 以下の手段で実現 さ れます。
258
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> PDF のバージ ョ ン番号や、 PDF/A 準拠キーな ど、 PDF/A のための形式設定のい く つか
は、 PDFlib が自動的に行い ます。
> PDFlib の ク ラ イ ア ン ト プ ロ グ ラ ムにおいて、 表 10.6 に示す特定の関数呼び出 し やオプ
シ ョ ン を明示的に使用す る 必要があ り ます。
> PDFlib の ク ラ イ ア ン ト プ ロ グ ラ ムにおいて、 表 10.7 に示す特定の関数呼び出 し やオプ
シ ョ ン設定を避け る 必要があ り ます。
> 既存の PDF/A 準拠の文書か ら ぺー じ を取 り 込む と き は、 ほかに も 従 う べ き 規則があ り
ます (262 ページ 「10.4.3 PDF/A 文書を PDI で取 り 込み」 参照)。
PDFlib の ク ラ イ ア ン ト プ ロ グ ラ ムが こ れ ら の規則に従 う な ら 、 有効な PDF/A 出力が保証
さ れます。 PDF/A 作成の規則違反を検出 し た と き は、 PDFlib は例外を発生 さ せ る ので、 ア
プ リ ケーシ ョ ン側でそれを処理す る 必要があ り ます。 エ ラ ーが起 き る と PDF 出力は作成
さ れません。
PDF/A-1b に必要な操作 PDF/A 準拠の出力を 生成す る た めに必要なすべて の操作を 表
10.6 に示 し ます。 各項目は、 別記ない限 り 両方の PDF/A 準拠レベルにあ てはま り ます。
PDF/A モー ド にい る と き に、 必要な関数を も し 1 つで も 呼び出 さ なか っ た場合は、 例外
が発生 し ます。
表 10.6 PDF/A-1 レ ベル A ・ B 準拠のために行 う べき操作一覧
項目
PDF/A 互換のために必要な PDFlib 関数 ・ オプ シ ョ ン
準拠レ ベル
begin_document( ) の pdfa オプ シ ョ ンに、 求める PDF/A 準拠レ ベル、 すなわち PDF/A1a:2005 か PDF/A-1b:2005 を設定する必要があ り ます。
出力条件 (出力イ
ンテン ト )
デバイ ス依存色空間のグ レー ・ RGB ・ CMYK のいずれかが文書で使われている と きは、
begin_document( ) の直後に、 load_iccprofile( ) を usage=outputintent に し て呼び出すか、 ま
たは process_pdi( ) を action=copyoutputintent に し て呼び出す必要があ り ます (ただ し 両方
式の併用は不可)。 出力イ ン テ ン ト を使 う と きは、 ICC プ ロ フ ァ イルを埋め込む必要があ り
ます (PDF/X と 違 っ て PDF/A では、 標準出力条件では不十分です)。 標準出力条件のため
のプ ロ フ ァ イルを埋め込むには、 load_iccprofile( ) で embedprofile オプ シ ョ ン を使います。
フォン ト
load_font( ) で embedding オプ シ ョ ン を true にする必要があ り ます ( こ のオプ シ ョ ン を受け
取る他の関数で も同様)。 PDF コ ア フ ォ ン ト も 埋め込む必要があ るので注意 し て く だ さ い。
ただ し 不可視テキス ト (主に OCR の結果のために有用です) でのみ使われている フ ォ ン ト
は例外で、 埋め込みの必要はあ り ません。 これは optimizeinvisible オプ シ ョ ン で制御で き ま
す。
グ レースケールカ
ラー
グ レースケール画像 と 、 グ レー色空間に よ る setcolor( ) は、 出力条件がグ レースケール ・
RGB ・ CMYK デバイ スのいずれかであ る場合か、 あ るいは begin_page_ext( ) で defaultgray
オプ シ ョ ン を設定 し ている場合にのみ用いる こ と がで き ます。
RGBカ ラ ー
RGB 画像 と 、 RGB 色空間に よ る setcolor( ) は、 出力条件が RGB デバイ ス である場合か、 あ
るいは begin_page_ext( ) で defaultrgb オプ シ ョ ン を設定 し ている場合にのみ用いる こ と が
で き ます。
CMYKカ ラ ー
CMYK 画像 と 、 CMYK 色空間に よ る setcolor( ) は、 出力条件が CMYK デバイ スであ る場合
か、 あ るいは begin_page_ext( ) で defaultcmyk オプ シ ョ ン を設定 し ている場合にのみ用い
る こ と がで き ます。
禁止 ・ 制限 さ れ る操作 PDF/A 準拠の出力を生成す る 際に禁止 さ れ る すべての操作を表
10.7 に示 し ます。 各項目は、 別記ない限 り 両方の PDF/A 準拠レベルにあ てはま り ます。
PDF/A モー ド にい る と き に、 禁止 さ れた関数を も し 1 つで も 呼び出 し た場合は、 例外が
発生 し ます。 同様に、 取 り 込んだ PDF 文書がカ レ ン ト の PDF/A 出力レベルに準拠 し てい
なか っ た と き も 、 その PDI 呼び出 し は失敗 し ます。
10.4 PDF/A によ る アー カ イ ビ ング
259
表 10.7 PDF/A 互換のために禁止 ・ 制限 さ れる操作一覧
項目
PDF/A 互換のために禁止 さ れる PDFlib 関数 ・ オプ シ ョ ン
注釈
create_annotation( ) : type=FileAttachment の注釈は不可。 zoom ・ rotate オプ シ ョ ン を true
に設定 し てはいけません。 annotcolor ・ interiorcolor オプ シ ョ ンは、 RGB の出力イ ン テ ン ト
が指定 さ れている と き にのみ使 う 必要があ り ます。 fillcolor オプ シ ョ ンは、 RGB か CMYK
の出力イ ン テ ン ト が指定 さ れている と き にのみ使 う 必要があ り 、 それぞれ rgb か cmyk 色空
間を使 う 必要があ り ます。
フ ォ ーム フ ィ ール
ド
create_field( ) ・ create_fieldgroup( ) に よ る フ ォ ーム フ ィ ール ド の作成は不可。
アクシ ョ ン ・
JavaScript
create_action( ) : type=Hide ・ Launch ・ ResetForm ・ ImportData ・ JavaScript のア ク シ ョ ンは
不可。 type=name については NextPage ・ PrevPage ・ FirstPage ・ LastPage のみ可。
画像
load_image( ) で OPI-1.3 ・ OPI-2.0 オプ シ ョ ン と interpolate=true オプ シ ョ ンは不可。
ICCプ ロ フ ァ イル
load_iccprofile( ) で読み込まれる ICC プ ロ フ ァ イルは、 ICC 仕様 ICC.1:1998-09 と 、 その補遺
ICC.1A:1999-04 (内部プ ロ フ ァ イルバージ ョ ン 2.x) に準拠 し ている必要があ り ます。
ページサイ ズ
PDF/A には、 厳格なページサイ ズ制限はあ り ません。 し か し 、 Acrobat での問題を避ける
ため、 ページサイ ズ (幅 ・ 高 さ 、 すべての枠項目) は 3 ∼ 14400 ポ イ ン ト (508 cm) の範
囲内に収める こ と を推奨 し ます。
テ ン プ レー ト
begin_template_ext( ) で OPI-1.3 ・ OPI-2.0 オプ シ ョ ンは不可。
透過
画像に ソ フ ト マ ス クは不可。 load_image( ) で masked オプ シ ョ ンは、 マ ス ク が 1 ビ ッ ト 画
像を参照する場合以外は不可。 暗黙的な透過 (アル フ ァ チ ャ ン ネル) を持つ画像は不可で
すので、 それらは load_image( ) の ignoremask オプ シ ョ ン で読み込む必要があ り ます。
create_gstate( ) で opacityfill ・ opacitystroke オプ シ ョ ンは、 値 1 以外は不可。 blendmode を
使 う 場合は Normal にする こ と 。
create_annotation( ) で opacity オプ シ ョ ンは不可。
透過グループ
begin/end_page_ext( ) ・ begin_template_ext( ) ・ open_pdi_page( ) の transparencygroup オプ
シ ョ ンは不可。
セキ ュ リ テ ィ
begin_document( ) で userpassword ・ masterpassword ・ permissions オプ シ ョ ンは不可。
PDFバージ ョ ン/互
換性
PDF/A は PDF 1.4 をベースに し ています。 PDF 1.5 以上を要する操作 (レ イ ヤー等) は不
可。
PDF取 り 込み (PDI)
取 り 込む文書は、 出力文書 と 互換な PDF/A レ ベルに準拠 し ている必要があ り 、 かつ、 互換
な出力イ ン テ ン ト に従っ て作成 さ れている必要があ り ます (表 10.10 参照)。
メ タ デー タ
定義済みの XMP スキーマ (PDFlib API リ フ ァ レ ン ス参照) はすべて使え ます。 それ以外の
スキーマ (拡張スキーマ) を使いたい と きは、 そのスキーマ自体が、 PDF/A 拡張スキーマ
コ ン テナスキーマ を使っ て包含 さ れている必要があ り ます。
外部内容
begin_template_ext( ) ・ open_pdi_page( ) で reference オプ シ ョ ンは不可。
フ ァ イルサイ ズ
生成 PDF 文書のフ ァ イルサイ ズは 2 GB を超えてはな ら ず、 PDF オブ ジ ェ ク ト の数は
8,388,607 個未満で なければな り ません。 こ れらの制限について詳 し く は 59 ページ 「3.1.5
大容量 PDF 文書」 を参照 し て く だ さ い。
PDF/A-1a で加わる要請 と 制限 PDF/A-1a を作成する と き は、 267 ページ 「10.5 タ グ付 き
PDF」 で述べ る 、 タ グ付 き PDF の出力作成のための要請をすべて守 る 必要があ り ます。 そ
の他に も い く つかの操作が禁止ま たは制約 さ れますので、 それを表 10.9 に示 し ます。
構造情報の適切な作成はユーザー側の役割であ り 、 PDFlib は意味上の制限を検証 も 強
制 も し ません。文書のテ キ ス ト 全体を 1 個の構造要素に入れた ら 、技術的には正 し い PDF/
A-1a ですが、 意味の忠実再生 と い う 目標に反 し てい ますので、 ひいては PDF/A-1a の精
神に も 反 し ます。
260
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 10.8 PDF/A-1a 準拠のための追加要請一覧
項目
PDF/A-1a 準拠のために必要な PDFlib 関数 ・ オプ シ ョ ン
タ グ付きPDF
タ グ付き PDF に対する要請はすべて守る必要があ り ます (267 ページ 「10.5 タ グ付き PDF」
参照)。
下記を強 く 推奨 し ます。
> デ フ ォ ル ト 文書言語を指定する ために begin/end_document( ) で Lang オプ シ ョ ン を与え る
べき です。
> 文書のデ フ ォ ル ト の言語 と 異な る内容項目に対 し てはすべて、その begin_item( ) で Lang オ
プ シ ョ ン を適切に設定する必要があ り ます。
> 画像な どの非テキス ト の内容項目は、 begin_item( ) で Alt オプ シ ョ ン を使っ て代替テキス
ト 記述を与え る必要があ り ます。
> ロ ゴや記号な どの非 Unicode のテキス ト は、 それを内容項目 と し て包含する begin_item( )
で ActualText オプ シ ョ ンに適切な代替テキス ト を与え る必要があ り ます。
> 略語や頭字語は、それを内容項目 と し て包含する begin_item( ) で E オプ シ ョ ンに適切な展
開テキス ト を与え る必要があ り ます。
create_annotation( ) : contents オプ シ ョ ンには、 空でない文字列を与え る必要があ り ます。
注釈
表 10.9 PDF/A-1a 準拠のために追加で禁止ま たは制約 さ れる操作一覧
項目
PDF/A-1a 準拠のために禁止または制約 さ れる PDFlib 関数 ・ オプ シ ョ ン
フォン ト
load_font( ) で monospace オプ シ ョ ン と unicodemap=false ・ autocidfont=false は不可 ( こ れ
らのオプ シ ョ ン を受け取る他の関数について も 同様)。
PDF取 り 込み (PDI)
取 り 込む文書は、 出力文書 と 互換な PDF/A レ ベルに準拠 し ている必要があ り (表 10.10 参
照)、 かつ、 同 じ 出力イ ン テ ン ト に従 っ て作成 さ れている必要があ り ます。
出力 イ ン テ ン ト 出力条件は、 意図す る 対象デバ イ ス を定義 し ま す。 こ れは一貫 し た カ
ラ ーレ ン ダ リ ン グのために重要です。 PDF/X の場合、 出力 イ ン テ ン ト は厳格に必要です
が、 それ と 違っ て PDF/A では、 出力 イ ン テ ン ト は指定す る こ と も で き ますが、 必須では
あ り ません。 出力 イ ン テ ン ト が必要なのは、 デバ イ ス依存色が文書で使われてい る 場合だ
けです。 出力 イ ン テ ン ト は、 ICC プ ロ フ ァ イ ルを使っ て指定する こ と がで き ます。 出力 イ
ン テ ン ト は下記の よ う に指定で き ます。
icc = p.load_iccprofile("sRGB", "usage=outputintent");
ICC プ ロ フ ァ イ ルを読み込む方法のほかに、 出力 イ ン テ ン ト は、 取 り 込んだ PDF/A 文書
か ら コ ピーす る こ と も で き ます。 それには process_pdi( ) で action=copyoutputintent オプ
シ ョ ン を指定 し ます。
PDF/A と PDF/X を同時に作成 PDF/A-1 文書は、同時に PDF/X-1a:2003・PDF/X-3:2003・
PDF/X-4 のいずれかに も 準拠 さ せ る こ と が可能です (ただ し PDF/X-4p ・ PDF/X-5 は不
可)。 その よ う な コ ン ボ フ ァ イ ルを作成す る には、 begin_document( ) で pdfa オプシ ョ ン と
pdfx オプシ ョ ンに適切な値を与え ます。 例 :
ret = p.begin_document("combo.pdf", "pdfx=PDF/X-4 pdfa=PDF/A-1b:2005");
出力 イ ン テ ン ト は、 PDF/A と PDF/X に対 し て同 じ にす る 必要があ り 、 かつ、 出力デバ イ
ス の ICC プ ロ フ ァ イ ル と し て指定す る 必要があ り ます。 PDF/X の標準出力条件が使え る
のは、 embedprofile オプシ ョ ン と 組み合わせた場合だけにな り ます。
10.4 PDF/A によ る アー カ イ ビ ング
261
10.4.3 PDF/A 文書 を PDI で取 り 込み
PDF/A 準拠の出力文書に既存の PDF 文書を取 り 込む と き は、 特別な規則が適用 さ れます
(PDI について詳 し く は 172 ページ 「7.2 PDI で PDF ページ を取 り 込み」 を参照)。 あ ら ゆ
る 取 り 込み文書は、 表 10.10 に従っ た カ レ ン ト の PDF/A モー ド と 互換な PDF/A 準拠レベ
ルに準拠 し てい る 必要があ り ます。
注 PDFlib は、 PDF 文書の PDF/A 準拠に関する検証は行わず、 また、 任意の入力 PDF から有効
な PDF/A を生成する こ と も で き ません。
あ る 特定の PDF/A 準拠レベルが PDFlib で設定 さ れていて、 かつ、 取 り 込んだ文書がそれ
と 互換な レベルを厳守 し てい る な ら ば、 生成 さ れ る 出力は、 選ばれた PDF/A 準拠レベル
に準拠す る こ と が保証 さ れます。 カ レ ン ト の PDF/A レベル と 非互換の文書は open_pdi_
document( ) で拒絶 さ れます。
表 10.10 各 PDF/A 出力レ ベルに互換な PDF/A 入力レ ベル
取 り 込む文書の PDF/A レ ベル
PDF/A 出力レ ベル
PDF/A-1a:2005
PDF/A-1b:2005
PDF/A-1a:2005
−
可
PDF/A-1b:2005
−
可
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの pdfa/import_pdfa ト ピ ッ ク にあ り ます。
1 個ない し 複数の PDF/A 文書を取 り 込む と き は、そのすべてが表 10.11 に従っ た互換な出
力条件で作成 さ れてい る 必要があ り ます。すべての取 り 込み文書の出力 イ ン テ ン ト は同一
か互換であ る 必要があ り 、 こ の条件を満たす よ う 手配する のはユーザー側の役割です。
表 10.11 PDF/A 文書を取 り 込む際の出力イ ン テ ン ト の互換性
取 り 込む文書の出力イ ン テ ン ト
生成する文書の出力イ ン テ ン ト
なし
グ レース
ケール
RGB
CMYK
なし
有
−
−
−
グ レースケールの ICC プ ロ フ ァ イル
有
有1
−
−
RGB の ICC プ ロ フ ァ イル
有
−
有1
−
CMYK の ICC プ ロ フ ァ イル
有
−
−
有1
1. 取 り 込む文書の出力イ ン テ ン ト と 、 生成する文書の出力イ ン テ ン ト が、 同一であ る必要があ り ます。
PDFlib は、 い く つか特定の項目を修正す る こ と はで き ますが、 PDF/A の完全検証に利用
さ れ る よ う に も 、 ま た、 取 り 込んだ文書に完全な PDF/A 準拠を強制す る よ う に も 作 ら れ
てい ません。 た と えば取 り 込んだ PDF のページに足 り ない フ ォ ン ト があ っ て も 、 PDFlib
はそれの埋め込みは し ません。
取 り 込んだページ を連結す る 際に、 で き あが る PDF 出力文書が入力文書 (群) と 同 じ
PDF/A 準拠レベル ・ 出力条件に準拠す る よ う に し たければ、 取 り 込んだ PDF の PDF/A 状
況を下記の よ う に取得す る こ と がで き ます。
pdfalevel = p.pcos_get_string(doc, "pdfa");
262
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
こ の命令は、取 り 込んだ文書が PDF/A レベルに準拠 し ていればその PDF/A 準拠レベルを
示す文字列を取得 し 、 そ う でなければ none を返 し ます。 こ の返 さ れた文字列を使えば、
begin_document( ) で pdfa オプシ ョ ン を使っ て、出力文書の PDF/A 準拠レベルを適切に設
定す る こ と がで き ます。
取 り 込んだ文書か ら PDF/A 出力 イ ン テ ン ト を コ ピ ー PDF/A準拠レベルを取得す る 以外
の方法 と し て、 PDF/A 出力 イ ン テ ン ト は、 取 り 込んだ文書か ら コ ピーす る こ と も で き ま
す。 PDF/A 文書には必ず し も 出力 イ ン テ ン ト があ る と はかぎ ら ないので (出力 イ ン テ ン
ト が必須な PDF/X と は違い ます)、 それを コ ピー し よ う と する 前に、 まず pCOS を使っ て
出力 イ ン テ ン ト の存在を確かめ る 必要があ り ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの pdfa/import_pdfa ト ピ ッ ク にあ り ます。
こ れは、 load_iccprofile( ) を使っ て出力 イ ン テ ン ト を設定す る 方法のかわ り に使 う こ と が
で き 、 取 り 込んだ文書の出力 イ ン テ ン ト を、 生成する 出力文書へコ ピー し ます。 出力 イ ン
テ ン ト の コ ピーは、 取 り 込んだ PDF/A と PDF/X の文書で動作 し ます。
生成す る 出力文書の出力 イ ン テ ン ト は、 取 り 込んだ文書の出力 イ ン テ ン ト を コ ピーす
る か、 あ る いは load_iccprofile( ) の usage オプシ ョ ンに outputintent を設定 し て明示的に
設定す る か、 そのいずれかの方法で 1 回だけ設定する 必要があ り ます。 出力 イ ン テ ン ト の
設定は、 begin_document( ) の直後に行 う 必要があ り ます。
10.4.4 PDF/A 作成のための カ ラ ー戦略
PDF/A の色処理に関す る 要請は、 わか り に く い こ と があ る か も し れません。 PDF/A の利
用設計にあ た っ ては、 表 10.12 に ま と めた カ ラ ー戦略が役立つで し ょ う 。 多 く の場面で う
ま く い く 最 も 簡単な アプ ロ ーチは、sRGB 出力 イ ン テ ン ト プ ロ フ ァ イ ルを使 う こ と であ り 、
なぜな ら それは CMYK 以外の代表的な多 く の色空間に対応 し てい る か ら です。 それに加
え て、 sRGB は PDFlib で内部的に既知なので、 外部プ ロ フ ァ イ ルデー タ や設定が一切必要
あ り ません。 色空間の供給元 と し て あ り え る のは以下の と お り です。
> load_image( ) で取 り 込んだ画像
> setcolor( ) を使っ た明示的な色指定
> テ キ ス ト フ ロ ー内な ど でのオプシ ョ ン リ ス ト に よ る 色指定
> イ ン タ ラ ク テ ィ ブ要素では枠色の指定が可能
表 10.12 PDF/A のカ ラ ー戦略
文書で使え る色空間
出力イ ン テ ン ト
CIELab
1
ICC ベース
グ レース
ケール2
RGB2
CMYK2
なし
可
可
−
−
−
グ レースケールのICCプ ロ
フ ァ イル
可
可
可
−
−
RGBのICCプ ロ フ ァ イル。
例 : sRGB
可
可
可
可
−
CMYKのICCプ ロ フ ァ イル
可
可
可
−
可
1. CIELab カ ラ ーの LZW 圧縮 さ れた TIFF 画像は RGB に変換 さ れます。
2. ICC プ ロ フ ァ イルのないデバイ ス色空間
10.4 PDF/A によ る アー カ イ ビ ング
263
黒のテ キ ス ト 出力を、 出力 イ ン テ ン ト プ ロ フ ァ イ ルを一切必要 と せずに作成 し たい と き
は、 CIELab 色空間が使え ます。 Lab カ ラ ー値 (0, 0, 0) はデバ イ ス独立な様式で純黒を指定
し 、 出力 イ ン テ ン ト プ ロ フ ァ イ ル一切な し で PDF/A 準拠です (出力 イ ン テ ン ト プ ロ フ ァ
イ ルを必要 と す る DeviceGray と は異な り )。 PDFlib は各ページの冒頭で自動的に、 カ レ ン
ト 色を黒に初期化 し ます。 ICC 出力 イ ン テ ン ト が指定 さ れてい る かいないかに よ っ て、 黒
を選択す る ために DeviceGray と Lab の ど ち ら の色空間が使われ る かが決ま り ます。 手動
で Lab の黒色に設定す る には、 下記の呼び出 し を使い ます。
p.setcolor("fillstroke", "lab", 0, 0, 0, 0);
表 10.12 に挙げた色空間以外に も 、 ス ポ ッ ト カ ラ ーが、 その対応す る 代替色空間に従っ て
使え ます。 PDFlib は内蔵の HKS と PANTONE の ス ポ ッ ト カ ラ ーについては CIELab を代替
色に使っ てい ますので、 こ れ ら はかな ら ず PDF/A で利用可能です。 カ ス タ ムの ス ポ ッ ト
カ ラ ーについては、 PDF/A の出力 イ ン テ ン ト と 互換にな る よ う に代替色空間を選ぶ必要
があ り ます。
注 PDF/A と 色空間に関 し て さ ら に詳 し い情報は、 www.pdfa.org の PDF/A 技術セ ン タ ーの
Technical Note 0002 にあ り ます。
10.4.5 PDF/A のための XMP 文書 メ タ デー タ
PDF/A-1 は、 PDF 文書に メ タ デー タ を埋め込むために、 XMP 形式に強 く 依存 し てい ます。
ISO 19005-1 は XMP 2004 仕様を参照 し てお り 1、 それ よ り 前や後の XMP 仕様には対応 し
てい ません。 PDF/A-1 では、 2 つの種類の文書レベル メ タ デー タ に対応 し てい ます。 1 つ
は、 よ く 知 ら れた メ タ デー タ ス キーマ を集めた も ので、 定義済み ス キーマ と 呼ばれてお
り 、 も う 1 つはカ ス タ ム拡張ス キーマです。 PDFlib は、 XMP の中の必須の PDF/A 準拠項
目群 を 自動的 に 作成す る ほ か、 い く つ か の よ く 使 わ れ る 項目 も 自動的 に 作成 し ま す
(CreationDate 等)。
ユーザーが作成 し た文書 メ タ デー タ は、 begin/end_document( ) の metadata オプシ ョ
ンで与え る こ と がで き ます。 PDF/A モー ド では、 PDFlib は、 ユーザーが与えた XMP 文書
メ タ デー タ が PDF/A の要請に準拠 し てい る か ど う かを検証 し ます。 コ ン ポーネ ン ト レベ
ル (ページ ・ 画像等) の メ タ デー タ については、 PDF/A の要請はあ り ません。
取 り 込み PDF 文書の中の XMP メ タ デー タ は、 pCOS パ ス /Root/Metadata を用いて入
力 PDF か ら 抽出す る こ と がで き ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クのinterchange/import_xmp_from_pdf ト ピ ッ ク にあ り
ます。
定義済み XMP スキーマ PDF/A-1 では、 XMP 2004 の中のすべての ス キーマに対応 し て
い ます。 こ れ ら は定義済みス キーマ と 呼ばれます。 こ れを表 10.13 に列挙 し 、 あわせてそ
の名前空間 URI と 、 望ま し い名前空間接頭辞を示 し ます。 XMP 2004 の中で列挙 さ れてい
る 定義済みス キーマのプ ロ パテ ィ だけ を使 う 必要があ り ます。 PDF/A-1 のための定義済
み XMP ス キーマの中のすべてのプ ロ パテ ィ の完全な一覧は、 PDF/A 技術セ ン タ ーか ら 得
る こ と がで き ます。
表 10.13 PDF/A-1 のための定義済み XMP スキーマ
スキーマの名称 と 説明
(詳 し く は XMP 2004 を参照)
名前空間 URI
望ま し い
名前空間接頭辞
Adobe PDF スキーマ
http://ns.adobe.com/pdf/1.3/
pdf
1. www.aiim.org/documents/standards/xmpspecification.pdf 参照
264
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 10.13 PDF/A-1 のための定義済み XMP スキーマ
スキーマの名称 と 説明
(詳 し く は XMP 2004 を参照)
名前空間 URI
望ま し い
名前空間接頭辞
Dublin Core スキーマ
http://purl.org/dc/elements/1.1/
dc
EXIF 独自プ ロパテ ィ 用 EXIF スキーマ
http://ns.adobe.com/exif/1.0/
exif
TIFF プ ロパテ ィ 用 EXIF スキーマ
http://ns.adobe.com/tiff/1.0/
tiff
Photoshop スキーマ
http://ns.adobe.com/photoshop/1.0/
photoshop
XMP 基本ジ ョ ブ チケ ッ ト スキーマ
http://ns.adobe.com/xap/1.0/bj
xmpBJ
XMP 基本スキーマ
http://ns.adobe.com/xap/1.0/
xmp
XMP メ デ ィ ア管理スキーマ
http://ns.adobe.com/xap/1.0/mm/
xmpMM
XMP ページ ド テキス ト スキーマ
http://ns.adobe.com/xap/1.0/t/pg/
xmpTPg
XMP 権利管理スキーマ
http://ns.adobe.com/xap/1.0/rights/
xmpRights
XMP 拡張スキーマ 自分が必要 と す る メ タ デー タ が、 定義済みス キーマに含ま れていな
い と き は、XMP 拡張ス キーマ を定義す る こ と も で き ます。PDF/A-1 では、 カ ス タ ム ス キー
マ を PDF/A 文書に埋め込む際に用いな ければな ら ない拡張方式を記述 し てい ま す。 表
10.14 に、 1 個ない し 複数の拡張ス キーマ を記述す る ために用いなければな ら ない ス キー
マ を ま と め、 あわせてその名前空間 URI と 、 必要な名前空間接頭辞を示 し ます。 名前空間
接頭辞の、 必要な、 と い う 点に注意 し て く だ さ い (定義済みス キーマで示 し た名前空間接
頭辞 と は異な り 、 単に こ う つけ る のが望ま し い と い う だけではな く 、 それぞれ こ の通 り に
つけ る 必要があ り ます)。
PDF/A-1 で使 う XMP 拡張ス キーマ を ど う 構築す る か と い う 詳細は、 こ の説明書の対
象範囲を超え てい ます。 詳 し い方法説明は、 PDF/A 技術セ ン タ ーか ら 得 ら れます。
XMP 文書 メ タ デー タ パ ッ ケージは、 begin_document( ) か end_document( ) ま たはその
両方の metadata オプシ ョ ンに与え る こ と がで き ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プル と XMP 作成例が ク ッ ク ブ ッ クの pdfa/pdfa_extension_schema・pdfa/
pdfa_extension_schema_with_type ト ピ ッ ク にあ り ます。
表 10.14 PDF/A-1 拡張スキーマ コ ン テナスキーマ と 補助スキーマ
スキーマの名称 と 説明
名前空間 URI1
必要な
名前空間接頭辞
PDF/A 拡張スキーマ コ ン テナスキーマ :
あ ら ゆる拡張スキーマ記述を埋め込むた
めの コ ン テナ
http://www.aiim.org/pdfa/ns/extension/
pdfaExtension
PDF/A スキーマ値種別 : 1 個の拡張ス
キーマが任意個数のプ ロパテ ィ を持つの
を記述
http://www.aiim.org/pdfa/ns/schema#
pdfaSchema
PDF/A プ ロパテ ィ 値種別 : 1 個のプ ロパ
テ ィ を記述
http://www.aiim.org/pdfa/ns/property#
pdfaProperty
PDF/A ValueType 値種別 : 拡張スキーマ
プ ロパテ ィ で用いる カ ス タ ム値種別を記
述。 XMP 2004 の種別一覧にない種別を
使いたい と き にのみ必要 と な り ます。
http://www.aiim.org/pdfa/ns/type#
pdfaType
10.4 PDF/A によ る アー カ イ ビ ング
265
表 10.14 PDF/A-1 拡張スキーマ コ ン テナスキーマ と 補助スキーマ
スキーマの名称 と 説明
名前空間 URI1
PDF/A フ ィ ール ド 種別スキーマ : 種別が http://www.aiim.org/pdfa/ns/field#
構造化 さ れている場合に、 その中の
フ ィ ール ド を記述
必要な
名前空間接頭辞
pdfaField
1. 名前空間 URI は、 ISO 19005-1 では誤 っ て列挙 さ れてお り 、 技術正誤表 1 で修正 さ れま し た。
10.4.6 PDF/A の検証
PDF/A 検証についてのバヴ ァ リ ア報告 PDFlib GmbH では、 現行の各種 PDF/A 検証ツー
ルの包括的な試験を行い ま し た。 多数の非準拠 ・ 準拠 PDF/A 文書を各種検証ツールで処
理 し 、 その結果を規格に照 ら し てチ ェ ッ ク し ま し た。 検証報告 と 使用 し た試験文書群は下
記の場所で得 ら れます :
www.pdflib.com/developer/pdfa/validation-report
Acrobat 9.1 Acrobat 9.1 内のプ リ フ ラ イ ト ツールは、 ISO 19005-1 規格 ・ 技術正誤表 1、
お よ び PDF/A 技術セ ン タ ーに よ っ て発行 さ れた関連 TechNote 群に基づい て い ま す。
Acrobat 9.0 にあ っ たい く つかの問題が修正 さ れてい ます。 PDF/A 文書を Acrobat で検証
し たい場合は、 Acrobat 9.1 以上を強 く 推奨 し ます。
Acrobat 9.0 Acrobat 9.0 のプ リ フ ラ イ ト ツールは、 PDF/A-1a と PDF/A-1b のための検
証プ ロ フ ァ イ ルを内蔵 し てお り 、 技術正誤表 1 を含む ISO 規格に従っ て検証を行い ます。
い く つかの場合にはプ リ フ ラ イ ト が不適切な警告を発す る こ と を私達は確認済みですが、
こ れ ら の問題の多 く は PDFlib の文書には影響を与え ません。
注 これよ り 古いバージ ョ ン Acrobat は PDF/A の検証には利用するべき ではあ り ません。
10.4.7 PDF/A 文書 を Acrobat で表示
Acrobat 8/9 では、 特別な PDF/A 表示モー ド を提供 し てお り 、 こ れは 「編集」 → 「環境設
定」 → 「一般 ...」 → 「文書」 → 「PDF/A モ ー ド で 文書 を 表示」 で設定で き ま す。 な お、
Acrobat 9 の PDF/A 表示モー ド ではい く つかの機能が異な る 動作を し ます :
> Acrobat 9.0 では、PDF/A モー ド では し お り が機能 し ません。 こ れは Acrobat 9.1 では修
正 さ れてい ます。
> リ ン ク は機能 し ません。 Acrobat は、 マ ウ ス ポ イ ン タ が リ ン ク 領域内にあ る 時は、 リ ン
ク タ ーゲ ッ ト (Web リ ン ク の場合は URL) を表示 し ます。 リ ン ク はあ え て無効に さ れ
てい ますので、 文書を PDF/A モー ド でな く 表示 し てい る と き には機能 し ます。
266
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
10.5 タ グ付 き PDF
タ グ付 き PDF と はあ る 種の改良 PDF であ り 、 PDF ビ ュ ーアで追加の機能を利用す る こ と
がで き ます。 た と えばア ク セシ ビ リ テ ィ 対応や、 テ キ ス ト の折 り 返 し 表示、 正 し いテ キ ス
ト 抽出、 他の文書形式への変換な ど です。 他の文書形式 と し ては RTF ・ XML な ど が選べ
ます。
PDFlib は タ グ付 き PDF の生成に対応 し てい ます。 ただ し 、 タ グ付 き PDF を作成す る
には、 ク ラ イ ア ン ト がその文書の内部構造に関 し て情報を提供 し 、 PDF 出力生成の際にあ
る 種の規則に従 う 必要があ り ます。
注 PDFlib は、 カ ス タ ムの種類の構造要素には対応 し ていません (すなわち、 PDF によ っ て定
義 さ れてい る標準の種類の構造だけが使え ます) 。 し たがっ て、 ロールマ ッ プに も未対応
です。 また、 構造要素属性に も対応 し ていません。
ク ッ ク ブ ッ ク タ グ付き PDF の諸側面に関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの document_
interchange カ テ ゴ リ にあ り ます。
10.5.1 PDFlib で タ グ付 き PDF を生成
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの document_interchange/starter_tagged ト ピ ッ ク に
あ り ます。
必要な操作 タ グ付 き PDF 出力の生成に必要なすべての操作を表 10.15 に挙げます。 タ
グ付 き PDF モー ド において、 必要な関数を 1 つで も 呼び出 さ なか っ た場合は例外が発生
し ます。
表 10.15 タ グ付き PDF 生成のために行 う べき操作一覧
項目
タ グ付き PDF 互換のために必要な PDFlib 関数 ・ オプ シ ョ ン
タ グ付きPDF出力
begin_document( ) の tagged オプ シ ョ ン を true に設定する必要があ り ます。
文書言語
begin_document( ) の lang オプ シ ョ ン を指定 し て文書の自然言語を指定するべき です。 は じ
めは文書全体に対 し て設定するべき ですが、 後から任意の構造レ ベルの項目についてそれ
ぞれ上書き設定する こ と も 可能です。
構造情報
構造情報 と アーテ ィ フ ァ ク ト はそのよ う に識別指定する必要があ り ます。 内容生成のため
の API 関数はいずれも begin_item( ) と end_item( ) と で挟んでい く こ と にな り ます。
Unicode マ ッ ピ ン グ タ グ付 き PDF 内のすべてのテ キ ス ト 内容は、 その文書が必ずア ク
セシブル (た と えば ソ フ ト ウ ェ アで読み上げ可能) にな る よ う に、 正 し い Unicode マ ッ ピ
ン グ を持つ必要があ り ます。PDFlib はほ と ん どすべての フ ォ ン ト / エン コ ーデ ィ ン グの組
み合わせに対 し て内部的に Unicode マ ッ ピ ン グ を生成 し ますので、 PDF 出力は技術的に
Unicode マ ッ ピ ン グ を持ち ます。 し か し 、 い く つかの記号に対 し て生成 さ れ る PUA 値は、
再生可能なテ キ ス ト にはな り ません。 テ キ ス ト の検索性を改善する ために、 内容の代替テ
キ ス ト を、 begin_item( ) で ActualText ま たは Alt オプシ ョ ン で与え る こ と を推奨 し ます。
タ グ な し PDF モー ド では、 こ れは begin_mc( ) の ActualText オプシ ョ ン で実現で き ます。
ページ内容の順序 ページ内容を定義す る テ キ ス ト ・ グ ラ フ ィ ッ ク ・ 画像オペ レ ー タ 群
の順序の こ と を内容ス ト リ ーム順序 と いい ます。 こ れに対 し 、 論理構造ツ リ ーに よ っ て定
義 さ れ る 内容順序の こ と を論理順序 と いい ます。 タ グ付 き PDF の生成の際には、 ク ラ イ
ア ン ト は内容順序に関 し て あ る 種の規則に従 う こ と が必要にな り ます。
10.5 タ グ付き PDF
267
自然でかつ推奨す る 方式は、1 つの構造要素の中の各部分を順番に連続的にすべて生成
し て、 その後に次の要素へ と 次々進んでい く と い う や り 方です。 技術用語でいえば、 構造
ツ リ ーを 1 回の深 さ 優先巡回だけで作成 し よ う と い う こ と です。
も う 1 つの方式は、 避け る べ き 方式ではあ り ますが、 最初の要素を一部分だけ出力 し 、
次の要素へ移っ て ま た一部分だけ出力 し た後、 最初の要素へ戻 り 、 等 と い う や り 方です。
こ の方式では構造ツ リ ーは複数の巡回で作成 さ れ、その一回一回の巡回では 1 つの要素の
一部分 し か生成 さ れません。
PDF に よ る ページ取 り 込み タ グ付 き PDF 文書や、 その他構造情報を含んだ PDF 文書の
中のページは タ グ付 き PDF モー ド では取 り 込む こ と がで き ません。 なぜな ら 取 り 込まれ
た文書構造が、 生成 さ れ る 文書構造 と ぶつかっ て し ま う ためです。
逆に、 構造のない文書の中のページは取 り 込む こ と がで き ます。 ただ し そ う し たペー
ジは、 適切な ActualText で タ グ付け さ れていない限 り 、 Acrobat のア ク セシ ビ リ テ ィ 機能
では 「あ る が ま ま」 に扱われます。
アーテ ィ フ ァ ク ト 著者の書い た も と の内容以外の グ ラ フ ィ ッ ク やテ キ ス ト の こ と を
アーテ ィ フ ァ ク ト と いい ます。 アーテ ィ フ ァ ク ト は Artifact 擬似 タ グ を用いてその よ う に
識別指定す る 必要があ り 、 ま た、 以下のいずれかの種類に分類する 必要があ り ます。
> ページネーシ ョ ン : 柱や ノ ンブルの よ う な機能。
> レ イ アウ ト : 罫線、 表の影の よ う な組版 ・ デザ イ ン要素。
> ページ : ト ン ボやカ ラ ーバーの よ う な印刷工程補助。
アーテ ィ フ ァ ク ト の識別指定は厳密に必須ではあ り ませんが、テ キ ス ト の折 り 返 し やア ク
セシ ビ リ テ ィ を う ま く 動作 さ せ る には強 く 推奨 し ます。
イ ン ラ イ ン ア イ テム PDF は ブ ロ ッ ク レ ベル構造要素 (BLSE = block-level structure
element) と イ ン ラ イ ン レベル構造要素 (ILSE = inline-level structure element) を定義 し ま
す (厳密な定義は PDFlib API リ フ ァ レ ン ス参照)。 BLSE は他の BLSE を含む こ と も 内容本
体を含む こ と も で き ますが、 ILSE は必ず内容を直接含みます。 こ の他に、 PDFlib では以
下の違いがあ り ます。
表 10.16 通常ア イ テム と イ ン ラ イ ン ア イ テム
通常ア イ テム
イ ン ラ イ ン ア イ テム
対象
すべてのグループ化要素 と すべての ILSE と 非構造 タ
BLSE
グ (擬似 タ グ)
通常かイ ン ラ イ ンかの設定を換え られる
×
ASpan ア イ テムだけ可
文書の構造ツ リ ーの一部であ る
○
×
複数ページにわた る こ と がで き る
○
×
他のア イ テムで中断で き る
○
×
一時停止 ・ ア ク テ ィ ブ化で き る
○
×
任意の深 さ に入れ子で き る
○
他のイ ン ラ イ ン ア イ テムに
よ る入れ子のみ
ASpan ア イ テ ム を通常にす る か イ ン ラ イ ンにす る かは ク ラ イ ア ン ト 側で begin_item( ) の
inline オプシ ョ ンで制御 し ます。 た と えば段落が複数ページにわた っ ていた り 複数言語を
含 ん で い た り す る と き な ど は、 そ の 段 落 に 対 す る ア ク セ シ ビ リ テ ィ ス パ ン を 通 常
(inline=false) に設定す る こ と を推奨 し ます。 ま たは、 ア イ テ ム を い っ たん閉 じ て、 次の
268
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
ページで ま た新 し いア イ テ ム を始めて も よ いで し ょ う 。 イ ン ラ イ ン ア イ テ ムは、 それを開
いたページ上で閉 じ なければな り ません。
推奨操作 タ グ付 き PDF 出力を生成す る 際に必須ではないが推奨 さ れ る すべての操作を
表 10.17 に挙げます。 こ れ ら の機能は厳密に必須ではあ り ませんが、 生成 さ れ る タ グ付 き
PDF 出力の品質を向上 さ せますので、 推奨 し ます。
表 10.17 タ グ付き PDF 生成のために推奨 さ れる操作一覧
項目
タ グ付き PDF 互換のために推奨 さ れる PDFlib 関数 ・ オプ シ ョ ン
ハイ フ ネーシ ョ ン
ワー ド ブ レー ク (単語を行末で二分する) をハー ド ハイ フ ン (U+002D) で な く ソ フ ト ハイ
フ ン (U+00A0) で表現 し ます。
単語間区切 り
単語の間を スペース (U+0020) で区切 り ます。 位置合わせ上厳密に必須でない場合に も、
そ う する こ と 。 autospace パラ メ タ を使 う と 、 show 関数群の う ちのいずれかを呼び出すた
びにスペースが自動生成 さ れます。
アーテ ィ フ ァ ク ト
純粋な内容をページ アーテ ィ フ ァ ク ト か ら区別する ために、 begin_item( ) で tag=Artifact を
指定 し て アーテ ィ フ ァ ク ト を そのよ う に識別指定 し ます。
Type 3 フ ォ ン ト のプ タ グ付き PDF 文書で使われている Type 3 フ ォ ン ト についてはすべて、 begin_font( ) で
familyname ・ stretch ・ weight オプ シ ョ ンに適切な値を与え る必要があ り ます。
ロパテ ィ
インタ ラクテ ィ ブ
要素
リ ン ク な どのイ ン タ ラ ク テ ィ ブ要素は、 文書構造に組み込む必要があ り 、 かつ必要に応 じ
て、 代替テキス ト を与え る な ど し て ア ク セ シ ブルにする必要があ り ます。 イ ン タ ラ ク テ ィ
ブ要素の タ ブ順は、 begin/end_document( ) の taborder オプ シ ョ ン で指定で き ます (イ ン タ
ラ ク テ ィ ブ要素が文書構造に適切に組み込んである な ら、 こ れは必須ではあ り ません)。
10.5.2 直接テキス ト 出力 ・ テキス ト フ ロ ーに よ る タ グ付 き PDF の作成
最小限の タ グ付 き PDF の作成例 次の作成例 コ ー ド は非常にシ ンプルな タ グ付き PDF 文
書を作成す る も のです。 その構造ツ リ ーはただ 1 個の P 要素だけ を含んでい ます。 こ の
コ ー ド では autospace 機能を用いて、 テ キ ス ト 部分ど う し の間に自動的に スペース を生成
さ せてい ます。
if (p.begin_document("hello-tagged.pdf", "tagged=true") == -1)
throw new Exception("エラー:" + p.get_errmsg());
/* テキスト部分どうしの間にスペースを自動作成 */
p.set_parameter("autospace", "true");
/* 最初の構造要素を文書構造ルート(=0)の子として開く */
id = p.begin_item("P", "Title={Simple Paragraph}");
p.begin_page_ext(0, 0, "width=a4.width height=a4.height");
font = p.load_font("Helvetica-Bold", "unicode", "");
p.setfont(font, 24);
p.show_xy("Hello, Tagged PDF!", 50, 700);
p.continue_text("This PDF has a very simple");
p.continue_text("document structure.");
p.end_page_ext("");
p.end_item(id);
p.end_document("");
10.5 タ グ付き PDF
269
テキス ト フ ロ ーに よ る タ グ付 き PDF の生成 テ キ ス ト フ ロ ー機能 (191 ページ 「8.2 複数
行のテ キ ス ト フ ロ ー」 参照) は、 テ キ ス ト 組版のための さ ま ざ ま な強力な機能を提供 し ま
す。 そ こ ではテ キ ス ト の各部分は も はや ク ラ イ ア ン ト の制御下にはな く 、 PDFlib に よ っ て
自動的に組版 さ れ る ので、 テ キ ス ト フ ロ ーに よ る タ グ付き PDF の生成の際には以下の よ
う な特別な注意を払 う 必要があ り ます。
> テ キ ス ト フ ロ ーの中で構造要素を入れ る こ と はで き ませんが、1 つのテ キ ス ト フ ロ ーは
め込み枠の内容を ま る ご と 、 1 つの構造要素の中に入れ る こ と はで き ます。
> 1 つのテ キ ス ト フ ロ ーの中のすべての部分(あ る 1 つのテ キ ス ト フ ロ ーハン ド ルに よ る
fit_textflow( ) に対す る すべての呼び出 し ) は、 ただ 1 つの構造要素の中に入れなけれ
ばな り ません。
> 1 つのテ キ ス ト フ ロ ーの中の各部分は複数のページにわた る 可能性があ り 、その各ペー
ジには他の構造要素が含ま れ る 可能性があ る ので、 適切な親ア イ テ ム を選ぶ よ う 注意
を払 う 必要があ り ます (親パ ラ メ タ と し て -1 を用い る のは、 間違っ た親要素を指 し 示
し て し ま う か も し れないので、 避け る べ き です)。
> 範囲枠機能を使っ て テ キ ス ト フ ロ ー内に リ ン ク な ど の注釈を作成す る 場合は、 構造ツ
リ ー内におけ る 注釈の位置に対す る 制御を保つ こ と は困難です。
10.5.3 複雑な レ イ アウ ト におけ る ア イ テムのア ク テ ィ ブ化
上か ら 下へ素直に流れない複雑な レ イ ア ウ ト におけ る 構造情報の作成を容易にす る ため、
PDFlib はア イ テ ムのア ク テ ィ ブ化 と い う 機能に対応 し てい ます。 こ の機能を利用す る と 、
以前に作成 し た構造要素を ア ク テ ィ ブ化す る こ と がで き ます。 こ の機能は、 開発者が複数
の構造の枝を同時に並行 し て処理 し ていかな ければな ら ない よ う な状況において活用す
る こ と がで き ます。 その際、 それぞれの枝は複数のページにわた っ て も か ま い ません。 こ
の技法が役立つ典型的状況は以下の通 り です。
> 多段組のページ
> 本文の途中に挿入す る 内容。 要約や挿入 コ ラ ム な ど。
> 段組の途中に配置す る 表 ・ イ ラ ス ト 。
ア ク テ ィ ブ化機能を利用す る と 、論理構造の複数の枝ど う し の間を行っ た り 来た り す る こ
と がで き る よ う にな る ので、上記の よ う な状況でページ内容を生成す る こ と が容易にな り
ます。 こ れは、 それぞれの枝を 1 つずつ完了 さ せてい く よ り も ずっ と 効率的です。 ア ク
テ ィ ブ化機能の具体的な利用例 と し て、 図 10.1 に示すページ レ イ ア ウ ト を例に挙げて見
てみま し ょ う 。 こ のページ レ イ ア ウ ト には本文の段組が 2 つあ り 、 その途中に表が 1 つ
と 、 注釈 コ ラ ムの枠線 (背景が影) が 1 つあ っ て、 さ ら にヘ ッ ダ と フ ッ タ も ついてい ます。
ページ内容 を論理順序で生成 論理構造の観点か ら いえばページ内容は次の順序で作成
す る べ き です。 左の段組、 右の段組 (ページの右下部分)、 表、 コ ラ ム、 ヘ ッ ダ ・ フ ッ タ 。
次の擬似 コ ー ド は こ の順序を実装 し てい ます。
/* ページレイアウトを論理構造順序で作成 */
id_art = p.begin_item("Art", "Title=Article");
id_sect1 = p.begin_item("Sect", "Title={First Section}");
/* 1 左の段組の上の部分を作成 */
p.set_text_pos(x1_left, y1_left_top);
...
/* 2 左の段組の下の部分を作成 */
p.set_text_pos(x1_left, y1_left_bottom);
...
/* 3 右の段組の上の部分を作成 */
270
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 10.1
複雑なページ レ イ ア
ウ ト を論理構造順序
で作成 し た もの (左)
と 視覚順序で作成 し
た もの (右)。 右側で
は 1 番目の項に対 し て
ア イ テムのア ク テ ィ
ブ化を用いてから 4
と 6 の部分を続けて
いる。
7
1
1
2
6
5
5
3
2
8
3
4
4
8
6
7
p.set_text_pos(x1_right, y1_right_top);
...
p.end_item(id_sect1);
id_sect2 = p.begin_item("Sect", "Title={Second Section}");
/* 4 右の段組の下の部分を作成 */
p.set_text_pos(x2_right, y2_right);
...
/* 2番目の項は次ページへ続く可能性あり */
p.end_item(id_sect2);
String optlist = "Title=Table parent=" + id_art;
id_table = p.begin_item("Table", optlist);
/* 5 表の構造と内容を作成 */
p.set_text_pos(x_start_table, y_start_table);
...
p.end_item(id_table);
optlist = "Title=Insert parent=" + id_art;
id_insert = p.begin_item("P", optlist);
/* 6 挿入構造と内容を作成 */
p.set_text_pos(x_start_table, y_start_table);
...
p.end_item(id_insert);
id_artifact = p.begin_item("Artifact", "");
/* 7+8 ヘッダ・フッタを作成 */
p.set_text_pos(x_header, y_header);
...
p.set_text_pos(x_footer, y_footer);
...
p.end_item(id_artifact);
/* 記事は次のページへ続く可能性あり */
10.5 タ グ付き PDF
271
...
p.end_item(id_art);
ページ内容 を視覚順序で作成 「論理順序」 式では、 作成者はページ内容を必ず論理順序
で構築 し なければな り ません。 し か し 物に よ っ ては、 次の よ う な視覚順序で作成す る ほ う
が簡単な場合 も あ る で し ょ う 。 ヘ ッ ダ、 左の段組の上の部分、 表、 左の段組の下の部分、
コ ラ ム、 右の段組、 フ ッ タ 。 activate_item( ) を使えば、 こ の順序を次の よ う に実装す る こ
と がで き ます。
/* ページレイアウトを視覚順序で作成 */
id_header = p.begin_item("Artifact", "");
/* 1 ヘッダを作成 */
p.set_text_pos(x_header, y_header);
...
p.end_item(id_header);
id_art = p.begin_item("Art", "Title=Article");
id_sect1 = p.begin_item("Sect", "Title = {First Section}");
/* 2 左の段組の上の部分を作成 */
p.set_text_pos(x1_left, y1_left_top);
...
String optlist = "Title=Table parent=" + id_art;
id_table = p.begin_item("Table", optlist);
/* 3 表の構造と中身を作成 */
p.set_text_pos(x_start_table, y_start_table);
...
p.end_item(id_table);
/* 1番目の項のつづき */
p.activate_item(id_sect1);
/* 4 左の段組の下の部分を作成 */
p.set_text_pos(x1_left, y1_left_bottom);
...
optlist = "Title=Insert parent=" + id_art;
id_insert = p.begin_item("P", optlist);
/* 5 挿入構造と内容を作成 */
p.set_text_pos(x_start_table, y_start_table);
...
p.end_item(id_insert);
/* 1番目の項のさらにつづき */
p.activate_item(id_sect1);
/* 6 右の段組の上の部分を作成 */
p.set_text_pos(x1_right, y1_right_top);
...
p.end_item(id_sect1);
id_sect2 = p.begin_item("Sect", "Title={Second Section}");
/* 7 右の段組の下の部分を作成 */
p.set_text_pos(x2_right, y2_right);
...
/* 2番目の項は次ページへ続く可能性あり */
p.end_item(id_sect2);
272
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
id_footer = p.begin_item("Artifact", "");
/* 8 フッタを作成 */
p.set_text_pos(x_footer, y_footer);
...
p.end_item(id_footer);
/* 記事は次のページへ続く可能性あり */
...
p.end_item(id_art);
構造要素を こ の順序で処理す る と 、 本文 (1 段半にわた る ) は表 と コ ラ ム で二度中断 さ れ
ます。そのため、activate_item( ) を用いた本文のア ク テ ィ ブ化 も 二度行 う 必要があ り ます。
こ れ と 同 じ 技法は内容が複数ページにわた る 場合に も 使え ます。 た と えば、 ヘ ッ ダや
その他 コ ラ ム等を まず作成 し たのち、ページの本文要素をふたたびア ク テ ィ ブ化 さ せ る と
よ いで し ょ う 。
10.5.4 Acrobat におけ る タ グ付 き PDF の利用
こ の項では、 私達が タ グ付 き PDF 出力を Adobe Acrobat 8/9 で試験 し てい く なかで得た知
見を述べま す。 以下の知見は主 と し て、 Acrobat のバグや動作不安定に関す る も のです。
こ れ ら の知見は、 別記ない限 り Acrobat 8 ・ 9 にあ ては ま り ます。 回避法を見出 し た も のに
ついては併せて記載 し てい ます。
Acrobat の折 り 返 し 機能 Acrobat は タ グ付 き PDF 文書を折 り 返す こ と がで き ます。 すな
わち、 ページ内容を その時点の ウ ィ ン ド ウ サ イ ズに合わせて表示 さ せ る こ と が可能です。
タ グ付 き PDF を試験 し てい く なかで私達は Acrobat の折 り 返 し 機能に関 し て以下の よ う な
い く つかの知見を得ま し た。
> ページ上の内容の順序は、 望ま し い折 り 返 し の順序に従 う 必要があ り ます。
> 記号(非 Unicode フ ォ ン ト )は、Acrobat 8 では折 り 返 し を ク ラ ッ シ ュ さ せ る こ と があ り 、
Acrobat 9 では折 り 返 し を無効化す る こ と があ り ます。 こ のため、 そ う し た テ キ ス ト を
Figure 要素の中に入れ る こ と を推奨 し ます。
> BLSE は子要素 と 直接内容の両方を含む こ と がで き ます。 折 り 返 し 機能 (ア ク セシ ビ リ
テ ィ チ ェ ッ カ と 読み上げ も ) を正 し く 動作 さ せ る には、 最初の子要素の前に直接内容
を入れ る こ と を推奨 し ます。
子の種類が混在 し た (すなわち、 ページ内容シーケ ン ス と 非 イ ン ラ イ ン構造要素の両
方) 構造要素は、 リ フ ロ ー失敗の原因 と な る こ と があ り ますので、 避け る べ き です。
> 表 と イ ラ ス ト には BBox オプシ ョ ン を与え る 必要があ り ます。BBox は正確でなければな
り ません。ただ し 、表については左下隅だけが正確に設定 さ れていれば充分です。BBox
項目を与え る かわ り に、 グ ラ フ ィ ッ ク を P ・ H な ど の BLSE タ グの中に作成す る こ と も
で き ます。 し か し 、 折 り 返 し を有効に し た時にベ ク ト ルグ ラ フ ィ ッ ク が表示 さ れな く
な り ます。 ク ラ イ ア ン ト が BBox オプシ ョ ン を与えない (すなわち自動 BBox 生成に依
存す る ) 場合は、 セル枠線な ど のすべての表グ ラ フ ィ ッ ク はその表要素の外で描 く 必
要があ り ます。
> 表要素はその子要素 と し て表関連要素 (TR ・ TD ・ TH ・ THead ・ TBody な ど) だけ を含ま
なければな ら ず、それ以外の要素を一切含んではいけ ません。た と えば、表内で Caption
要素を用い る こ と は タ グ付 き PDF と し ては正 し い と し て も 、 折 り 返 し には問題を生 じ
ます。
> Private タ グの中の内容は他の形式へ書 き 出 さ れません。 し か し 折 り 返 し と 読み上げの
対象にはな る ので、Private タ グの中の イ ラ ス ト は代替テ キ ス ト を持つ必要があ り ます。
> topdownオプシ ョ ンで生成 し たPDF文書については折 り 返 し には問題があ る よ う です。
10.5 タ グ付き PDF
273
> 構造ア イ テ ム が複数の種類の子を混在 し て持つ こ と (すなわちページ内容 と 非 イ ン ラ
イ ン構造要素の両者混在) は避け る 必要があ り ます。 なぜな ら 、 それを避けない と 折
り 返 し が失敗す る こ と があ り ます。
> ア ク テ ィ ブ化 し た ア イ テ ム が内容だけ を含み、 子要素を含 ま ない場合には、 折 り 返 し
は失敗す る こ と があ り ます。 特にそのア イ テ ム が別のページでア ク テ ィ ブ化 さ れた場
合に顕著です。 こ の問題は、 ア ク テ ィ ブ化 し た ア イ テ ム を非 イ ン ラ イ ン Span タ グで
ラ ッ プす る こ と で避け る こ と がで き ます。
> Acrobat は、 フ ォーム フ ィ ール ド を持つページ を折 り 返 し で き ず、 その場合は警告が表
示 さ れます。
> Acrobat 9 は、 電子署名フ ィ ール ド を持つページ を折 り 返 し で き ず、 その場合は警告が
表示 さ れます。
> 折 り 返 し で問題があ る たび、 リ フ ロ ー機能は無効化 さ れ、 その メ ニ ュ ー項目は無効に
な り ます。
Acrobat のア ク セ シ ビ リ テ ィ チ ェ ッ カ Acrobat のア ク セシ ビ リ テ ィ チ ェ ッ カ を利用す る
と 、 ス ク リ ーン リ ーダの よ う な援護技術に対する タ グ付き PDF 文書の適合性を決定す る
こ と がで き ます。 い く つかの ヒ ン ト を挙げます。
> フ ォーム フ ィ ール ド を ア ク セシブルにす る には、 create_field( ) ・ create_fieldgroup( ) で
tooltip オプシ ョ ン を使い ます。
> ページに注釈があ る と 、 Acrobat は 「 タ ブ順が構造順 と 整合 し ない可能性があ る 」 と 表
示 し ます。
Acrobat に よ る他の形式への書 き出 し タ グ付 き PDF を利用する と 、PDF 文書を Acrobat
で XML や RTF な ど の形式で保存す る と き 、 結果が飛躍的に向上 し ます。
> 取 り 込んだPDFページがForm タ グ を持っ てい る 場合、ActualTextオプシ ョ ンで与え たテ
キ ス ト は Acrobat で他の形式へ書 き 出 さ れますが、 Alt タ グで与えた テ キ ス ト は無視 さ
れます。 し か し 、 読み上げ機能はど ち ら のオプシ ョ ンで も 動作 し ます。
> NonStruct タ グの内容は HTML 4.01 CSS 1.0 には書き 出 さ れません( し か し HTML 3.2 書
き 出 し には用い ら れます)。
> ILSE (た と えば Code ・ Quote ・ Reference) には代替テ キ ス ト を与え る 必要があ り ます。
Alt オプシ ョ ン を用いた場合、 読み上げ機能ではその与えた テ キ ス ト が読まれますが、
他の形式へ書 き 出 さ れ る のは実際の内容にな り ます。ActualText オプシ ョ ン を用いた場
合、 その与えたテ キ ス ト は読み上げ と 書 き 出 し の両方に用い ら れます。
Acrobat の読み上げ機能 タ グ付 き PDF は、 Acrobat の読み上げ機能を改善 し ます。
> Alt・ActualText を与え る 際にはその先頭に スペース を入れ る と 有用です。そ う し てお く
と 、読み上げ機能はテ キ ス ト を直前の文か ら 区別する こ と がで き ます。同 じ 理由で、末
尾に ピ リ オ ド キ ャ ラ ク タ 「.」 を入れ る の も 有用です。 そ う でない と 、 読み上げ機能は、
前の文の最後の単語 と 、 代替テ キ ス ト の最初の単語 と を、 つなげて読 も う と し て し ま
う でし ょ う 。
274
第 10 章 : PDF のバージ ョ ン と 規格 (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
11 PPS と PDFlib Block Plugin
PDFlib Personalization Server (PPS) は、 可変デー タ 処理のための、 テ ンプ レー ト を用いた
PDF ワ ー ク フ ロ ーに対応 し てい ます。 ブ ロ ッ ク と い う 概念を用いて、 取 り 込んだページ
に、 外部情報源か ら 引 き 出 し た任意量の 1 行ない し 複数行のテ キ ス ト ・ 画像 ・ PDF グ ラ
フ ィ ッ ク を入れ込む こ と がで き ます。 こ れを利用すれば、 PDF 文書のカ ス タ マ イ ズ を必要
と す る アプ リ ケーシ ョ ン を容易に実装で き ます。 た と えば :
> メ ールの連結
> ダ イ レ ク ト メ ールの宛名印刷
> 納品書 ・ 請求書等の発行
> 名刺の項目内容を各人ご と に変更
PDFlib Block Plugin を使えば、 ブ ロ ッ ク を対話的に作成 ・ 編集す る こ と がで き 、 フ ォーム
フ ィ ール ド 変換プ ラ グ イ ン を使えば、 既存の PDF フ ォーム フ ィ ール ド を PDFlib ブ ロ ッ ク
に変換す る こ と がで き ます。ブ ロ ッ ク へは、PPS を使っ て流 し 込みを行 う こ と がで き ます。
Block Plugin には、 内蔵バージ ョ ンの PPS が含まれてい ますので、 PPS に よ る ブ ロ ッ ク へ
の流 し 込み結果を Acrobat 上でプ レ ビ ュ ーす る こ と がで き ます。
注 ブ ロ ッ ク処理を利用するには PDFlib Personalization Server (PPS) が必要です。 PPS はすべ
ての PDFlib 商用パ ッ ケージに含まれていますが、PPS に対する ラ イ セ ン スキーを ご購入い
ただ く 必要があ り ます。 PDFlib や PDFlib+PDI のラ イ セ ン スキーだけではご利用いただけ
ません。 PDF テ ン プ レー ト に対話的にブ ロ ッ ク を作成するには Adobe Acrobat 用 PDFlib
Block Plugin が必要です。
ク ッ ク ブ ッ ク 可変デー タ と ブ ロ ッ ク に関する コ ー ド サン プルが PDFlib ク ッ ク ブ ッ クの blocks カ テ ゴ リ
にあ り ます。
11.1 PDFlib Block Plugin を イ ン ス ト ール
Block Plugin と 、 その姉妹製品であ る PDF フ ォーム フ ィ ール ド 変換プ ラ グ イ ンは、 以下の
バージ ョ ンの Acrobat で動作 し ます :
> Windows 版 Acrobat 7/8/9 Standard ・ Professional ・ Pro Extended
> Mac 版 Acrobat 8/9 Professional
こ れ ら のプ ラ グ イ ンは Acrobat Elements では動作せず、 Adobe Reader の ど のバージ ョ ンで
も 動作 し ません。
注 こ れら のプ ラ グ イ ンは、 複数の言語バージ ョ ンのユーザー イ ン タ フ ェ イ ス を含んでお り 、
可能な限 り 、 Acrobat ア プ リ ケーシ ョ ン と 同 じ イ ン タ フ ェ ース言語を自動的に用い る よ う
にな っ ています。 ネ イ テ ィ ブ な Acrobat の言語にプ ラ グ イ ンが対応 し ていない場合には、
かわ り に英語のユーザー イ ン タ フ ェ ースで起動 し ます。
Windows 版 Acrobat 7/8/9 に PDFlib Block Plugin を イ ン ス ト ール PDFlib Block Plugin
と PDF フ ォーム フ ィ ール ド 変換プ ラ グ イ ン を Acrobat に イ ン ス ト ールす る には、 プ ラ グ
イ ンの フ ァ イ ルを Acrobat のプ ラ グ イ ン フ ォ ルダのサブデ ィ レ ク ト リ に入れ る 必要があ り
ます。 こ れは、 プ ラ グ イ ンの イ ン ス ト ー ラ に よ っ て自動的に実行 さ れますが、 手作業で も
で き ます。 プ ラ グ イ ンの フ ァ イ ル名は Block.api と AcroFormConversion.api です。 プ ラ グ イ
ン フ ォ ルダの典型的な場所は下記の よ う にな り ます :
C:\Program Files\Adobe\Acrobat 9.0\Acrobat\plug_ins\PDFlib Block Plugin
11.1 PDFlib Block Plugin を イ ン ス ト ール
275
Mac 版 Acrobat 8/9 に PDFlib Block Plugin を イ ン ス ト ール Mac 版 Acrobat 8/9 では、プ
ラ グ イ ン フ ォ ルダは Finder 内で直接見 る こ と がで き ません。プ ラ グ イ ンの フ ァ イ ルを プ ラ
グ イ ン フ ォ ルダに ド ラ ッ グす る のではな く 、 以下の手順を踏みます (Acrobat が動作 し て
いない こ と を確認 し て く だ さ い) :
> デ ィ ス ク イ メ ージ を ダブル ク リ ッ ク し て、 プ ラ グ イ ン フ ァ イ ルを フ ォ ルダへ抽出 し ま
す。
> Acrobat のアプ リ ケーシ ョ ン ア イ コ ン を Finder 内で見つけ ます。通常は次の よ う な名前
の フ ォ ルダ内にあ り ます。
/Applications/Adobe Acrobat 9.0 Professional
> Acrobat のアプ リ ケーシ ョ ン ア イ コ ン を シ ン グル ク リ ッ ク し て 「フ ァ イル」 → 「情報を
見る」 を選択 し ます。
> 現れた ウ ィ ン ド ウ で 「プ ラ グ イ ン」 の横の三角形を ク リ ッ ク し ます。
> 「追加 ...」 を ク リ ッ ク し 、最初の手順で作成 さ れた フ ォ ルダか ら PDFlib Block Plugin フ ォ
ルダ を選択 し ます。 ただ し イ ン ス ト ール後、 こ の フ ォ ルダはプ ラ グ イ ン一覧にす ぐ に
は現れず、 次に情報 ウ ィ ン ド ウ を開いた時には じ めて表示 さ れます。
注 これ らのプ ラ グ イ ンはユニバーサルバイ ナ リ と し て頒布 さ れていますので、 Intel シ ス テ
ムで も PPC シ ス テムで も使え ます。
ト ラ ブルシ ュ ーテ ィ ン グ PDFlib Block Plugin が動作 し ない よ う に見 ら れ る 場合は、 以下
の点を確認 し て く だ さ い :
> 「編集」 → 「環境設定」 (→ 「一般 ...」) → 「一般」 で 「承認済みプ ラ グ イ ンのみ」 チ ェ ッ
ク ボ ッ ク ス がオ フ にな っ てい る こ と を確認 し て く だ さ い。Acrobat が承認済みモー ド で
動作 し てい る と 、 プ ラ グ イ ンは ロ ー ド さ れません。
> Adobe Designerに よ っ て作成 さ れた PDF フ ォームは、Block Pluginの適切な動作を妨げ る
こ と があ り ます。 他の Acrobat のプ ラ グ イ ンの動作について も 同様です。 なぜな ら こ
う し た フ ォ ームは、 PDF の内部セ キ ュ リ テ ィ モデル と 衝突す る ためです。 ですので、
Designer の静的な PDF フ ォームは利用せずに、動的な PDF フ ォームだけ を Block Plugin
への入力 と し て用い る こ と を推奨 し ます。
276
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
11.2 PDFlib ブ ロ ッ ク の概念あ ら ま し
11.2.1 文書デザ イ ン と プ ロ グ ラ ム コ ー ド と の分離
PDFlib のデー タ ブ ロ ッ ク を利用す る と 、 取 り 込んだページ上に、 可変のテ キ ス ト や画像や
グ ラ フ ィ ッ ク を簡単に配置で き ます。 単純な PDF ページ と 違っ て、 デー タ ブ ロ ッ ク を含
むページは、 後でサーバサ イ ド で行われ る べ き 処理についての情報を内部に持っ てい ま
す。 PDFlib ブ ロ ッ ク の概念は、 以下の 2 種類の作業を完全に分離する も のです :
> デザ イ ナーはページ レ イ ア ウ ト を作成 し 、 可変ページ構成要素の位置を指定す る と と
も に、 その文字サ イ ズ ・ 色 ・ 画像縮尺 と い っ たプ ロ パテ ィ も 指定 し ま す。 レ イ ア ウ ト
は PDF 文書 と し て作成 し 、 その後デザ イ ナーは、 Acrobat 用 PDFlib Block Plugin を使っ
て、 可変デー タ ブ ロ ッ ク と そのそれぞれのプ ロ パテ ィ を指定 し ます。
> プ ロ グ ラ マーは、取 り 込まれ る PDF ページ上の PDFlib ブ ロ ッ ク に含まれ る 情報を、デー
タ ベー ス の フ ィ ール ド と い っ た動的な情報 と 紐づけ る コ ー ド を 書 き ま す。 プ ロ グ ラ
マーは、 ブ ロ ッ ク の詳細については何 も 知 ら な く て よ く (名前を含むのか ZIP コ ー ド
を含むのか、 ページ上の正確な位置、 書式な ど)、 そのため、 ど の よ う な レ イ ア ウ ト 変
更か ら も 独立でい ら れ ます。 ブ ロ ッ ク に関連す る 詳細についてはすべて、 フ ァ イ ル内
のブ ロ ッ ク プ ロ パテ ィ に基づいて PPS の側で処理 し ます。
言いかえれば、 プ ロ グ ラ マーに よ っ て書かれ る コ ー ド は 「デー タ 非依存」 です。 すなわち
それは汎用であ り 、 ブ ロ ッ ク のいかな る 特性に も 依存 し ません。 た と えばデザ イ ナーは、
手紙の宛先を入れ る ブ ロ ッ ク をページ上の別の場所へ移動 さ せ る か も し れません し 、あ る
いは、 文字サ イ ズ を変え る か も し れません。 一般的なブ ロ ッ ク 処理 コ ー ド に変更を加え る
必要はな く 、 デザ イ ナーがブ ロ ッ ク プ ロ パテ ィ を Acrobat プ ラ グ イ ン で変更 し て ラ ス ト
ネームのかわ り に フ ァ ース ト ネーム を用い る よ う に し さ えすれば、正 し い出力が生成 さ れ
ます。
中間ス テ ッ プ と し て、ブ ロ ッ ク への流 し 込みは Acrobat でプ レ ビ ュ ーで き ますので、開
発 と 試験サ イ ク ルを迅速化す る こ と が可能です。 ブ ロ ッ ク プ レ ビ ュ ーには、 ブ ロ ッ ク の定
義内で指定 さ れたデフ ォ ル ト デー タ (文字列や画像フ ァ イ ル名等) が用い ら れます。
11.2.2 ブ ロ ッ ク プ ロパテ ィ
ブ ロ ッ ク の動作はブ ロ ッ ク プ ロ パテ ィ で制御す る こ と がで き ま す。 プ ロ パテ ィ は Block
Plugin でブ ロ ッ ク に割 り 当て ます。
標準ブ ロ ッ ク プ ロパテ ィ ブ ロ ッ ク はページ上の矩形 と し て定義 さ れ、 名前 ・ 種類 ・ そ
の他自由なプ ロ パテ ィ 群を割 り 当て ら れます。こ う し たプ ロ パテ ィ は後で PPS に よ っ て処
理 さ れ ま す。 名前は、 ブ ロ ッ ク を 識別す る 任意の文字列で あ り 、 た と え ば firstname ・
lastname ・ zipcode の よ う に名づけ る こ と がで き ます。 PPS では、 さ ま ざ ま な種類のブ ロ ッ
ク を使 う こ と がで き ます :
> テキス ト 行ブ ロ ッ ク は、 1 行のテ キ ス ト デー タ を持ち ます。 こ のデー タ は、 PPS のテ キ
ス ト 行 メ ソ ッ ド で処理 さ れます。
> テキス ト フ ローブ ロ ッ ク は、1 行ない し 複数行のテ キ ス ト デー タ を持ち ます。複数行の
テ キ ス ト は PPS のテ キ ス ト フ ロ ーフ ォーマ ッ タ に よ っ て組版 さ れます。 複数のテ キ ス
ト フ ロ ーブ ロ ッ ク を連結 し て、 前のブ ロ ッ ク か ら あふれた テ キ ス ト を次のブ ロ ッ ク に
入れ る こ と も 可能です (295 ページ 「 テ キ ス ト フ ロ ーブ ロ ッ ク を連結」 参照)。
> 画像ブ ロ ッ ク は、ラ ス タ 画像を持ち ます。こ れは、DTP アプ リ ケーシ ョ ンで TIFF や JPEG
の フ ァ イ ルを貼 り 付け る の と 似てい ます。
> PDF ブ ロ ッ ク は、他の PDF文書のページか ら 取 り 込んだ任意の PDF グ ラ フ ィ ッ ク を持ち
ます。 こ れは、 DTP アプ リ ケーシ ョ ンで PDF ページ を貼 り 付け る の と 似てい ます。
11.2 PDFlib ブ ロ ッ クの概念あ ら ま し
277
ブ ロ ッ ク は、 その種類に よ っ て異な る さ ま ざ ま な標準プ ロ パテ ィ を持っ てい ます。 プ ロ パ
テ ィ は、 Block Plugin で追加 ・ 変更す る こ と がで き ます (283 ページ 「11.3.2 ブ ロ ッ ク プ ロ
パテ ィ を編集」 参照)。 標準ブ ロ ッ ク プ ロ パテ ィ の全一覧が 298 ページ 「11.6 ブ ロ ッ ク の
プ ロ パテ ィ 」 にあ り ます。 た と えば、 テ キ ス ト ブ ロ ッ ク ではテ キ ス ト の フ ォ ン ト やサ イ ズ
を指定す る こ と がで き 、 画像ブ ロ ッ ク や PDF ブ ロ ッ ク では拡縮倍率や回転を指定す る こ
と がで き ます。 PPS はブ ロ ッ ク の種類ご と に、 それを処理す る ための専用の関数を提供 し
てい ます (fill_textblock( ) 等)。 こ う し た関数は、 取 り 込まれた PDF ページの中でブ ロ ッ
ク を名前で検索 し 、 そのプ ロ パテ ィ を分析 し て、 ク ラ イ ア ン ト の与えたデー タ (一行テ キ
ス ト ・ 複数行テ キ ス ト ・ ラ ス タ 画像 ・ PDF ページのいずれか) を、 新 し いページ上に、 指
定 さ れたブ ロ ッ ク プ ロ パテ ィ に従っ て配置 し ます。 プ ロ グ ラ マーは、 ブ ロ ッ ク 流 し 込み関
数の対応す る オプシ ョ ン を指定す る こ と に よ っ て、ブ ロ ッ ク プ ロ パテ ィ を オーバ ラ イ ド す
る こ と も で き ます。
デ フ ォ ル ト 内容に関す る プ ロパテ ィ 特殊 な ブ ロ ッ ク プ ロ パ テ ィ を 定義 し て、 そ の ブ
ロ ッ ク のデフ ォ ル ト 内容を持たせ る こ と も で き ます。 こ のデフ ォ ル ト 内容は、 ブ ロ ッ ク 流
し 込み関数に可変デー タ が与え ら れなかっ た と き や、あ る いはブ ロ ッ ク 内容が次回の印刷
実行時には変わ り う る けれど も 現時点では不変であ る よ う な と き に、そのブ ロ ッ ク に配置
さ れます。
デフ ォ ル ト プ ロ パテ ィ は、 Block Plugin のプ レ ビ ュ ー機能で も 用い ら れます (290 ペー
ジ 「11.4 Acrobat でブ ロ ッ ク を プ レ ビ ュ ー」 参照)。
カ ス タ ムブ ロ ッ ク プ ロパテ ィ 標準ブ ロ ッ ク プ ロ パ テ ィ を 利用す る こ と に よ り 、 可変
デー タ 処理ア プ リ ケーシ ョ ン を手軽に実装す る こ と がで き ま すが、 こ う し たプ ロ パテ ィ
は、 PPS の内部的に既知で自動処理可能な も のに限 ら れて し ま い ます。 よ り 高い柔軟性を
与え る ために、 デザ イ ナーは、 カ ス タ ムプ ロ パテ ィ を ブ ロ ッ ク に割 り 当て る こ と も で き ま
す。 カ ス タ ムプ ロ パテ ィ を利用すれば、 ブ ロ ッ ク の概念を拡張 し て、 よ り 高度な可変デー
タ 処理アプ リ ケーシ ョ ンの要請に応え る こ と が可能です。
カ ス タ ムプ ロ パテ ィ に関 し てはいかな る 規則 も 存在 し ません。 なぜな ら PPS はカ ス タ
ムプ ロ パテ ィ に対 し てはいかな る 処理 も 行わないか ら です。 PPS はただ、 カ ス タ ムプ ロ パ
テ ィ を ク ラ イ ア ン ト が利用で き る よ う にす る だけです。 ク ラ イ ア ン ト コ ー ド は、 カ ス タ ム
プ ロ パテ ィ を取得 し 、 適切に処理す る こ と がで き ます。 ブ ロ ッ ク のカ ス タ ムプ ロ パテ ィ に
基づいて、アプ リ ケーシ ョ ンが レ イ ア ウ ト 関連やデー タ 抽出関連の決定を行え る よ う にす
る こ と も 可能です。 た と えば、 科学アプ リ ケーシ ョ ンのためのカ ス タ ムプ ロ パテ ィ であれ
ば、数値出力の桁数を指定す る こ と も で き る で し ょ う し 、あ る いは、デー タ ベース の フ ィ ー
ル ド 名を カ ス タ ムブ ロ ッ ク プ ロ パテ ィ と し て定義 し ておいて、そのブ ロ ッ ク のためのデー
タ 抽出に用い る こ と も で き る で し ょ う 。
11.2.3 PDF の フ ォ ーム フ ィ ール ド を利用 し ない理由は ?
経験あ る Acrobat ユーザーな ら ば、なぜ我々は新たにブ ロ ッ ク と い う 概念を導入 し たのか、
ど う し て PDF にすでにあ る フ ォーム フ ィ ール ド の し く みを活用 し ないのか、 疑問を抱か
れ る か も し れません。 そ も そ も の違いは、 PDF の フ ォーム フ ィ ール ド は対話的に記入 さ れ
る こ と を主眼 と し て作 ら れてい る のに対 し て、PDFlib のブ ロ ッ ク は自動的に流 し 込まれ る
こ と を目的 と し てい る 点です。対話的記入 と 自動流 し 込みの両方を必要 と す る アプ リ ケー
シ ョ ン の場合であれば、 フ ォ ーム フ ィ ール ド 変換プ ラ グ イ ン を用いて、 PDF フ ォ ーム と
PDFlib ブ ロ ッ ク を併用す る こ と も 可能です (286 ページ 「11.3.4 PDF フ ォーム フ ィ ール ド
を PDFlib ブ ロ ッ ク に変換」 参照)。
両概念の間には類似点 も 多 く あ り ますが、 PDFlib ブ ロ ッ ク には PDF フ ォーム フ ィ ール
ド と 比較 し て表 11.1 に示す よ う ない く つかの利点があ り ます。
278
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 11.1 PDF フ ォ ーム フ ィ ール ド と PDFlib ブ ロ ッ クの比較
機能
PDF フ ォ ーム フ ィ ール ド
PDFlib ブ ロ ッ ク
設計の趣旨
対話的利用
自動流 し 込み
文字組版機能 (フ ォ ン ト 指定 ・ 文 −
字サイ ズ指定よ り も高度な)
カ ーニ ング ・ 単語間隔 ・ 字間 ・ 下線 / 上線 / 取
り消し線
OpenType レ イ アウ ト 機能
−
何ダース も の OpenType レ イ アウ ト 機能 (合字 ・
スウ ォ ッ シ ュ文字 ・ オール ド ス タ イル数字等)
複雑用字系への対応
制約あ り
シ ェ ーピ ン グ ・ 双方向テキス ト (ア ラ ビ ア文
字 ・ デーヴ ァ ナーガ リ ー等)
フ ォ ン ト 制御
フ ォ ン ト 埋め込み
フ ォ ン ト 埋め込み ・ サブ セ ッ ト 化 ・ エ ン コ ー
デ ィ ング
テキス ト 組版制御
左 ・ 中央 ・ 右揃え
左 ・ 中央 ・ 右 ・ 両端揃え。 各種組版アルゴ リ ズ
ム ・ 制御。 イ ン ラ イ ン オプ シ ョ ン を用いて テキ
ス ト の見映え を制御可能
テキス ト の途中で フ ォ ン ト その他 −
のテキス ト 属性を変え ら れる
○
追加結果が PDF のページ記述に
組み込まれる
−
○
ユーザーが追加フ ィ ール ド の内容 ○
を編集可能
×
プ ロパテ ィ の拡張セ ッ ト
−
○ (カ ス タ ムブ ロ ッ ク プ ロパテ ィ )
画像 フ ァ イルを流 し 込める
−
BMP ・ CCITT ・ GIF ・ PNG ・ JPEG ・ JBIG2 ・
JPEG 2000 ・ TIFF
カ ラ ー対応
RGB
グ レースケール ・ RGB ・ CMYK ・ Lab ・ スポ ッ ト
カ ラ ー (HKS ・ Pantone スポ ッ ト カ ラ ーが Block
Plugin に内蔵)
PDF/X ・ PDF/A
PDF/X : ×
○ (ブ ロ ッ ク コ ン テナ も 追加結果も)
PDF/A : 制約あ り
グ ラ フ ィ ッ クやテキス ト のプ ロパ −
テ ィ を流 し 込み時に上書き可能
○
透過内容
−
○
テキス ト ブ ロ ッ ク 群を連結可能
−
○
11.2 PDFlib ブ ロ ッ クの概念あ ら ま し
279
11.3 PDFlib Block Plugin で ブ ロ ッ ク を編集
11.3.1 ブ ロ ッ ク を作成
ブ ロ ッ ク ツ ール を ア ク テ ィ ブ にす る Block Plugin を使っ た PDFlib ブ ロ ッ ク の作 り 方は、
Acrobat の フ ォーム ツール と 同様です。 ページ上のすべてのブ ロ ッ ク は、 ブ ロ ッ ク ツール
がア ク テ ィ ブな時に表示 さ れます。 Acrobat の他の ツールが選択 さ れ る と ブ ロ ッ ク は見え
な く な り ますが、 な く な っ たわけではあ り ません。 ブ ロ ッ ク ツールを ア ク テ ィ ブにす る に
は、 以下のいずれかの操作を行い ます :
> Acrobat の 「高度な編集」 ツールバーでブ ロ ッ ク ア イ コ ン
を ク リ ッ ク 。 Acrobat で
こ の ツールバーが表示 さ れていない と き は、 「表示」 → 「ツールバー」 → 「高度な編集」
を選択すれば表示 さ せ る こ と がで き ます。
> メ ニ ュ ー項目 「PDFlib ブ ロ ッ ク」 → 「PDFlib ブ ロ ッ ク ツール」 を選択。
ブ ロ ッ ク の作成 と 変更 ブ ロ ッ ク ツールを ア ク テ ィ ブに し た ら 、 十字ポ イ ン タ を ド ラ ッ
グすれば、 ページ上の希望の位置に希望の大 き さ のブ ロ ッ ク を作成す る こ と がで き ます。
ブ ロ ッ ク は必ず矩形で、 その辺はページの辺 と 平行にな り ます (ブ ロ ッ ク の内容をページ
の辺 と 平行でな く す る には rotate プ ロ パテ ィ を用い ます)。 ブ ロ ッ ク の矩形を ド ラ ッ グ し
終わ る と 、 ブ ロ ッ ク プ ロ パテ ィ ダ イ ア ロ グ が現れ る ので、 ブ ロ ッ ク の さ ま ざ ま なプ ロ パ
テ ィ を編集す る こ と がで き ます (283 ページ 「11.3.2 ブ ロ ッ ク プ ロ パテ ィ を編集」 参照)。
ブ ロ ッ ク ツールはブ ロ ッ ク の名前を自動生成 し ますが、 こ の名前はプ ロ パテ ィ ダ イ ア ロ グ
で変更す る こ と も で き ます。 ブ ロ ッ ク 名はページ内では一意であ る 必要があ り ますが、 別
のページでは同 じ 名前 も 使え ます。 ダ イ ア ロ グの上端では、 ブ ロ ッ ク の種類を 「テキス ト
行」 ・ 「テキス ト フ ロー」 「画像」 ・ 「PDF」 のいずれかに変更で き ます。 タ ブは、 ど のブ ロ ッ
ク の種類を選択 し てい る かに応 じ て、 一度に 1 つだけがア ク テ ィ ブにな っ てい ます。 「ブ
ロ ッ クのプ ロパテ ィ 」 ダ イ ア ロ グは、 ブ ロ ッ ク の種類に応 じ て、 い く つかのグループのプ
ロ パテ ィ を表示 し ます。
注 PDF にブ ロ ッ ク を追加 し た り 、既存のブ ロ ッ ク に変更を加えた り し た後は、Acrobat の 「名
前を付けて保存 ...」 コ マ ン ド を使 う ほ う が (「上書き保存」 よ り も) フ ァ イルサイ ズが小
さ く な り ます。
注 Acrobat 用 Enfocus PitStop プ ラ グ イ ン を使 っ て、 PDFlib ブ ロ ッ ク を含んだ文書を編集する
際、「This document contains PieceInfo from PDFlib. Press OK to continue editing or Cancel to
abort.」 と い う メ ッ セージが表示 さ れる こ と があ り ます。 こ の メ ッ セージは気に し な く て
かまいません。 このよ う な場合、 OK を ク リ ッ ク し て も安全です。
ブ ロ ッ ク を選択 コ ピー ・ 移動 ・ 削除 ・ プ ロ パテ ィ 編集 と いっ たい く つかのブ ロ ッ ク 操作
は、 選択 し た 1 個ない し 複数のブ ロ ッ ク に対 し て動作 し ます。 ブ ロ ッ ク ツールを用いてブ
ロ ッ ク を選択す る には、 以下の よ う に操作 し ます :
> 一個のブ ロ ッ ク を選択す る には、 単にそれを シ ン グル ク リ ッ ク し ます。
> 複数のブ ロ ッ ク を選択す る には、Shift キーを押 し なが ら 2 個目以降のブ ロ ッ ク を選択 し
ます。
> ページ上のすべてのブ ロ ッ ク を選択す る には、Ctrl+A (Windows の場合) か Cmd+A (Mac
の場合) を押すか、 ま たは 「編集」 → 「すべて選択」 を用い ます。
コ ン テキス ト メ ニ ュ ー ブ ロ ッ ク を 選択 (複数可) し て い る 時に は、 コ ン テ キ ス ト メ
ニ ュ ーを開けば、 ブ ロ ッ ク 関連のいろいろ な機能 (「PDFlib ブ ロ ッ ク」 メ ニ ュ ーか ら 利用
で き る 諸機能 と 同 じ ) を迅速に実行す る こ と がで き ます。 コ ン テ キ ス ト メ ニ ュ ーを開 く に
は、 選択 し たブ ロ ッ ク (複数可) を、 Windows の場合はマ ウ ス の右ボ タ ンで ク リ ッ ク し 、
280
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 11.1
ブ ロ ッ ク プ ロパテ ィ
ダ イ ア ログ
Mac の場合は Ctrl+ ク リ ッ ク し ます。 た と えば、 ブ ロ ッ ク を削除す る には、 それをブ ロ ッ
ク ツールで選択 し たのち、 Delete キーを押 し て も よ いです し 、 あ る いは コ ン テ キ ス ト メ
ニ ュ ーで 「編集」 → 「削除」 を用い る こ と も で き ます。
ページ上でブ ロ ッ ク のない領域を右 ク リ ッ ク (Mac では Ctrl+ ク リ ッ ク ) す る と 、 コ ン
テ キ ス ト メ ニ ュ ーには、 ブ ロ ッ ク プ レ ビ ュ ーの生成 と 、 プ レ ビ ュ ー機能の設定 と い う 項目
が含まれます。
ブ ロ ッ ク の大 き さ と 位置 ブ ロ ッ ク ツールを使 う と 、 選択 し たブ ロ ッ ク (複数可) を別
の位置へ動かす こ と も 可能です。 Shift キーを押 し なが ら ブ ロ ッ ク を ド ラ ッ グす る と 、 水平
方向か垂直方向にだけ動 き ます。 こ れはブ ロ ッ ク を正確に整列 さ せたい と き に便利で し ょ
う 。 ポ イ ン タ がブ ロ ッ ク の角の近 く にあ る 時は、 ポ イ ン タ は矢印に変わ り 、 ブ ロ ッ ク の大
き さ を変え る こ と がで き ます。 複数のブ ロ ッ ク の位置や大き さ を調整 し たい と き は、 複数
のブ ロ ッ ク を選択 し て、「PDFlib ブ ロ ッ ク」 メ ニ ュ ーか コ ン テ キ ス ト メ ニ ュ ーか ら 「整列」 ・
「中央揃え」 ・ 「均等配置」 ・ 「サイ ズ」 のいずれかの コ マ ン ド を選択 し ます。 ブ ロ ッ ク (複
数可) の位置は、 矢印キーを使っ て小刻みに変え る こ と も で き ます。
あ る いは、 ブ ロ ッ ク の座標を数値でプ ロ パテ ィ ダ イ ア ロ グに入力す る こ と も で き ます。
座標系の原点はページの左上隅です。 座標は、 その時点で Acrobat で選択 さ れてい る 単位
で表示 さ れます :
> Acrobat 7/8/9 で表示単位を変え る には、 「編集」 → 「環境設定」 (→ 「一般 ...」) → 「単
位 と ガ イ ド 」 を選択 し 、 ポ イ ン ト ・ イ ンチ ・ ミ リ ・ パ イ カ ・ セ ンチ メ ー ト ルのいずれ
か を選びます。 あ る いは Acrobat 7/8 の場合は、 「表示」 → 「ナビゲーシ ョ ン タ ブ」 →
「情報」 を選択 し 、 「オプ シ ョ ン」 メ ニ ュ ーか ら 単位を選ぶ こ と も で き ます。
> カー ソ ルの座標を表示す る には、 Acrobat 9 では 「表示」 → 「カ ー ソ ル座標」 を、 Acrobat
7/8 では 「表示」 → 「ナビゲーシ ョ ン タ ブ」 → 「情報」 を選択 し ます。
ただ し こ こ で選んだ単位は Rect プ ロ パテ ィ に対 し てのみ効力を持ち、 それ以外の数値プ
ロ パテ ィ (fontsize 等) に対 し ては一切効力を持ち ません。
11.3 PDFlib Block Plugin で ブ ロ ッ ク を編集
281
図 11.2
Acrobat の
グ リ ッ ド 設定
グ リ ッ ド を用いて ブ ロ ッ ク を位置合わせ Acrobat のグ リ ッ ド 機能を活用 し て、 ブ ロ ッ ク
の位置合わせやサ イ ズ合わせを正確に行 う こ と も で き ます。 Acrobat 7/8/9 で以下の よ う
に操作 し ます :
> グ リ ッ ド を表示 : 「表示」 → 「グ リ ッ ド 」。
> グ リ ッ ド スナ ッ プ を有効に : 「表示」 → 「グ リ ッ ド にスナ ッ プ」。
> グ リ ッ ド を変更 (図 11.2 参照) : 「編集」 → 「環境設定」 (→ 「一般 ...」) → 「単位 と ガ イ
ド 」 を選択 し ます。そ こ でグ リ ッ ド 線の間隔や位置、それに色を変え る こ と がで き ます。
「グ リ ッ ド にスナ ッ プ」 を有効に し てい る と 、ブ ロ ッ ク の大 き さ と 位置は、設定 し た グ リ ッ
ド に揃い ます。 「グ リ ッ ド にスナ ッ プ」 は、 新規作成 し たブ ロ ッ ク に も 効 き ます し 、 既存
のブ ロ ッ ク を ブ ロ ッ ク ツールで移動 し た り 大き さ を変え た り する と き に も 効き ます。
画像やグ ラ フ ィ ッ ク を選択 し て ブ ロ ッ ク を作成 手動でブ ロ ッ ク の矩形を ド ラ ッ グす る
のではな く 、 既存のページ内容を使っ てブ ロ ッ ク の大 き さ を定義す る こ と も で き ます。 ま
ず、 メ ニ ュ ー項目 「PDFlib ブ ロ ッ ク」 → 「オブ ジ ェ ク ト ク リ ッ ク で ブ ロ ッ ク を定義」 が有
効にな っ てい る こ と を確認 し ます。 こ れで、 ブ ロ ッ ク ツールを使っ て、 ページ上の画像を
ク リ ッ ク し て、 その画像 と 同 じ 位置に同 じ 大 き さ のブ ロ ッ ク を作成す る こ と がで き ます。
それ以外の グ ラ フ ィ ッ ク オブジ ェ ク ト を ク リ ッ ク す る こ と も で き 、 その場合、 ブ ロ ッ ク
ツールはそのグ ラ フ ィ ッ ク (た と えば ロ ゴ) 全体を選択 し よ う と し ます。 こ の 「オブ ジ ェ
ク ト ク リ ッ ク」 機能は、 ブ ロ ッ ク 定義作業を補助す る ために設けて あ る も のです。 で き た
ブ ロ ッ ク の位置や大 き さ を変更 し たければ、 後か ら 何 ら 制約な く 行 う こ と がで き ます。 ブ
ロ ッ ク は、 画像やグ ラ フ ィ ッ ク に固定 さ れて し ま う のではな く 、 ただそれを位置や大 き さ
の決定の補助 と し て用い る だけです。
282
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
「オブ ジ ェ ク ト ク リ ッ ク」 機能は、 ど のベ ク ト ルグ ラ フ ィ ッ ク や画像がページ上で論理
的要素を形づ く っ てい る か を認識 し よ う と し ます。いずれかのページ内容が ク リ ッ ク さ れ
る と 、 その対象が白かっ た り 非常に大 き か っ た り し ない限 り 、 その外接枠 (対象を囲む矩
形) が選択 さ れます。 その次の段階 と し て、 こ の検知 さ れた矩形に一部入 り 込んでい る 他
の物が選択領域に追加 さ れ、 こ れが繰 り 返 さ れます。 そ う し て最終的にで き た領域に基づ
いてブ ロ ッ ク の矩形が生成 さ れ る のです。 結局の と こ ろ 「オ ブ ジ ェ ク ト ク リ ッ ク」 機能
は、 個々の線ではな く グ ラ フ ィ ッ ク 全体を選択 し よ う と す る こ と にな り ます。
フ ォ ン ト プ ロパテ ィ の自動検出 Block Plugin は、 テ キ ス ト 行 ま た は テ キ ス ト フ ロ ーブ
ロ ッ ク の置かれた位置の背景にあ る フ ォ ン ト を分析す る こ と がで き 、ブ ロ ッ ク の以下のプ
ロ パテ ィ を自動的に書 き 込む こ と がで き ます :
fontname・fontsize・fillcolor・charspacing・horizscaling・wordspacing・
textrendering・textrise
フ ォ ン ト プ ロ パテ ィ の自動検出は望ま し く ない結果を も た ら す こ と も あ る ので、背景を無
視 さ せたい場合は、 「PDFlib ブ ロ ッ ク」 → 「背景 フ ォ ン ト ・ 色の検出」 を用いて機能の有
効 ・ 無効を切 り 替え る こ と がで き ます。 デフ ォ ル ト では こ の機能は無効にな っ てい ます。
ブ ロ ッ ク を ロ ッ ク ブ ロ ッ ク は、 う っ か り 移動 し た り 大 き さ を変え た り 削除 し た り さ れ
ない よ う 、 ロ ッ ク し て保護す る こ と がで き ます。 ブ ロ ッ ク ツールがア ク テ ィ ブな状態で、
ブ ロ ッ ク を選択 し 、 その コ ン テ キ ス ト メ ニ ュ ーか ら 「ロ ッ ク 」 を選び ま す。 ブ ロ ッ ク が
ロ ッ ク さ れてい る と 、 移動 さ せ る こ と も 大 き さ を変え る こ と も 削除する こ と も で き ず、 そ
のプ ロ パテ ィ ダ イ ア ロ グ を編集す る こ と も で き ません。
11.3.2 ブ ロ ッ ク プ ロパテ ィ を編集
新規ブ ロ ッ ク を作成 し た時や、 既存ブ ロ ッ ク を ダブル ク リ ッ ク し た時や、 ブ ロ ッ ク の コ ン
テ キ ス ト メ ニ ュ ーか ら 「プ ロパテ ィ 」 を選択 し た時には、 プ ロ パテ ィ ダ イ ア ロ グ が現れ
て、 その選択 し たブ ロ ッ ク に関す る すべての設定を編集す る こ と がで き ます (図 11.1 参
照)。 298 ページ 「11.6 ブ ロ ッ ク のプ ロ パテ ィ 」 で詳述す る よ う に、 プ ロ パテ ィ にはブ ロ ッ
ク の種類に応 じ て、 い く つかのグループがあ り ます。
「適用」 ボ タ ンは、 ダ イ ア ロ グ内の 1 個ない し 複数のプ ロ パテ ィ を変更 し た時にのみ有
効にな り ます。 プ ロ パテ ィ の変更をブ ロ ッ ク に適用 し た後には、 ブ ロ ッ ク の名前の中にア
ス タ リ ス ク が表示 さ れて、ブ ロ ッ ク が変更 さ れたけれど も ま だデ ィ ス ク には保存 さ れてい
ない と い う こ と を示 し ます。 「適用」 ボ タ ンは、 ロ ッ ク さ れたブ ロ ッ ク については無効 と
な り ます。
注 ブ ロ ッ クの種類やプ ロパテ ィ の設定によ っ ては、 無効にな る プ ロパテ ィ も あ り ます。 た と
えば、 タ ブ設定を編集する ための「ルーラタブ」 プ ロパテ ィ グループは、 テキス ト フ ロー
グループの hortabmethod プ ロパテ ィ が ruler に設定 さ れている と き にのみ有効にな り ます。
プ ロ パテ ィ の値を変更す る には、入力 し たい数や文字列を そのプ ロ パテ ィ の入力領域に入
力す る か (例 : linewidth) 、 ド ロ ッ プ ダ ウ ン リ ス ト か ら 値 を 選ぶ か (例 : fitmethod ・
orientate)、 ま たはダ イ ア ロ グの右側にあ る 「...」 ボ タ ン を ク リ ッ ク し て色の値やフ ァ イ ル
名を選択 し ます (例 : backgroundcolor ・ defaultimage) 。 fontname プ ロ パテ ィ の場合は、
シ ス テ ムに イ ン ス ト ール さ れてい る フ ォ ン ト の一覧か ら 選ぶ こ と も で き ます し 、カ ス タ ム
の フ ォ ン ト 名を打ち込む こ と も で き ます。 フ ォ ン ト 名を入力 し た方式にかかわ ら ず、 その
フ ォ ン ト は、 PPS に よ っ てブ ロ ッ ク へ内容が流 し 込まれ る シ ス テ ム上において利用可能に
な っ てい る こ と が必要です。
11.3 PDFlib Block Plugin で ブ ロ ッ ク を編集
283
プ ロ パテ ィ の編集が済んだ ら 、 「適用」 ボ タ ン を ク リ ッ ク し てブ ロ ッ ク を更新 し ます。
定義 し たプ ロ パテ ィ は、 PDF フ ァ イ ル内にブ ロ ッ ク 定義の一部 と し て格納 さ れます。
重ねた ブ ロ ッ ク 重な り あ う ブ ロ ッ ク 群は選択 し づ ら い こ と があ り ま す。 その領域を ク
リ ッ ク す る と 必ず最前面のブ ロ ッ ク が選ばれて し ま う か ら です。 こ の よ う な場合には、 コ
ン テ キ ス ト メ ニ ュ ーの 「ブ ロ ッ クの選択」 項目を用いれば、 ブ ロ ッ ク の う ちのいずれか 1
個を名前で選択す る こ と がで き ます。 1 個のブ ロ ッ ク を選んだ直後にその領域で行 う 操作
は、 その選択 し た 1 個のブ ロ ッ ク に対 し てのみ効力を持ち、 他のブ ロ ッ ク に対 し ては効力
を持ち ません。 た と えば Enter を押せば、選択 し たブ ロ ッ ク のプ ロ パテ ィ を編集で き ます。
こ の方法を利用すれば、ブ ロ ッ ク の上に他のブ ロ ッ ク が部分的ない し 完全にかぶ さ っ てい
て も 、 簡単にそのブ ロ ッ ク のプ ロ パテ ィ を編集する こ と がで き ます。
ブ ロ ッ ク プ ロパテ ィ のデ フ ォ ル ト 値の利用 と リ セ ッ ト キー入力や ク リ ッ ク の量を い く
ら か軽減で き る よ う 、 ブ ロ ッ ク ツールは、 直前のブ ロ ッ ク のプ ロ パテ ィ ダ イ ア ロ グで入力
さ れたプ ロ パテ ィ 値を記憶 し てい ます。 こ う し た値は、 新規ブ ロ ッ ク の作成時に再利用 さ
れます。 も ち ろんその値は、 いつ別の値で上書き し て も か ま い ません。
プ ロ パテ ィ のダ イ ア ロ グで 「全て リ セ ッ ト 」 ボ タ ン を押す と 、 多 く のブ ロ ッ ク プ ロ パ
テ ィ がそれぞれのデフ ォ ル ト に リ セ ッ ト さ れます。以下の項目は変更 さ れない ま ま にな り
ます :
> Name ・ Type ・ Rect ・ Description プ ロ パテ ィ
> すべてのカ ス タ ムプ ロ パテ ィ
注 標準 プ ロ パ テ ィ のデ フ ォ ル ト 値は、 プ レ ビ ュ ー生成時のデ フ ォ ル ト デー タ を 保持す る
defaulttext ・ defaultimage ・ defaultpdf プ ロパテ ィ と 混同 し ないよ う にする必要があ り ま
す (290 ページ 「ブ ロ ッ クのデ フ ォル ト 内容」 参照)。
複数のブ ロ ッ ク を一度に編集 複数のブ ロ ッ ク のプ ロ パテ ィ を一度に編集すれば、 大い
に時間が節約で き ます。 複数のブ ロ ッ ク を選択する には以下の よ う に操作 し ます :
> メ ニ ュ ー項目 「PDFlib ブ ロ ッ ク」 → 「PDFlib ブ ロ ッ ク ツール」 を選択 し てブ ロ ッ ク ツー
ルを ア ク テ ィ ブに し ます。
> 一個目のブ ロ ッ ク を ク リ ッ ク し て選択 し ま す。 最初に選択 し た こ のブ ロ ッ ク はマ ス
タ ーブ ロ ッ ク にな り ます。 他のブ ロ ッ ク (複数可) を Shift+ ク リ ッ ク し て、 選択ブ ロ ッ
ク 群に加え ま す。 あ る いは、 「編集」 → 「すべて を 選択」 を ク リ ッ ク し て、 カ レ ン ト
ページ上のすべてのブ ロ ッ ク を選択す る こ と も で き ます。
> こ れ ら のブ ロ ッ ク の う ちいずれか 1 個を ダブル ク リ ッ ク す る と 、ブ ロ ッ ク プ ロ パテ ィ ダ
イ ア ロ グが開 き ます。 こ の時ダブル ク リ ッ ク し たブ ロ ッ ク が、 新たにマ ス タ ーブ ロ ッ
ク にな り ます。
> あ る いは、 1 個のブ ロ ッ ク を ク リ ッ ク し てマ ス タ ーブ ロ ッ ク と し て指定 し た う えで、
Enter キーを押 し てブ ロ ッ ク プ ロ パテ ィ ダ イ ア ロ グ を開 く こ と も で き ます。
プ ロ パテ ィ ダ イ ア ロ グには、選択 さ れてい る プ ロ パテ ィ のすべてに適用 さ れ る プ ロ パテ ィ
のサブセ ッ ト だけが表示 さ れます。 ダ イ ア ロ グには、 マ ス タ ーブ ロ ッ ク か ら 採 ら れたプ ロ
パテ ィ 値が表示 さ れます。 ダ イ ア ロ グ を 「適用」 で閉 じ る と 、 その時点の内容が、 選択 さ
れてい る ブ ロ ッ ク すべてに複製 さ れ ます。 すなわち、 マ ス タ ーブ ロ ッ ク の値がその ま ま、
あ る いはダ イ ア ロ グで手変更を加え ていればそれが適用 さ れ ます。 こ の動作を利用 し て、
あ る 1 個のブ ロ ッ ク のブ ロ ッ ク プ ロ パテ ィ を、 他のブ ロ ッ ク (複数可) へ複製す る こ と も
で き ます。
以下の標準プ ロ パテ ィ は共有で き ません。 すなわち、 こ れ ら は複数のブ ロ ッ ク に対 し
て一度に編集す る こ と はで き ません :
284
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
Name・Description・Subtype・Type・Rect・Status
カ ス タ ムプ ロ パテ ィ も 、 ブ ロ ッ ク 間で共有す る こ と はで き ません。
11.3.3 ページ間 ・ 文書間で ブ ロ ッ ク を コ ピ ー
Block Plugin は、 カ レ ン ト ページの中で、 ま たはカ レ ン ト 文書の中で、 あ る いは他の文書
へ と 、 ブ ロ ッ ク を移動 し た り コ ピー し た り す る ための手段をい く つか提供 し てい ます :
> ブ ロ ッ ク を マ ウ ス で ド ラ ッ グ し て移動 ・ コ ピー、 ま たは他のページや開いてい る 文書
へブ ロ ッ ク を貼 り 付け
> ブ ロ ッ ク を、 通常の コ ピー / 貼 り 付け操作を用いて、 同一文書内のページ (複数可) へ
複製
> ブ ロ ッ ク を、 新 し い フ ァ イ ル (ページが空白の) や、 既存の文書 (既存のページにブ
ロ ッ ク を適用) へ書 き 出 し
> 他の文書か ら ブ ロ ッ ク を取 り 込み
ブ ロ ッ ク の定義を維持 し た ま まページの内容を更新 し たい場合には、ブ ロ ッ ク を保っ た ま
ま背景のページ (複数可) を置換す る こ と がで き ます。 Acrobat の 「文書」 → 「ページの
置換 ...」 を用い ます。
ブ ロ ッ ク を移動 ・ 複製 ブ ロ ッ ク の位置を変え る には、 ブ ロ ッ ク (複数可) を選択 し て、
新 し い位置へ ド ラ ッ グ し ます。 ブ ロ ッ ク の複製を作成す る には、 Ctrl キー (Windows の場
合) か Alt キー (Mac の場合) を押 し なが ら 同様に ド ラ ッ グ し ます。 キーを押 し てい る 間
は、 マ ウ ス カー ソ ルが変わ り ます。 複製 さ れたブ ロ ッ ク は元のブ ロ ッ ク と 同 じ プ ロ パテ ィ
を持ち ますが、 ただ し 名前 と 位置だけは自動的に変更 さ れます。
ま た、 コ ピー/貼 り 付け を使っ て、 ブ ロ ッ ク を、 同一ページ内の他の場所へ、 ま たは
同一文書内の他のページへ、 あ る いは Acrobat でその時点で開いてい る 他の文書へ複製す
る こ と も で き ます :
> ブ ロ ッ ク ツールを ア ク テ ィ ブに し てか ら 、 複製 し たいブ ロ ッ ク 群を選択 し ます。
> Ctrl+C (Windows の場合) か Cmd+C (Mac の場合) を、 ま たは 「編集」 → 「コ ピー」 を
使っ て、 選択 し たブ ロ ッ ク を ク リ ッ プボー ド へ コ ピー し ます。
> 複製先ページへ移動 し ます (必要な ら )。
> Ctrl+V (Windows の場合) か Cmd+V (Mac の場合) を、 ま たは 「編集」 → 「貼 り 付け」
を使っ て、 ク リ ッ プボー ド か ら ブ ロ ッ ク を カ レ ン ト ページへ貼 り 付け ます。
ブ ロ ッ ク を他のページ群へ複製 ブ ロ ッ ク (複数可) の複製を、 カ レ ン ト 文書内の任意
の数のページ上に一度に作成す る こ と も で き ます :
> ブ ロ ッ ク ツールを ア ク テ ィ ブに し てか ら 、 複製 し たいブ ロ ッ ク 群を選択 し ます。
> 「PDFlib ブ ロ ッ ク」 メ ニ ュ ーか コ ン テ キ ス ト メ ニ ュ ーか ら 「取 り 込み と 書き出 し 」 → 「複
製 ...」 を選びます。
> ど のブ ロ ッ ク を複製す る か を選び (「選択 さ れている ブ ロ ッ ク」 ま たは 「 こ のページ上
の全ブ ロ ッ ク」)、 選択 し たブ ロ ッ ク 群を複製 し たい複製先ページの範囲を選びます。
ブ ロ ッ ク を書 き出 し ・ 取 り 込み ブ ロ ッ ク の書 き 出 し /取 り 込み機能を使 う と 、 あ る 1
つのページ上のブ ロ ッ ク の定義や、 あ る 文書内のすべてのブ ロ ッ ク の定義を、 複数の PDF
フ ァ イ ル間で共有す る こ と が可能です。 こ れは、 既存のブ ロ ッ ク 定義を維持 し た ま まペー
ジ内容を更新 し たい と き に便利です。ブ ロ ッ ク 定義を別フ ァ イ ル と し て書 き 出すには以下
の よ う に操作 し ます :
> ブ ロ ッ ク ツールを ア ク テ ィ ブに し てか ら 、 書 き 出 し たいブ ロ ッ ク 群を選択 し ます。
11.3 PDFlib Block Plugin で ブ ロ ッ ク を編集
285
> 「PDFlib ブ ロ ッ ク」 メ ニ ュ ーか コ ン テ キ ス ト メ ニ ュ ーか ら 「取 り 込み と 書き出 し 」 → 「書
き出 し ...」 を選択 し ます。 ページ範囲 と 、 ブ ロ ッ ク 定義を持つ新 し い PDF の フ ァ イ ル
名を入力 し ます。
ブ ロ ッ ク 定義を取 り 込むには 「PDFlib ブ ロ ッ ク」 → 「取 り 込み と 書き出 し 」 → 「取 り 込み
...」 を選択 し ます。 ブ ロ ッ ク 取 り 込みの際には、 取 り 込んだブ ロ ッ ク を文書内の全ページ
に適用す る か、 それ と も あ る ページ範囲にのみ適用す る か を選ぶ こ と がで き ます。 複数の
ページ を選択 し た場合、 ブ ロ ッ ク 定義は変更 さ れずに各ページへ コ ピー さ れます。 取 り 込
むブ ロ ッ ク 定義 よ り も 取 り 込み先範囲のほ う がページ数が多い場合には、 「テ ン プ レ ー ト
を繰 り 返す」 チ ェ ッ ク ボ ッ ク ス を用い る こ と も で き ます。 こ れをチ ェ ッ ク す る と 、 取 り 込
みフ ァ イ ル内のブ ロ ッ ク のシーケ ン ス が、 カ レ ン ト 文書の中で、 文書の終わ り に達す る ま
で繰 り 返 さ れます。
書 き出 し で ブ ロ ッ ク を他の文書へ複製 ブ ロ ッ ク を書 き 出す際には、 他の文書内のペー
ジ群へそのブ ロ ッ ク 群を直接適用す る こ と も で き ます。 結果 と し て、 あ る 文書か ら 別の文
書へブ ロ ッ ク 群を転写す る こ と が可能です。 そのためには、 ブ ロ ッ ク の書 き 出 し 先 と し て
既存の文書を選び ま す。 「既存のブ ロ ッ ク を削除」 チ ェ ッ ク ボ ッ ク ス を チ ェ ッ ク す る と 、
書 き 出 し 先の文書にブ ロ ッ ク が存在 し ていて も すべて削除 さ れ、 その後に、 新 し いブ ロ ッ
ク 群が文書へ コ ピー さ れます。
11.3.4 PDF フ ォ ーム フ ィ ール ド を PDFlib ブ ロ ッ ク に変換
PDFlib ブ ロ ッ ク を手動で作成す る のではな く 、PDF フ ォーム フ ィ ール ド を ブ ロ ッ ク に自動
変換 さ せ る こ と も で き ます。 こ れは、 複雑な PDF フ ォームがあ っ て PPS で自動流 し 込み
さ せたい場合や、 既存の大量の PDF フ ォーム を自動流 し 込みで き る よ う に変換 し たい場
合な ど に特に便利です。1 つのページ上のすべての フ ォーム フ ィ ール ド を PDFlib ブ ロ ッ ク
に変換す る には、 「PDFlib ブ ロ ッ ク」 → 「フ ォ ーム フ ィ ール ド の変換」 → 「現在のページ」
を選択 し ます。 文書内の全フ ォーム フ ィ ール ド を変換 し たい場合は 「全ページ」 を選びま
す。 選択 し た フ ォーム フ ィ ール ド だけ を変換する には (1 個ま たは複数の フ ォーム フ ィ ー
ル ド を選択す る には、 Acrobat の フ ォーム ツールかオブジ ェ ク ト 選択ツールを選びます)、
「選択 し た フ ォ ーム フ ィ ール ド 」 を選択 し ます。
フ ォ ーム フ ィ ール ド 変換の詳細 自動フ ォ ーム フ ィ ール ド 変換では、 「PDFlib ブ ロ ッ ク」
→ 「フ ォ ーム フ ィ ール ド の変換」 → 「変換オプ シ ョ ン ...」 ダ イ ア ロ グで選択 さ れた種類の
フ ォーム フ ィ ール ド が、 テ キ ス ト 行ブ ロ ッ ク かテ キ ス ト フ ロ ーブ ロ ッ ク に変換 さ れ ます。
デフ ォ ル ト では、 すべての フ ォーム フ ィ ール ド の種類が変換 さ れます。 変換 さ れた フ ィ ー
ル ド の属性は、 表 11.3 に従っ て、 それぞれブ ロ ッ ク プ ロ パテ ィ に変換 さ れます。
同名の複数の フ ォ ーム フ ィ ール ド 同 じ ページ上に あ る 複数の フ ォ ー ム フ ィ ール ド は、
同 じ 名前を持つ こ と が許 さ れてい ますが、それに対 し てブ ロ ッ ク 名はページ上で一意でな
ければな り ません。 こ のため、 フ ォーム フ ィ ール ド がブ ロ ッ ク に変換 さ れ る 際には、 生成
さ れ る ブ ロ ッ ク の名前に数の接尾辞が付加 さ れ、 一意なブ ロ ッ ク 名が作成 さ れ ます (287
ページ 「フ ォーム フ ィ ール ド の対応ブ ロ ッ ク を見つけ る 」 も 参照)。
なお、 Acrobat の中の問題のため、 複数の フ ォーム フ ィ ール ド が同 じ 名前を持つ場合の
フ ィ ール ド の属性は正 し く 報告 さ れ ません。 複数の フ ィ ール ド が同 じ 名前を持っ ていて、
し か し 属性が異な っ てい る 場合には、生成 さ れ る ブ ロ ッ ク には こ う し た属性の違いは反映
さ れません。 変換処理は こ の場合、 警告 メ ッ セージ を表示 し て、 関係す る フ ォーム フ ィ ー
ル ド 群の名前を示 し ます。 こ の場合は、 生成 さ れたブ ロ ッ ク のプ ロ パテ ィ を注意深 く 調べ
る 必要があ り ます。
286
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
フ ォ ーム フ ィ ール ド の対応ブ ロ ッ ク を見つけ る 同 じ 名前の フ ィ ール ド が複数あ っ た場
合 ( ラ ジオボ タ ン等) 、 変換 さ れた フ ォーム フ ィ ール ド の名前は変更 さ れて し ま っ てい ま
すか ら 、 ど の フ ォーム フ ィ ール ド が ど のブ ロ ッ ク にな っ たのか を正 し く 知 る こ と は困難で
す。 こ の こ と は特に、 FDF ま たは XFDF フ ァ イ ルを用いてブ ロ ッ ク への流 し 込みを行い、
その結果を フ ォームへの記入 と 同 じ に し たい場合に問題 と な り ます。
こ の問題を解決する ため、 AcroFormConversion プ ラ グ イ ンは、 元の フ ォーム フ ィ ール
ド に関す る 情報を、 それに対応す る ブ ロ ッ ク を生成する 際に、 カ ス タ ムプ ロ パテ ィ 群 と し
て記録 し ます。 表 11.2 に、 ブ ロ ッ ク を正 し く 同定す る ために利用で き る カ ス タ ムプ ロ パ
テ ィ の一覧を示 し ます。 プ ロ パテ ィ の型はすべて文字列です。
表 11.2 ブ ロ ッ ク の元の フ ォ ーム フ ィ ール ド を同定する ためのカ ス タ ムプ ロパテ ィ 一覧
カ ス タ ムプ ロパテ ィ
意味
PDFlib:field:name
フ ォ ーム フ ィ ール ド の完全修飾名。
PDFlib:field:pagenumber
元の文書で フ ォ ーム フ ィ ール ド が存在 し ていたページの番号 (文字列で)。
PDFlib:field:type
フ ォ ーム フ ィ ール ド の種類。 pushbutton ・ checkbox ・ radiobutton ・ listbox ・
combobox ・ textfield ・ signature の う ちのいずれか。
PDFlib:field:value
(type=checkbox の場合のみ) フ ォ ーム フ ィ ール ド の出力値。
ブ ロ ッ ク を対応す る フ ォ ーム フ ィ ール ド へバ イ ン ド PDFlib フ ォーム フ ィ ール ド と 生成
PDFlib ブ ロ ッ ク を同期 さ せ る ために、 生成 さ れたブ ロ ッ ク は、 対応す る フ ォーム フ ィ ール
ド にバ イ ン ド さ せ てお く こ と が で き ま す。 言い換え れば、 ブ ロ ッ ク ツ ールが内部的に
フ ォーム フ ィ ール ド と ブ ロ ッ ク と の紐付け を保持す る と い う こ と です。変換処理が再実行
さ れ る 際、 バ イ ン ド さ れたブ ロ ッ ク は、 対応す る PDFlib フ ォーム フ ィ ール ド の属性を反
映 し て更新 さ れます。 ブ ロ ッ ク がバ イ ン ド さ れてい る と 、 作業の二度手間が省けて便利で
す。 フ ォームが対話的利用のために更新 さ れた時には、 対応す る ブ ロ ッ ク も 自動的に更新
さ れ る か ら です。
ブ ロ ッ ク 生成後に変換元フ ォーム フ ィ ール ド を残 し た く ない場合は、「PDFlib ブ ロ ッ ク」
→ 「 フ ォ ーム フ ィ ール ド の変換」 → 「変換オプ シ ョ ン ...」 ダ イ ア ロ グの 「変換元フ ォ ーム
フ ィ ール ド を削除」 オプシ ョ ン を選びます。 こ のオプシ ョ ン を選ぶ と 、 フ ォーム フ ィ ール
ド は変換処理後に完全に削除 さ れます。削除 さ れた フ ィ ール ド に関連づけ ら れていた ア ク
シ ョ ン (JavaScript な ど) も 、 すべて文書か ら 削除 さ れます。
バ ッ チ変換 フ ォーム フ ィ ール ド を PDFlib ブ ロ ッ ク に変換 し たい PDF 文書がた く さ んあ
る 場合には、 バ ッ チ変換機能を利用 し て、 任意の数の文書を自動処理す る こ と も で き ま
す。 「PDFlib ブ ロ ッ ク 」 → 「フ ォ ーム フ ィ ール ド の変換」 → 「バ ッ チ変換 ...」 を選択すれ
ば、 バ ッ チ処理ダ イ ア ロ グが現れます。
> 入力フ ァ イ ルは個別に選ぶ こ と も で き ます し 、1 個の フ ォ ルダの中身をすべて ま と めて
処理 さ せ る こ と も で き ます。
> 出力フ ァ イ ルは、入力フ ァ イ ル と 同 じ フ ォ ルダに書 き 出す こ と も で き ます し 、別の フ ォ
ルダに書 き 出す こ と も で き ます。 出力フ ァ イ ルには、 入力フ ァ イ ル と 区別す る ために
接頭辞をつけ る こ と も で き ます。
> 大量の文書を処理す る 際は、 ロ グ フ ァ イ ルを指定す る こ と を推奨 し ます。 変換後、 ロ
グ フ ァ イ ルには、 処理 さ れた フ ァ イ ルの全一覧 と 、 各変換の結果に関す る 詳細が書 き
込まれてお り 、 エ ラ ーが起 き た場合にはエ ラ ー メ ッ セージ も 書 き 込まれます。
変換処理の間、 変換 さ れ る PDF 文書は Acrobat で表示 さ れますが、 変換が完了す る ま で、
Acrobat の メ ニ ュ ー機能やツールは一切使用で き ません。
11.3 PDFlib Block Plugin で ブ ロ ッ ク を編集
287
表 11.3 PDF フ ォ ーム フ ィ ール ド から PDFlib ブ ロ ッ クへの変換
以下の PDF フ ォ ーム フ ィ ール ド 属性は ...
... 以下の PDFlib ブ ロ ッ ク プ ロパテ ィ に変換 さ れる
全 フ ィ ール ド
位置
Rect
名前
Name
説明
Description
表示方法→テキス ト → フ ォ ン ト
fontname
表示方法→テキス ト →サイ ズ
fontsize : 文字サイ ズ auto は、 ブ ロ ッ ク の高 さ の 3 分の 2 の固定文
字サイ ズに変換 さ れ、 fitmethod は auto に設定 さ れます。 複数行の
ブ ロ ッ ク/フ ィ ール ド においては、 この組み合わせでは結果 と し て
自動的に適切な文字サイ ズにな るので、 ブ ロ ッ クの高 さ の 3 分の 2
と い う 初期値よ り も 小 さ く な る こ と があ り ます。
表示方法→テキス ト →文字の色
strokecolor ・ fillcolor
表示方法→境界線→境界線の色
bordercolor
表示方法→境界線→背景色
backgroundcolor
表示方法→境界線→幅
linewidth : 細 =1、 標準 =2、 太 =3
表示方法→一般プ ロパテ ィ → フ ォ ーム
フ ィ ール ド
Status :
表示する =active
隠す =ignore
表示する / 印刷 し ない =ignore
隠す / 印刷する =active
表示方法→一般プ ロパテ ィ →向き
orientate : 0=north、 90=west、 180=south、 270=east
テキス ト フ ィ ール ド
オプ シ ョ ン→デ フ ォル ト
defaulttext
オプ シ ョ ン→整列
position :
左揃え ={left center}
中央揃え ={center center}
右揃え ={right center}
オプ シ ョ ン→複数行
チ ェ ッ ク あ り な ら テキス ト フ ローブ ロ ッ クが生成
チ ェ ッ ク な し な ら テキス ト 行ブ ロ ッ クが生成
ラ ジオボ タ ン ・ チ ェ ッ ク ボ ッ ク ス
「デ フ ォ ル ト を チ ェ ッ ク」 がオ ンの場合 :
オプ シ ョ ン→チ ェ ッ ク ボ ッ ク スのス タ イ
ル ・ オプ シ ョ ン→ボ タ ンのス タ イル
defaulttext :
チ ェ ッ ク マー ク =4
円形 =l
十字 =8
ひ し 形 =u
四角形 =n
星形 =H
(文字は ZapfDingbats フ ォ ン ト における各記号を表 し ます)
リ ス ト ボ ッ ク ス ・ コ ンポボ ッ ク ス
オプ シ ョ ン→選択 さ れている (デ フ ォ ル
ト ) 項目
defaulttext
ボタ ン
オプ シ ョ ン→ボ タ ンの属性→テキス ト
288
defaulttext
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
11.3.5 Block Plugin のユーザー イ ン タ フ ェ ース を カ ス タ マ イ ズ
Block Plugin のユーザー イ ン タ フ ェース の以下の点は、 XML 設定フ ァ イ ルで制御す る こ と
がで き ます。 こ の XML フ ァ イ ルは、 Block Plugin デ ィ レ ク ト リ に置 く 必要があ り ます。 デ
フ ォ ル ト 設定フ ァ イ ル default.PPSoptions は起動時に読み込まれます。 PDFlib Block Plugin
と と も に イ ン ス ト ール さ れ る こ のデフ ォ ル ト 設定フ ァ イ ルを参照 し て く だ さ い :
> 要素 /Block_Plugin/MainDialog/CloseOnApply は、ブ ロ ッ ク プ ロ パテ ィ ダ イ ア ロ グの 「適
用 し てダ イ ア ロ グ を閉 じ る」 チ ェ ッ ク ボ ッ ク ス の初期状態を制御 し ます。 こ のチ ェ ッ
ク ボ ッ ク ス は、 ブ ロ ッ ク プ ロ パテ ィ ダ イ ア ロ グ を、 ブ ロ ッ ク を作成 し た後 も 、 ま たは
ブ ロ ッ ク プ ロ パテ ィ を変更 し た後 も 開いた ま ま に し てお く か ど う か を決定 し ます。
> 要素 /Block_Plugin/FontDialog/ShowBaseFonts は、 ブ ロ ッ ク プ ロ パテ ィ ダ イ ア ロ グの
フ ォ ン ト 一覧 (「書式」 プ ロ パテ ィ グループの fontname プ ロ パテ ィ ) に、 シ ス テ ムに
イ ン ス ト ール さ れてい る フ ォ ン ト 群に加えて、 ベース 14 フ ォ ン ト も 表示す る か ど う か
を制御 し ます。
> 要素 /Block_Plugin/Command/ControlByClick は、 メ ニ ュ ー項目 「PDFlib ブ ロ ッ ク」 → 「オ
ブ ジ ェ ク ト ク リ ッ ク で ブ ロ ッ ク を定義」 の初期状態を制御 し ます。
> 要素 /Block_Plugin/Command/DetectFonts は、 メ ニ ュ ー項目 「PDFlib ブ ロ ッ ク 」 → 「背景
フ ォ ン ト ・ 色の検出」 の初期状態を制御 し ます。
11.3 PDFlib Block Plugin で ブ ロ ッ ク を編集
289
11.4 Acrobat で ブ ロ ッ ク を プ レ ビ ュ ー
注 PDFlib デ ィ ス ト リ ビ ュ ーシ ョ ンの中の block_template.pdf 文書で、プ レ ビ ュ ー機能を試す
こ と がで き ます。 必要な リ ソ ース ( フ ォ ン ト ・ 画像等) も デ ィ ス ト リ ビ ュ ーシ ョ ンに含ま
れています。
PDFlib ブ ロ ッ ク は PPS に よ っ て処理 さ れます。 PPS を用い る こ と で、 ブ ロ ッ ク への流 し 込
み処理について、 そのデー タ 源 (デー タ ベース内のテ キ ス ト 、 デ ィ ス ク 上の画像フ ァ イ ル
等) や、 生成 さ れ る 文書の書式 ・ 対話的性質を カ ス タ マ イ ズす る こ と がで き ます。 こ の処
理について詳 し く は 294 ページ 「11.5 PPS でブ ロ ッ ク へ流 し 込み」 で解説 し ます。
し か し Block Plugin には内蔵バージ ョ ンの PPS が含まれてお り 、 こ れを用いて、 プ ロ グ
ラ ミ ン グ を一切必要 と せずに Acrobat 上で、 流 し 込まれたブ ロ ッ ク のプ レ ビ ュ ーバージ ョ
ン を生成す る こ と がで き ます。 こ のプ レ ビ ュ ー機能は、 カ ス タ ムプ ロ グ ラ ミ ン グ と 同等の
柔軟性を提供す る こ と はで き ませんが、ブ ロ ッ ク への流 し 込み結果を手軽に眺め る には適
し てい ます。 ブ ロ ッ ク プ レ ビ ュ ーを活用すれば、 ブ ロ ッ ク の位置や大 き さ を改善 し た り 、
ブ ロ ッ ク のプ ロ パテ ィ (フ ォ ン ト 名 ・ 文字サ イ ズ等) をチ ェ ッ ク し た り す る こ と がで き ま
す。 プ レ ビ ュ ーの表示結果に満足す る ま で、 ブ ロ ッ ク を変更 し 、 プ レ ビ ュ ーを新たに生成
す る こ と がで き ます。 プ レ ビ ュ ーは、 カ レ ン ト ページについて も 、 文書全体について も 生
成で き ます。
プ レ ビ ュ ーはつねに、 新 し い PDF 文書 と し て表示 さ れます。 元の文書 (ブ ロ ッ ク を含
んでい る ) は、 プ レ ビ ュ ーを生成 し て も 変更を受け ません。 プ レ ビ ュ ー文書は、 必要に応
じ て保存す る こ と も 捨て る こ と も で き ます。 元のブ ロ ッ ク コ ン テナ文書は、 プ レ ビ ュ ーに
よ っ て影響を受け ません。
ブ ロ ッ ク のデ フ ォ ル ト 内容 プ ラ グ イ ン では、 サーバサ イ ド のデー タ 源 (デー タ ベー ス
等) か ら ブ ロ ッ ク のテ キ ス ト ・ 画像 ・ PDF 内容を入手す る こ と は望むべ く も あ り ませんの
で、 プ レ ビ ュ ー機能 で はつねに、 ブ ロ ッ ク のデ フ ォ ル ト 内容、 す な わ ち defaulttext ・
defaultimage ・ defaultpdf プ ロ パテ ィ で指定 さ れてい る デー タ が用い ら れます。 通常、 PPS
で使われ る 実際のブ ロ ッ ク 内容を代表す る よ う なサ ン プルデー タ セ ッ ト が、 デ フ ォ ル ト
デー タ と し て用い ら れます。 デフ ォ ル ト 内容を持たないブ ロ ッ ク は、 プ レ ビ ュ ー生成時に
は無視 さ れます。 Status=ignoredefault のブ ロ ッ ク について も 同様です。
新規ブ ロ ッ ク では、 デ フ ォ ル ト プ ロ パテ ィ は空です。 プ レ ビ ュ ー機能を使 う 前には、
「デ フ ォ ル ト 内容」 プ ロ パテ ィ グループの defaulttext ・ defaultimage ・ defaultpdf プ ロ パ
テ ィ (ブ ロ ッ ク の種類に よ る ) に書 き 込む必要があ り ます。
デ フ ォ ル ト テ キ ス ト と し て記号 フ ォ ン ト を使 う には、 「テキス ト の供給」 グループの
charref プ ロ パテ ィ を true に設定 し た う えで、 記号の文字参照を与え ま す (100 ページ
「4.5.2 文字参照」 参照)。 た と えば、 下記のデフ ォ ル ト テ キ ス ト は charref=true の と き 、 記
号フ ォ ン ト Wingdings で 「ス マ イ リ ー」 グ リ フ を生成 し ます :
&.smileface;
あ る いは、charref=false に設定 し て、対応す る 8 ビ ッ ト コ ー ド (Wingdings の 「ス マ イ リ ー」
グ リ フ な ら J) を与え る と い う 方法 も あ り ます。 なお、 デフ ォ ル ト テ キ ス ト を記号フ ォ ン
ト にす る と き 、 8 ビ ッ ト コ ー ド と 文字参照を混在 さ せ る こ と はで き ません。
ブ ロ ッ ク プ レ ビ ュ ー を生成 ブ ロ ッ ク プ レ ビ ュ ーを生成す る には、 以下のいずれかの方
法を用い ます :
> メ ニ ュ ー項目 「PDFlib ブ ロ ッ ク」 → 「プ レ ビ ュ ー」 → 「プ レ ビ ュ ーの生成」 で。
290
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 11.3
ブロ ッ ク
プ レ ビ ュ ー設定
> Acrobat の 「高度な編集」 ツールバーで PDFlib ブ ロ ッ ク プ レ ビ ュ ーア イ コ ン
をク
リ ッ ク 。 Acrobat で こ の ツ ールバーが表示 さ れて い な い と き は、 「表示」 → 「ツ ール
バー」 → 「高度な編集」 を選択すれば表示 さ せ る こ と がで き ます。
> ブ ロ ッ ク ツールがア ク テ ィ ブの と き は、ど のブ ロ ッ ク も ない所を右 ク リ ッ ク すれば、コ
ン テ キ ス ト メ ニ ュ ーに項目 「プ レ ビ ュ ーの生成」 と 「プ レ ビ ュ ー設定」 が現れます。
プ レ ビ ュ ーは、 デ ィ ス ク 上の PDF フ ァ イ ルに基づいて生成 さ れます。 Acrobat 上で変更を
行な っ ていた場合、 ブ ロ ッ ク PDF を 「 フ ァ イル」 → 「保存」 ま たは 「フ ァ イル」 → 「別
名で保存 ...」 を用いてデ ィ ス ク に保存 し ては じ めて、 その変更はプ レ ビ ュ ーに反映 さ れま
す。 変更を受けたブ ロ ッ ク は、 ブ ロ ッ ク の名前の後にア ス タ リ ス ク が付いてい る こ と で識
別で き ます。 プ レ ビ ュ ー機能を設定 し て、 プ レ ビ ュ ー生成前にブ ロ ッ ク PDF が自動保存
さ れ る よ う にす る こ と も で き ます。 そ う すれば、 対話的に行な っ た変更が確実に、 ただち
にプ ラ グ イ ン内で反映 さ れます。
プ レ ビ ュ ー を設定 ブ ロ ッ ク プ レ ビ ュ ーの生成 と 、その背後の PPS の動作については、い
く つかの性質を、 「PDFlib ブ ロ ッ ク 」 → 「プ レ ビ ュ ー」 → 「プ レ ビ ュ ー設定 ...」 で設定す
る こ と がで き ます :
> カ レ ン ト ページ をプ レ ビ ュ ーす る か、 それ と も 文書全体をプ レ ビ ュ ーす る か。
> 生成 さ れたプ レ ビ ュ ー文書の出力デ ィ レ ク ト リ 。
> ブ ロ ッ ク PDF をプ レ ビ ュ ー生成前に自動保存。
> ブ ロ ッ ク 情報レ イ ヤー と 注釈を追加。
> PDF/A-1b ま たは PDF/X 状態を複製。こ れ ら の規格では、レ イ ヤー と 注釈の使用は制限
さ れてい ますので、 「ブ ロ ッ ク情報レ イヤー と 注釈を追加」 オプシ ョ ン と こ のオプシ ョ
ンは同時には使え ません。
> 「高度な PPS オプ シ ョ ン」ダ イ ア ロ グ を利用 し て、PPS API に従っ て PPS 関数のオプシ ョ
ン リ ス ト を追加指定す る こ と も で き ます。 た と えば、 PDF_set_option( ) の searchpath
オプ シ ョ ン を 用い て、 ブ ロ ッ ク への流 し 込みに使 う フ ォ ン ト や画像が置かれて い る
デ ィ レ ク ト リ を指定す る こ と がで き ま す。 高度なオプシ ョ ン を指定す る 際には、 PPS
コ ー ド を書 く プ ロ グ ラ マー と の連携の も と に行 う こ と を推奨 し ます。
プ レ ビ ュ ー設定は、 デ ィ ス ク フ ァ イ ルに保存 し て、 後で再読み込みす る こ と も 可能です。
プ レ ビ ュ ーで提供 さ れる情報 生成 さ れ る プ レ ビ ュ ー文書には、 元のページ内容 (背景)
と 、 流 し 込みが行われたブ ロ ッ ク のほかに、 さ ま ざ ま な情報 も 含ま れ る こ と があ り ます。
11.4 Acrobat で ブ ロ ッ ク を プ レ ビ ュ ー
291
こ の情報は、 ブ ロ ッ ク や PPS 設定のチ ェ ッ ク や改善に役立つ も のです。 デフ ォ ル ト 内容を
持つア ク テ ィ ブなブ ロ ッ ク それぞれについて、 以下の項目が生成 さ れます :
> エ ラ ーマー カ : 流 し 込みが成功 し なか っ たブ ロ ッ ク は、 打ち消 し 線の付いた矩形 と し
て図示 さ れ、 容易に識別す る こ と がで き ます。 エ ラ ーマーカは、 ブ ロ ッ ク が処理で き
なか っ た と き にはつねに生成 さ れます。
> し お り : ブ ロ ッ ク の処理結果は し お り に ま と め ら れ ます。 こ の し お り は、 ページ番号
と ブ ロ ッ ク の種類に従っ て、 かつエ ラ ーが起 き た と き はエ ラ ーに も 従っ て、 構造化 さ
れてい ます。 し お り は 「表示」 → 「ナ ビ ゲーシ ョ ンパネル」 → 「 し お り 」 で表示で き
ます。 し お り はつねに生成 さ れます。
> 注釈 : 処理 さ れたブ ロ ッ ク ご と に、 ブ ロ ッ ク 内容その も のに加え て、 ページ上に注釈
が生成 さ れ ます。 こ の注釈の矩形は、 元のブ ロ ッ ク の枠を図示 し てい ます (デフ ォ ル
ト 内容 と 流 し 込みモー ド に よ っ ては、 こ れはブ ロ ッ ク 内容の枠 と は異な る 場合があ る
のです)。 こ の注釈の中にはブ ロ ッ ク の名前が入っ てお り 、 ブ ロ ッ ク への流 し 込みがで
き なか っ た と き にはエ ラ ー メ ッ セージ も 入っ てい ます。 注釈はデフ ォ ル ト で生成 さ れ
ますが、 プ レ ビ ュ ー設定で無効化す る こ と も で き ます。 PDF/A-1 ・ PDF/X 規格では注
釈の使用は制限 さ れてい ますので、 「ブ ロ ッ ク PDF の PDF/A-1b または PDF/X 状態を複
製」 オプシ ョ ン を有効にす る と 、 注釈は生成 さ れません。
> レ イ ヤー : ページの内容は、 分析 と デバ ッ グが容易にな る よ う 、 複数の レ イ ヤーに分
けて配置 さ れます。 ページ背景 (すなわち元のページの内容)、 ブ ロ ッ ク の各種類、 流
し 込みがで き なか っ たエ ラ ーブ ロ ッ ク 、 ブ ロ ッ ク 情報を持っ た注釈について、 それぞ
れ別々の レ イ ヤーが生成 さ れ ます。 空の ま ま にな る レ イ ヤーについては生成 さ れ ませ
ん (エ ラ ーが何 も 起 き なか っ た場合等)。 レ イ ヤー一覧は 「表示」 → 「ナビゲーシ ョ ン
パネル」 → 「レ イ ヤー」 で表示で き ます。 デフ ォ ル ト では、 ページ上のすべての レ イ
ヤーが表示 さ れ ます。 いずれかの レ イ ヤーの内容を見え な く す る には、 その レ イ ヤー
の名前の左の目のア イ コ ン を ク リ ッ ク し ます。 レ イ ヤーの生成は、 プ レ ビ ュ ー設定で
無効化す る こ と も 可能です。 PDF/A-1 ・ PDF/X 規格ではレ イ ヤーの使用は制限 さ れて
い ますので、 「ブ ロ ッ ク PDF の PDF/A-1b または PDF/X 状態を複製」 オプシ ョ ン を有効
にす る と 、 レ イ ヤーは生成 さ れません。
PDF/A ま たは PDF/X 状態 を複製 「ブ ロ ッ ク PDF の PDF/A-1b または PDF/X 状態を複製」設
定は、 PDF/A 規格か PDF/X 規格に従っ た PDF 出力を生成す る 必要があ る と き に有用で
す。 複製モー ド は、 入力が以下のいずれかの規格に準拠 し てい る と き に有効にで き ます :
PDF/A-1b:2005
PDF/X-1a:2001・PDF/X-1a:2003
PDF/X-3:2002・PDF/X-3:2003
PDF/X-4・PDF/X-4p
PDF/X-5g・PDF/X-5pg
プ レ ビ ュ ーが複製モー ド で生成 さ れ る と き は、 PPS は、 ブ ロ ッ ク PDF の以下の性質を、 生
成す る プ レ ビ ュ ーへ複製 し ます :
> PDF 規格識別。
> 出力 イ ン テ ン ト 条件。
> ページ寸法。 すべてのページボ ッ ク ス を含みます。
> XMP 文書 メ タ デー タ 。
規格準拠の PDF 文書を複製す る 際には、 すべてのブ ロ ッ ク 流 し 込み操作が、 それぞれの
規格に準拠 し てい る 必要があ り ま す。 た と えば、 出力 イ ン テ ン ト がな ければ、 ICC プ ロ
フ ァ イ ルのない RGB 画像は使 う こ と がで き ません。 同様に、 使用 し てい る フ ォ ン ト はす
べて埋め込む必要があ り ます。 要請の全一覧は、 251 ページ 「10.3 PDF/X に よ る 印刷出
292
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
図 11.4
左 : ブ ロ ッ ク を持つ コ ン テナ文書。 右 : ブ ロ ッ ク情報レ イ ヤー と 注釈を持つプ レ ビ ュ ー PDF
力」 と 、 258 ページ 「10.4 PDF/A に よ る アーカ イ ビ ン グ」 に示 し てい ます。 PDF/A ま た
は PDF/X 複製モー ド でのブ ロ ッ ク 流 し 込み操作が、 選択 さ れてい る 規格に違反す る と き
には (デフ ォ ル ト 画像が RGB カ ラ ースペース を用いてい る に も かかわ ら ず、 文書が適切
な出力 イ ン テ ン ト を含んでいない場合等) 、 エ ラ ー メ ッ セージが表示 さ れ、 プ レ ビ ュ ーは
生成 さ れません。 こ れに よ り 、 ユーザーは作業フ ロ ーの非常に早い時点で、 規格違反の危
険を感知す る こ と がで き ます。
11.4 Acrobat で ブ ロ ッ ク を プ レ ビ ュ ー
293
11.5 PPS で ブ ロ ッ ク へ流 し 込み
PPS でブ ロ ッ ク へ流 し 込みを行 う には、 まずブ ロ ッ ク を含むページ を、 fit_pdi_page( ) 関
数で出力ページ上に貼 り 付け る 必要があ り ます。 ページ を貼 り 付けた後、 その上のブ ロ ッ
ク へ fill_*block( ) 関数群で流 し 込みを行 う こ と がで き ます。
簡単な例 : 可変テキス ト を テ ン プ レ ー ト に追加 PDF テ ンプ レー ト への動的テ キ ス ト の
追加は、 非常に頻繁に必要 と な る 動作です。 以下の コ ー ド では、 入力 PDF 文書 (テ ンプ
レー ト 、 ブ ロ ッ ク コ ン テナ) の中のページ を開 き 、 それを出力ページ上に配置 し 、 そ し て
firstname と い う テ キ ス ト ブ ロ ッ ク に可変テ キ ス ト を入れ込んでい ます :
doc = p.open_pdi_document(filename, "");
if (doc == -1)
throw new Exception("エラー : " + p.get_errmsg());
page = p.open_pdi_page(doc, pageno, "");
if (page == -1)
throw new Exception("エラー : " + p.get_errmsg());
p.begin_page_ext(width, height, "");
/* 取り込んだページを貼り付け */
p.fit_pdi_page(page, 0.0, 0.0, "");
/* 貼り付けたページ上のブロック一個へ流し込み */
p.fill_textblock(page, "firstname", "Serge", "encoding=winansi");
p.close_pdi_page(page);
p.end_page_ext("");
p.close_pdi_document(doc);
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの blocks/starter_block ト ピ ッ ク にあ り ます。
ブ ロ ッ ク のプ ロパテ ィ を上書 き 場合に よ っ てプ ロ グ ラ マーは、 ブ ロ ッ ク の定義が与え
てい る プ ロ パテ ィ 群を一部だけ採用 し 、その他のプ ロ パテ ィ を カ ス タ ムの値で上書 き し た
い こ と があ り ます。 こ れは さ ま ざ ま な場合に有用です :
> 業務上の要請であ る 種の上書 き が必要 と 判断 さ れ る 場合に対応。
> 画像・PDF ページの拡縮倍率を、ブ ロ ッ ク 定義か ら 採 ら ずに、アプ リ ケーシ ョ ンで算出。
> ブ ロ ッ ク の座標を プ ロ グ ラ ム で変え る 。 生成 し たい請求書のデー タ 項目数が一定でな
い場合等。
> 別々の ス ポ ッ ト カ ラ ー名を与え る こ と も 可能。 プ リ ン ト サービ ス業務で、 顧客ご と の
要請に合わせ る ため。
プ ロ パテ ィ を上書 き す る には、 fill_*block( ) 関数群のオプシ ョ ン リ ス ト にプ ロ パテ ィ の名
前 と その値を与え ます。 例 :
p.fill_textblock(page, "firstname", "Serge", "fontsize=12");
こ れは、 ブ ロ ッ ク の内部の fontsize プ ロ パテ ィ を、 与えた値 12 で上書 き し ます。 ほ と ん
どすべてのプ ロ パテ ィ 名を、 オプシ ョ ン と し て用い る こ と が可能です。
プ ロ パテ ィ の上書 き は、 それぞれの関数呼び出 し にのみ適用 さ れ ます。 ブ ロ ッ ク 定義
内に保持 さ れ る わけではあ り ません。
流 し 込んだ ブ ロ ッ ク の上に取 り 込んだページ を配置 取 り 込んだページは、 ど のブ ロ ッ
ク 流 し 込み関数を使 う よ り も 前に、 出力ページ上に配置 し てお く 必要があ り ます。 と い う
294
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
こ と は元ページは通常、 ブ ロ ッ ク 内容 よ り も 下に配置 さ れ る こ と にな り ます。 し か し 場合
に よ っ ては、流 し 込みが行われたブ ロ ッ ク よ り も 上に元ページ を配置 し たい こ と も あ る で
し ょ う 。 こ れを実現す る には、 fit_pdi_page( ) の blind オプシ ョ ン を用いてページ を一度貼
り 付け る こ と に よ り 、 そのページ上のブ ロ ッ ク と その位置を PPS に知 ら せてお き 、 ブ ロ ッ
ク への流 し 込みが済んだ後にページ を再び貼 り 付け る こ と に よ り 、実際にページ内容を表
示 さ せます :
/* ブロックを用意するためにページをblindモードで配置してページを見えなくする */
p.fit_pdi_page(page, 0.0, 0.0, "blind");
/* ブロックへ流し込み */
p.fill_textblock(page, "firstname", "Serge", "encoding=winansi");
/* ... いろいろなブロックへ流し込み ... */
/* ページを再度配置、今度は見えるように */
p.fit_pdi_page(page, 0.0, 0.0, "");
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの blocks/block_below_contents ト ピ ッ ク にあ り ま
す。
ブ ロ ッ ク へ流 し 込む際に コ ン テ ナページ を無視 取 り 込んだブ ロ ッ ク は、 そのブ ロ ッ ク
の背景のページ内容を一切参照せずに、 プ レース ホルダ と し て使っ て も よ いで し ょ う 。 ブ
ロ ッ ク を持つ コ ン テナページ をブ ラ イ ン ド モー ド で、 すなわち fit_pdi_page( ) で blind オ
プシ ョ ン を指定 し て、 1 個ない し 複数のページ上に取 り 込んだ う えで、 ブ ロ ッ ク への流 し
込みを行 う と い う 方法です。 こ う すれば、 出力ページ上に コ ン テナページ を貼 り 付け る こ
と な く 、 ブ ロ ッ ク やそのプ ロ パテ ィ の利点を活用する こ と がで き 、 ま た、 ブ ロ ッ ク を複数
のページ上に (あ る いは同一出力ページ上に さ え) 複製す る こ と が可能にな り ます。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの blocks/duplicate_block ト ピ ッ ク にあ り ます。
テキス ト フ ロ ーブ ロ ッ ク を連結 テ キ ス ト フ ロ ーブ ロ ッ ク は、 前のブ ロ ッ ク か ら あふれ
た テ キ ス ト が次のブ ロ ッ ク に入 る よ う 、 連結す る こ と が可能です。 た と えば、 長い可変テ
キ ス ト があ っ て、 別のページへ続かせ る 必要が想定 さ れ る 場合、 2 個のブ ロ ッ ク を連結 し
ておけば、 1 個目のブ ロ ッ ク がいっぱいにな っ て も 、 残 り は 2 個目のブ ロ ッ ク へ流 し 込ま
れます。
PPS は、 fill_textblock( ) と ブ ロ ッ ク プ ロ パテ ィ に与え ら れた テ キ ス ト か ら 、 1 個のテ キ
ス ト フ ロ ーを内部的に生成 し ます。 連結 さ れていないブ ロ ッ ク の場合は、 こ のテ キ ス ト フ
ロ ーはそのブ ロ ッ ク 内に配置 さ れ、そのテ キ ス ト フ ロ ーハン ド ルは呼び出 し が終わっ た時
点で削除 さ れ、 あふれた テ キ ス ト は失われます。
連結 さ れた テ キ ス ト フ ロ ーの場合は、 最初のブ ロ ッ ク へ流 し 込んだ後に余っ てい る あ
ふれテ キ ス ト を、 その次のブ ロ ッ ク へ流 し 込む こ と がで き ます。 最初のテ キ ス ト フ ロ ーの
余 り がブ ロ ッ ク 内容 と し て使われ、 新たなテ キ ス ト フ ロ ーは作成 さ れません。 テ キ ス ト フ
ロ ーブ ロ ッ ク の連結は以下の よ う に動作 し ます :
> 連結 さ れたテ キ ス ト ブ ロ ッ ク のチ ェーンの中の最初の fill_textblock( ) を呼び出す時は、
textflowhandle オプシ ョ ンに値 -1 を与え る 必要があ り ます。 内部的に生成 さ れた テ キ
ス ト フ ロ ーハン ド ルを fill_textblock( ) が返 し ますので、 アプ リ ケーシ ョ ン側で こ れを
保持 し てお く 必要があ り ます。
> fill_textblock( )
への次の呼び出 し では、 前段で返 さ れた テ キ ス ト フ ロ ーハン ド ルを
textflowhandle オプシ ョ ンに与え る こ と がで き ます ( こ の と き text パ ラ メ タ にテ キ ス
ト を与えて も 無視 さ れ る ので、 空にす る べ き です)。 ブ ロ ッ ク へ、 テ キ ス ト フ ロ ーの余
り が流 し 込まれます。
11.5 PPS で ブ ロ ッ ク へ流 し 込み
295
> こ の処理を、 さ ら な る テ キ ス ト フ ロ ーブ ロ ッ ク 群に対 し て繰 り 返す こ と がで き ます。
> 返 さ れたテ キ ス ト フ ロ ーハン ド ルは、info_textflow( ) に与えれば、ブ ロ ッ ク 流 し 込みの
結果を知 る こ と がで き ます。 終了状況やテ キ ス ト の終了位置な ど がわか り ます。
なお、 fitmethod プ ロ パテ ィ は clip に設定す る 必要があ り ます (textflowhandle を与え て
い る と き はど のみち こ れがデフ ォ ル ト です) 。 テ キ ス ト フ ロ ーブ ロ ッ ク を連結す る 基本的
な コ ー ド の骨組みは以下の よ う にな り ます :
p.fit_pdi_page(page, 0.0, 0.0, "");
tf = -1;
for (i = 0; i < blockcount; i++)
{
String optlist = "encoding=winansi textflowhandle=" + tf;
tf = p.fill_textblock(page, blocknames[i], text, optlist);
text = null;
if (tf == -1)
break;
/* いちばん最近のfit_textflow()呼び出しの結果をチェック */
reason = (int) p.info_textflow(tf, "returnreason");
result = p.get_parameter("string", (float) reason);
/* テキストが全部配置されたならループを抜ける */
if (result.equals("_stop"))
{
p.delete_textflow(tf);
break;
}
}
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの blocks/linked_textblocks ト ピ ッ ク にあ り ます。
ブ ロ ッ ク の流 し 込み順序 ブ ロ ッ ク 関数群 fill_*block( ) は、プ ロ パテ ィ と ブ ロ ッ ク 内容を、
以下の順序で処理 し ます :
> 背景:backgroundcolor プ ロ パテ ィ が存在 し 、かつ None 以外のカ ラ ースペース キーワー
ド を持っ てい る と き は、 ブ ロ ッ ク 領域は指定 さ れた色で塗 ら れます。
> 枠線 : bordercolor プ ロ パテ ィ が存在 し 、かつ None 以外のカ ラ ースペース キーワー ド を
持っ てい る と き は、 ブ ロ ッ ク の枠は指定 さ れた色 と 線幅で描線 さ れます。
> 内容 : 与え ら れたブ ロ ッ ク 内容 と 、 bordercolor ・ linewidth 以外のすべてのプ ロ パテ ィ
が処理 さ れます。
> テ キ ス ト 行 ・ テ キ ス ト フ ロ ーブ ロ ッ ク : テ キ ス ト も デフ ォ ル ト テ キ ス ト も 与え ら れて
いない と き は、 何の出力 も 行われません。 背景色やブ ロ ッ ク の枠線 も あ り ません。
入れ子にな っ た ブ ロ ッ ク ブ ロ ッ ク へ流 し 込みを行 う 前には、 そのブ ロ ッ ク を含むペー
ジ を出力ページ上に ま ず貼 り 付け る 必要が あ り ま す (そ う でない と 、 ページ を拡縮 ・ 回
転 ・ 平行移動 し た後のブ ロ ッ ク の位置を PPS が知 り え ないため)。 ページ を ブ ロ ッ ク の コ
ン テナ と し てのみ使っ てお り 、 静的内容を新ページへ複製 し な く て よ い場合には、 取 り 込
んだページ を、 blind オプシ ョ ン を用いて貼 り 付け る こ と がで き ます。
取 り 込んだページ を、 ど の よ う な方法で出力ページ上に貼 り 付けて も 、 ブ ロ ッ ク への
流 し 込みは行 う こ と がで き ます :
> ページは、 fit_pdi_page( ) で直接貼 り 付け る こ と がで き ます。
> ページは、 テーブルセル内に fit_table( ) で間接的に貼 り 付け る こ と がで き ます。
296
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
> ページは、他の PDF ブ ロ ッ ク の内容 と し て fill_pdfblock( ) で貼 り 付け る こ と がで き ます。
こ の 3 番目の方法、 すなわち PDF ブ ロ ッ ク へ、 ブ ロ ッ ク を含む他のページ を流 し 込む と
い う 方法を用い る と 、 ブ ロ ッ ク コ ン テナを入れ子にする こ と がで き ます。 こ れを活用す る
と 、 面白い使い方を簡単に実装で き ます。 た と えば、 2 段階のブ ロ ッ ク 流 し 込み処理で、
組み付け と パー ソ ナ ラ イ ゼーシ ョ ンの両方を実装す る こ と がで き ます。
> 第一層のブ ロ ッ ク コ ン テナページには、い く つかの大 き な PDF ブ ロ ッ ク を置 き ます。こ
れ ら は、 印刷す る 紙の上の主要な領域を表 し てい ます。 PDF ブ ロ ッ ク の配置は、 想定
し てい る 紙の後工程を反映 し てい ます (折 り ・ 断裁等)。
> こ の第一層の PDF ブ ロ ッ ク それぞれへ、第二層の コ ン テナ PDF ページ を流 し 込みます。
こ の PDF ページには、 テ キ ス ト ・ 画像 ・ PDF ブ ロ ッ ク を置いてお き 、 それ ら へ可変テ
キ ス ト を流 し 込んでパー ソ ナ ラ イ ゼーシ ョ ン を行い ます。
こ の方法で、 ブ ロ ッ ク コ ン テナは入れ子にす る こ と がで き ます。 ブ ロ ッ ク の入れ子は何重
で も 可能ですが、 三重以上の入れ子が必要にな る こ と は まれで し ょ う 。
こ の第二層のブ ロ ッ ク コ ン テナは、 各組み付けページで同 じ にす る こ と も で き ます し 、
別の も のにす る こ と も で き ます。 も し 同 じ に し た場合は、 すべての第二層ブ ロ ッ ク への流
し 込みが済んでか ら 、 次の第一層ブ ロ ッ ク への流 し 込みを行 う 必要が あ り ま す。 なぜな
ら 、 第二層ブ ロ ッ ク をページ上に配置す る ための情報は、 次の イ ン ス タ ン ス の第二層 コ ン
テナページが配置 さ れた時点で、 利用不可能にな る か ら です。
ク ッ ク ブ ッ ク 完全な コ ー ド サン プルが ク ッ ク ブ ッ クの blocks/nested_blocks ト ピ ッ ク にあ り ます。
ブ ロ ッ ク の座標 ブ ロ ッ ク の矩形の座標は、 PDF のデフ ォ ル ト 座標系を参照 し てい ます。
ブ ロ ッ ク を含んだページ を PPS で出力ページに配置す る と き には、 fit_pdi_page( ) に対 し
てい く つかの配置オプシ ョ ンや拡縮オプシ ョ ン を与え る こ と がで き ま す。 こ れ ら のオプ
シ ョ ンは、 そのブ ロ ッ ク が処理 さ れ る 際に考慮 さ れます。 こ れを利用す る と 、 1 つのテ ン
プ レー ト ページ を出力ページ上に何度で も 配置 し て、そのたびにそのブ ロ ッ ク 群へデー タ
を流 し 込む こ と がで き ます。 た と えば一枚の組み付け紙上に、 1 つの名刺テ ンプ レー ト を
4 回配置す る と い っ た こ と が可能です。 ブ ロ ッ ク 関数群は、 座標系の変換を正 し く 行い、
すべてのブ ロ ッ ク に対 し て、 それがページ上に配置 さ れ る たびに、 正 し く テ キ ス ト を配置
し ま す。 ク ラ イ ア ン ト に求め ら れ る のはただ、 ページ を配置 し て、 そ し て その配置 し た
ページ上のすべてのブ ロ ッ ク を処理す る こ と だけです。 以後はそのページ を、 出力ページ
上の他の場所に配置 し た う えで、その新 し い場所に対 し て さ ら にブ ロ ッ ク 処理操作を行 う
こ と がで き 、 こ れを繰 り 返 し てい く こ と が可能です。
Block Plugin におけ る ブ ロ ッ ク 座標の表示の さ れかたは、 PDF フ ァ イ ル内に格納 さ れて
い る も の と は異な っ てい ま す。 プ ラ グ イ ン では Acrobat の方式を用いて、 座標の原点を
ページの左上隅に置いてい ま すが、 内部座標 (ブ ロ ッ ク 内に格納 さ れてい る も の) では
PDF の方式を用いて、 座標の原点をページの左下隅に置いてい る ためです。 プ ロ パテ ィ ダ
イ ア ロ グの座標表示は、 Acrobat で指定 さ れてい る 単位に も 従い ます (281 ページ 「ブ ロ ッ
ク の大 き さ と 位置」 参照)。
ブ ロ ッ ク プ ロパテ ィ で スポ ッ ト カ ラ ー ブ ロ ッ ク プ ロ パテ ィ で特色 (ス ポ ッ ト カ ラ ー) を
使 う には、 「...」 を ク リ ッ ク すれば、 HKS ・ PANTONE ス ポ ッ ト カ ラ ーの全一覧を表示 さ せ
る こ と がで き ます。 こ れ ら の色名は PPS に内蔵 さ れてお り (73 ページ 「3.5.2 Pantone ・
HKS ・ カ ス タ ム ス ポ ッ ト カ ラ ー」 参照) 、 それ以上の準備な し に使用で き ます。 カ ス タ ム
ス ポ ッ ト カ ラ ーに対 し ては、 Block Plugin で代替色を定義す る こ と が可能です。 ブ ロ ッ ク
プ ロ パテ ィ で代替色を指定 し ていない と き は、 PPS アプ リ ケーシ ョ ンで makespotcolor( )
を用いて カ ス タ ム ス ポ ッ ト カ ラ ーを あ ら か じ め定義 し てお く 必要があ り ます。そ う でない
と ブ ロ ッ ク への流 し 込みは失敗 し ます。
11.5 PPS で ブ ロ ッ ク へ流 し 込み
297
11.6 ブ ロ ッ ク のプ ロパテ ィ
PPS と Block Plugin では、 ど の種類のブ ロ ッ ク に対 し て も 適用す る こ と ので き る 一般プ ロ
パテ ィ 群が用意 さ れてい ます。 そのほかに、 ブ ロ ッ ク の種類 「テキス ト 行」 ・ 「テキス ト フ
ロー」 ・ 「画像」 ・ 「PDF ブ ロ ッ ク」 にそれぞれ特有のプ ロ パテ ィ 群 も あ り ます。
プ ロ パテ ィ は、 ハン ド ル と ア ク シ ョ ン リ ス ト を除いて、 オプシ ョ ン リ ス ト と 同 じ デー
タ 型に対応 し てい ます。
ブ ロ ッ ク プ ロ パ テ ィ の名前は一般に、 fit_image( ) に対す る オ プ シ ョ ン と 同 じ です
(fitmethod ・ charspacing 等)。 その場合、 それぞれの動作は、 対応す る オプシ ョ ンの解説
に書いて あ る も の と ま っ た く 同 じ です。
11.6.1 管理プ ロパテ ィ 群
管理プ ロ パ テ ィ 群は、 すべて の種類のブ ロ ッ ク に適用 さ れ ま す。 必須の項目は、 Block
Plugin に よ っ て自動生成 さ れます。 表 11.4 に、 管理プ ロ パテ ィ の一覧を示 し ます。
表 11.4 管理プ ロパテ ィ 一覧
キーワー ド
と り う る値 ・ 解説
Description
(文字列) ブ ロ ッ クの機能に関する、 人が読める説明。 エ ン コ ーデ ィ ングは PDFDocEncoding か
Unicode (後者の場合は先頭 BOM)。 こ のプ ロパテ ィ は、 ユーザーへの情報提供のためだけにあ り 、
PPS には無視 さ れます。
Locked
(論理値) true な ら、 ブ ロ ッ ク と そのプ ロパテ ィ は Block Plugin で編集で き ません。 こ のプ ロパ
テ ィ は PPS には無視 さ れます。 デ フ ォ ル ト : false
Name
(文字列、 必須) ブ ロ ッ クの名前。 ブ ロ ッ ク 名は、 ページ ご と に一意である必要があ り ますが、 文
書内では一意で な く て もかまいません。 3 種のキ ャ ラ ク タ [ ] / は、 ブ ロ ッ ク名には使え ません。
ブ ロ ッ ク名は最長 125 文字です。
Subtype
(キーワー ド 、 必須) ブ ロ ッ ク の種類によ っ て、 Text ・ Image ・ PDF のいずれか。 テキス ト 行ブ ロ ッ
ク と テキス ト フ ローブ ロ ッ クは、 と も に Subtype が Text にな る こ と に留意 し て く だ さ い。 両者は
textflow プ ロパテ ィ によ っ て識別 さ れます。
textflow
(論理値) 一行処理か複数行処理かを制御 し ます。 こ のプ ロパテ ィ は、 Block Plugin のユーザー イ ン
タ フ ェ ースでは表示 さ れず、 それぞれテキス ト 行ブ ロ ッ ク と テキス ト フ ローブ ロ ッ ク と し て表 さ
れます (デ フ ォ ル ト : false) :
false
テキス ト 行ブ ロ ッ ク : テキス ト が一行で組まれ、 fit_textline( ) で処理 さ れます。
true
テキス ト フ ローブ ロ ッ ク : テキス ト が複数行にわた る場合があ り 、 fit_textflow( ) で処
理 さ れます。 標準テキス ト プ ロパテ ィ 群に加え、 テキス ト フ ロー関連のプ ロパテ ィ 群も
指定で き ます (表 11.9 参照)。
(キーワー ド 、 必須) つねに Block
Type
11.6.2 矩形プ ロパテ ィ 群
矩形プ ロ パテ ィ 群は、 すべての種類のブ ロ ッ ク に適用 さ れます。 こ れ ら は、 ブ ロ ッ ク の矩
形本体の書式を記述 し ます。 必須の項目は、 Block Plugin に よ っ て自動生成 さ れ ます。 表
11.5 に、 矩形プ ロ パテ ィ の一覧を示 し ます。
表 11.5 矩形プ ロパテ ィ 一覧
キーワー ド
と り う る値 ・ 解説
background- (色) このプ ロパテ ィ が存在 し 、 かつ None 以外の色空間キーワー ド を持つな らば、 矩形が描かれ、
color
与え ら れた色で塗ら れます。 既存のページ内容を おおい隠 し たい と き に有用です。 デ フ ォル ト :
None
298
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 11.5 矩形プ ロパテ ィ 一覧
キーワー ド
と り う る値 ・ 解説
bordercolor
(色) こ のプ ロパテ ィ が存在 し 、 かつ None 以外の色空間キーワー ド を持つな らば、 矩形が描かれ、
与え られた色で描線 さ れます。 デ フ ォル ト : None
linewidth
(float。 正の値でなければな ら ない) ブ ロ ッ クの矩形を描 く のに用いる線の描線幅。 bordercolor 設
定時のみ有効です。 デ フ ォル ト : 1
Rect
(矩形、 必須) ブ ロ ッ クの座標。 座標原点はページ左下隅。 ただ し Block Plugin では、 座標は
Acrobat の方式で、 すなわちページ左上隅を原点 と し て表 さ れます。 座標の単位は、 Acrobat でそ
の時点で選択 さ れている単位で表示 さ れますが、 PDF フ ァ イル内部ではつねにポ イ ン ト 単位で格
納 さ れています。
Status
(キーワー ド ) PPS と ブ ロ ッ ク 機能がブ ロ ッ ク を処理する方法を記述 し ます (デ フ ォ ル ト :
active) :
active
ブ ロ ッ ク は、 そのプ ロパテ ィ に従っ て完全に処理 さ れます。
ignore
ブ ロ ッ ク は無視 さ れます。
ignoredefault
defaulttext/image/pdf プ ロパテ ィ が無視 さ れる、 すなわち可変内容がない と き (特にプ
レ ビ ュ ーで) ブ ロ ッ ク が空のま まにな る点を除き、 active と 同 じ です。 こ れは特に、 ブ
ロ ッ クがプ レ ビ ュ ー生成のためのデ フ ォル ト 内容を持っ ているかも し れないけれど も、
サーバサイ ド で ブ ロ ッ クへ流 し 込みが行われる際にはそのブ ロ ッ クのデ フ ォ ル ト 内容が
用い られないよ う に し たい と き に有用です。 ま た、 ブ ロ ッ ク を プ レ ビ ュ ーする際に も、
ブ ロ ッ ク プ ロパテ ィ か ら デ フ ォ ル ト 内容を削除する こ と な く デ フ ォル ト 内容を無効化す
る ために用いる こ と がで き ます。
static
可変内容が配置 さ れません。 ブ ロ ッ ク にデ フ ォル ト のテキス ト ・ 画像 ・ PDF 内容があれ
ば、 それが用い られます。
11.6.3 書式プ ロパテ ィ 群
書式プ ロ パテ ィ 群は、 組版の詳細を指定 し ます :
> 表 11.6 に、 透過書式プ ロ パテ ィ の一覧を示 し ます。 こ れ ら は、 すべての種類のブ ロ ッ
ク に適用 さ れます。
> 表 11.7 に、 テ キ ス ト 書式プ ロ パテ ィ の一覧を示 し ます。 こ れ ら は、 テ キ ス ト 行ブ ロ ッ
ク と テ キ ス ト フ ロ ーブ ロ ッ ク に適用 さ れます。
表 11.6 透過書式プ ロパテ ィ 一覧 (すべてのブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
blendmode
(キーワー ド リ ス ト 。 PDF 1.4。 PDF/A モー ド で用い られる と きは値 Normal を持つ必要があ り ま
す) ブ レ ン ド モー ド の名前 : None・Color・ColorDodge・ColorBurn・Darken・Difference・
Exclusion・HardLight・Hue・Lighten・Luminosity・Multiply・None・Normal・Overlay・
Saturation・Screen・SoftLight。 デ フ ォル ト : None
opacityfill
(float。 PDF 1.4。 PDF/A モー ド で用い られる と きは値 1 を持つ必要があ り ます) 塗 り 操作の不透明
度を範囲 0 ∼ 1 で表 し た もの。 値 0 は完全透過を意味 し 、 1 は完全不透過を意味 し ます。
opacitystroke
(float。 PDF 1.4。 PDF/A モー ド で用い られる と きは値 1 を持つ必要があ り ます) 描線操作の不透明
度を範囲 0 ∼ 1 で表 し た もの。 値 0 は完全透過を意味 し 、 1 は完全不透過を意味 し ます。
11.6 ブ ロ ッ クのプ ロパテ ィ
299
表 11.7 テキス ト 書式プ ロパテ ィ 一覧 (テキス ト 行 ・ テキス ト フ ローブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
charspacing
(float またはパーセ ン ト 値) 字間。 パーセ ン ト 値は fontsize に対する割合。 デ フ ォル ト : 0
decorationabove
(論理値) true の場合、 underline ・ strikeout ・ overline オプ シ ョ ン で有効に さ れた テキス ト 装飾が
テキス ト の上に描かれ、 そ う でなければテキス ト の下に描かれます。 描画順序を変え る と 、 装飾
線の書式に影響を与え ます。 デ フ ォ ル ト : false
fillcolor
(色) テキス ト の塗 り 色。 デ フ ォ ル ト : gray 0 (= 黒)
fontname
1
(文字列) フ ォ ン ト 名。 load_font( ) が求める もの と 同 じ です。 Block Plugin では、 シ ス テムで利用
可能な フ ォ ン ト の一覧が表示 さ れます。 ただ し こ う し た フ ォ ン ト 名は、 Mac ・ Windows ・ Unix シ ス
テム間で互換 と は限 り ません。 fontname の先頭が 「@」 キ ャ ラ ク タ である場合は、 そのフ ォ ン ト
は縦書き モー ド で適用 さ れます。
ブ ロ ッ クへの流 し 込み時には、 fill_textblock( ) にオプ シ ョ ン と し て テキス ト のエ ン コ ーデ ィ ング を
与え る必要があ り ます。 ただ し 、 font オプ シ ョ ンが与え られている場合は除き ます。
fontsize1
(float) 文字のサイ ズをポ イ ン ト 単位で指定 し ます
fontstyle
(キーワー ド ) フ ォ ン ト ス タ イル。 normal ・ bold ・ italic ・ bolditalic のいずれかでなければな り ませ
ん
horizscaling
(float またはパーセ ン ト 値) テキス ト の縦倍率。 デ フ ォ ル ト : 100%
italicangle
(float) テキス ト の斜体角度を度単位で表 し た も の。 デ フ ォル ト : 0
kerning
(論理値) カ ーニ ングの動作。 デ フ ォ ル ト : false
monospace
(整数 : 1 ∼ 2048) フ ォ ン ト のすべての文字に同 じ 幅を強制 し ます。 デ フ ォル ト : 無指定 ( フ ォ ン
ト の メ ト リ ッ クが用い られます)
overline
(論理値) 上線のモー ド 。 デ フ ォ ル ト : false
strikeout
(論理値) 取 り 消 し 線のモー ド 。 デ フ ォ ル ト : false
strokecolor
(色) テキス ト の描線色。 デ フ ォ ル ト : gray 0 (= 黒)
strokewidth
(float ・ パーセ ン ト 値 ・ キーワー ド のいずれか。 textrendering が袋文字に設定 さ れている と きのみ
意味を持ち ます) 袋文字の線幅 (ユーザー座標で、 または percentage に対するパーセ ン ト 値で)。
キーワー ド auto ま たは値 0 は内蔵のデ フ ォル ト を用います。 デ フ ォ ル ト : auto
textrendering
(整数) テキス ト 表現モー ド 。 値 3 のみが Type 3 フ ォ ン ト に対 し て意味を持ち ます (デ フ ォ ル ト :
0) :
0
P
1
2
3
P
テキス ト を塗る
4
テキス ト を塗 り 、 ク リ ッ ピ ングパスに追加
テキス ト を描線 (袋文字)
5
テキス ト を描線 し 、 ク リ ッ ピ ングパスに追加
テキス ト を塗 り 、 描線
6
テキス ト を塗 り 、 描線 し 、 ク リ ッ ピ ン グパスに追加
不可視テキス ト
7
テキス ト を ク リ ッ ピ ングパスに追加
textrise
(float またはパーセ ン ト 値) テキス ト ラ イ ズのパラ メ タ 。 パーセ ン ト 値は fontsize に対する割合。
デフ ォル ト : 0
underline
(論理値) 下線のモー ド 。 デ フ ォ ル ト : false
underlineposition
(float ・ パーセ ン ト 値 ・ キーワー ド のいずれか) 下線テキス ト の描線のベース ラ イ ンに対する相対
位置。 パーセ ン ト 値は fontsize に対する割合。 デ フ ォ ル ト : auto
300
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 11.7 テキス ト 書式プ ロパテ ィ 一覧 (テキス ト 行 ・ テキス ト フ ローブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
underlinewidth
(float ・ パーセ ン ト 値 ・ キーワー ド のいずれか) 下線テキス ト の線幅。 パーセ ン ト 値は fontsize に
対する割合。 デ フ ォル ト : auto
wordspacing (float またはパーセ ン ト 値) 単語間隔。 パーセ ン ト 値は fontsize に対する割合。 デ フ ォ ル ト : 0
1. こ のプ ロパテ ィ は、 テキス ト 行 ・ テキス ト フ ローブ ロ ッ ク では必須です。 Block Plugin は こ れを自動生成 し ます。
11.6.4 テキス ト 作成プ ロパテ ィ 群
テ キ ス ト 作成プ ロ パテ ィ 群は、 テ キ ス ト 行 ・ テ キ ス ト フ ロ ーブ ロ ッ ク の前処理工程を指定
し ます。 表 11.8 に、 テ キ ス ト 行 ・ テ キ ス ト フ ロ ーブ ロ ッ ク に適用 さ れ る テ キ ス ト 作成プ
ロ パテ ィ の一覧を示 し ます。
表 11.8 テキス ト 作成プ ロパテ ィ 一覧 (テキス ト 行 ・ テキス ト フ ローブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
charref
(論理値) true な ら、 数値参照 ・ 文字参照 ・ グ リ フ 名参照の置き換え を行います。 デ フ ォ ル ト : グ
ローバルな charref なパラ メ タ
escapesequence
(論理値) true な ら、 文字列内のエ スケープ シーケ ン スの置き換え を行います。 デ フ ォル ト : グ
ローバルな escapesequence パラ メ タ
features
(キーワー ド の リ ス ト ) script ・ language オプ シ ョ ンに従 っ て、 OpenType フ ォ ン ト のどの タ イ ポグ
ラ フ ィ 機能を テキス ト に適用するかを指定 し ます。 フ ォ ン ト 内に存在 し ない機能に対するキー
ワー ド は、 エ ラ ーを出 さ ずに無視 さ れます。 以下のキーワー ド を与え る こ と がで き ます :
_none
フ ォ ン ト 内のどの機能 も適用 し ません。 ただ し vert 機能だけは、 novert キーワー ド で
明示的に無効化する必要があ り ます。
< 名前 >
4 文字の OpenType タ グ名を与えてその機能を有効に し ます。 よ く 用い ら れる機能名は
liga ・ ital ・ tnum ・ smcp ・ swsh ・ zero です。 利用で き るすべての機能の名前 と 説明の全
一覧は、 142 ページ 「6.3.1 対応 し ている OpenType レ イ アウ ト 機能」 に示 し ています。
no< 名前 > 機能名の前に接尾辞 no をつける と (noliga 等) その機能が無効化 さ れます。
デ フ ォル ト : 横書き モー ド では _none。 縦書き モー ド では vert が自動的に適用 さ れます。
OpenType 機能を利用する には、 load_font( ) で readfeatures オプ シ ョ ンが必須です。
language
(キーワー ド 。 script が与え られている と きのみ意味を持ち ます) 指定 さ れた言語に従 っ て テキス
ト が処理 さ れます。 こ れは features ・ shaping オプ シ ョ ンに対 し て意味を持ち ます。 キーワー ド の
全一覧は 150 ページ 「6.4.2 用字系 と 言語」 に示 し ています。 例 : ARA (ア ラ ビ ア語) ・ JAN (日本
語) ・ HIN ( ヒ ンデ ィ ー語)。 デ フ ォル ト : _none (言語未定義)
script
(キーワー ド 。 shaping=true の と きは必須) 指定 さ れた用字系に従っ て テキス ト が処理 さ れます。
こ れは features ・ shaping ・ advancedlinebreak オプ シ ョ ン に対 し て意味を持ち ます。 用字系 と し て
も っ と も よ く 用い られるキーワー ド は次の と お り です : _none (未定義用字系) latn ・ grek ・ cyrl ・
armn ・ hebr ・ arab ・ deva ・ beng ・ guru ・ gujr ・ orya ・ taml ・ thai ・ laoo ・ tibt ・ hang ・ kana ・ han。
キーワー ド _auto を指定する と 、 テキス ト 内のキ ャ ラ ク タ の多数が属する用字系が選ばれますが、
ただ し _latn と _none は無視 さ れます。 キーワー ド の全一覧は 150 ページ 「6.4.2 用字系 と 言語」
に示 し ています。 デ フ ォル ト : _none
shaping
(論理値) true な ら、 script ・ language オプ シ ョ ンに従 っ て文字の字形選択 (シ ェ ーピ ン グ) が行
われます。 script オプ シ ョ ンが _none 以外の値を持つ必要があ り 、 かつ、 必要な シ ェ ーピ ングテー
ブルがフ ォ ン ト 内に存在 し ている必要があ り ます。 デ フ ォル ト : false
11.6 ブ ロ ッ クのプ ロパテ ィ
301
11.6.5 テキス ト 組版プ ロパテ ィ 群
表 11.9 に、 テ キ ス ト フ ロ ーブ ロ ッ ク に対 し てのみ用い る こ と がで き る テ キ ス ト 組版プ ロ
パテ ィ の一覧を示 し ます。 ただ し stamp プ ロ パテ ィ だけは、 テ キ ス ト 行ブ ロ ッ ク に対 し て
も 用い る こ と がで き ます。 こ れ ら は、 テ キ ス ト フ ロ ーを処理す る ための初期オプシ ョ ン リ
ス ト を構築す る ために用い ら れます (create_textflow( ) の optlist パ ラ メ タ と 対応 し てい ま
す) 。 テ キ ス ト フ ロ ーで用い る イ ン ラ イ ンオプシ ョ ン リ ス ト は、 プ ラ グ イ ンでは指定す る
こ と がで き ず、 サーバ上で fill_textblock( ) に よ る ブ ロ ッ ク への流 し 込みの際に、 ま たはブ
ロ ッ ク の defaulttext プ ロ パテ ィ 内で、 テ キ ス ト 内容の一部 と し て与え る こ と がで き ます。
表 11.9 テキス ト 組版プ ロパテ ィ 一覧 (主にテキス ト フ ローブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
adjustmethod
(キーワー ド ) minspacing ・ maxspacing オプ シ ョ ン で指定 さ れた制限内で単語間隔を詰めた り 拡げ
た り し て も テキス ト の一部が行内に収ま ら ない時、 行の調整に用いる方式 (デ フ ォル ト : auto) :
auto
次の方式を順に適用 : shrink ・ spread ・ nofit ・ split。
clip
はめ込み枠の右端 (rightindent オプ シ ョ ン を考慮) か らはみ出 し た部分を切 り 落 と す点
を除いて、 nofit と 同 じ 。
nofit
最後の単語を次行へ送 り ます。 ただ し 、 残 さ れる (短い) 行が、 nofitlimit オプ シ ョ ン
で指定 さ れたパーセ ン ト 値よ り も 短 く な ら ない場合に限 り ます。 均等配置の段落であ っ
て も、 若干がたついて見え る こ と があ り ます。
単語が行内に収ま ら ない と き、 テキス ト を shrinklimit の制限内で圧縮 し ます。 それで も
収ま ら なければ nofit 方式を適用 し ます。
shrink
split
spread
最後の単語を次行へ送 ら ず、 強制的にハイ フ ネーシ ョ ン し ます。 テキス ト フ ォ ン ト な ら
ハイ フ ンキ ャ ラ ク タ を挿入 し ますが、 記号フ ォ ン ト な ら挿入 し ません。
最後の単語を次行へ送 り 、 残 さ れた (短い) 行を均等配置する よ う 単語内の文字間の間
隔を spreadlimit の制限内で拡げます。 それで均等配置で き なければ nofit 方式を適用 し
ます。
advancedlinebreak
(論理値) 複雑用字系で必要 と さ れる高度な改行アルゴ リ ズムを適用 し ます。 こ れは タ イ語等、 単
語間の区切 り を空白キ ャ ラ ク タ を用いて示 さ ない用字系での改行に必須です。 locale ・ script オプ
シ ョ ン に従います。 デ フ ォ ル ト : false
alignment
(キーワー ド ) 段落内の行の書式を指定。 デ フ ォル ト : left。
left
左揃え (leftindent を始点 と し て)。
center
中央揃え (leftindent から rightindent ま での間で)。
right
右揃え (rightindent を終点 と し て)。
justify
両端揃え。
avoidemptybegin
(論理値) true な ら、 はめ込み枠先頭の空行が削除 さ れます。 デ フ ォ ル ト : false
fixedleading
(論理値) true な ら、 各行内で最初に見つかっ た行送 り 値を用います。 そ う で ないな ら、 行内のす
べての行送 り 値の う ちの最大値を用います。 デ フ ォル ト : false
hortabmethod
(キーワー ド ) テキス ト 内の水平 タ ブの扱い。 算出位置がカ レ ン ト テキス ト 位置よ り 左の と きは、
その タ ブは無視 さ れます (デ フ ォ ル ト : relative) :
relative
hortabsize で指定 さ れた分、 位置を進めます。
typewriter hortabsize の次の倍数ま で位置を進めます。
ruler
hortabsize
302
ruler オプ シ ョ ン内の n 番目の タ ブ値ま で位置を進めます。 こ こ で n は、 その行内でそ
れま でに見つか っ た タ ブの数です。 n が タ ブ位置の数を超え る分については、 relative
方式を適用 し ます。
(float またはパーセ ン ト 値) 水平 タ ブの幅1。 その解釈は hortabmethod オプ シ ョ ン に依存 し ます。
デ フ ォ ル ト : 7.5%
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 11.9 テキス ト 組版プ ロパテ ィ 一覧 (主にテキス ト フ ローブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
lastalignment
(キーワー ド ) 段落内の最終行の書式。 alignment オプ シ ョ ンのすべてのキーワー ド を用いる こ と
がで き るほか、 以下のキーワー ド も用いる こ と がで き ます (デ フ ォ ル ト : auto) :
auto
alignment オプ シ ョ ンの値を用います。 ただ し それが justify の と きは left を用います。
leading
(float またはパーセ ン ト 値) テキス ト のベース ラ イ ン間の間隔。 ユーザー座標で、 または文字サイ
ズに対するパーセ ン ト 値で指定 し ます。 デ フ ォ ル ト : 100%
locale
(キーワー ド ) advancedlinebreak=true の と き、 用字系特有の改行方式で用い られる ロ ケール。
キーワー ド は、 以下の構成要素 (複数可) から 成 り 、 オプ シ ョ ナルな構成要素は下線キ ャ ラ ク タ
「_」 で区切られます (その文法は、 NLS/POSIX のロ ケール ID と は若干異な っ ています) :
> (必須) ISO 639-2 に従っ た、 小文字 2 文字または 3 文字の言語 コ ー ド (www.loc.gov/standards/
iso639-2 参照)。 例 : en (英語) ・ de ( ド イ ツ語) ・ ja (日本語)。 こ れは language オプ シ ョ ン と
は異な っ ています。
> (オプ シ ョ ン) ISO 15924 に従っ た、 4 文字の用字系 コ ー ド (www.unicode.org/iso15924/iso15924codes.html 参照)。 例 : Hira (ひ ら がな) ・ Hebr (ヘブ ラ イ文字) ・ Arab (ア ラ ビ ア文字) ・ Thai
( タ イ文字)。
> (オプ シ ョ ン) ISO 3166 に従 っ た、 大文字 2 文字の国 コ ー ド (www.iso.org/iso/country_codes/iso_
3166_code_lists 参照)。 例 : DE ( ド イ ツ) ・ CH (ス イ ス) ・ GB (イ ギ リ ス)。
ロケールを指定する こ と は、 高度な改行のために必須ではあ り ません。 キーワー ド _none は、 ロ
ケール独自の処理が行われない こ と を指定 し ます。 デ フ ォル ト : _none。
例 : de_DE ・ en_US ・ en_GB
maxspacing
minspacing
(float またはパーセ ン ト 値) 単語間の最大間隔 ・ 最小間隔 (ユーザー座標で表すか、 空白キ ャ ラ ク
タ の幅に対するパーセ ン ト 値で指定)。 算出 さ れる単語間隔が、 与え ら れた値ま でに制限 さ れます
(ただ し 、 wordspacing オプ シ ョ ンはなお加算 さ れます)。 デ フ ォ ル ト : minspacing=50%、
maxspacing=500%
minlinecount
(整数) はめ込み枠の最終段落の最小行数。 こ れよ り 行が少ない と きは、 次のはめ込み枠内に配置
さ れます。 値 2 を用いる と 、 段落の中の 1 行だけがはめ込み枠末尾に配置 さ れる (「オー フ ァ ン」)
のを避け られます。 デ フ ォル ト : 1
nofitlimit
(float またはパーセ ン ト 値) nofit 方式における行の長 さ の下限 (ユーザー座標で表すか、 はめ込
み枠の幅に対するパーセ ン ト 値で指定)。 デ フ ォル ト : 75%
parindent
(float またはパーセ ン ト 値) 段落の先頭行の左イ ンデン ト 1。 leftindent に こ の値が加算 さ れます。
こ のオプ シ ョ ン を行内で指定する と 、 タ ブのよ う に動作 し ます。 デ フ ォル ト : 0
rightindent
leftindent
(float またはパーセ ン ト 値) 全テキス ト 行の右イ ンデン ト ・ 左イ ンデン ト 1。 leftindent が行内で指
定 さ れた場合、 決定 さ れた位置がカ レ ン ト テキス ト 位置よ り 左の と きは、 こ のオプ シ ョ ンはカ レ
ン ト 行については無視 さ れます。 デ フ ォル ト : 0
ruler2
(float の リ ス ト 、 ま たはパーセ ン ト 値の リ ス ト ) hortabmethod=ruler に対する絶対 タ ブ位置の リ ス
ト 1。 この リ ス ト は、 非負値を昇順で最大 32 個持て ます。 デ フ ォル ト : hortabsize の整数倍
shrinklimit
(パーセ ン ト 値) shrink 方式における テキス ト 圧縮の下限。 算出 さ れる縮小率が、 与え られた値ま
でに制限 さ れます。 ただ し 、 horizscaling オプ シ ョ ンの値が乗算 さ れます。 デ フ ォル ト : 85%
spreadlimit
(float またはパーセ ン ト 値) spread 方式における 2 文字間の間隔の上限 (ユーザー座標で表すか、
文字サイ ズに対するパーセ ン ト 値で指定)。 算出 さ れた字間が、 charspacing オプ シ ョ ンの値に加算
さ れます。 デ フ ォル ト : 0
stamp
(キーワー ド 。 テキス ト 行 ・ テキス ト フ ローブ ロ ッ ク) こ のオプ シ ョ ン を使 う と 、 ブ ロ ッ ク 矩形内
の対角線上にス タ ン プ を作成する こ と がで き ます。 ス タ ン プのテキス ト は可能な限 り 拡大 さ れて
印字 さ れます。 ス タ ン プのテキス ト を枠内に配置する際には、 position ・ fitmethod ・ orientate
(north ・ south のみ) オプ シ ョ ンに従います。 デ フ ォ ル ト : none。
ll2ur
左下隅か ら右上隅へ向か う 対角線上にス タ ン プが配置 さ れます。
ul2lr
左上隅か ら右下隅へ向か う 対角線上にス タ ン プが配置 さ れます。
none
ス タ ン プは作成 さ れません。
11.6 ブ ロ ッ クのプ ロパテ ィ
303
表 11.9 テキス ト 組版プ ロパテ ィ 一覧 (主にテキス ト フ ローブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
tabalignchar (整数) タ ブの小数点揃えの整列位置に し たいキ ャ ラ ク タ の Unicode 値。 デ フ ォ ル ト : キ ャ ラ ク タ
「.」 (U+002E)
tabalignment
(キーワー ド の リ ス ト ) タ ブ位置の整列方式。 リ ス ト 内の各項目はそれぞれ、 ruler オプ シ ョ ン内で
対応する項目の整列方式を定義 し ます (デ フ ォ ル ト : left) :
center
テキス ト は タ ブ位置で中央揃え さ れます。
decimal
left
最初に現れる tabalignchar を タ ブ位置で左揃え さ れます。 tabalignchar が見つから ない
と きは右揃えが適用 さ れます。
テキス ト は タ ブ位置で左揃え さ れます。
right
テキス ト は タ ブ位置で右揃え さ れます。
1. ユーザー座標で、 ま たははめ込み枠の幅に対するパーセ ン ト 値で指定 し ます。
2. タ ブ設定は、 ブ ロ ッ ク プ ロパテ ィ ダ イ ア ロ グの「ルーラタブ」グループ で編集する こ と がで き ます。
11.6.6 オ ブ ジ ェ ク ト はめ込みプ ロパテ ィ 群
はめ込みプ ロ パテ ィ 群は、 すべての種類のブ ロ ッ ク で利用で き ますが、 い く つかのプ ロ パ
テ ィ は、 特定の種類のブ ロ ッ ク でのみ利用で き ます。 こ れ ら は、 ブ ロ ッ ク 内に内容が配置
さ れ る 方法を管理 し ます :
> 表 11.10 に、 テ キ ス ト 行 ・ 画像 ・ PDF ブ ロ ッ ク で利用で き る はめ込みプ ロ パテ ィ の一覧
を示 し ます。
> 表 11.11 に、テ キ ス ト フ ロ ーブ ロ ッ ク で利用で き る はめ込みプ ロ パテ ィ の一覧を示 し ま
す (主に縦方向のはめ込みに関す る も のです)。
オ ブ ジ ェ ク ト は め込み ア ル ゴ リ ズ ム は、 ブ ロ ッ ク 矩形 を は め込み枠 と し て 用い ま す。
fitmethod=clip の場合を除 き 、 切 り 落 と し は行われません。 ブ ロ ッ ク 内容がブ ロ ッ ク 矩形
か ら はみ出 さ ない よ う に し たい と き は、 fitmethod=nofit を避けて く だ さ い。
表 11.10 はめ込みプ ロパテ ィ 一覧 (テキス ト 行 ・ 画像 ・ PDF ブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
alignchar
(Unichar ま たはキーワー ド 。 テキス ト 行ブ ロ ッ ク にのみ適用) 指定 さ れたキ ャ ラ ク タ を テキス ト
内に見つけた と き、 その左下隅を、 ブ ロ ッ ク矩形の左下隅に整列 さ せます。 横書き テキス ト で
orientate=north か south の場合には、 position オプ シ ョ ンの 1 番目の値で位置を決定 し ます。 縦書
き テキス ト で orientate=west か east の場合には、 position オプ シ ョ ンの 2 番目の値で位置を決定
し ます。 指定 さ れた位置整列キ ャ ラ ク タ がテキス ト 内にない と きは、 このオプ シ ョ ンは無視 さ れ
ます。 値 0 かキーワー ド none ならば、 位置整列キ ャ ラ ク タ を無効に し ます。 fitmethod は指定 さ
れれば適用 し ますが、 alignchar で強制的に位置整列 さ れるので、 はめ込み枠内にテキス ト 配置す
る こ と はで き ません。 デ フ ォ ル ト : none
dpi
(float の リ ス ト 。 画像ブ ロ ッ ク にのみ適用) 縦方向 ・ 横方向の画像解像度を表す 1 個または 2 個の
値。 単位は pixels per inch。 値 0 の場合、 画像内部に解像度が格納 さ れていればそれを用い、 なけ
れば 72 dpi と し ます。 fitmethod プ ロパテ ィ が指定 さ れていて、 そのキーワー ド が auto ・ meet ・
slice ・ entire のいずれかな ら ば、 本プ ロパテ ィ は無視 さ れます。 デ フ ォ ル ト : 0
fitmethod
(キーワー ド ) 与え られた内容がブ ロ ッ ク矩形に収ま り き ら ない と きの解決方式。 と り う る値は
auto ・ nofit ・ clip ・ meet ・ slice ・ entire。 テキス ト 行 ・ 画像 ・ PDF ブ ロ ッ ク については、 こ のプ ロ
パテ ィ は標準的に解釈 さ れます。 デ フ ォ ル ト : auto。 テキス ト フ ローブ ロ ッ ク については、 ブ
ロ ッ ク がテキス ト に対 し て小 さ すぎ る と きは、 以下のよ う に解釈 さ れます :
auto
テキス ト が収ま る ま で、 fontsize と leading を縮めます。
304
nofit
テキス ト を ブ ロ ッ ク下端か らはみ出 さ せます。
clip
テキス ト を ブ ロ ッ クの端で切 り 落 と し ます。
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 11.10 はめ込みプ ロパテ ィ 一覧 (テキス ト 行 ・ 画像 ・ PDF ブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
margin
(float の リ ス ト 。 テキス ト 行ブ ロ ッ ク にのみ適用) テキス ト 枠の縦 ・ 横方向の長 さ 差 し 引き を記述
する 1 個または 2 個の値。 デ フ ォル ト : 0
minfontsize
(float またはパーセ ン ト 値。 テキス ト 行にのみ適用) fitmethod=auto で shrinklimit を超えた と き、
テキス ト がブ ロ ッ ク矩形に収ま る よ う 縮小 さ れる際に、 許 さ れる最小の文字サイ ズ。 下限値を、
ユーザー座標で、 ま たはブ ロ ッ クの高 さ に対するパーセ ン ト 値で指定 し ます。 下限に達 し た と き
は、 テキス ト は指定 さ れた minfontsize を文字サイ ズ と し て生成 さ れます。 デ フ ォル ト : 0.1%
orientate
(キーワー ド ) 内容を配置する向き を指定 し ます。 と り う る値は north ・ east ・ south ・ west。 デ
フ ォ ル ト : north
position
(float の リ ス ト ) 内容の中における参照点の位置を指定する、 1 個ま たは 2 個の値。 ブ ロ ッ ク内で
のパーセ ン ト 値 と し て位置を指定 し ます。 テキス ト 行ブ ロ ッ クのみ : キーワー ド auto を、 リ ス ト
の 1 番目の値 と し て用いる こ と も で き ます。 これは、 テキス ト の筆記方向が右書きの場合 (ア ラ
ビ ア文字 ・ ヘブ ラ イ文字等) には right を意味 し 、 そ う でない場合 (欧文等) には left を意味 し ま
す。
デ フ ォル ト : {0 0}、 すなわち左下隅
rotate
(float) 回転角を度単位で表 し た もの。 処理が始ま る前にブ ロ ッ クが反時計回 り に回転 さ れます。
参照点が回転の中心 と な り ます。 デ フ ォル ト : 0
scale
(float の リ ス ト ) 縦方向 ・ 横方向の拡縮倍率を表す 1 個または 2 個の値。 fitmethod プ ロパテ ィ が
指定 さ れていて、 かつそのキーワー ド が auto ・ meet ・ slice ・ entire のいずれかな らば、 本プ ロパ
テ ィ は無視 さ れます。 デ フ ォ ル ト : 1
shrinklimit
(float またはパーセ ン ト 値。 テキス ト 行ブ ロ ッ ク にのみ適用) fitmethod=auto で テキス ト を収める
際に適用 さ れる縮小率の下限。 デ フ ォル ト : 0.75
表 11.11 はめ込みプ ロパテ ィ 一覧 (テキス ト フ ローブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
firstlinedist
(float ・ パーセ ン ト 値 ・ キーワー ド のいずれか) ブ ロ ッ ク 矩形上端 と テキス ト 先頭行ベース ラ イ ン
と の間隔を、 ユーザー座標で表すか、 そ こ の文字サイ ズ (fixedleading=true な ら行の先頭の文字サ
イ ズ、 そ う でないな ら 行内のすべての文字サイ ズの う ちの最大値) に対するパーセ ン ト 値で表す
か、 キーワー ド で表 し た もの。 デ フ ォル ト : leading。
先頭行について決定 さ れた行送 り 値。 ヒのよ う な、 読み分け記号つきの文字は普通、 は
め込み枠上端に接する で し ょ う 。
ascender 先頭行について決定 さ れたアセ ン ダ値。 d や h のよ う な、 大き な アセ ン ダ を持つ文字は
普通、 はめ込み枠上端に接する で し ょ う 。
capheight 先頭行について決定 さ れたキ ャ ッ プハイ ト 値。 H のよ う な大文字は普通、 はめ込み枠上
端に接する で し ょ う 。
xheight 先頭行について決定 さ れた x ハイ ト 値。 x のよ う な小文字は普通、 はめ込み枠上端に接
する で し ょ う 。
fixedleading=false な ら 、 先頭行内で見出 さ れたすべての leading ・ ascender ・ xheight ・ capheight
値の う ちの最大値が用い られます。
leading
fitmethod
(キーワー ド ) 与え られた内容が枠に収ま り き ら ない と きの解決方式。 と り う る値は auto ・ nofit ・
clip。 デ フ ォ ル ト : auto。 テキス ト フ ローブ ロ ッ クの場合、 ブ ロ ッ クがテキス ト に対 し て小 さ すぎ
る と きは、 以下のよ う に解釈 さ れます :
auto
テキス ト が収ま る ま で、 fontsize と leading を縮めます。
nofit
テキス ト を ブ ロ ッ ク下端から はみ出 さ せます。
clip
テキス ト を ブ ロ ッ クの端で切 り 落 と し ます。
11.6 ブ ロ ッ クのプ ロパテ ィ
305
表 11.11 はめ込みプ ロパテ ィ 一覧 (テキス ト フ ローブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
lastlinedist
(float ・ パーセ ン ト 値 ・ キーワー ド のいずれか。 fitmethod=nofit の と きは無視 さ れます) テキス ト
最終行ベース ラ イ ン と はめ込み枠下端 と の間隔を、 ユーザー座標で表すか、 文字サイ ズ
(fixedleading=true な ら行の先頭の文字サイ ズ、 そ う でないな ら行内のすべての文字サイ ズの う ち
の最大値) に対するパーセ ン ト 値で表すか、 キーワー ド で表 し た も の。 デ フ ォル ト : 0、 すなわち
はめ込み枠下端をベース ラ イ ン と し て用い、 デ ィ セ ン ダは普通、 はめ込み枠の下へはみ出すで
し ょ う。
descender 最終行について決定 さ れたデ ィ セ ン ダ値。 g や j のよ う な、 デ ィ セ ン ダ を持つ文字は普
通、 はめ込み枠下端に接する で し ょ う 。
fixedleading=false な ら、 最終行内で見出 さ れたすべてのデ ィ セ ン ダ値の う ちの最大値が用い ら れ
ます。
linespreadlimit
(float またはパーセ ン ト 値。 verticalalign=justify の場合のみ) 上下合わせの場合に行送 り を増やす
際の最大値を、 ユーザー座標で表すか、 行送 り に対するパーセ ン ト 値で表 し た も の。 デ フ ォル ト :
200%
maxlines
(整数ま たはキーワー ド ) はめ込み枠内の最大行数。 あ るいはキーワー ド auto を指定 し て、 で き
る だけ多 く の行をはめ込み枠内に入れ さ せる こ と も で き ます。 最大行数が入っ た と き、 fit_
textflow( ) は文字列 _boxfull を返 し ます。
minfontsize
(float またはパーセ ン ト 値) 特に fitmethod=auto の と き、 はめ込み枠に収ま る よ う テキス ト が縮
小 さ れる際に許 さ れる最小文字サイ ズ。 下限値を、 ユーザー座標で、 ま たははめ込み枠の高 さ に
対するパーセ ン ト 値で指定 し ます。 下限に達 し て も なおテキス ト が収ま り き ら ない と きは、 文字
列 _boxfull が返 さ れます。 デ フ ォ ル ト : 0.1%
orientate
(キーワー ド ) テキス ト を配置する向き を指定 し ます。 と り う る値は north ・ east ・ south ・ west。
デ フ ォ ル ト : north
rotate
(float) 回転角を度単位で表 し た も の。 はめ込み枠の左下隅を中心 と し て、 座標系を回転 さ せます。
こ れに よ っ て、 枠 と テキス ト が回転 さ れます。 テキス ト が配置 さ れた時点で回転は リ セ ッ ト さ れ
ます。 デ フ ォ ル ト : 0
verticalalign
(キーワー ド ) はめ込み枠内のテキス ト の縦揃え。 デ フ ォ ル ト : top。
top
center
bottom
justify
先頭行か ら下へ順に組版。 テキス ト がはめ込み枠に満たない と きは、 テキス ト の下に余
白があ き ます。
はめ込み枠内の縦方向の中央にテキス ト を配置。 テキス ト がはめ込み枠に満たない と き
は、 テキス ト の上下に余白があ き ます。
最終行か ら上へ順に組版。 テキス ト がはめ込み枠に満たない と きは、 テキス ト の上に余
白があ き ます。
はめ込み枠の上端 と 下端にテキス ト を合わせます。 それを実現する ために、 行送 り を増
や し ます。 ただ し 、 linespreadlimit で指定 さ れた限界ま で し か増や し ません。 先頭行の
高 さ は、 firstlinedist=leading の場合のみ増や し ます。
11.6.7 デ フ ォ ル ト 内容に関す る プ ロパテ ィ 群
デフ ォ ル ト 内容に関す る プ ロ パテ ィ 群は、内容が特に与え ら れなかっ た と き のブ ロ ッ ク へ
の流 し 込みの方法を指定 し ます。 こ れ ら は と り わけプ レ ビ ュ ー機能で有用です。 なぜな ら
プ レ ビ ュ ーではブ ロ ッ ク にへそのデフ ォ ル ト 内容を流 し 込むか ら です。 表 11.12 に、 デ
フ ォ ル ト 内容に関す る プ ロ パテ ィ の一覧を示 し ます。
11.6.8 カ ス タ ムプ ロパテ ィ
カ ス タ ムプ ロ パテ ィ は、 すべての種類のブ ロ ッ ク に適用 さ れます。 PPS と プ レ ビ ュ ー機能
か ら は無視 さ れます。 表 11.13 に、 カ ス タ ムプ ロ パテ ィ の命名規則を示 し ます。
306
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 11.12 デ フ ォ ル ト 内容に関する プ ロパテ ィ 一覧
キーワー ド
と り う る値 ・ 解説
defaultimage
(文字列。 画像ブ ロ ッ ク にのみ適用) 置き換え画像がク ラ イ ア ン ト ア プ リ ケーシ ョ ンから与え られ
なかっ た と き に用い ら れる画像のパス名。 フ ァ イル名には絶対パス を付けず、 SearchPath 機能を
利用する よ う 、 PPS ク ラ イ ア ン ト ア プ リ ケーシ ョ ン を作っ てお く ほ う がよいで し ょ う 。 そ う すれ
ばブ ロ ッ ク処理を、 プ ラ ッ ト フ ォ ームや フ ァ イルシ ス テムの細かい違いか ら切 り 離す こ と がで き
ます。
defaultpdf
(文字列。 PDF ブ ロ ッ ク にのみ適用) 置き換え PDF が ク ラ イ ア ン ト ア プ リ ケーシ ョ ンか ら与え られ
なかっ た と き に用い ら れる PDF 文書のパス名。 フ ァ イル名には絶対パス を付けず、 SearchPath 機
能を利用する よ う 、 PPS ク ラ イ ア ン ト ア プ リ ケーシ ョ ン を作っ てお く ほ う がよいで し ょ う 。 そ う
すればブ ロ ッ ク 処理を、 プ ラ ッ ト フ ォ ームやフ ァ イルシ ス テムの細かい違いから 切 り 離す こ と が
で き ます。
defaultpdfpage
(整数。 PDF ブ ロ ッ ク にのみ適用) デ フ ォ ル ト PDF 文書内のページのページ番号。 デ フ ォ ル ト : 1
defaulttext
(文字列。 テキス ト 行 ・ テキス ト フ ローブ ロ ッ ク にのみ適用) 可変テキス ト が ク ラ イ ア ン ト ア プ リ
ケーシ ョ ンから 与え ら れなか っ た と き に用い ら れる テキス ト 1
1. テキス ト は winansi エ ン コ ーデ ィ ン グか Unicode で解釈 さ れます。
表 11.13 カ ス タ ムブ ロ ッ ク プ ロパテ ィ (すべての種類のブ ロ ッ ク に適用)
キーワー ド
と り う る値 ・ 解説
3 種類のキ ャ ラ ク タ [ ] /
を含ま ないあ ら ゆる名前
(文字列 ・ 名前 ・ float のいずれか、 ま たは float の リ ス ト ) 各カ ス タ ムプ ロパテ ィ の
値を ど う 解釈するかは、 全 く ク ラ イ ア ン ト ア プ リ ケーシ ョ ンの領分です。 PPS から
は無視 さ れます。
11.6 ブ ロ ッ クのプ ロパテ ィ
307
11.7 pCOS で ブ ロ ッ ク 名 と プ ロパテ ィ を取得
PPS に よ る 自動ブ ロ ッ ク 処理に加え て、 内蔵の pCOS 機能を使 う と 、 ブ ロ ッ ク 名を評価 し
た り 、 標準 ・ カ ス タ ムプ ロ パテ ィ を取得 し た り する こ と がで き ます。
ク ッ ク ブ ッ ク 取 り 込んだPDFの中に含まれてい る ブ ロ ッ クのプ ロパテ ィ を取得する ための完全な コ ー ド
サン プルが ク ッ ク ブ ッ クの blocks/query_block_properties ト ピ ッ ク にあ り ます。
ブ ロ ッ ク の数 と 名前の取得 ク ラ イ ア ン ト コ ー ド 側では、 取 り 込んだページ上のブ ロ ッ
ク の名前 も 数 も 知 ら な く てか ま い ません。 なぜな ら 取得す る こ と も で き る か ら です。 下記
の ス テー ト メ ン ト は、 ページ番号 pagenum のページ上のブ ロ ッ ク の数を返 し ます :
blockcount = (int) p.pcos_get_number(doc, "length:pages[" + pagenum + "]/blocks");
下記の ス テー ト メ ン ト は、 ページ pagenum 上の blocknum 番目のブ ロ ッ ク の名前を返 し
ます (ブ ロ ッ ク と ページの番号は 0 か ら 始ま り ます) :
blockname = p.pcos_get_string(doc,
"pages[" + pagenum + "]/blocks[" + blocknum + "]/Name");
返 さ れたブ ロ ッ ク 名はその後、 ブ ロ ッ ク のプ ロ パテ ィ を取得 し た り 、 ブ ロ ッ ク へテ キ ス
ト ・ 画像 ・ PDF を流 し 込んだ り す る ために利用す る こ と がで き ます。 指定 さ れたブ ロ ッ ク
が存在 し ない と き は、 例外が発生 し ます。 こ れを避け る には、 length 接頭辞を用いて、 ブ
ロ ッ ク の数を知 り 、 ひいては Blocks 配列の最大添字を知る こ と がで き ます (配列の添字が
0 か ら 始ま る ため、 ブ ロ ッ ク の数は最大可能添字 よ り 1 大 き い こ と に留意 し て く だ さ い)。
ブ ロ ッ ク プ ロ パテ ィ を特定す る パ ス文法において、以下の表現は等価です。 こ こ で、通
し 番号 < 番号 > のブ ロ ッ ク が、その Name プ ロ パテ ィ を < ブ ロ ッ ク名 > に設定 さ れてい る
と し ます :
pages[...]/blocks[<番号>]
pages[...]/blocks/<ブロック名>
ブ ロ ッ ク の座標の取得 名前 foo のブ ロ ッ ク の左下隅 と 右上隅を記述す る 2 個の座標ペア
(llx, lly) お よ び (urx, ury) は、 以下の よ う に し て取得で き ます :
llx
lly
urx
ury
=
=
=
=
p.pcos_get_number(doc,
p.pcos_get_number(doc,
p.pcos_get_number(doc,
p.pcos_get_number(doc,
"pages["
"pages["
"pages["
"pages["
+
+
+
+
pagenum
pagenum
pagenum
pagenum
+
+
+
+
"]/blocks/foo/Rect[0]");
"]/blocks/foo/Rect[1]");
"]/blocks/foo/Rect[2]");
"]/blocks/foo/Rect[3]");
上記の座標はデフ ォ ル ト のユーザー座標系で与え ら れてい る こ と に注意 し て く だ さ い (左
下隅が原点。 ただ し 、 そのページの CropBox に よ っ て変更 さ れてい る 可能性 も あ り ます)。
こ れに対 し て Block Plugin は、ページ左上隅に原点を持つ Acrobat のユーザー イ ン タ フ ェー
ス座標系に従っ て座標を表示 し ます。 ブ ロ ッ ク の座標に優先 さ せる ための Rect オプシ ョ
ンは、CropBoxエン ト リ に よ っ て適用 さ れてい る いかな る 変更を も 考慮には入れないので、
元のブ ロ ッ ク か ら 取得 さ れた座標は、 CropBox が存在す る 場合には新 し い座標 と し てその
ま ま受け渡す こ と はで き ません。 こ れを回避する には、 refpoint ・ boxsize オプシ ョ ン を用
い る こ と がで き ます。
ま た、 topdown パ ラ メ タ はブ ロ ッ ク 座標取得の際には考慮 さ れない こ と に も 留意 し て
く だ さ い。
308
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
カ ス タ ムプ ロパテ ィ の取得 カ ス タ ム プ ロ パテ ィ は、 下記の例の よ う に取得す る こ と が
で き ます。 こ こ では、 ページ pagenum 上の b1 と い う ブ ロ ッ ク か ら プ ロ パテ ィ zipcode を
取得 し てい ます :
zip = p.pcos_get_string(doc, "pages[" + pagenum + "]/blocks/b1/Custom/zipcode");
ブ ロ ッ ク 内に具体的に何 と い う カ ス タ ムプ ロ パテ ィ があ る かわか ら なければ、実行時にそ
の名前を得 る こ と も で き ます。b1 と い う ブ ロ ッ ク の最初のカ ス タ ムプ ロ パテ ィ の名前を得
る には、 下記の よ う に し ます :
propname = p.pcos_get_string(doc, "pages[" + pagenum + "]/blocks/b1/Custom[0].key");
番号を 0 のかわ り に 1 つずつ増や し ていけば、すべてのカ ス タ ムプ ロ パテ ィ の名前を得 る
こ と がで き ます。 length 接頭辞を用いれば、 カ ス タ ムプ ロ パテ ィ の数を知 る こ と がで き ま
す。
存在 し ない ブ ロ ッ ク プ ロパテ ィ と デ フ ォ ル ト 値 ブ ロ ッ ク ま たはプ ロ パテ ィ が実在す る
か ど う か を知 る には、 type 接頭辞を用い ます。 パ ス に対する 型が 0 か null な ら ば、 その
オブジ ェ ク ト は PDF 文書内に存在 し てい ません。 なお、 標準プ ロ パテ ィ の場合、 こ れは
プ ロ パテ ィ のデフ ォ ル ト 値が用い ら れ る こ と を意味 し ます。
カ ス タ ムプ ロパテ ィ の名前空間 さ ま ざ ま な場所で作成 さ れた PDF 文書をや り 取 り す る
際に混乱が生 じ る こ と を避け る ため、 カ ス タ ムプ ロ パテ ィ 名をつけ る と き には必ず、 イ ン
タ ーネ ッ ト ド メ イ ン名を企業固有の接頭辞 と し て用い、 その後に コ ロ ン 「:」 と プ ロ パテ ィ
名本体を続け る こ と を推奨 し ます。 た と えば、 ACME 社であれば以下の よ う なプ ロ パテ ィ
名を使用す る のです :
acme.com:digits
acme.com:refnumber
標準プ ロ パテ ィ と カ ス タ ム プ ロ パテ ィ はブ ロ ッ ク 内で異な る 格納の さ れ方を し てい る の
で、 標準 PPS プ ロ パテ ィ 名 (298 ページ 「11.6 ブ ロ ッ ク のプ ロ パテ ィ 」 で定義 さ れてい る
も の) がカ ス タ ムプ ロ パテ ィ 名 と 衝突す る こ と は決 し て あ り ません。
11.7 pCOS で ブ ロ ッ ク名 と プ ロパテ ィ を取得
309
11.8 PDFlib ブ ロ ッ ク の仕様
PDFlib ブ ロ ッ ク の文法は PDF Reference に完全準拠 し てい ます。 PDF Reference では拡張
の仕組みを規定 し て、PDF ページ を構成す る デー タ 構造にアプ リ ケーシ ョ ンが独自デー タ
を追加格納で き る よ う に し てい る のです。 こ こ では、 PDFlib ブ ロ ッ ク の文法を詳述 し て、
ブ ロ ッ ク を Block Plugin 以外の方法で作成 し たいユーザーの助け と し ます。 プ ラ グ イ ンの
ユーザーは こ の節は飛ば し てか ま い ません。
11.8.1 PDFlib ブ ロ ッ ク の PDF オ ブ ジ ェ ク ト 構造
ページ辞書は PieceInfo 項目を含んでお り 、 こ の項目は値 と し て別の辞書を持っ てい ます。
こ の辞書はキーPDFlib を含んでお り 、 こ のキーはアプ リ ケーシ ョ ンデー タ 辞書を値 と し て
持っ てい ます。 こ のアプ リ ケーシ ョ ンデー タ 辞書は、 表 11.14 に挙げ る 2 個の標準キーを
含んでい ます。
表 11.14 ア プ リ ケーシ ョ ンデー タ 辞書内項目一覧
キー
値
LastModified
(日付文字列、 必須) ページ上のブ ロ ッ クが作成 さ れた、 または最近更新 さ れた日時。
Private
(辞書、 必須) ブ ロ ッ ク リ ス ト (表 11.15 参照)
ブ ロ ッ ク リ ス ト と は、 ブ ロ ッ ク 処理に関す る 一般的な情報に加えて、 ページ上のすべての
ブ ロ ッ ク の一覧を も 含んだ辞書です。 表 11.15 に、 ブ ロ ッ ク リ ス ト 辞書の中のキーの一覧
を示 し ます。
表 11.15 ブ ロ ッ ク リ ス ト 辞書内項目一覧
キー
値
Version
(数、 必須) フ ァ イルが準拠する ブ ロ ッ ク仕様のバージ ョ ン番号。 本文書では、 バージ ョ ン 9 のブ
ロ ッ ク 仕様を解説 し ています。
Blocks
(辞書、 必須) キーはそれぞれ、 ブ ロ ッ ク名の名前オブ ジ ェ ク ト 。 対応する値はそれぞれ、 そのブ
ロ ッ ク に対する ブ ロ ッ ク辞書です (表 11.17 参照)。 ブ ロ ッ ク 辞書内の Name キーは、 こ の辞書内
のブ ロ ッ ク名 と 同 じ で なければな り ません。
PluginVersion
(文字列。 pdfmark キーがないな ら必須1) ブ ロ ッ クの作成に使われた Block Plugin のバージ ョ ン識
別を表す文字列。
pdfmark
(論理値。 PluginVersion キーがないな ら 必須 1) ブ ロ ッ ク リ ス ト が pdfmark を用いて生成 さ れている
場合は true で なければな り ません。
1. PluginVersion キー と pdfmark キーは、 ど ち ら か一方 し か存在で きず、 かつ、 ど ち ら かが必ず存在 し なければな り ません。
ブ ロ ッ ク プ ロパテ ィ のデー タ 型 プ ロ パテ ィ はオプシ ョ ン リ ス ト と 同 じ デー タ 型に対応
し てい ます。 ただ し ハン ド ル と 、 ア ク シ ョ ン リ ス ト の よ う な特化 さ れた リ ス ト には対応 し
てい ません。 表 11.16 に、 こ れ ら の型 と PDF のデー タ 型 と の対応づけ を示 し ます。
表 11.16 ブ ロ ッ ク プ ロパテ ィ のデー タ 型一覧
デー タ 型
PDF での型および注釈
論理値
(論理値)
文字列
(文字列)
310
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
表 11.16 ブ ロ ッ ク プ ロパテ ィ のデー タ 型一覧
デー タ 型
PDF での型および注釈
キーワー ド
(名前)
(名前) そのプ ロパテ ィ が対応するキーワー ド の リ ス ト にないキーワー ド を与え る と エ ラ ー。
float ・ 整数
(数値) オプ シ ョ ン リ ス ト では点 も カ ン マ も小数点 と し て対応 し ているのに対 し 、 PDF の数値では
点のみ対応。
パーセ ン ト
値
(要素 2 個の配列) 配列の 1 番目の要素は数、 2 番目の要素はパーセ ン ト キ ャ ラ ク タ を持 っ た文字
列。
リスト
(配列)
色
(要素 2 個か 3 個の配列) 配列の 1 番目の要素は色空間を指定 し 、 2 番目の要素は下記の色値を指
定。 配列の 1 番目の要素に対 し ては以下の項目が指定で き ます :
/DeviceGray
2 番目の要素はグ レ ー値 1 個。
/DeviceRGB
2 番目の要素は RGB 値 3 個の配列。
/DeviceCMYK
2 番目の要素は CMYK 値 4 個の配列。
[/Separation/ スポ ッ ト カ ラ ー名 ]
1 番目の要素は、 キーワー ド /Separation と スポ ッ ト カ ラ ー名 1 個を持 っ た配列。 2 番目
の要素は濃度値。
オプ シ ョ ン と し て 3 番目の要素で、 スポ ッ ト カ ラ ーの代替色を指定 し ます。 代替色はそ
れ自体が 1 個の色配列であ り 、 /DeviceGray ・ /DeviceRGB ・ /DeviceCMYK ・ /Lab のいずれ
かの色空間で表 さ れます。 代替色を指定 し ない と きは、 スポ ッ ト カ ラ ー名は、 PPS が内
部的に知 っ ている色か、 ま たはア プ リ ケーシ ョ ン で動作時に定義 し ておいた色でなけれ
ばな り ません。
[/Lab]
1 番目の要素はキーワー ド /Lab を持っ た配列。 2 番目の要素は Lab 値 3 個の配列。
色な し を指定するには、 各プ ロパテ ィ を省略する必要があ り ます。
unichar
(テキス ト 文字列) UTF-16 BOM U+FEFF で始ま る utf16be 形式の Unicode 文字列
11.8.2 ブ ロ ッ ク 辞書のキー
ブ ロ ッ ク 辞書は、 表 11.17 に挙げ る キーを含む こ と がで き ます。
表 11.17 ブ ロ ッ ク辞書内項目一覧
プ ロパテ ィ グループ
値
管理プ ロパテ ィ 群
(い く つかのキーは必須) 表 11.4 に従っ た管理プ ロパテ ィ 群
矩形プ ロパテ ィ 群
(い く つかのキーは必須) 表 11.5 に従っ た矩形プ ロパテ ィ 群
書式プ ロパテ ィ 群
(い く つかのキーは必須) 表 11.6 に従っ た、 すべての種類のブ ロ ッ ク に適用 さ れる
書式プ ロパテ ィ 群 と 、 表 11.7 に従っ た、 テキス ト 行 ・ テキス ト フ ローブ ロ ッ ク に適
用 さ れる テキス ト 書式プ ロパテ ィ 群
テキス ト 作成プ ロパテ ィ 群 (オプ シ ョ ン) 表 11.8 に従っ た、 テキス ト 行 ・ テキス ト フ ローブ ロ ッ ク に適用 さ れ
る テキス ト 作成プ ロパテ ィ 群
テキス ト 組版プ ロパテ ィ 群 (オプ シ ョ ン) 表 11.9 に従っ た、 テキス ト 行 ・ テキス ト フ ローブ ロ ッ ク に適用 さ れ
る テキス ト 組版プ ロパテ ィ 群
オブ ジ ェ ク ト はめ込みプ ロ (オプ シ ョ ン) 表 11.10 に従 っ た、 テキス ト 行 ・ 画像 ・ PDF ブ ロ ッ ク に適用 さ れる オ
パテ ィ 群
ブ ジ ェ ク ト はめ込みプ ロパテ ィ 群 と 、 表 11.11 に従っ た、 テキス ト フ ローブ ロ ッ ク
に適用 さ れるはめ込みプ ロパテ ィ 群
11.8 PDFlib ブ ロ ッ クの仕様
311
表 11.17 ブ ロ ッ ク辞書内項目一覧
プ ロパテ ィ グループ
値
デ フ ォル ト 内容に関する プ (オプ シ ョ ン) 表 11.12 に従っ た、 デ フ ォ ル ト 内容に関する プ ロパテ ィ 群
ロパテ ィ 群
カスタム
(辞書、 オプ シ ョ ン) 表 11.13 に従っ た、 カ ス タ ムプ ロパテ ィ に対するキー ・ 値の対
を含んだ辞書
作成例 以下に示す PDF コ ー ド は、 job_title と い う テ キ ス ト ブ ロ ッ ク と 、 logo と い う 画
像ブ ロ ッ ク の、 2 個のブ ロ ッ ク を扱っ てい ます。 テ キ ス ト ブ ロ ッ ク には format と い う カ
ス タ ムプ ロ パテ ィ が含まれてい ます :
<<
/Contents 12 0 R
/Type /Page
/Parent 1 0 R
/MediaBox [ 0 0 595 842 ]
/PieceInfo << /PDFlib 13 0 R >>
>>
13 0 obj
<<
/Private <<
/Blocks <<
/job_title 14 0 R
/logo 15 0 R
>>
/Version 9
/PluginVersion (4.1)
>>
/LastModified (D:20090813200730)
>>
endobj
14 0 obj
<<
/Type /Block
/Rect [ 70 740 200 800 ]
/Name /job_title
/Subtype /Text
/fitmethod /auto
/fontname (Helvetica)
/fontsize 12
/Custom << /format 5 >>
>>
endobj
15 0 obj
<<
/Type /Block
/Rect [ 250 700 400 800 ]
/Name /logo
/Subtype /Image
/fitmethod /auto
>>
312
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
11.8.3 pdfmark で PDFlib ブ ロ ッ ク を生成
プ ラ グ イ ンでブ ロ ッ ク を作成す る のではな く 、PostScript ス ト リ ームの中に適切な pdfmark
コ マ ン ド を挿入 し て、それを Distiller で PDF に変換す る こ と に よ っ てブ ロ ッ ク を作成す る
こ と も 可能です。 pdfmark オペレー タ については詳 し く は Acrobat の解説文書に記載 さ れ
てい ます。 以下に示す pdfmark オペレー タ 群を用いれば、 前節 と 同 じ ブ ロ ッ ク 定義を生成
す る こ と がで き ます :
% ---------- Setup for the Blocks on a page ---------[/_objdef {B1} /type /dict /OBJ pdfmark
% Blocks dict
[{ThisPage} <<
/PieceInfo <<
/PDFlib <<
/LastModified (D:20090813200730)
/Private <<
/Version 9
/pdfmark true
/Blocks {B1}
>>
>>
>>
>> /PUT pdfmark
% ---------- text Block ---------[{B1} <<
/job_title <<
/Type /Block
/Name /job_title
/Subtype /Text
/Rect [ 70 740 200 800 ]
/fitmethod /auto
/fontsize 12
/fontname (Helvetica)
/Custom << /format 5 >>
>>
>> /PUT pdfmark
% ---------- image Block ---------[{B1} <<
/logo <<
/Type /Block
/Name /logo
/Subtype /Image
/Rect [ 250 700 400 800 ]
/fitmethod /auto
>>
>> /PUT pdfmark
11.8 PDFlib ブ ロ ッ クの仕様
313
314
第 11 章 : PPS と PDFlib Block Plugin (COM ・ .NET ・ REALbasic エデ ィ シ ョ ン)
A 改訂履歴
日付
更新点
2010 年 4 月 13 日
> PDFlib 8.0.1 に関する さ ま ざ ま な更新 ・ 修正
2009 年 12 月 07 日
> PDFlib 8.0.0 に関する更新
2009 年 3 月 13 日
> PDFlib 7.0.4 に関する さ ま ざ ま な更新 ・ 修正
2008 年 2 月 13 日
> PDFlib 7.0.3 に関する さ ま ざ ま な更新 ・ 修正
2007 年 8 月 08 日
> PDFlib 7.0.2 に関する さ ま ざ ま な更新 ・ 修正
2007 年 2 月 19 日
> PDFlib 7.0.1 に関する さ ま ざ ま な更新 ・ 修正
2006 年 10 月 03 日
> PDFlib 7.0.0 に関する更新 と 再構成
2006 年 2 月 21 日
> PDFlib 6.0.3 に関する さ ま ざ ま な更新 ・ 修正。 Ruby の節を追加
2005 年 8 月 09 日
> PDFlib 6.0.2 に関する さ ま ざ ま な更新 ・ 修正
2004 年 11 月 17 日
> PDFlib 6.0.1 に関する小規模な更新 ・ 修正
> 8 章に言語別関数プ ロ ト タ イ プ用新書式導入
> 3 章にハイパーテキス ト の例を追加
2004 年 6 月 18 日
> PDFlib 6 に関する大規模な変更
2004 年 1 月 21 日
> PDFlib 5.0.3 に関する小規模な追加 ・ 修正
2003 年 9 月 15 日
> PDFlib 5.0.2 に関する小規模な追加 ・ 修正。 ブ ロ ッ クの仕様を追加
2003 年 5 月 26 日
> PDFlib 5.0.1 に関する小規模な更新 ・ 修正
2003 年 3 月 26 日
> PDFlib 5.0.0 に関する全面的変更 と 書き直 し
2002 年 6 月 14 日
> PDFlib 4.0.3 に関する小規模な変更 と .NET バイ ンデ ィ ングに関する追加
2002 年 1 月 26 日
> PDFlib 4.0.2 に関する小規模な変更 と IBM eServer エデ ィ シ ョ ンに関する追加
2001 年 5 月 17 日
> PDFlib 4.0.1 に関する小規模な変更
2001 年 4 月 1 日
> PDFlib 4.0.0 の PDI ・ 他機能を解説
2001 年 2 月 5 日
> PDFlib 3.5.0 のテ ン プ レー ト ・ CMYK 機能を解説
2000 年 12 月 22 日
> ColdFusion 解説 と PDFlib 3.03 に関する追加。 COM エデ ィ シ ョ ン を別マニ ュ アルに
2000 年 8 月 8 日
> Delphi 解説 と PDFlib 3.02 に関する小規模な追加
2000 年 7 月 1 日
> PDFlib 3.01 に関する追加 ・ 説明の明瞭化
2000 年 2 月 20 日
> PDFlib 3.0 に関する変更
1999 年 8 月 2 日
> PDFlib 2.01 に関する小規模な変更 ・ 追加
1999 年 6 月 29 日
> 言語バイ ンデ ィ ングご と に節を分離
> PDFlib 2.0 に関する追加
1999 年 2 月 1 日
> PDFlib 1.0 に関する小規模な追加 (公開せず)
1998 年 8 月 10 日
> PDFlib 0.7 に関する追加 (一つのお客様用のみ)
1998 年 7 月 8 日
> PDFlib 0.6 の PDFlib ス ク リ プ テ ィ ングサポー ト を初めて記述
1998 年 2 月 25 日
> PDFlib 0.5 に関 し て説明を若干追加
A 改訂履歴
315
日付
更新点
1997 年 9 月 22 日
> PDFlib 0.4 と 本マニ ュ アルを初めて公開
索引
記号
.NET バイ ンデ ィ ング 40
A
Acrobat のブ ロ ッ ク作成用プ ラ グ イ ン 275
Active Server Pages 33
Adobe Font Metrics (AFM) 104
AES (Advanced Encryption Standard) 69
AFM (Adobe Font Metrics) 104
ArtBox 64
ascender 137
ASP.NET 42
autocidfont パラ メ タ 128
autosubsetting パラ メ タ 127
B
BleedBox 64
BMP 89, 167
C
C++ バイ ンデ ィ ング 38
capheight 137
CCITT 167
character references 100
characters per inch 138
CIE L*a*b* カ ラ ースペース 76
circle():VB での問題 35
CMap 95
CMaps 95
Cobol バイ ンデ ィ ン グ 30
COM (Component Object Model) バイ ンデ ィ
ング 31
copyoutputintent オプ シ ョ ン 257
CPI (characters per inch) 138
CropBox 64
currentx ・ currenty パラ メ タ 137
C バイ ンデ ィ ング 37
D
defaultgray/rgb/cmyk パラ メ タ 78
descender 137
DLL (ダ イ ナ ミ ッ ク リ ン ク ラ イ ブ ラ リ ) 32
dpi 計算 163
E
EBCDIC 60
ebcdic エ ン コ ーデ ィ ング 92
errorpolicy パラ メ タ 174
EUDC (エ ン ド ユーザー定義キ ャ ラ ク タ ) フ ォ
ン ト 103
examples
page size 232
EXIF JPEG 画像 166
G
get_buffer() 59
GIF 167
global.asa 34
grid.pdf 62
H
HKS カ ラ ー 75
HTML character references 100
I
ignoremask 169
image:iccprofile パラ メ タ 77
ISO 10646 113
ISO 15930 251
ISO 19005 258
ISO 32000 250
ISO 8859-2 から -15 ま で 92
J
Java バイ ンデ ィ ング 39
JBIG2 166
JFIF 165
JPEG 165
JPEG2000 166
JPEG 画像
EXIF 形式の 166
L
leading 137
linearized PDF 71
LWFN (LaserWriter Font) 104
M
macroman_apple エ ン コ ーデ ィ ング 109
macroman エ ン コ ーデ ィ ング 91, 92
makepsres ユーテ ィ リ テ ィ 55
masked 169
masterpassword 69
MediaBox 64
索引
317
MSI 31
O
OpenType フ ォ ン ト 103
optimized PDF 71
overline パラ メ タ 140
P
page 164
PANTONE カ ラ ー 73
pCOS 231
暗号化 245
擬似オブ ジ ェ ク ト 238
デー タ 型 233
パス文法 236
pCOS イ ン タ フ ェ ース 231
PDF/A 258
PDF/X 251
PDF_set_parameter() 58
PDFlib
機能一覧 22
PDFlib Personalization Server 275
pdflib.upr 57
PDFLIBRESOURCE 環境変数 57
PDFlib の機能 22, 26
PDF 取 り 込みラ イ ブ ラ リ (PDI) 172
PDF リ フ ァ レ ン ス マニ ュ アル 231
pdiusebox パラ メ タ 174
PDI (PDF 取 り 込み) 172
Perl バイ ンデ ィ ング 43
permissions 69
PFA (Printer Font ASCII) 104
PFB (Printer Font Binary) 104
PFM (Printer Font Metrics) 104
PHP バイ ンデ ィ ング 44
PNG 165, 169
PostScript Type 1 フ ォ ン ト 104
PPS (PDFlib Personalization Server) 275
Printer Font ASCII (PFA) 104
Printer Font Binary (PFB) 104
Printer Font Metrics (PFM) 104
PUA 89
Python バイ ンデ ィ ング 45
R
RAW 画像デー タ 167
REALbasic バイ ンデ ィ ング 46
regsvr32 32
renderingintent オプ シ ョ ン 76
resourcefile パラ メ タ 58
RPG バイ ンデ ィ ング 47
Ruby バイ ンデ ィ ング 48
S
scale():VB での問題 35
SearchPath パラ メ タ 56
318
索引
setcolor:iccprofilegray/rgb/cmyk パラ メ タ 78
sRGB カ ラ ースペース 77
strikeout パラ メ タ 140
subsetminsize パ ラ メ タ 128
T
Tcl バイ ンデ ィ ング 49
textrendering パラ メ タ 141
textx ・ texty パ ラ メ タ 137
TIFF 167
topdown パラ メ タ 63
TrimBox 64
TrueType フ ォ ン ト 103
TTC (TrueType Collection) 103
TTC (TrueType Collection) 157, 158
Type 1 フ ォ ン ト 104
Type 3 (ユーザー定義) フ ォ ン ト 105
U
UNC 33
underline パラ メ タ 140
UPR (Unix PostScript Resource) 55
usercoordinates パラ メ タ 61
userpassword 69
UTF 形式 90
V
VB.NET 41
VBA 31
Visual Basic 34
Visual Basic for Applications 31
W
web-optimized PDF 71
winansi エ ン コ ーデ ィ ング 92
Windows イ ン ス ト ー ラ 31
X
XMP メ タ デー タ 232
XObject 66
x ハイ ト 137
あ
ア セ ン ダ 137
暗号化 68
暗号化 PDF 文書 245
暗号化 さ れた PDF 文書 245
暗号化状態 232
い
一時領域の必要 71
イ ン コ ア生成 59
イ ン ス ト ール , サイ レ ン ト 32
イ ン タ ーネ ッ ト サービ ス プ ロバイ ダ 32
イ ン チ 61
イ ン ラ イ ン画像 164
う
上付き 138
え
エ スケープ シーケ ン ス 99
エ ラ ー処理 51
エ ン コ ーデ ィ ン グ
カ ス タ ム 93
日中韓 95
お
オー ト メ ーシ ョ ン 31
か
カ ーニ ン グ 138
外在透過 169
回転 62
拡縮画像 163
カ ス タ ムエ ン コ ーデ ィ ング 93
画像デー タ の再利用 163
画像の拡縮 163
画像フ ァ イル形式 165
画像マ ス ク 168, 170
カテゴ リ
リ ソ ース 55
カ レ ン ト 点 65
環境変数 PDFLIBRESOURCE 57
韓国語 95, 156
き
擬似フ ォ ン ト ス タ イル 139
記述方向 232
機能
PDFlib の 22, 26
機能一覧
PDFlib 22
基本多言語面 89
キ ャ ッ プハイ ト 137
キ ャ ラ ク タ と グ リ フ 89
キ ャ ラ ク タ メ ト リ ッ ク 137
行送 り 137
切 り 抜き 64
く
グ ラ デ ィ エ ン ト 72
グ リ フ 89
グ リ フ互換性 132
グ リ フ置換 111
け
権限 68
言語バイ ンデ ィ ング→バイ ンデ ィ ング
こ
コ ア フ ォ ン ト 118
高度な改行 206
コ ー ド ページ :Microsoft Windows 1250 ∼
1258 92
さ
サイ レ ン ト イ ン ス ト ール 32
座標系 61
下向き 62
メ ー ト ル 61
サブ セ ッ ト 化 127
サブパス 64
し
辞書 235
下付き 138
下向き座標 62
出力イ ン テ ン ト 255
PDF/A のための 259
PDF/X のための 252
私用領域 89
す
Windows の 121
ス タ イル名 121
スポ ッ ト カ ラ ー (分版カ ラ ースペース) 73
スムーズシ ェ ーデ ィ ン グ 72
ス レ ッ ド モデル 31
せ
セキ ュ リ テ ィ 68
た
ダウンサン プ リ ング 163
縦書き 156
単位 61
ち
中国語 95, 156
て
デ ィ セ ン ダ 137
テキス ト 位置 137
テキス ト 進行方向 156
テキス ト バ リ エーシ ョ ン 137
テキス ト メ ト リ ッ ク 137
デ フ ォル ト 座標 61
索引
319
テ ン プ レー ト 66
塗 り 64
埋め込みの法的側面 127
等幅 138
ユーザー定義 (Type 3) 105
リ ソ ース設定 55
フ ォ ン ト ス タ イル 139
フ ォ ン ト ス タ イル名
Windows の 121
フ ォ ン ト メ ト リ ッ ク 137
不可視テキス ト 300
複数ページ画像フ ァ イル 164
複製
ページ枠を 181
袋文字 300
プ ラグイ ン
ブ ロ ッ ク 作成用 275
ブ レ ン ド 72
ブロ ッ ク
プ ラ グ イ ン 275
ブ ロ ッ ク プ ロパテ ィ 277
文書情報フ ィ ール ド 231
は
へ
バイ ト サービ ング 71
バイ ト 順序マー ク (BOM) 90
ハイパーテキス ト 文字列 97
配列 235
バイ ンデ ィ ング 29
パス 64
パスオブ ジ ェ ク ト 65
パスワー ド 68
パ タ ーン 72
バ ッ ク ス ラ ッ シ ュ置換 99
ページ ご と のダウン ロー ド 71
ページサイ ズ 232
ページサイ ズ規格 63
Acrobat の限界 63
ページ数 231
ページ定義 61
ベース ラ イ ン圧縮 165
と
透過 168
等幅 フ ォ ン ト 138
な
内容文字列 97
名前文字列 97
に
日中韓 (日本語 ・ 中国語 ・ 韓国語)
カ ス タ ム フ ォ ン ト 157
標準フ ォ ン ト 95
日本語 95, 156
ぬ
ひ
標準出力条件
PDF/A のための 261
PDF/X のための 255
描線 64
ふ
フ ォ ーム XObject 66
フ ォ ーム フ ィ ール ド : ブ ロ ッ クへの変換 286
フォン ト
Type 3 (ユーザー定義) フ ォ ン ト 105
サブ セ ッ ト 化 127
文書内の 232
AFM フ ァ イル 104
OpenType 103
PDF コ アセ ッ ト 118
PFA フ ァ イル 104
PFB フ ァ イル 104
PFM フ ァ イル 104
PostScript Type 1 104
TrueType 103
Type 3 (ユーザー定義) 105
320
索引
ほ
ホス ト エ ン コ ーデ ィ ング 91
ホス ト フ ォ ン ト 120
ま
マ ス ク 画像 168
み
ミ リ メ ー ト ル 61
め
メ ー ト ル座標 61
メ ト リ ッ ク 137
メ モ リ 内に PDF 文書を生成 59
も
文字参照 100
ゆ
ユーザースペース 61
ユーザー定義 (Type 3) フ ォ ン ト 105
ユーロキ ャ ラ ク タ 109
よ
用字系固有の改行 206
横書き 156
り
リ ソ ース カ テ ゴ リ 55
れ
page size 例
ページサイ ズ 232
例
暗号化状態 232
記述方向 232
文書情報フ ィ ール ド 231
文書内のフ ォ ン ト 232
ページ数 231
例外 51
レ イ ヤー と PDI 174
レ ン ダ リ ング イ ン テ ン ト 76
索引
321
ABC
PDFlib GmbH
Franziska-Bilek-Weg 9
80339 München, Germany
www.pdflib.com
電話 +49 • 89 • 452 33 84-0
FAX +49 • 89 • 452 33 84-99
ご質問がある と きは、 PDFlib メ ー リ ング リ ス ト と
tech.groups.yahoo.com/group/pdflib にある アー カ イ ブ を チ ェ ッ ク し て く だ さ い
ラ イ セ ン ス発行のお問い合わせ
[email protected]
サポー ト
[email protected] (お持ちの ラ イ セ ン ス番号をお書 き く だ さ い)
Fly UP