PDFlib - TechStyle

ABC
Text Extraction Toolkit (TET)
Version 4.1
PDF 文書か ら テ キ ス ト ・ 画像 ・ メ タ デー タ
を抽出す る ための ツールキ ッ ト
Copyright © 1997-2012 PDFlib GmbH. All rights reserved.
Protected by European and U.S. patents.
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]
商用 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 ・ Windows ・
OpenType ・ Windows は Microsoft Corporation の 商標です。 Apple ・ Macintosh ・ TrueType は Apple Computer,
Inc. の 商標です。 Unicode ・ Unicode ロ ゴは Unicode, Inc. の 商標です。 Unix は The Open Group の 商標です。
Java ・ Solaris は Sun Microsystems, Inc. の 商標です。 HKS は the HKS brand association: Hostmann-Steinberg,
K+E Printing Inks, Schmincke の登録商標です。 他の企業の製品 と サービ ス名は他の商標やサービ スマー ク で
ある場合があ り ます。
TET は以下のサー ド パーテ ィ ソ フ ト ウ ェ アの変更 さ れた部分を含んでいます :
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
TET は RSA Security, Inc. の MD5 メ ッ セージダ イ ジ ェ ス ト アルゴ リ ズムを含んでいます。
目次
0 TET の第一歩
0.1
7
ソ フ ト ウ ェ ア を イ ン ス ト ール 7
0.2 TET ラ イ セ ン スキーを適用 9
1 は じ めに
13
1.1 TET 機能概要 13
1.2 TET の さ ま ざ ま な使用法 15
1.3 文書 と サン プルへのロー ド マ ッ プ 16
1.4 TET 4.0 の新機能 17
1.5 TET 4.1 の新機能 18
2 TET コ マ ン ド ラ イ ン ツール
2.1
19
コ マ ン ド ラ イ ンオプ シ ョ ン 19
2.2 TET コ マ ン ド ラ イ ン を構築 22
2.3 コ マ ン ド ラ イ ンの例 24
2.3.1 テ キ ス ト を抽出 24
2.3.2 画像を抽出 24
2.3.3 TETML を生成 25
2.3.4 高度なオプシ ョ ン 25
3 TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
27
3.1 例外処理 27
3.2 C バイ ンデ ィ ング 29
3.3 C++ バイ ンデ ィ ング 32
3.4 COM バイ ンデ ィ ン グ 35
3.5 Java バイ ンデ ィ ング 36
3.6 .NET バイ ンデ ィ ン グ 38
3.7 Objective-C バイ ンデ ィ ング 39
3.8 Perl バイ ンデ ィ ング 41
3.9 PHP バイ ンデ ィ ング 42
3.10 Python バイ ンデ ィ ング 44
3.11 REALbasic バイ ンデ ィ ング 45
目次
3
3.12 Ruby バイ ンデ ィ ング 46
3.13 RPG バイ ンデ ィ ング 48
4 TET コ ネ ク タ
51
Adobe Acrobat 用無償 TET Plugin 51
4.1
4.2 Lucene 検索エ ン ジ ン用 TET コ ネ ク タ 53
4.3 Solr 検索サーバ用 TET コ ネ ク タ 56
4.4 Oracle 用 TET コ ネ ク タ 57
4.5 Microsoft 製品用 TET PDF IFilter 60
4.6 Apache TIKA ツールキ ッ ト 用 TET コ ネ ク タ 63
4.7 MediaWiki 用 TET コ ネ ク タ 65
5 設定
67
5.1 暗号化 PDF か ら内容を抽出 67
5.2 リ ソ ース設定 と フ ァ イル検索 69
5.3 代表的シナ リ オのための推奨方策 73
6 テキス ト 抽出
77
PDF の さ ま ざ ま な文書領域 77
6.1
6.2 ページ と テキス ト の視覚情報 81
6.3 日本語 ・ 中国語 ・ 韓国語テキス ト 87
6.3.1 日中韓エン コ ーデ ィ ン グ ・ CMap 87
6.3.2 日中韓テ キ ス ト の単語境界 87
6.3.3 縦書 き 87
6.3.4 日中韓分解 : narrow ・ wide ・ vertical 等 88
6.4 双方向ア ラ ビ ア文字 ・ ヘブ ラ イ文字テキス ト 90
6.4.1 双方向の一般的性質 90
6.4.2 ア ラ ビ ア文字テ キ ス ト を後処理 90
6.5 内容分析 92
6.6 レ イ アウ ト 分析 96
7 高度な Unicode 処理
99
7.1 Unicode の さ ま ざ ま な重要概念 99
7.2 Unicode 前処理 ( フ ィ ル タ リ ング) 102
7.2.1 すべての粒度のための フ ィ ル タ 102
7.2.2 粒度 word 以上のための フ ィ ル タ 103
4
目次
7.3 Unicode 後処理 105
7.3.1 Unicode 字形統合 105
7.3.2 Unicode 分解 108
7.3.3 Unicode 正規化 112
7.4 追加キ ャ ラ ク タ と サロゲー ト 114
7.5 グ リ フ に対する Unicode マ ッ ピ ング 115
8 画像抽出
121
8.1 画像抽出の基本 121
8.2 画像の連結 と フ ィ ル タ リ ング 123
8.3 配置画像 と 画像 リ ソ ース 125
8.4 ページベース と リ ソ ースベースの画像ループ 126
8.5 配置画像の視覚情報 127
8.6 制約 と 注意 129
9 TET マー ク ア ッ プ言語 (TETML)
131
9.1 TETML を生成 131
9.2 TETML の詳細を制御 135
9.3 TETML の さ ま ざ ま な要素 と TETML スキーマ 139
9.4 TETML を XSLT で変換 143
9.5 さ ま ざ ま な XSLT サン プル 146
10 TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.1
151
オプ シ ョ ン リ ス ト 151
10.2 オプ シ ョ ン リ ス ト 文法 151
10.3 基本型 154
10.4 図形型 157
10.5 一般関数 158
10.5.1 オプシ ョ ン処理 158
10.5.2 セ ッ ト ア ッ プ 161
10.5.3 PDFlib 仮想フ ァ イ ルシ ス テ ム (PVF) 162
10.5.4 Unicode 変換関数 165
10.5.5 例外処理 167
10.5.6 ロ グ記録 169
10.6 文書関数 171
10.7 ページ関数 178
目次
5
10.8 テキス ト ・ メ ト リ ク ス抽出関数 187
10.9 画像抽出関数 192
10.10 TET マー ク ア ッ プ言語 (TETML) 関数 196
10.11 pCOS 関数 199
A TET ラ イ ブ ラ リ ク イ ッ ク リ フ ァ レ ン ス
B 更新履歴
索引
6
目次
207
205
203
0 TET の第一歩
0.1 ソ フ ト ウ ェ ア を イ ン ス ト ール
TET は、 Windows シ ス テ ム群に対 し ては MSI イ ン ス ト ー ラ の形で頒布 さ れ、 それ以外のす
べての対応オペレーテ ィ ン グ シ ス テ ムに対 し ては圧縮アーカ イ ブの形で頒布 さ れます。す
べての TET パ ッ ケージの中には TET コ マ ン ド ラ イ ン ツール と TET ラ イ ブ ラ リ / コ ン ポー
ネ ン ト 、 お よ びサポー ト フ ァ イ ル群 ・ 説明書 ・ 使用例群が含まれます。 TET を イ ン ス ト ー
ルま たは解凍 し た後は、 以下の手順を推奨 し ます。
> TET コ マ ン ド ラ イ ン ツールのユーザはその実行形式を ただちに利用可能です。 指定可
能なオプシ ョ ンは 19 ページの 2.1 「 コ マ ン ド ラ イ ンオプシ ョ ン」 で解説 し ますが、 TET
コ マ ン ド ラ イ ン ツールをオプシ ョ ン な し で実行 し た と き に も 表示 さ れます。
> TET ラ イ ブ ラ リ / コ ン ポーネ ン ト のユーザは27ページの3章「TET ラ イ ブ ラ リ の言語バ イ
ンデ ィ ン グ」 の中の、 使いたい開発環境に対応す る 節を読み、 イ ン ス ト ール さ れた使
用例を眺め る と よ いで し ょ う 。 Windows の場合、 TET プ ロ グ ラ ミ ン グ例は ス タ ー ト メ
ニ ュ ーか ら (COM と .NET の場合)、 あ る いは イ ン ス ト レーシ ョ ンデ ィ レ ク ト リ か ら
(その他の言語バ イ ンデ ィ ン グの場合) 開 く こ と がで き ます。
商用 TET ラ イ セ ン ス を得た場合には、 自分の TET ラ イ セ ン ス キーを 9 ページの 0.2 「TET
ラ イ セ ン ス キーを適用」 に従っ て入力す る 必要があ り ます。
日中韓設定 レ ガシエン コ ーデ ィ ン グで符号化 さ れた日本語 ・ 中国語 ・ 韓国語 (日中韓)
テ キ ス ト を抽出す る ためには TET はそれに対応す る 日中韓エン コ ーデ ィ ン グ を Unicode に
マ ッ プす る CMap フ ァ イ ルを必要 と し ます。 こ の CMap フ ァ イ ル群はすべての TET パ ッ
ケージに含ま れてお り 、 TET の イ ン ス ト ールデ ィ レ ク ト リ 内の resource/cmap デ ィ レ ク ト
リ に イ ン ス ト ール さ れてい ます。 Windows シ ス テ ム群では、 TET イ ン ス ト ール時に フル イ
ン ス ト ールのオプシ ョ ン を選ぶだけで OK です。 こ の CMap フ ァ イ ル群はレ ジ ス ト リ を介
し て自動的に検索 さ れます。
それ以外のシ ス テ ムでは、 こ の CMap フ ァ イ ル群を以下の よ う に手動で設定す る 必要
があ り ます。
> TET コ マ ン ド ラ イ ン ツールに対 し ては、こ の CMap フ ァ イ ル群があ る デ ィ レ ク ト リ の名
前を --searchpath オプシ ョ ンで与え ます。
> TET ラ イ ブ ラ リ / コ ン ポーネ ン ト に対 し ては、実行時に次の よ う に searchpath を設定 し
ます。
set_option("searchpath=/CMap/リソース/への/パス");
ま た別の方法 と し て、 こ の日中韓 CMap フ ァ イ ル群へのア ク セ ス を設定す る には、 適切な
searchpath 定義を書いた UPR 設定フ ァ イ ルの場所を TETRESOURCEFILE 環境変数に設定す
る と い う 方法 も あ り ます。
IBM i5/iSeries でのグ リ フ リ ス ト 設定 IBM i5/iSeries 上 で は、 デ ィ レ ク ト リ resource/
glyphlst 内のグ リ フ リ ス ト が TET か ら 利用可能であ る 必要があ り ます。 こ れ ら のテーブル
は、TET が標準デ ィ レ ク ト リ 内に イ ン ス ト ール さ れた場合は自動的に利用可能に設定 さ れ
ます。
0.1 ソ フ ト ウ ェ ア を イ ン ス ト ール
7
評価版の制約事項 TET の コ マ ン ド ラ イ ン ツール と ラ イ ブ ラ リ は商用 ラ イ セ ン ス がな く
て も 完全機能の評価版 と し て使 う こ と がで き ます。非 ラ イ セ ン ス版はいずれ も すべての機
能に対応 し てい ますが、 最大 10 ページ ・ 1 MB 容量ま での PDF 文書だけ を処理で き る よ
う にな っ てい ます。TET の評価版はいずれ も 製品評価の目的にのみ使用が許 さ れてい ます
ので、 実用目的には使用 し ないで下 さ い。 TET を実用目的に使用す る には有効な TET ラ
イ セ ン ス が必要です。
8
0 章 : TET の第一歩
0.2 TET ラ イ セ ン スキー を適用
TET を実用目的に使用す る には有効な TET ラ イ セ ン ス キーが必要です。 TET ラ イ セ ン ス
を購入 さ れた ら 、 その ラ イ セ ン ス キーを適用す る こ と に よ っ て、 任意の大 き さ の文書を処
理で き る よ う にす る 必要があ り ます。 ラ イ セ ン ス キーの適用方法は数通 り あ り ますので、
以下に述べ る 方式のいずれか を選択 し て下 さ い。
注記 TET ラ イ セ ン スキーはプ ラ ッ ト フ ォ ーム依存なので、それぞれ購入対象 と な っ たプ ラ ッ ト
フ ォ ーム上でのみ使用する こ と がで き ます。
Windows イ ン ス ト ー ラ Windows イ ン ス ト ー ラ で作業を し てい る 場合は、 製品を イ ン ス
ト ールす る 際に ラ イ セ ン ス キーを入力す る こ と がで き ま す。 イ ン ス ト ー ラ は ラ イ セ ン ス
キーを レ ジ ス ト リ に追加 し ます (後述)。
ラ イ セ ン ス フ ァ イルでの作業 PDFlib は ラ イ セ ン ス キー群を ラ イ セ ン ス フ ァ イ ルか ら 読
み取 り ます。 ラ イ セ ン ス フ ァ イ ル と は、 後述の書式に従っ たテ キ ス ト フ ァ イ ルです。 すべ
ての TET デ ィ ス ト リ ビ ュ ーシ ョ ンに入っ てい る テ ンプ レー ト licensekeys.txt を使 う こ と も
で き ます。 「#」 キ ャ ラ ク タ で始ま る 行は コ メ ン ト であ り 無視 さ れます。 2 行目は ラ イ セ ン
ス フ ァ イ ル自体のバージ ョ ン情報を内容 と し て持ち ます :
# Licensing information for PDFlib GmbH products
PDFlib license file 1.0
TET 4.1 ...あなたのライセンスキー ...
ラ イ セ ン ス フ ァ イ ルは、 複数の PDFlib GmbH 製品に対す る ラ イ セ ン ス キーを、 別々の行
に内容 と し て持つ こ と が可能です。 ま た、 複数のプ ラ ッ ト フ ォ ーム に対す る ラ イ セ ン ス
キーを内容 と し て持つ こ と も で き ますので、一つの ラ イ セ ン ス キーを複数プ ラ ッ ト フ ォー
ムで共用す る こ と が可能です。 ラ イ セ ン ス フ ァ イ ルは以下の方法で設定で き ます :
> licensekeys.txt と い う フ ァ イ ルが、 すべてのデフ ォ ル ト デ ィ レ ク ト リ 内で検索 さ れます
(10 ページの 「デフ ォ ル ト フ ァ イ ル検索パ ス」 参照)。
> set_option( )API 関数で licensefile オプシ ョ ン を指定する こ と も で き ます :
tet.set_option("licensefile", "/path/to/licensekeys.txt");
こ の licensefile オプシ ョ ンは、 TET オブジ ェ ク ト を イ ン ス タ ン ス化 し た直後に、 すなわ
ち TET_new( ) を呼び出 し た後に (C の場合)、 あ る いは TET オブジ ェ ク ト を生成 し た
後に設定する 必要があ り ます。
> TET コ マ ン ド ラ イ ン ツールの --tetopt オプシ ョ ン を与え、licensefile オプシ ョ ンで ラ イ セ
ン ス フ ァ イ ルの名前を与え ます :
tet --tetopt "licensefile /path/to/your/licensekeys.txt" ...
パス名が空白キ ャ ラ ク タ を含む場合には、 パス を中括弧で囲む必要があ り ます :
tet --tetopt "licensefile {/path/to/your/license file.txt}" ...
> ラ イ セ ン ス フ ァ イ ルを指 し 示す環境(シ ェ ル)変数を設定す る こ と も で き ます。Windows
では、 シ ス テ ム コ ン ト ロ ールパネルを使っ て、 「シ ス テム」 → 「詳細設定」 → 「環境変
数」 を選択 し ます。 Unix では下記の よ う な コ マ ン ド を適用 し ます :
export PDFLIBLICENSEFILE="/path/to/licensekeys.txt"
0.2 TET ラ イ セ ン スキーを適用
9
IBM i5/iSeries では、 ラ イ セ ン ス フ ァ イ ルは下記の よ う に指定で き ます ( こ の コ マ ン ド
は、 ス タ ー ト ア ッ ププ ロ グ ラ ム QSTRUP 内で指定す る こ と がで き 、 すべての PDFlib
GmbH 製品に対 し て効力を持ち ます) :
ADDENVVAR ENVVAR(PDFLIBLICENSEFILE) VALUE(<... パス ...>) LEVEL(*SYS)
レ ジ ス ト リ 内に ラ イ セ ン スキー Windows では、 ラ イ セ ン ス フ ァ イ ルの名前を下記の レ
ジ ス ト リ キーに記入す る こ と も で き ます :
HKLM\SOFTWARE\PDFlib\PDFLIBLICENSEFILE
あ る いは、 ラ イ セ ン ス キーを直接下記の レ ジ ス ト リ キーに記入する こ と も で き ます :
HKLM\SOFTWARE\PDFlib\TET4\license
HKLM\SOFTWARE\PDFlib\TET4\4.1\license
MSI イ ン ス ト ー ラ は、 イ ン ス ト ール時に与え ら れた ラ イ セ ン ス キーを、 こ れ ら の項目の末
尾に書 き 込みます。
注記 64 ビ ッ ト Windows シ ス テム上で手作業で レ ジ ス ト リ を操作する際には注意が必要です。通
常、64 ビ ッ ト PDFlib バイ ナ リ は Windows レ ジ ス ト リ の 64 ビ ッ ト ビ ュ ー と と も に動作する
のに対 し て、64 ビ ッ ト シ ス テム上で走る 32 ビ ッ ト PDFlib バイ ナ リ はレ ジス ト リ の 32 ビ ッ
ト ビ ュ ー と と も に動作 し ます。 32 ビ ッ ト 製品に対する レ ジ ス ト リ キーを手作業で追加す
る必要がある場合には、必ず、regedit ツールの 32 ビ ッ ト バージ ョ ン を使用 し て く だ さ い。
これは 「ス タ ー ト 」 → 「 フ ァ イル名を指定 し て実行 ...」 ダ イ ア ログから下記のよ う に呼び
出す こ と がで き ます :
%systemroot%\syswow64\regedit
デ フ ォ ル ト フ ァ イル検索パス Unix ・ Linux ・ Mac OS X ・ i5/iSeries シ ス テ ム上では、 パ ス
やデ ィ レ ク ト リ 名を一切指定 し ていない場合で も 、 さ ま ざ ま な フ ァ イ ルがい く つかのデ ィ
レ ク ト リ でデフ ォ ル ト で検索 さ れます。 UPR フ ァ イ ル (その中に さ ら な る 検索パ ス群を含
めてお く こ と も で き ます) を検索 し て読み取 る 前に、下記のデ ィ レ ク ト リ が検索 さ れます:
<rootpath>/PDFlib/TET/4.1/resource/cmap
<rootpath>/PDFlib/TET/4.1/resource/codelist
<rootpath>/PDFlib/TET/4.1/resource/glyphlst
<rootpath>/PDFlib/TET/4.1
<rootpath>/PDFlib/TET
<rootpath>/PDFlib
Unix ・ Linux ・ Mac OS X の場合、 <rootpath> は、 まず /usr/local で置 き 換え ら れ、 ついで
HOME デ ィ レ ク ト リ で置 き 換え ら れます。 i5/iSeries の場合、 <rootpath> は空です。
ラ イ セ ン ス ・ リ ソ ース フ ァ イルのデ フ ォ ル ト フ ァ イル名 デフ ォ ル ト では下記の フ ァ イ
ル名が、 デフ ォ ル ト 検索パ スデ ィ レ ク ト リ 群の中で検索 さ れます :
licensekeys.txt
tet.upr
(ライセンスファイル)
(リソースファイル)
こ の機能を利用す る と 、環境変数や ラ ン タ イ ムオプシ ョ ン を一切指定 し な く て も ラ イ セ ン
ス フ ァ イ ルを扱 う こ と がで き ます。
10
0 章 : TET の第一歩
TET コ マ ン ド ラ イ ン ツ ールに対す る オ プ シ ョ ン内で ラ イ セ ン スキー を設定 TET コ マ ン
ド ラ イ ン ツールを使用す る 場合には、 ラ イ セ ン ス フ ァ イ ルま たは ラ イ セ ン ス キー自体の名
前を内容 と し て持つオプシ ョ ン を与え る こ と も で き ます :
tet --tetopt "license ...あなたのライセンスキー ..." ...さらなるオプション群...
TET API 呼び出 し で ラ イ セ ン スキー を設定 TET API を使用す る 場合は、 ス ク リ プ ト や
プ ロ グ ラ ムに以下の よ う な API 呼び出 し を加え て、実行時に ラ イ セ ン ス キーを設定 さ せ る
こ と も で き ます :
> COM/VBScript の場合 :
oTET.set_option "license=...あなたのライセンスキー ..."
> C の場合 :
TET_set_option(tet, "license=...あなたのライセンスキー ...");
> C++ ・ .NET/C# ・ Java ・ Ruby の場合 :
tet.set_option("license=...あなたのライセンスキー ...");
> Perl ・ Python ・ PHP の場合 :
tet->set_option("license=...あなたのライセンスキー ...");
> RPG の場合 :
d licensekey
d licenseval
c
c
s
s
20
50
eval
callp
licenseopt='license=... あなたのライセンスキー ...'+x'00'
TET_set_option(TET:licenseopt:0)
こ の license オプシ ョ ンは、 TET オブジ ェ ク ト を実体化 さ せた直後に設定す る 必要があ り
ます。 こ れは具体的には、TET_new( ) を呼び出 し た直後 (C の場合)、 ま たは TET オブジ ェ
ク ト を生成 さ せた直後 と い う こ と にな り ます。
i5/iSeries ・ zSeries 上での複数シ ス テム ラ イ セ ン ス フ ァ イル i5/iSeries ・ zSeries に対す
る ラ イ セ ン ス キーはシ ス テ ム固有ですので、 複数のシ ス テ ム で共用す る こ と はで き ま せ
ん。 リ ソ ース共有を実現 し て、 複数のシ ス テ ム で共用で き る 一つの ラ イ セ ン ス フ ァ イ ルを
扱 う ためには、 下記の ラ イ セ ン ス キー書式を用いて、 複数のシ ス テ ム固有キーを一つの
フ ァ イ ル内に保持す る こ と がで き ます :
PDFlib license file 2.0
# Licensing information for PDFlib GmbH products
TET
4.1
...あなたのライセンスキー ...
TET
4.1
...あなたのライセンスキー ...
...マシン1に対するシリアル番号...
...マシン2に対するシリアル番号...
1 行目のバージ ョ ン番号が変わ っ てい る こ と と 、 複数の ラ イ セ ン ス キーが存在 し てい る こ
と に留意 し て く だ さ い。 ラ イ セ ン ス キーの後にはそれぞれ、16 進 8 桁のシ リ アル番号 (i5/
iSeries の場合) か、 16 進 4 桁の CPU ID (zSeries の場合) が続 き ます。
さ ま ざ ま な ラ イ セ ン シ ン グオ プ シ ョ ン 一つない し 複数の コ ン ピ ュ ー タ 上で TET を使用
し た り 、 TET を あ なた自身の製品 と と も に再頒布 し た り す る ための、 さ ま ざ ま な ラ イ セ ン
シ ン グオプシ ョ ンが利用可能です。 ま た当社では、 サポー ト 契約や ソ ース コ ー ド 契約 も 提
供 し てい ます。 ラ イ セ ン シ ン グの詳細や購入注文フ ォームは、 TET デ ィ ス ト リ ビ ュ ーシ ョ
0.2 TET ラ イ セ ン スキーを適用
11
ン内に あ り ま す。 商用 ラ イ セ ン ス の取得に ご関心が あ る 場合、 ま たはご質問が あ る 場合
は、 ご連絡 く だ さ い :
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]
12
0 章 : TET の第一歩
1 は じ めに
PDFlib Text Extraction Toolkit (TET) は、 PDF 文書か ら テ キ ス ト ・ 画像を抽出す る こ と を
目的 と し てい ますが、 それ以外の情報を PDF か ら 取 り 出すために利用す る こ と も で き ま
す。 TET は、 以下の よ う な目的を実現す る ための基盤要素 と し て活用で き ます :
> PDF のテ キ ス ト 内容を検索
> PDF 内に含まれ る 全用語の一覧 ( コ ン コ ーダ ン ス) を生成
> 大量 PDF フ ァ イ ルを処理可能な検索エン ジ ン を実装
> PDF か ら テ キ ス ト 抽出 し て保管 ・ 翻訳 ・ その他再利用目的に活用
> PDF のテ キ ス ト 内容を他形式へ変換
> PDF を それぞれ内容に し たがっ て処理ま たは変更
> 複数 PDF 文書のテ キ ス ト 内容を比較
> PDF か ら ラ ス タ 画像を再利用のため抽出
> PDF か ら メ タ デー タ 等の情報を抽出
TET は、 ス タ ン ド ア ロ ン使用のために設計 さ れてお り 、 いかな る サー ド パーテ ィ ソ フ ト
ウ ェ ア を も 必要 と し ません。堅牢であ り 、マルチ ス レ ッ ド のサーバ用途に も 適 し てい ます。
1.1 TET 機能概要
対応す る PDF 入力 TET は、 さ ま ざ ま な作成元に よ る 数百万種の PDF テ ス ト フ ァ イ ルに
対 し て動作試験済です。 PDF 1.0 か ら PDF 1.7 拡張レベル 8 (ISO 32000 を含む) を受け入
れ可能です。 こ れは Acrobat 1 ~ X に対応 し ます。 ま た、 暗号化 さ れた文書 も 受け入れ可
能です。
Unicode 対応 TET には、 あ ら ゆ る テ キ ス ト に対 し て信頼性の高い Unicode マ ッ ピ ン グ を
実現す る に足 る 充分な数のアルゴ リ ズ ム と デー タ が内蔵 さ れてい ます。PDF 文書内のテ キ
ス ト は Unicode で符号化 さ れてい る と は限 り ませんが、 TET は PDF 文書か ら 抽出 し た テ
キ ス ト を Unicode に正規化 し ます :
> TET はすべてのテ キ ス ト 内容を Unicode に変換 し ます。C の場合、テ キ ス ト は UTF-8 形
式か UTF-16 形式で返 さ れます。 それ以外の言語の場合はネ イ テ ィ ブ Unicode 文字列
と し て返 さ れます。
> 合字な ど の複数文字グ リ フは、その構成素を並べた Unicode キ ャ ラ ク タ 列へ と 分解 さ れ
ます。
> ベン ダ依存 Unicode 値 (Corporate Use Subarea、 CUS) については識別情報が与え ら れ
る と と も に、 厳密な定義済みの意味を持つキ ャ ラ ク タ へ可能な限 り マ ッ プ さ れます。
> Unicode マ ッ ピ ン グ情報を欠いた グ リ フ についてはその よ う に識別情報が与え ら れ る
と と も に、 ユーザ指定可能な置換キ ャ ラ ク タ へマ ッ プ さ れます。
> 基本多言語面 (BMP) 外のキ ャ ラ ク タ に対す る UTF-16 サ ロ ゲー ト ペアは正 し く 解釈 さ
れ保持 さ れます。 サ ロ ゲー ト ペア と UTF-32 値はすべての言語バ イ ンデ ィ ン グにおい
て抽出可能です。
PDF 文書のなかには、信頼性の高い Unicode マ ッ ピ ン グの実現に必要な情報を充分に持た
ない も のがあ り ます。 その よ う な場合で も テ キ ス ト を正 し く 抽出で き る よ う 、 TET には さ
ま ざ ま な設定オプシ ョ ンが用意 さ れてお り 、 それを用い る こ と に よ っ て、 正 し い Unicode
マ ッ ピ ン グの実現に必要な補助的情報を与え る こ と がで き ます。必要なマ ッ ピ ン グ テーブ
ルの作成支援のため、 PDFlib FontReporter と い う Adobe Acrobat 用無料プ ラ グ イ ン を提供
1.1 TET 機能概要
13
いた し てお り ます。 こ のプ ラ グ イ ン を用いれば、 PDF 内の フ ォ ン ト ・ エン コ ーデ ィ ン グ ・
グ リ フ の解析が可能です。
日中韓対応 TET は、 日本語 ・ 中国語 ・ 韓国語テ キ ス ト の抽出に完全対応 し てい ます :
> あ ら ゆ る 定義済み日中韓 CMap (エン コ ーデ ィ ン グ) が認識 さ れ、 日中韓テ キ ス ト は
Unicode に変換 さ れます。 日中韓エン コ ーデ ィ ン グ変換のための CMap フ ァ イ ル群が、
TET デ ィ ス ト リ ビ ュ ーシ ョ ンに同梱 さ れてい ます。
> 特殊な キ ャ ラ ク タ 字形 (全角 ・ 半角 ・ 縦中横等) を、 対応す る 通常の字形に変換 (字
形統合) す る こ と も で き ます。
> 横書 き と 縦書 き に対応 し てい ます。
> 日中韓フ ォ ン ト 名は Unicode へ正規化 さ れます。
双方向ヘ ブ ラ イ文字 ・ ア ラ ビ ア文字テキス ト 対応 TET は、 双方向テ キ ス ト を扱 う ため
の以下の機能を含んでい ます :
> 右書 き ・ 双方向テ キ ス ト を論理順に並べ替え
> ページの主要テ キ ス ト 方向を決定
> ア ラ ビ ア文字の表示形を正規化 し 、 合字を分解
> 単語の引 き 伸ば し に使われてい る ア ラ ビ ア文字の タ ト ウ ィ ールキ ャ ラ ク タ を除去
Unicode 後処理 TET の Unicode 後処理機能は以下を含みます :
> 字形統合 : 一つない し 複数のキ ャ ラ ク タ に対 し て温存 ・ 置換 ・ 除去のいずれか を行い
ます。 対象キ ャ ラ ク タ 群を Unicode 集合 と し て指定す る こ と がで き る ので便利です。
> 分解:Unicode 規格で定義 さ れてい る 正準分解ま たは互換分解を適用す る こ と も 可能で
す。 環境に よ っ ては こ れに よ っ て テ キ ス ト が よ り 有用にな る 場合があ り ます。 た と え
ば、 ア ク セ ン ト 付 き キ ャ ラ ク タ や分数、 商標記号の よ う な記号を温存 し た り 分割 し た
り す る こ と がで き ます。
> 正規化 : 出力を、 Unicode 規格で定義 さ れてい る Unicode 正規形 NFC ・ NFD ・ NFKC ・
NFKD のいずれかへ変換 し ます。 こ れに よ っ て TET は、 デー タ ベースや検索エン ジ ン
な ど い く つかの環境が入力 と し て求め る 形式 と 正確に一致 し た形式を生成す る こ と が
で き ます。
画像抽出 TET は PDF か ら ラ ス タ 画像を抽出 し ます。 断片化 さ れた画像の隣接部分は再
結合 さ れ、 後処理 と 再利用を可能に し ます (い く つかのアプ リ ケーシ ョ ンに よ っ て生成 さ
れたマルチ ス ト リ ッ プ画像等) 。 小 さ い画像は、 微小な画像素片で出力が散 ら か る こ と を
防 ぐ ために、 フ ィ ル タ を かけて取 り 除 く こ と も で き ます。
画像は、広 く 用い ら れてい る TIFF・JPEG・JPEG 2000 のいずれかの形式で抽出 さ れます。
位置情報 TET は、 テ キ ス ト のページ上の位置やグ リ フ幅やテ キ ス ト 方向 と い っ た厳密
な メ ト リ ク ス を出力 し ます。テ キ ス ト 抽出処理に際 し てはページ上の特定領域を外 し た り
含めた り す る こ と に よ り 、 た と えばヘ ッ ダ ・ フ ッ タ や余白を無視 さ せた り す る こ と が可能
です。
画像については、 ピ ク セルサ イ ズ ・ 物理サ イ ズ ・ 色空間が得 ら れ る ほか、 位置や角度
も 得 ら れます。
単語検出 と 内容解析 TET には、 低次元のグ リ フ情報を抽出す る 機能だけでな く 、 高次
元の内容解析を行 う 高度な アルゴ リ ズ ム も 内蔵 さ れてい ます :
> 単語区切 り を検出 し て文字群でな く 単語を抽出。
> ハ イ フ ン で区切 ら れた単語の各部を再結合 (デハ イ フ ネーシ ョ ン)。
14
1 章 : は じ めに
>
>
>
>
>
>
影付 き や擬似太字テ キ ス ト 等に よ る テ キ ス ト のダブ り を除去。
段落群を読み順に再連結。
ページ上に配置 さ れたテ キ ス ト 群の順序認識。
テ キ ス ト の行を再構成。
ページ上の表構造を認識。
上付 き ・ 下付 き ・ ド ロ ッ プキ ャ ッ プ (段落頭の大 き い先頭キ ャ ラ ク タ 群) を認識。
PDF オ ブ ジ ェ ク ト を容易に指 し 示すための pCOS イ ン タ フ ェ ース TET は、 任意の PDF
オブジ ェ ク ト を取得す る ための pCOS (PDFlib Comprehensive Object System) イ ン タ フ ェー
ス を含んでい ます。 pCOS を使 う と 、 PDF 文書か ら 、 PDF メ タ デー タ や イ ン タ ラ ク テ ィ ブ
要素 ( し お り テ キ ス ト やフ ォーム フ ィ ール ド の内容な ど) 、 その他あ ら ゆ る 情報を、 簡単
な取得 イ ン タ フ ェース で取得す る こ と がで き ます。pCOS ク エ リ パス の文法は、別途 pCOS
パ ス リ フ ァ レ ン ス に記述 し てい ます。
TET Markup Language (TETML) PDF 文書か ら 取得 し た情報は、TET Markup Language す
なわち TETML と い う XML 形式で表現す る こ と も で き ます。 こ れは標準的な XML ツール
群で処理が可能です。 TETML は、 テ キ ス ト ・ 画像 ・ メ タ デー タ 情報を内容 と し て持つほ
か、 オプシ ョ ン と し て フ ォ ン ト ・ 位置関連情報を内容 と し て持つ こ と も で き ます。
テキス ト と は何か TET は さ ま ざ ま な種類の PDF 文書を扱い ますが、 目に見え る テ キ ス
ト はすべて う ま く 抽出で き る と は限 り ません。そのテ キ ス ト は PDF のテ キ ス ト ・ エン コ ー
デ ィ ン グ機能を用いて符号化 さ れてい る 必要があ り ます (すなわちそれはフ ォ ン ト に基づ
いた も のでなければな り ません) 。 以下の種類のテ キ ス ト はページ上で目に見え てはいて
も TET で抽出す る こ と はで き ません :
> ページの ス キ ャ ナ画像等、 ラ ス タ ラ イ ズ さ れた (ピ ク セル画像の) テ キ ス ト
> フ ォ ン ト な し にベ ク ト ル要素で直接表 さ れたテ キ ス ト
なお、 メ タ デー タ と ハ イ パーテ キ ス ト 要素 ( し お り ・ フ ォーム フ ィ ール ド ・ ノ ー ト ・ 注釈
等) 内テ キ ス ト は pCOS イ ン タ フ ェース で抽出で き ます。 逆に TET は、 ページ上で目に
見え ていないテ キ ス ト を抽出す る こ と も あ り ます。 こ れは以下の よ う な場合に起 こ る 可能
性があ り ます :
> PDF の不可視属性を用いたテ キ ス ト (ただ し 、 こ の種類のテ キ ス ト を テ キ ス ト 抽出処
理の対象外にす る オプシ ョ ンはあ り ます)。
> テ キ ス ト が、 ページ上の画像等何か他の要素に よ っ て隠 さ れた り 切 り 取 ら れた り し て
い る 場合。
> PDF の レ イ ヤーは無視 さ れ、各レ イ ヤーの表示 / 非表示にかかわ ら ず、TET はすべての
レ イ ヤーか ら テ キ ス ト を抽出 し ます。
1.2 TET の さ ま ざ ま な使用法
TET は、 さ ま ざ ま な開発環境用のプ ロ グ ラ ミ ン グ ラ イ ブ ラ リ (コ ン ポーネ ン ト ) と し て も
提供 さ れます し 、 バ ッ チ操作のための コ マ ン ド ラ イ ン ツール と し て も 提供 さ れます。 両者
の機能は同様ですが、 それぞれ実用に適す る 場面が異な っ てい ます。 TET ラ イ ブ ラ リ と コ
マ ン ド ラ イ ン ツールはど ち ら も 、 TET の XML ベース の出力形式であ る TETML を生成す
る こ と がで き ます。
ど ち ら の TET を選べば よ いか、 以下にそのガ イ ド ラ イ ン を掲げます。
> TET プ ロ グ ラ ミ ン グ ラ イ ブ ラ リ はデス ク ト ッ プアプ リ ケーシ ョ ンやサーバアプ リ ケー
シ ョ ン に組み込んで使 う こ と がで き ます。 さ ま ざ ま なプ ロ グ ラ ミ ン グ言語に対応 し て
1.2 TET の さ ま ざ ま な使用法
15
い ます。 TET パ ッ ケージには、 TET ラ イ ブ ラ リ のすべての対応言語バ イ ンデ ィ ン グに
おけ る 使用例が同梱 さ れてい ます。
> TET コ マ ン ド ラ イ ン ツールはPDF文書のバ ッ チ処理に適 し てい ます。プ ロ グ ラ ミ ン グは
一切不要で、 かわ り に さ ま ざ ま な コ マ ン ド ラ イ ン オプシ ョ ン を そな え てお り 、 それを
用いて複雑な ワー ク フ ロ ーでの活用が可能です。
> TETML 出力は、XMLベース の ワー ク フ ロ ー と 、さ ま ざ ま な XML 処理ツールや XSLT等の
XML 処理言語に通 じ た開発者に適 し てい ます。
> TET コ ネ ク タ は、 デー タ ベースや検索エン ジ ン等、 広 く 利用 さ れてい る さ ま ざ ま な ソ
フ ト ウ ェ アパ ッ ケージに TET を統合 さ せ る ために適 し てい ます。
> TET Plugin は、TET を対話的に利用で き る よ う にする 、Adobe Acrobat 用の無償拡張です
(詳 し く は 51 ページの 4.1 「Adobe Acrobat 用無償 TET Plugin」 を参照)。
1.3 文書 と サ ン プルへの ロ ー ド マ ッ プ
TET ラ イ ブ ラ リ 用 ミ ニサン プル TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、 すべての対応言語バ
イ ンデ ィ ン グのためのプ ロ グ ラ ミ ン グ作成例を含んでい ます。 こ れ ら の ミ ニサン プルは、
自分のアプ リ ケーシ ョ ンのための出発点 と し て利用 し た り 、自分の TET イ ン ス ト レーシ ョ
ン を試験 し た り す る ために利用で き ます。以下のアプ リ ケーシ ョ ンのための ソ ース コ ー ド
か ら 成っ てい ます :
> extractorサンプルは、PDF文書か ら テ キ ス ト を抽出す る ための基本的なループを演示 し
てい ます。
> image_resources サンプルは、 PDF 文書か ら 画像を リ ソ ース志向な方式で抽出す る ため
の基本的なループ を演示 し てい ます。
> dumper サンプルは、 PDF 文書に関す る 一般情報を取得す る ための内蔵 pCOS イ ン タ
フ ェース の使用を示 し てい ます。
> fontfilter サンプルは、 フ ォ ン ト 名や文字サ イ ズ と いっ た フ ォ ン ト 関連情報の処理方法
を示 し てい ます。
> glyphinfo サンプルは、 グ リ フ に関す る 情報 (フ ォ ン ト ・ サ イ ズ ・ 位置等) や、 dropcap ・
shadow ・ hyphenation と いっ たテ キ ス ト 属性の取得方法を演示 し てい ます。
> tetml サンプルは、PDF文書か ら TETML(PDF の内容を表現する ための TET の XML言語)
を生成す る ためのプ ロ ト タ イ プ的 コ ー ド を含んでい ます。
> get_attachments サンプル (すべての言語バ イ ンデ ィ ン グで得 ら れ る わけではあ り ませ
ん) は、 PDF フ ァ イ ル添付、 すなわち別の PDF 文書内に埋め込まれてい る PDF 文書
の処理方法を演示 し てい ます。
注記 Windows Vista ・ Windows 7 では、 ミ ニサン プルはデ フ ォル ト で 「Program Files」 デ ィ レ ク
ト リ に イ ン ス ト ール さ れます。 Windows Vista の新 し い保護方式に よ っ て、 こ れ ら のサン
プルによ っ て生成 さ れる PDF 出力 フ ァ イルは、 「互換性フ ァ イル」 下で し か表示 さ れませ
ん。 推奨回避法 : サン プルをユーザデ ィ レ ク ト リ へ複製 し ます。
XSLT サン プル TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、 い く つかの XSLT ス タ イ ルシー ト を含
んでい ます。 こ れ ら は、 さ ま ざ ま な目的を実現する ための TETML の処理方法を演示 し て
い ます :
> concordance.xsl : 文書内の単語を頻度の多い順に並べた リ ス ト を生成 し ます。
> fontfilter.xsl : 文書内の、 指定 し た値 よ り も 大 き なサ イ ズで特定の フ ォ ン ト を用いてい
る すべての単語を リ ス ト し ます。
16
1 章 : は じ めに
> fontfinder.xsl : 文書内のすべての フ ォ ン ト について、 すべての出現箇所をページ番号 と
位置情報 と と も に リ ス ト し ます。
> fontstat.xsl : フ ォ ン ト と グ リ フ の統計を生成 し ます。
> index.xsl : アルフ ァ ベ ッ ト 順の索引を生成 し ます。
> metadata.xsl : TETML 内に含まれてい る 文書レベル XMP メ タ デー タ か ら 、 選択 し た
フ ィ ール ド 群を抽出 し ます。
> solr.xsl : Solr エン タ プ ラ イ ズ検索サーバ用の入力を生成 し ます。
> table.xsl : 表を CSV フ ァ イ ル (カ ン マ区切 り 値) へ抽出 し ます。
> tetml2html.xsl : TETML を シ ンプルな HTML へ変換 し ます。
> textonly.xsl : TETML 入力か ら 生テ キ ス ト を抽出 し ます。
TET ク ッ ク ブ ッ ク TET ク ッ ク ブ ッ ク は、 特定の応用問題を TET ラ イ ブ ラ リ で解決す る
ための ソ ース コ ー ド 作成例の集合です。 こ の ク ッ ク ブ ッ ク は Java 言語で書かれてい ます
が、他の言語で も 容易に利用で き ます。 なぜな ら TET API はすべての対応言語バ イ ンデ ィ
ン グでほぼ等価だか ら です。 い く つかの ク ッ ク ブ ッ ク サンプルは XSLT 言語で書かれてい
ます。 TET ク ッ ク ブ ッ ク は以下のグループに ま と め ら れてい ます :
> Text : テ キ ス ト 抽出関連のサンプル群
> Font : フ ォ ン ト 属性に焦点を あ てたテ キ ス ト 関連のサンプル群
> Image : 画像抽出関連のサンプル群
> TET & PDFlib+PDI:PDF か ら TET で情報を抽出 し て、新たな PDF を元 PDF と 抽出情報に
基づいて構築す る サンプル群。 こ れ ら のサンプルには、 TET に加え て PDFlib+PDI 製品
が必要です。
> TETML : TETML 処理用の XSLT サンプル群
> Special : その他のサンプル群
TET ク ッ ク ブ ッ ク は下記 URL で利用可能です :
www.pdflib.com/tet-cookbook
pCOS ク ッ ク ブ ッ ク pCOS ク ッ ク ブ ッ ク は、 TET に内蔵 さ れてい る pCOS イ ン タ フ ェー
ス のための コ ー ド の集合です。 下記 URL で利用可能です :
www.pdflib.com/pcos-cookbook
pCOS イ ン タ フ ェ ース の詳細は、 TET パ ッ ケージに含まれてい る pCOS パ ス リ フ ァ レ
ン ス に示 さ れてい ます。
1.4 TET 4.0 の新機能
TET 4.0 の新機能 と 大幅改善機能を以下に示 し ます :
>
>
>
>
>
>
>
>
パフ ォーマ ン ス向上 : さ ま ざ ま な種別の文書で よ り 速 く な り ま し た。
数十万ページの超大文書で も よ り 速 く 、 よ り メ モ リ 消費が少な く な り ま し た。
ア ラ ビ ア文字 ・ ヘブ ラ イ 文字等の右書 き ・ 双方向テ キ ス ト を抽出。
正規化 ・ 字形統合 ・ 分解の制御に よ る Unicode 後処理。
影付 き 除去 ・ 単語境界検出 ・ ハ イ フ ン除去の改善。
上付 き ・ 下付 き 検出の改善。
非準拠 PDF 文書に対す る 回避策の導入に よ る 堅牢性の向上。
破損 PDF か ら う ま く テ キ ス ト を抽出す る ための修復モー ド の改善。
1.4 TET 4.0 の新機能
17
> XML 出力 (TETML) 内の情報の増加 : ハ イ フ ン除去 ・ ド ロ ッ プキ ャ ッ プ ・ 影付き ・ 上
付 き / 下付 き 。 下向 き 座標系 ・ PDF/A-2 ・ PDF/E ・ フ ォ ン ト サブセ ッ ト 。
> C++ ・ Perl 言語バ イ ンデ ィ ン グの改善。
1.5 TET 4.1 の新機能
TET 4.1 の新機能 と 大幅改善機能を以下に示 し ます :
> PDF 1.7 拡張レベル 8 に対応 (ISO 32000-2 で仕様化 さ れた暗号化方式)
> 擬似オブジ ェ ク ト が増え (フ ォ ン ト の詳細な ど)、 暗号化 さ れた添付の取 り 扱い方を明
確に し た pCOS イ ン タ フ ェース 8 へのア ッ プデー ト
> TETML 出力内に、 PDF 文書 と フ ォ ン ト に関す る さ ら な る 情報
> 新たに Objective-C ・ Ruby 用の言語バ イ ンデ ィ ン グ
> 表意文字の日中韓テ キ ス ト に対す る 単語境界検出の改良 (オプシ ョ ン ideographic)
> 新たな API 関数 TET_convert_to_unicode( ) ・ TET_info_pvf( )
> Lucene ・ Solr 用の コ ネ ク タ を ア ッ プデー ト
> メ タ デー タ と 構造化テ キ ス ト 内容の検出 と 抽出のためのTIKAツールキ ッ ト 用の新たな
コネク タ
> パフ ォーマ ン ス の向上、 と り わけ大規模文書に対 し て
> さ ま ざ ま なバグ修正 と 小規模な改良
18
1 章 : は じ めに
2 TET コ マ ン ド ラ イ ン ツール
2.1 コ マ ン ド ラ イ ン オ プ シ ョ ン
TET コ マ ン ド ラ イ ン ツールを利用すれば、 プ ロ グ ラ ミ ン グ を一切必要 と せずに、 1 つない
し 複数の PDF 文書か ら テ キ ス ト ・ 画像を抽出す る こ と がで き ます。 出力は、 プ レーン テ
キ ス ト (Unicode) 形式か、 ま たは TET の XML ベース の出力形式であ る TETML 形式で生
成す る こ と がで き ます。 こ の TET プ ロ グ ラ ムはた く さ んの コ マ ン ド ラ イ ン オプシ ョ ンで
制御で き ま す。 こ のプ ロ グ ラ ム は各単語の後に空白キ ャ ラ ク タ (U+0020) を挿入 し 、 ま
た各行の後に U+000A を、 各ページの後に U+000C を挿入 し ます。 こ れを呼び出すには次
の よ う に 1 つない し 複数の PDF フ ァ イ ルを指定 し ます。
tet [<オプション群>] <ファイル名>...
こ の TET コ マ ン ド ラ イ ン ツールは TET ラ イ ブ ラ リ の最上位の上に構築 さ れてい ま す。
--docopt ・ --tetopt ・ --imageopt ・ --pageopt オプ シ ョ ン を用いれば、 151 ページの 10 章
「TET ラ イ ブ ラ リ API リ フ ァ レ ン ス」 のオプシ ョ ン一覧表に従っ た さ ま ざ ま なオプシ ョ ン
を ラ イ ブ ラ リ に与え る こ と が可能です。表 2.1 にすべての TET コ マ ン ド ラ イ ン オプシ ョ ン
を挙げます ( こ の一覧は、 こ の TET プ ロ グ ラ ム を オプシ ョ ン な し で走 ら せた と き に も 表
示 さ れます)。
注記 日中韓テキス ト を抽出するには、 7 ページの 0.1 「 ソ フ ト ウ ェ ア を イ ン ス ト ール」 に従っ
て TET 同梱の CMap フ ァ イル群の置き場所を設定する必要があ り ます。
表 2.1 TET コ マ ン ド ラ イ ンオプ シ ョ ン一覧
オプ シ ョ ン
引数
機能
--
オプ シ ョ ンの リ ス ト を終了 さ せます。 こ れは、 フ ァ イル名が - キ ャ ラ ク タ で
始ま っ ている と き に有用です。
@filename1
オプ シ ョ ン群を持つレ スポン ス フ ァ イルを指定 し ます。 文法の説明は 22
ページの 「レ スポン ス フ ァ イル」 を参照 し て く だ さ い。 レ スポン ス フ ァ イル
は、 -- オプ シ ョ ンの前、 かつ最初の フ ァ イル名の前でのみ認識 さ れます。 レ
スポン ス フ ァ イルを用いて他のオプ シ ョ ンの引数を置き換え る こ と はで き
ず、 オプ シ ョ ンに引数を補完する ためにのみ用いる こ と がで き ます。
--docopt
< オプ シ ョ ン リ
スト >
open_document( ) に対する追加のオプ シ ョ ン リ ス ト (172 ページの表 10.8 参
照)。 tetml オプ シ ョ ンの filename サブオプ シ ョ ンは こ こ では使え ません。
--firstpage
-f
<integer> | last
テキス ト 抽出を開始するページの番号。 キーワー ド last で末尾ページ を指
定、 last-1 で末尾ページの前のページ、 等々。 デ フ ォル ト : 1
--format
utf8 | utf16
テキス ト 出力の形式を指定 (デ フ ォル ト : utf8) :
utf8
BOM (バイ ト オーダマー ク) 付き UTF-8
utf16
ネ イ テ ィ ブバイ ト 順序の BOM 付き UTF-16
このオプ シ ョ ンは、 つねに UTF-8 で生成 さ れる TETML 出力には効力を持ち
ません。
--help, -?
(またはオプ
シ ョ ンな し)
利用可能なオプ シ ョ ン を ま と めたヘルプ を表示
2.1 コ マ ン ド ラ イ ン オプ シ ョ ン
19
表 2.1 TET コ マ ン ド ラ イ ン オプ シ ョ ン一覧
オプ シ ョ ン
--image
-i
引数
機能
文書から 画像を抽出 し ます。 抽出 さ れた画像の命名規則は --imageloop オプ
シ ョ ンに依存 し ます。
2
--imageloop
page | resource
--image オプ シ ョ ンによ る画像抽出の数え上げループの種類を指定 し ます
(デ フ ォ ル ト : --tetml を指定 し ている な ら resource、 そ う でないな ら
page) :
page
選択 さ れたページ群にあ るすべての画像を数え上げます。 複数回
配置 さ れている画像は複数回抽出 さ れます。 抽出 さ れた画像は下
記のパ タ ーン で命名 さ れます :
< ファイル名 >_p< ページ番号 >_< 画像番号 >.[tif|jpg|jpx]
resource 文書内のすべての (結合 し た) 画像 リ ソ ース を数え上げます。 各
画像 リ ソ ースは、 文書内に現れる回数にかかわら ず、 一度だけ抽
出 さ れます。 画像抽出にあた っ ては --firstpage ・ --lastpage オ
プ シ ョ ンは無視 さ れます。 抽出 さ れた画像は下記のパ タ ーン で命
名 さ れます :
< ファイル名 >_I< 画像 ID>.[tif|jpg|jpx]
注記 : I< 画像 ID> は TETML 属性 Image/@id で も用い られます。
--imageopt
< オプ シ ョ ン リ
スト >
write_image_file( ) に対する追加のオプ シ ョ ン リ ス ト (194 ページの表
10.17 を参照)
--lastpage
-l
<integer> | last
テキス ト 抽出を終了するページの番号。 キーワー ド last で末尾ページ を指
定、 last-1 で末尾ページの前のページ、 等々。 デ フ ォ ル ト : last
--outfile
-o
< フ ァ イル名 >
(複数の入力 フ ァ イル名を与えている と きは不可) テキス ト 出力または TETML 出力のフ ァ イル名。 入力フ ァ イルを一個だけ与えている と きのみ、 フ ァ
イル名 「-」 を用いて標準出力を指定可能。 デ フ ォル ト : 入力フ ァ イル名の
.pdf ・ .PDF を .txt (テキス ト 出力時) か .tetml (TETML 出力時) に置き換
えた名前。
--pageopt
< オプ シ ョ ン リ
スト >
テキス ト 出力生成な ら open_page( ) に、 TETML 出力生成な ら process_
page( ) に与え られる追加のオプ シ ョ ン リ ス ト 。 使え る オプ シ ョ ンについて
は 179 ページの表 10.10 と 196 ページの表 10.18 を参照。 テキス ト 出力の場
合、 オプ シ ョ ン granularity はつねに page に設定 さ れます。
--password,
-p
< パスワー ド >
暗号化文書に対するユーザ ・ マ ス タ ・ 添付いすれかのパスワー ド 。 場合に
よ っ ては、 シ ュ ラ ッ グ機能を利用する と 、 パス を与えずに暗号化文書を イ ン
デ ッ ク スする こ と がで き ます (67 ページの 5.1 「暗号化 PDF から内容を抽
出」 を参照)。
--searchpath1 < パス >...
-s
フ ァ イル (CMap 等) を検索する 1 つない し 複数のデ ィ レ ク ト リ の名前。 デ
フ ォ ル ト : イ ン ス ト ール環境に依存
--targetdir
-t
< ディ レク ト リ
名>
生成 さ れる テキス ト ・ TETML ・ 画像フ ァ イルの出力デ ィ レ ク ト リ 。 存在 し て
いるデ ィ レ ク ト リ であ る必要があ り ます。 デ フ ォ ル ト : . (すなわち カ レ ン ト
作業デ ィ レ ク ト リ )
--tetml
-m
glyph | word |
wordplus | line |
page
(--text と の組み合わせ不可) テキス ト ・ 画像情報を含む TET 3 スキーマに
従 っ た TETML 出力を生成 し ます。 TETML はつねに UTF-8 で生成 さ れます。
与え る引数で、 い く つかの種類の一つを選びます (135 ページの 9.2 「TETML
の詳細を制御」 を参照) :
glyph
グ リ フ位置情報 と フ ォ ン ト 情報を持 っ たグ リ フ ベースの TETML
word
単語枠を持 っ た単語ベースの TETML
wordplus 単語枠 と すべてのグ リ フ 情報を持っ た単語ベースの TETML
ine
行ベースの TETML (テキス ト のみ)
page
ページベースの TETML (テキス ト のみ)
20
2 章 : TET コ マ ン ド ラ イ ン ツール
表 2.1 TET コ マ ン ド ラ イ ンオプ シ ョ ン一覧
オプ シ ョ ン
引数
機能
--tetopt
< オプ シ ョ ン リ
スト >
set_option( ) に対する追加のオプ シ ョ ン リ ス ト (158 ページの表 10.2 を参
照)。 オプ シ ョ ン outputformat は無視 さ れます (かわ り に --format を用い
て く だ さ い)。
(--tetml と の組み合わせ不可) 文書から テキス ト を抽出 し ます (デ フ ォ ル ト
で有効)
--text2
--verbose
-v
--version, -V
0|1|2|3
冗長レ ベル (デ フ ォル ト : 1) :
0
一切出力な し
1
エ ラ ーのみ出力
2
エ ラ ー と フ ァ イル名を出力
3
詳細レ ポー ト
TET バージ ョ ン番号を印字 し ます。
1. こ のオプ シ ョ ンは複数回与え る こ と も で き ます。
2. オ プ シ ョ ン --image はテキス ト 抽出を無効に し ますが、 それは --text ・ --tetml と 組み合わせる こ と も で き ます。
2.1 コ マ ン ド ラ イ ン オプ シ ョ ン
21
2.2 TET コ マ ン ド ラ イ ン を構築
TET コ マ ン ド ラ イ ンの作成にあ た っ ては、 以下の規則を守 る 必要があ り ます。
> 入力フ ァ イ ルは、 searchpath で指定 し たすべてのデ ィ レ ク ト リ 内で検索 さ れます。
> オプシ ョ ン に よ っ ては短オプシ ョ ン形が利用可能で、 長オプシ ョ ン形 と の混在 も 可能
です。
> 長オプシ ョ ンは先頭の数文字だけで表す こ と も 可能です。 ただ し その省略形が一意で
あ る 場合に限 り ます。
> 入力フ ァ イ ルの暗号化 ス テー タ ス に よ っ ては、 テ キ ス ト を正 し く 抽出す る ためにユー
ザパ ス ワー ド かマ ス タ パ ス ワー ド が必要 と な る 場合があ り ます。 こ れは --password オ
プシ ョ ン で与え る 必要があ り ます。 TET は こ のパ ス ワー ド でテ キ ス ト 抽出が許 さ れ る
か ど う か を調べ、 だめな ら エ ラ ーを生成 し ます。
TET は コ マ ン ド ラ イ ン全体を まず調べてか ら フ ァ イ ルの処理を開始 し ます。コ マ ン ド ラ イ
ン上ど こ のオプシ ョ ン内であれエ ラ ーが出たな ら ば、フ ァ イ ルはどれ も 一切処理 さ れない
ま ま と な り ます。
フ ァ イル名 空白キ ャ ラ ク タ を含むフ ァ イ ル名は、 TET の よ う な コ マ ン ド ラ イ ン ツール
で用い る 際には若干特殊な取 り 扱いを要 し ます。空白キ ャ ラ ク タ を含んだ フ ァ イ ル名を処
理 さ せ る には、 フ ァ イ ル名全体を ダブル ク ォー ト 文字 " で く く ら なければな り ません。 ワ
イ ル ド カー ド が標準的用法に従っ て使え ます。 た と えば *.pdf は、 所与のデ ィ レ ク ト リ 内
で フ ァ イ ル名接尾辞 .pdf を持つすべての フ ァ イ ルを表 し ます。 シ ス テ ムに よ っ て、 大文字
小文字を区別す る も の と し ない も のがあ る こ と に注意 し ま し ょ う (*.pdf が *.PDF と 違っ た
り 等)。 ま た Windows シ ス テ ム群では ワ イ ル ド カー ド は、 空白キ ャ ラ ク タ を含むフ ァ イ ル
名には効かないので注意 し て下 さ い。 ワ イ ル ド カー ド はカ レ ン ト デ ィ レ ク ト リ 内で評価 さ
れ、 検索パ スデ ィ レ ク ト リ 内では評価 さ れません。
Windows では、 すべての フ ァ イ ル名オプシ ョ ンが Unicode 文字列を受け入れます。 た と
えば こ れは、エ ク ス プ ロ ー ラ か ら フ ァ イ ルを コ マ ン ド プ ロ ンプ ト ウ ィ ン ド ウへ ド ラ ッ グ し
た際に発生 し ます。
レ スポ ン ス フ ァ イル オ プ シ ョ ン 群 を コ マ ン ド ラ イ ン で直接与 え る 方法以外に、 オ プ
シ ョ ン群を レ ス ポ ン ス フ ァ イ ル内で与え る 方法 も あ り ま す。 レ ス ポ ン ス フ ァ イ ルの内容
は、 コ マ ン ド ラ イ ン内で @filename オプシ ョ ンが見つか っ た位置に挿入 さ れます。
レ ス ポ ン ス フ ァ イ ルは、 オプシ ョ ン群 と 引数群を持っ た単純なテ キ ス ト フ ァ イ ルです。
こ れは以下の文法規則に従 う 必要があ り ます :
> オプシ ョ ン値群は空白文字、 すなわち スペース ・ ラ イ ン フ ィ ー ド ・ リ タ ーン ・ タ ブの
いずれかで区切 る 必要があ り ます。
> 空白文字を含む値は、 ダブル ク ォーテーシ ョ ン マー ク " で囲む必要があ り ます。
> 値の先頭 と 末尾のダブル ク ォーテーシ ョ ン マー ク は無視 さ れます。
> ダブル ク ォ ーテーシ ョ ン マー ク を リ テ ラ ルに用い る ためには、 バ ッ ク ス ラ ッ シ ュ でマ
ス ク し て \" と す る 必要があ り ます。
> バ ッ ク ス ラ ッ シ ュ キ ャ ラ ク タ は、 も う 一個のバ ッ ク ス ラ ッ シ ュ でマ ス ク し て \\ と す る
必要があ り ます。
レ ス ポ ン ス フ ァ イ ルは入れ子にす る こ と も で き ます。 すなわち、 @filename 文法はそれ自
体を レ ス ポ ン ス フ ァ イ ルで用い る こ と も で き ます。
レ ス ポ ン ス フ ァ イ ルは、 フ ァ イ ル名引数に対 し て Unicode 文字列を持つ こ と も で き ま
す。 レ ス ポ ン ス フ ァ イ ルは、 UTF-8 ・ EBCDIC-UTF-8 ・ UTF-16 のいずれかの形式で符号
22
2 章 : TET コ マ ン ド ラ イ ン ツール
化す る こ と がで き 、 対応す る BOM で始ま る 必要があ り ます。 BOM が見つか ら ない と き
は、 レ ス ポ ン ス フ ァ イ ルの内容は、 zSeries では EBCDIC で、 それ以外のすべてのシ ス テ
ムでは ISO 8859-1 (Latin-1) で解釈 さ れます。
終了 コ ー ド TET コ マ ン ド ラ イ ン ツールは以下に示す終了 コ ー ド を返すので、 こ れを利
用すれば、 要求 し た操作が正 し く 遂行で き たか ど う かを調べ る こ と がで き ます :
> 終了 コ ー ド 0 : すべての コ マ ン ド ラ イ ンオプシ ョ ンの処理が成功 し 完結 し た。
> 終了 コ ー ド 1 : フ ァ イ ル処理エ ラ ーが 1 件ない し 複数発生、 し か し 処理は継続 さ れた。
> 終了 コ ー ド 2 : コ マ ン ド ラ イ ンオプシ ョ ンの中に何 ら かのエ ラ ーが発見 さ れた。処理は
その不良オプシ ョ ンの位置で停止 し たため、 入力フ ァ イ ルは一切処理 さ れなか っ た。
2.2 TET コ マ ン ド ラ イ ン を構築
23
2.3 コ マ ン ド ラ イ ンの例
以下の例は、TET コ マ ン ド ラ イ ンオプシ ョ ンのい く つかの有用な組み合わせを演示 し てい
ます。 作成例は 2 種類示 さ れてい ます。 1 種類目はすべてのオプシ ョ ンの長形式を用いて
お り 、 一方 2 種類目はそれ と 同等な短オプシ ョ ン形式を用いてい ます。
2.3.1 テキス ト を抽出
PDF 文書 file.pdf か ら テ キ ス ト を UTF-8 形式で抽出 し 、 それを file.txt に格納 し ます :
tet file.pdf
テ キ ス ト 抽出か ら 先頭ページ と 末尾ページ を除外 し ます :
tet --firstpage 2 --lastpage last-1 file.pdf
tet -f 2 -l last-1 file.pdf
日中韓 CMap が置かれてい る デ ィ レ ク ト リ を与え ます (日中韓テ キ ス ト 抽出では必須で
す) :
tet --searchpath /usr/local/cmaps file.pdf
tet -s /usr/local/cmaps file.pdf
PDF か ら テ キ ス ト を UTF-16 形式で抽出 し 、 それを フ ァ イ ル file.utf16 に格納 し ます :
tet --format utf16 --outfile file.utf16 file.pdf
tet --format utf16 -o file.utf16 file.pdf
デ ィ レ ク ト リ 内のすべての PDF フ ァ イ ルか ら テ キ ス ト を抽出 し 、 生成 さ れた *.txt フ ァ イ
ル群を別のデ ィ レ ク ト リ (すでに存在 し てい る 必要があ り ます) に格納 し ます :
tet --targetdir out in/*.pdf
tet -t out in/*.pdf
テ キ ス ト 抽出をページ上の特定の領域に限 り ます。 こ れは適切なページオプシ ョ ンの リ ス
ト を与え る こ と で実現で き ます :
tet --pageopt "includebox={{0 0 200 200}}" file.pdf
さ ま ざ ま な コ マ ン ド ラ イ ンオプシ ョ ン を内容 と し て持つレ ス ポ ン ス フ ァ イ ルを用いて、カ
レ ン ト デ ィ レ ク ト リ 内のすべての PDF 文書を処理 し ます (フ ァ イ ル options に コ マ ン ド ラ
イ ンオプシ ョ ン群が入っ てい ます) :
tet @options *.pdf
2.3.2 画像 を抽出
file.pdf か ら 画像群をページ志向な方式で抽出 し 、 それ ら をデ ィ レ ク ト リ out 内の file*.tif/
file*.jpg に格納 し ます :
tet --targetdir out --image file.pdf
tet -t out -i file.pdf
file.pdf か ら 画像群を リ ソ ース志向な方式で抽出 し 、それ ら をデ ィ レ ク ト リ out 内の file*.tif/
file*.jpg に格納 し ます :
24
2 章 : TET コ マ ン ド ラ イ ン ツール
tet --targetdir out --image --imageloop resource file.pdf
tet -t out -i --imageloop resource file.pdf
file.pdf か ら 画像群を画像結合な し に抽出 し ます。 こ れは、画像処理に関連 し た適切なペー
ジオプシ ョ ンの リ ス ト を与え る こ と で実現で き ます :
tet --targetdir out --image --pageopt "imageanalysis={merge={disable}}" file.pdf
tet -t out -i --pageopt "imageanalysis={merge={disable}}" file.pdf
2.3.3 TETML を生成
PDF 文書 file.pdf に対す る TETML 出力を単語モー ド で生成 し 、 それを file.tetml に格納 し
ます :
tet --tetml word file.pdf
tet -m word file.pdf
TETML 出力を、 Options 要素一切な し で生成 し ます。 こ れは、 適切な文書オプシ ョ ンの リ
ス ト を与え る こ と で実現で き ます :
tet --docopt "tetml={elements={options=false}}" --tetml word file.pdf
TETML 出力を、 すべてのグ リ フ情報を持っ た単語モー ド で生成 し 、 それを file.tetml に格
納 し ます :
tet --tetml word --pageopt "tetml={glyphdetails={all}}" file.pdf
tet -m word --pageopt "tetml={glyphdetails={all}}" file.pdf
画像群を抽出 し て TETML を生成す る こ と を、 一回の呼び出 し で行い ます :
tet --image --tetml word file.pdf
tet -i -m word file.pdf
TETML 出力を下向 き 座標で生成 し ます :
tet --tetml word --pageopt "topdown={output}" file.pdf
tet -m word --pageopt "topdown={output}" file.pdf
2.3.4 高度な オ プ シ ョ ン
あ る 種の TeX 由来の PDF 文書に対 し て、文書オプシ ョ ン checkglyphlists を与え て Unicode
マ ッ ピ ン グ を改善 し ます :
tet --docopt checkglyphlists file.pdf
Unicode 字形統合を適用 し ます。た と えば空白字形統合:すべての種類の Unicode 空白キ ャ
ラ ク タ を U+0020 へマ ッ プ し ます :
tet --docopt "fold={{[:blank:] U+0020}}" file.pdf
句読点を単語境界 と し て無効に し ます :
tet --pageopt "contentanalysis={punctuationbreaks=false}" file.pdf
2.3 コ マ ン ド ラ イ ンの例
25
26
2 章 : TET コ マ ン ド ラ イ ン ツール
3 TET ラ イ ブラ リ の言語バイ ン ディ ン グ
こ の章では、TET ラ イ ブ ラ リ で供給 さ れ る さ ま ざ ま な言語バ イ ンデ ィ ン グの仕様について
解説 し ます。 TET デ ィ ス ト リ ビ ュ ーシ ョ ンには、 対応 し てい る すべての言語バ イ ンデ ィ ン
グに よ る い く つかの小 さ な TET アプ リ ケーシ ョ ンのための完全なサンプル コ ー ド が含ま
れてい ます。
3.1 例外処理
あ る 種のエ ラ ーは多 く の言語において例外 と 呼ばれてい ます。それには も っ と も な理由が
あ り 、 そ う し たエ ラ ーは単な る 例外で、 プ ロ グ ラ ムが始ま っ て終わ る ま での間にそ う 頻繁
には起 こ ら ない と 予想 さ れ る か ら です。 一般的な さ ばき 方 と し ては、 まずい こ と が頻繁に
起 こ り そ う な関数呼び出 し については通常のエ ラ ー報告の し く み (要は特別なエ ラ ー コ ー
ド を返す) を採用す る と し て、 めっ たに起 こ ら な さ そ う な も のについて ま でそれをや る と
コ ー ド があ ら ゆ る 場合分けに よ っ て条件文だ ら けにな っ て し ま う ので、それを避け る ため
にそ う し た も のについては特殊な例外の し く みを採用す る のが普通です。TET で も ま さ に
その通 り の こ と を行っ てい ます。 操作に よ っ ては、 割 と 頻繁に まずい こ と が起 き る と 予想
で き る も のがあ り ます。 た と えば :
> 正 し いパス ワー ド を知 ら ない PDF 文書を開 こ う と し た (ただ し 、67 ページの 5.1 「暗号
化 PDF か ら 内容を抽出」 で説明す る シ ュ ラ ッ グ機能 も 参照)。
> 誤っ た フ ァ イ ル名で PDF 文書を開 こ う と し た。
> 修復で き ないほ ど破損 し てい る PDF 文書を開 こ う と し た。
TET は こ の よ う なエ ラ ーを、 値 -1 を返す こ と に よ っ て知 ら せます。 API リ フ ァ レ ン ス に
記述 し てい る 通 り です。 一方、 有害 と 考え ら れ る 出来事ではあ っ て も 起 き る 頻度は割 と 低
い も の も あ り ます。 た と えば :
> 仮想 メ モ リ が足 り な く な っ た。
> 関数に与えたパ ラ メ タ がおか し い (文書のハン ド ルが無効だっ た等)。
> オプシ ョ ン リ ス ト を与えた ら 形式が間違っ ていた。
> 必要な リ ソ ース なのに (日中韓テ キ ス ト 抽出には CMap フ ァ イ ルが必要等) 見つか ら な
い。
TET が こ の よ う な状況を検知 し た場合には、特別なエ ラ ー値が呼び出 し 元に返 る のではな
く 、 例外が発生 し ます。 例外にネ イ テ ィ ブに対応 し てい る 言語では、 例外の発生は、 その
言語・環境が与え る 標準手段を用いて行われます。C 言語バ イ ンデ ィ ン グの場合には、TET
はカ ス タ ムの例外処理の し く みを提供 し てい る ので、 ク ラ イ ア ン ト はそれを用い る 必要が
あ り ます (29 ページの 3.2 「C バ イ ンデ ィ ン グ」 参照)。
重要な留意点 と し ては、 例外が起 き た ら 文書の処理は止めなければな り ません。 例外
の後に呼んで も 安全な メ ソ ッ ド は delete( ) ・ get_apiname( ) ・ get_errnum( ) ・ get_errmsg( )
だけです。 こ れ以外の メ ソ ッ ド を例外の後に呼ぶ と 予測で き ない結果につなが る こ と があ
り ます。 こ の例外は以下の情報を持っ てい ます。
> 一意のエ ラ ー番号。
> 例外の原因 と な っ た API 関数の名前。
> 問題点を説明 し た文。
失敗 し た関数呼び出 し の原因 を取得 TET の関数に よ っ ては、た と えば open_document( )
や open_page( ) 等、 呼び出 し て失敗 し て も 例外が発生 し ない も のがあ り ます (そ う し た関
3.1 例外処理
27
数はエ ラ ー時には -1 を返 し ます)。 その よ う な場合には、 失敗 し た関数呼び出 し の直後に
関数 get_errnum( ) ・ get_errmsg( ) ・ get_apiname( ) を呼び出せば、 問題の性質に関す る 詳
し い情報を得 る こ と がで き ます。
28
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
3.2 C バ イ ン デ ィ ン グ
TET は C 言語で、 い く つかの C++ モジ ュ ールを用いて書かれてい ます。 C バ イ ンデ ィ ン
グ を 利 用 す る に は、 静 的 ま た は 共 有 ラ イ ブ ラ リ の い ず れ か を 使 用 す る こ と が で き
(Windows ・ MVS の場合は DLL)、 自分の ソ ース モジ ュ ールに イ ン ク ルー ド す る ためのセ ン
ト ラ ル TET イ ン ク ルー ド フ ァ イ ル tetlib.h が必要です。 あ る いは、 tetlibdl.h を用いて TET
DLL を実行時に動的に読み込む こ と も で き ます (詳 し く は次項参照)。
注記 C 用の TET バイ ンデ ィ ング を用いる ア プ リ ケーシ ョ ンは、C++ コ ンパイ ラ で リ ン ク する必
要があ り ます。 なぜな ら この ラ イ ブ ラ リ には C++ で実装 さ れている部分があるから です。
C リ ン カ を使用する と 、ア プ リ ケーシ ョ ン を明示的に必要な C++ サポー ト ラ イ ブ ラ リ 群に
リ ン ク し ないかぎ り 、 非決定の外部参照を引き起 こ す可能性があ り ます。
実行時に読み込まれ る DLL と し て TET を使用 多 く の ク ラ イ ア ン ト では TET を、 リ ン
ク 時に結合 さ れ る 静的結合 ラ イ ブ ラ リ か動的 ラ イ ブ ラ リ と し て利用 し ますが、DLL を実行
時に読み込んですべての API 関数へのポ イ ン タ を動的に取得す る こ と も 可能です。 こ れは
と り わけ、 DLL を必要に応 じ てのみ読み込むために有用であ り 、 ま た、 MVS 上では ラ イ
ブ ラ リ は TET に対 し て明示的に リ ン ク さ れ る こ と な く DLL と し て実行時に個別に読み込
まれ る ので有用です。 TET では、 こ の動的な利用法を実現す る ために特化 し た機構を用意
し てい ます。 こ れは以下の規則に従っ て動かせます :
> tetlib.h でな く tetlibdl.h を イ ン ク ルー ド 。
> TET_new( ) ・ TET_delete( ) でな く TET_new_dl( ) ・ TET_delete_dl( ) を使用。
> TET_TRY( ) ・ TET_CATCH( ) でな く TET_TRY_DL( ) ・ TET_CATCH_DL( ) を使用。
> その他すべての TET 呼び出 し に関数ポ イ ン タ を使用。
> 追加モジ ュ ールtetlibdl.c を コ ンパ イ ル し て、生成 さ れ る オブジ ェ ク ト フ ァ イ ルに自分の
アプ リ ケーシ ョ ン を リ ン ク 。
動的読み込みの し く みを extractordl.c サンプルで演示 し てい ます。
注記 DLL の実行時読み込みは、 選ばれたプ ラ ッ ト フ ォ ームでのみ対応 し ています。
例外処理 TET の API は、C 言語にはネ イ テ ィ ブな例外処理がないのを補 う ために、 こ の
ラ イ ブ ラ リ が発生 さ せた例外に対処す る ための し く みを提供 し てい ます。 TET_TRY( ) マ ク
ロ と TET_CATCH( ) マ ク ロ を用い る こ と に よ り 、例外発生時にエ ラ ー処理や ク リ ーン ア ッ プ
を実行 さ せ る ための コ ー ド を入れ込んだ ク ラ イ ア ン ト コ ー ド を組み立て る こ と がで き る
のです。 こ れ ら のマ ク ロ は コ ー ド 内に 2 つの部分を切 り 分け ます。 1 つは try 節で、 例外
を発生 さ せ る 可能性のあ る コ ー ド を持ち、 も う 1 つは catch 節で、 例外に対処す る コ ー ド
を持ち ます。 try ブ ロ ッ ク の中か ら 呼び出 さ れた API 関数のいずれかが例外を発生 さ せた
と き 、プ ロ グ ラ ムの実行はただちに catch ブ ロ ッ ク の先頭ス テー ト メ ン ト に移 り ます。TET
の ク ラ イ ア ン ト の コ ー ド は以下の規則に従 う 必要があ り ます :
> TET_TRY( ) と TET_CATCH( ) は必ず対に し なければな り ません。
> TET_new( ) は決 し て例外を発生 さ せません。try ブ ロ ッ ク は、有効な TET オブジ ェ ク ト ハ
ン ド ルを用いなければ開始 さ せ る こ と がで き ないので、 TET_new( ) はすべての try ブ
ロ ッ ク の外で呼び出 さ なければな り ません。
> TET_delete( ) は決 し て例外を発生 さ せません。よ っ て、すべての try ブ ロ ッ ク の外で安全
に呼び出す こ と がで き ます。 catch 節の中で呼び出す こ と も で き ます。
> try ブ ロ ッ ク と catch ブ ロ ッ ク の両方の中で用い ら れてい る 変数については特別な注意
を払 う 必要があ り ます。 コ ンパ イ ラ は、 制御がブ ロ ッ ク か ら ブ ロ ッ ク へ移 る こ と は知
3.2 C バイ ンデ ィ ング
29
ら ないので、 その よ う な場合、 不適切な コ ー ド を生成す る 可能性があ り ます (レ ジ ス
タ 変数最適化等)。
幸い、 こ の種の問題を避け る 簡単な規則があ り ます。 try ブ ロ ッ ク と catch ブ ロ ッ ク の
両方で用い ら れ る 変数は volatile と 宣言す る 必要があ る のです。 volatile キーワー ド の
使用は コ ンパ イ ラ に、 危険な最適化を変数に行っ てはな ら ない と い う こ と を知 ら せま
す。
> try ブ ロ ッ ク を抜け る 場合には(た と えば return ス テー ト メ ン ト に よ っ て、ひいては対応
す る TET_CATCH( ) の実行をバ イ パ ス し て)、return ス テー ト メ ン ト の前に TET_EXIT_TRY( )
マ ク ロ を呼び出 し て、 例外の し く みにその こ と を通知す る 必要があ り ます。
> TET のあ ら ゆ る 言語バ イ ンデ ィ ン グの場合 と 同様、 例外が発生 し た ら 文書処理は止め
なければな り ません。
以下の コ ー ド に、 こ れ ら の規則の遵守例を示 し ます。 ク ラ イ ア ン ト の コ ー ド 内で TET の
例外を扱 う 際の典型的な書 き 方 も あわせて示 し てい ます(完全なサンプルは TET パ ッ ケー
ジ内にあ り ます) :
volatile int pageno;
...
if ((tet = TET_new()) == (TET *) 0)
{
printf("メモリがいっぱいです\n");
return(2);
}
TET_TRY(tet)
{
for (pageno = 1; pageno <= n_pages; ++pageno)
{
/* ページ処理 */
if (/* エラーが起きた */)
{
TET_EXIT_TRY(tet);
return -1;
}
}
/* API関数群を直接・間接に呼び出すステートメント群 */
}
TET_CATCH(tet)
{
printf("エラー %d が %s() 内で %d ページ上で発生しました: %s\n",
TET_get_errnum(tet), TET_get_apiname(tet), pageno, TET_get_errmsg(tet));
}
TET_delete(tet);
名前文字列に対す る Unicode 処理 C 言語はネ イ テ ィ ブで Unicode に対応 し てい ません。
API 関数に対す る 文字列パ ラ メ タ のなかには名前文字列 と し て宣言 さ れてい る も のがあ り
ます。 こ れ ら は length パ ラ メ タ と 、 文字列の先頭の BOM の有無 と に よ っ て処理の さ れ方
が異な り ます。 C の場合、 length パ ラ メ タ が 0 でない と き は文字列は UTF-16 と 解釈 さ れ
ます。 length パ ラ メ タ が 0 の と き は、 文字列が UTF-8 BOM で始ま っ ていれば UTF-8 と
解釈 さ れ、 EBCDIC UTF-8 BOM で始ま っ ていれば EBCDIC UTF-8 と 解釈 さ れ、 BOM が
なければ host エン コ ーデ ィ ン グ (ただ し EMBDIC ベース の全プ ラ ッ ト フ ォーム上では
ebcdic) と 解釈 さ れます。
30
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
オ プ シ ョ ン リ ス ト に対す る Unicode 処理 オプシ ョ ン リ ス ト に文字列を含め る と き は特
別な注意が必要です。 なぜな ら 、 それは UTF-16 形式の Unicode 文字列 と し て表す こ と は
で き ず、 バ イ ト 列 と し て表す こ と し かで き ないか ら です。 そのため、 Unicode のオプシ ョ
ンに対 し ては UTF-8 が用い ら れます。 オプシ ョ ンの先頭の BOM を見て、 TET はそれを
ど う 解釈す る か を決め ます。 こ の BOM を用いて文字列の形式が判定 さ れます。 具体的に
は、 文字列オプシ ョ ンの解釈動作は以下の通 り です :
> オプシ ョ ンが UTF-8 BOM (\xEF\xBB\xBF) で始ま っ ていれば UTF-8 と 解釈 さ れます。
> オプシ ョ ンが EBCDIC UTF-8 BOM (\x57\x8B\xAB) で始ま っ ていれば EBCDIC UTF-8
と 解釈 さ れます。
> BOM がなければ文字列は winansi (ただ し EBCDIC ベース のプ ラ ッ ト フ ォーム上では
ebcdic) と し て扱われます。
注記 TET_convert_to_unicode( ) ユーテ ィ リ テ ィ 関数を用い る と 、 UTF-16 文字列を UTF-8 文字
列に変換する こ と がで き ます。 Unicode 値を持つオプ シ ョ ン リ ス ト を作 り たい と き に便利
です。
3.2 C バイ ンデ ィ ング
31
3.3 C++ バ イ ン デ ィ ン グ
注記 C++ で書かれたア プ リ ケーシ ョ ンについては、C++ バイ ンデ ィ ング を通 じ てではな く 、TET
.NET DLL に直接ア ク セスする こ と を推奨 し ます (ただ し C++ バイ ンデ ィ ングを用いるべ
き ク ロ ス プ ラ ッ ト フ ォ ームア プ リ ケーシ ョ ン を除 く ) 。 TET デ ィ ス ト リ ビ ュ ーシ ョ ンに、
この組み合わせを演示する .NET CLI で使用する C++ サン プル コ ー ド を含んでいます。
tetlib.h C ヘ ッ ダ フ ァ イ ルに加え て、 C++ 用のオブジ ェ ク ト 指向 ラ ッ パ も 提供 さ れてお り 、
TET の ク ラ イ ア ン ト か ら 利用す る こ と がで き ます。 こ の ラ ッ パはヘ ッ ダ フ ァ イ ル tetlib.h
を必要 と し ます。 こ のヘ ッ ダ フ ァ イ ルは tetlib.h を イ ン ク ルー ド し ます。 tet.hpp はテ ンプ
レー ト ベース の実装を内容 と し て持ち ますので、 対応する tet.cpp モジ ュ ールは必要あ り
ません。 C++ オブジ ェ ク ト ラ ッ パを使 う こ と は、 API 関数 と 、 すべての TET 関数名の TET_
接頭辞 と に よ る 関数的ア プ ロ ーチ を、 よ り オブジ ェ ク ト 志向な ア プ ロ ーチへ置 き 換え ま
す。
実行時に読み込まれ る DLL と し て TET を利用 C 言語バ イ ンデ ィ ン グ と 同様に、 C++ バ
イ ンデ ィ ン グでは、TET を実行時に動的に自分のアプ リ ケーシ ョ ンにア タ ッ チす る こ と が
で き ます (29 ページの 「実行時に読み込まれ る DLL と し て TET を使用」 を参照)。 動的
読み込みを有効にす る には、 tet.hpp を イ ン ク ルー ド す る アプ リ ケーシ ョ ン モジ ュ ールを
コ ンパ イ ルす る 時に下記の よ う に し ます :
#define TETCPP_DL
1
こ れに加え て、追加モジ ュ ール tetlibdl.c を コ ンパ イ ル し て、 その結果で き る オブジ ェ ク ト
フ ァ イ ルに自分のアプ リ ケーシ ョ ン を リ ン ク さ せる 必要があ り ます。動的読み込みの詳細
は、 TET オブジ ェ ク ト 内に隠蔽 さ れてい ますので、 C++ API には影響を与え ません : すべ
ての メ ソ ッ ド 呼び出 し は、 動的読み込みが有効にな っ てい る か ど う かにかかわ ら ず、 同 じ
見た目にな り ます。 動的読み込みの し く みを、 提供する Makefile 内の extractordl サンプル
で演示 し てい ます。
注記 DLL の実行時読み込みには、 一部プ ラ ッ ト フ ォ ームでのみ対応 し ています。
C++ の文字列処理 TET のテ ン プ レー ト ベー ス の文字列処理アプ ロ ーチでは、 文字列処
理に関 し て以下の使用パ タ ーンが使え ます :
> C++ 標準 ラ イ ブ ラ リ 型 std::wstring の文字列が基本文字列型 と し て用い ら れます。 こ れ
は、UTF-16 ま たは UTF-32 で符号化 さ れた Unicode キ ャ ラ ク タ を持つ こ と がで き ます。
こ れは TET 4.0 以降のデフ ォ ル ト 動作であ り 、カ ス タ ムデー タ 型 (次項参照) が wstring
に対 し て大 き な利点 を 持た な いか ぎ り 、 新 し い ア プ リ ケーシ ョ ン に対す る 推奨ア プ
ロ ーチです。
> 文字列処理の た めの カ ス タ ム (ユーザ定義) デー タ 型 を、 そ の カ ス タ ム デー タ 型が
basic_string ク ラ ス テ ンプ レー ト の イ ン ス タ ン ス化であ り 、 かつユーザが与え る 変換 メ
ソ ッ ド に よ っ て Unicode と の相互変換が可能であ る かぎ り 、 用い る こ と がで き ます。
> プ レーン C++ 文字列を、TET 3.0 ま でのバージ ョ ンに対 し て開発 さ れた既存の C++ アプ
リ ケーシ ョ ン と の互換性のために用い る こ と がで き ます。 こ の互換方式は、 既存アプ
リ ケーシ ョ ン のためだけに用意 さ れてい ます ( ソ ース コ ー ド 互換性について下記注記
を参照)。
新 し い イ ン タ フ ェ ー ス は、 TET メ ソ ッ ド と や り と り さ れ る すべての文字列がネ イ テ ィ ブ
wstring であ る と 見な し ます。 wchar_t デー タ 型のサ イ ズに よ っ て、 wstring は UTF-16 で
(2 バ イ ト キ ャ ラ ク タ 群)、ま たは UTF-32 で(4 バ イ ト キ ャ ラ ク タ 群)符号化 さ れた Unicode
32
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
文字列を内容 と し て持つ と 見な さ れます。 ソ ース コ ー ド 内の リ テ ラ ル文字列は、 ワ イ ド 文
字であ る こ と を示すために先頭に L をつけ る 必要があ り ます。 リ テ ラ ル内で Unicode キ ャ
ラ ク タ は \u ・ \U 文法で作成で き ます。 こ の文法は標準 ISO C++ に含まれてい る のですが、
コ ン パ イ ラ に よ っ て は こ れに対応 し て い な い も のが あ り ま す。 そ の場合には リ テ ラ ル
Unicode キ ャ ラ ク タ は 16 進キ ャ ラ ク タ で作成す る 必要があ り ます。
注記 EBCDIC ベースのシス テムの場合、 wstring ベースのイ ン タ フ ェ ースに対する オプ シ ョ ン リ
ス ト 文字列を作成する際には、オプ シ ョ ン リ ス ト 内に EBCDIC と UTF-16 の wstring が混在
する こ と を防ぐ ため、 さ ら に変換を行 う 必要があ り ます。 こ の変換に便利な コ ー ド と 利用
法が、 追加モ ジ ュ ール utf16num_ebcdic.hpp にあ り ます。
ア プ リ ケーシ ョ ン を新 し い C++ バ イ ン デ ィ ン グに合わせて変更 TET 3.0 ま で の バ ー
ジ ョ ンに対 し て開発 さ れた既存の C++ アプ リ ケーシ ョ ンは、 以下の よ う に し て適合 さ せ
る こ と がで き ます :
> TET C++ ク ラ スは pdflib 名前空間内に入 り ま し たので、ク ラ ス名を修飾す る 必要があ り
ます。 いちいち pdflib::TET を書 く こ と を避け る ため、 ク ラ イ ア ン ト アプ リ ケーシ ョ ン
は TET メ ソ ッ ド を使 う 前に下記を追加す る べ き です :
using namespace pdflib;
> アプ リ ケーシ ョ ンの文字列処理を wstring へ切 り 替え ます。 こ れは外部情報源か ら の
デー タ について も 当ては ま り ます。 し か し 、 ソ ース コ ー ド 内の文字列 リ テ ラ ル (オプ
シ ョ ン リ ス ト も ) は、 L 接頭辞を頭につけ る 必要があ り ます。 た と えば
const wstring pageoptlist = L"granularity=page";
> TET のエ ラ ー メ ッ セージ と 例外文字列 (TET・TET::Exception ク ラ ス内の get_errmsg( ) メ
ソ ッ ド ) を処理す る には、 適切な wstring 対応 メ ソ ッ ド (wcerr 等) を用い る 必要があ
り ます。
> TET C++ バ イ ンデ ィ ン グで tet.cpp モジ ュ ールは必要な く な り ま し た。TET デ ィ ス ト リ
ビ ュ ーシ ョ ンは こ のモジ ュ ールのダ ミ ー実装を含んでい ますが、 こ れは TET アプ リ
ケーシ ョ ンのビル ド 処理か ら は除 く べ き です。
レ ガ シ ア プ リ ケーシ ョ ン と の完全 ソ ース コ ー ド 互換性 新 し い C++ バ イ ンデ ィ ン グはア
プ リ ケーシ ョ ン レベルの ソ ース コ ー ド 互換性を志向 し て設計 さ れてい ますが、 ク ラ イ ア ン
ト アプ リ ケーシ ョ ンは再 コ ンパ イ ルす る 必要があ り ます。 レ ガシアプ リ ケーシ ョ ンに対 し
て完全な ソ ース コ ー ド 互換性を実現す る には以下の方法が用意 さ れてい ます :
> tet.hpp を イ ン ク ルー ド す る 前に wstring ベース の イ ン タ フ ェース を下記の よ う に無効
化 し ます :
#define TETCPP_TET_WSTRING 0
> tet.hpp を イ ン ク ルー ド す る 前に pdflib 名前空間を下記の よ う に無効化 し ます :
#define TETCPP_USE_PDFLIB_NAMESPACE 0
C++ のエ ラ ー処理 TET API 関数は、 エ ラ ー発生時には C++ 例外を発生 さ せます。 こ れ
ら の例外は ク ラ イ ア ン ト コ ー ド 内で C++ の try/catch 節を用いて キ ャ ッ チす る 必要があ り
ます。 さ ら な る エ ラ ー情報を提供す る ために、 TET ク ラ ス はパブ リ ッ ク な TET::Exception
ク ラ ス を提供 し てお り 、 こ の ク ラ ス は、 詳細なエ ラ ー メ ッ セージ、 例外番号、 例外を発生
さ せた TET API 関数の名前を取得す る ための メ ソ ッ ド を公開 し てい ます。
3.3 C++ バイ ンデ ィ ング
33
TET ルーチンが発生 さ せたネ イ テ ィ ブな C++ 例外は期待どお り に動作 し ます。 以下の
コ ー ド は、 TET が発生 さ せた例外を キ ャ ッ チ し ます :
try {
...いろいろなTET命令...
} catch (TET::Exception &ex) {
wcerr << L"Error " << ex.get_errnum()
<< L" in " << ex.get_apiname()
<< L"(): " << ex.get_errmsg() << endl;
}
34
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
3.4 COM バ イ ン デ ィ ン グ
TET の COM エデ ィ シ ョ ン を イ ン ス ト ール TET は COM コ ン ポーネ ン ト に対応 し たすべ
ての環境で利用す る こ と がで き ます。 TET の イ ン ス ト ール方法は簡単で単純です。 以下の
点に留意 し て下 さ い :
> NTFS パーテ ィ シ ョ ンに イ ン ス ト ールする 場合は、すべての TET ユーザに、その イ ン ス
ト ールデ ィ レ ク ト リ の読み取 り 権限 と 、 ...\TET 4.1 32-bit\bind\COM\bin\tet_com.dll の実
行権限を持たせ る 必要があ り ます。
> イ ン ス ト ー ラ はシ ス テ ム レ ジ ス ト リ に対 し て書 き 込み権限 を 持た な ければな り ま せ
ん。 Administrators グループか Power Users グループの権限であれば通常充分で し ょ う 。
例外処理 TET の COM コ ン ポーネ ン ト に対す る 例外処理は COM の規則に従っ て行われ
ます。 すなわち、 TET の例外が起 き る と 、 COM の例外が発生 し 、 そのエ ラ ーの説明テ キ
ス ト と と も に伝達 さ れます。 こ の COM の例外は、 その ク ラ イ ア ン ト 環境が対応 し てい る
任意の COM のエ ラ ー処理方式で捕捉 ・ 処理す る こ と がで き ます。
TET の COM エデ ィ シ ョ ン を .NET で使 う TET の .NET エデ ィ シ ョ ン (38 ページの 3.6
「.NET バ イ ンデ ィ ン グ」 参照) のかわ り と し て、 TET の COM エデ ィ シ ョ ンは .NET で使
用す る こ と も 可能です。 まず、 tlbimp.exe ユーテ ィ リ テ ィ を用いて TET の COM エデ ィ
シ ョ ンか ら .NET アセ ンブ リ を作成す る 必要があ り ます :
tlbimp tet_com.dll /namespace:tet_com /out:Interop.tet_com.dll
.NET アプ リ ケーシ ョ ン内では こ のアセ ンブ リ を使 う こ と がで き ます。 Visual Studio .NET
内か ら tet_com.dll への参照を追加すればアセ ン ブ リ は自動作成 さ れ ます。 C# におけ る
TET の COM エデ ィ シ ョ ンの使用法を以下の コ ー ド に示 し ます :
using TET_com;
...
static TET_com.ITET tet;
...
tet = New TET();
...
上記に示 し た以外の コ ー ド はすべて TET の .NET エデ ィ シ ョ ン と 同様に動作 し ます。
3.4 COM バイ ンデ ィ ング
35
3.5 Java バ イ ン デ ィ ン グ
TET の Java エデ ィ シ ョ ン を イ ン ス ト ール TET は com.pdflib.TET と い う 名前で Java パ ッ
ケージ と し て ま と め ら れてい ます。 こ のパ ッ ケージはネ イ テ ィ ブ JNI ラ イ ブ ラ リ に依存 し
ますので、 両者は適切に設定 し てお く 必要があ り ます。
JNI ラ イ ブ ラ リ を可能にす る ために必要な操作は、 以下の よ う にプ ラ ッ ト フ ォ ーム に
よ っ て異な り ます :
> Unix シ ス テ ム群の場合には、libtet_java.so (Mac OS X では libtet_java.jnilib) ラ イ ブ ラ リ
を、 共有 ラ イ ブ ラ リ 用のデフ ォ ル ト の場所、 ない し 適切に設定 し たデ ィ レ ク ト リ に置
く 必要があ り ます。
> Windows の場合には、pdf_tet.dll ラ イ ブ ラ リ を、Windows のシ ス テ ムデ ィ レ ク ト リ 、ない
し PATH 環境変数に挙げたデ ィ レ ク ト リ に置 く 必要があ り ます。
こ の TET の Java パ ッ ケージはフ ァ イ ル tet.jar 内に存在 し 、 ただ一つの ク ラ ス tet を持ち
ま す。 こ の パ ッ ケ ー ジ を 自分 の ア プ リ ケ ー シ ョ ン で 利用可能 に す る に は、 tet.jar を
CLASSPATH 環境変数に追加す る か、 Java コ ンパ イ ラ への呼び出 し の中に -classpath tet.jar
オプシ ョ ン を加え る か、 ま たは こ れ と 等価な操作を Java IDE で行 う 必要があ り ます。 JDK
で Java VM の設定を行 う こ と に よ っ て、ネ イ テ ィ ブ ラ イ ブ ラ リ が所与のデ ィ レ ク ト リ 内で
検索 さ れ る よ う にす る には、java.library.path にそのデ ィ レ ク ト リ の名前を適切に設定 し ま
す。 た と えば
java -Djava.library.path=. extractor
こ のプ ロ パテ ィ の値は下記の よ う に し て調べ ら れます :
System.out.println(System.getProperty("java.library.path"));
TET を J2EE ア プ リ ケーシ ョ ンサーバ と サーブ レ ッ ト コ ン テ ナで使 う TET はサーバサ
イ ド Java アプ リ ケーシ ョ ンに完全に適合 し てい ます。 TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、
TET を J2EE 環境で使 う ためのサンプル コ ー ド と 設定を含んでい ます。 以下の設定事項に
従 う 必要があ り ます :
> サーバがネ イ テ ィ ブ ラ イ ブ ラ リ を 検索す る デ ィ レ ク ト リ はベ ン ダ に よ っ て異な り ま
す。 よ く あ る 場所 と し ては、 シ ス テ ムデ ィ レ ク ト リ や、 背後の Java VM に固有のデ ィ
レ ク ト リ や、 ロ ーカルサーバデ ィ レ ク ト リ を候補に挙げ る こ と がで き ます。 サーバベ
ン ダが提供 し てい る 説明書を調べて下 さ い。
> アプ リ ケーシ ョ ン サーバ と サーブ レ ッ ト コ ン テナは し ば し ば、 特殊な ク ラ ス ロ ーダ を
用いてお り 、 その ク ラ ス ロ ーダは制限 さ れてい る か、 あ る いは専用の ク ラ ス パ ス を用
いてい る 可能性があ り ま す。 サーバに よ っ ては、 特別な ク ラ ス パ ス を定義 し て、 TET
パ ッ ケージが必ず見つか る よ う に し てお く こ と が必要です。
TET を個別のサーブ レ ッ ト エ ン ジ ン と アプ リ ケーシ ョ ン サーバで使 う 際の よ り 詳細な注
意点は、 TET デ ィ ス ト リ ビ ュ ーシ ョ ンの J2EE デ ィ レ ク ト リ 内の追加文書に記 し て あ り ま
す。
Unicode と レ ガ シ エ ン コ ーデ ィ ン グの変換 TET ユーザの便宜のため、 有用な文字列変
換 メ ソ ッ ド を こ こ でい く つか挙げます。 下記の コ ン ス ト ラ ク タ は、 プ ラ ッ ト フ ォームのデ
フ ォ ル ト エン コ ーデ ィ ン グ を用いて、 バ イ ト 列か ら Unicode 文字列を生成 し ます :
String(byte[] bytes)
36
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
下記の コ ン ス ト ラ ク タ は、 enc 引数で与え たエ ン コ ーデ ィ ン グ (SJIS ・ UTF8 ・ UTF-16 等)
を用いて、 バ イ ト 列か ら Unicode 文字列を生成 し ます :
String(byte[] bytes, String enc)
String ク ラ ス の下記の メ ソ ッ ド は、 Unicode 文字列を、 enc 引数で指定 し たエン コ ーデ ィ ン
グに従っ た文字列へ変換 し ます :
byte[] getBytes(String enc)
TET の Javadoc 文書 TET パ ッ ケージは TET の Javadoc 文書を含んでい ます。こ の Javadoc
は、 すべての TET API メ ソ ッ ド の短縮 さ れた説明のみを含んでい ま す。 詳 し く は、 151
ページの 10 章 「TET ラ イ ブ ラ リ API リ フ ァ レ ン ス」 を参照 し て く だ さ い。
TET の Javadoc を Eclipse で設定す る には以下の よ う に操作 し ます :
> パ ッ ケージエ ク ス プ ロ ー ラ で Java プ ロ ジ ェ ク ト を右 ク リ ッ ク し 、 「Javadoc ロケーシ ョ
ン」 を選択 し ます。
> 「ブ ラ ウズ ...」 を ク リ ッ ク し 、 Javadoc が置かれてい る パ ス (TET パ ッ ケージ内) を選択
し ます。
こ れ ら の操作を行な っ た後は、 「Java ブ ラ ウズ」 パースペ ク テ ィ ブや 「ヘルプ」 メ ニ ュ ー
な ど か ら TET の Javadoc を閲覧で き ます。
例外処理 TET の Java 言語バ イ ンデ ィ ン グは ク ラ ス TETException のネ イ テ ィ ブな Java 例
外を発生 さ せます。 TET の ク ラ イ ア ン ト コ ー ド は標準的な Java 例外の文法を用い る 必要
があ り ます :
TET tet = null;
try {
...さまざまなTETメソッド呼び出し...
} catch (TETException e) {
System.err.print("TETの例外が発生しました:\n");
System.err.print("[" + e.get_errnum() + "] " + e.get_apiname() + ": " +
e.get_errmsg() + "\n");
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (tet != null) {
tet.delete();
}
}
/* TETオブジェクトを削除 */
TET は適切な throws 節を宣言す る ので、 ク ラ イ ア ン ト コ ー ド はすべての可能な例外を捕
捉す る か、 ま たはそれ ら を自身で宣言す る 必要があ り ます。
3.5 Java バイ ンデ ィ ング
37
3.6 .NET バ イ ン デ ィ ン グ
注記 TET を .NET フ レームワー ク で利用する ための さ ま ざ ま な方式やオプ シ ョ ンに関する詳 し
い情報が、 デ ィ ス ト リ ビ ュ ーシ ョ ンパ ッ ケージ内 と PDFlib Web サイ ト にある PDFlib-in.NET-HowTo.pdf 文書にあ り ます。
TET の .NET エデ ィ シ ョ ンはそれ ら すべての .NET 概念に対応 し てい ます。 専門用語でい
えば、 TET.NET エデ ィ シ ョ ンは .NET Framework の制御下で走 る C++ ク ラ ス (非マネージ
TET コ ア ラ イ ブ ラ リ のためのマネージ ラ ッ パを備えた) です。 それは ス ト ロ ン グ名を持つ
静的アセ ン ブ リ と し てパ ッ ケージ さ れてい ます。 こ の TET アセ ン ブ リ (TET_dotnet.dll)
は、 ラ イ ブ ラ リ 本体 と メ タ 情報を持ち ます。
TET の .NET エデ ィ シ ョ ン を イ ン ス ト ール TET を、提供 さ れてい る Windows MSI イ ン ス
ト ー ラ で イ ン ス ト ール し ます。TET.NET MSI イ ン ス ト ー ラ は、TET アセ ンブ リ と 補足デー
タ フ ァ イ ル ・ サ ン プル を対話的にマ シ ン に イ ン ス ト ール し ま す。 こ の イ ン ス ト ー ラ は ま
た、 Visual Studio .NET の 「参照の追加」 ダ イ ア ロ グボ ッ ク ス の .NET タ ブで TET を簡単
に参照で き る よ う 登録 も 行い ます。
エ ラ ー処理 TET.NET は .NET の例外に対応 し てお り 、実行時に問題が起 き る と 例外を発
生 さ せ、 詳細なエ ラ ー メ ッ セージ を伝達 し ます。 こ う し た例外を捕捉 し て適切にそれに対
処す る こ と は ク ラ イ ア ン ト 側の領分です。 それを し ない場合には .NET Framework がその
例外を捕捉 し 、 多 く の場合アプ リ ケーシ ョ ン を中断 さ せます。
例外関連情報の伝達のために TET は独自の例外 ク ラ ス TET_dotnet.TETException を定義
し てい ます。 こ の ク ラ ス は メ ンバ get_errnum ・ get_errmsg ・ get_apiname を持ち ます。
C++ と CLI で TET を利用 C++ で書かれた .NET アプ リ ケーシ ョ ン(共通言語基盤 CLI を
ベース と し た) は、 TET C++ バ イ ンデ ィ ン グ な し で直接 TET.NET DLL にア ク セ ス で き ま
す。 その ソ ース コ ー ド か ら 下記の よ う に TET を参照す る 必要があ り ます :
using namespace TET_dotnet;
38
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
3.7 Objective-C バ イ ン デ ィ ン グ
C・C++言語バ イ ンデ ィ ン グ を Objective-C1で使用す る こ と も で き ますが、真正な ObjectiveC 用言語バ イ ンデ ィ ン グ も 用意 し て あ り ます。 下記の種類の TET フ レーム ワー ク が利用
可能です :
> Mac OS X で利用す る ための TET
> iOS で利用する ための TET_ios
いずれの フ レーム ワー ク も 、 C ・ C++ ・ Objective-C 用言語バ イ ンデ ィ ン グ を含んでい ます。
Objective-C 版 TET を Mac OS X に イ ン ス ト ール TET を自分の ア プ リ ケーシ ョ ン で使
う には、 TET.framework か TET.framework をデ ィ レ ク ト リ /Library/Frameworks へ コ ピーす
る 必要があ り ます。 別の場所へ TET フ レーム ワー ク を イ ン ス ト ールす る こ と も 可能です
が、 Apple の install_name_tool を用い る 必要があ り ます。 それについては こ こ では記述 し
ません。 TET メ ソ ッ ド 宣言群を含んだ TET_objc.h ヘ ッ ダ フ ァ イ ルを アプ リ ケーシ ョ ンの
ソ ース コ ー ド で取 り 込む必要があ り ます :
#import "TET/TET_objc.h"
ま たは
#import "TET_ios/TET_objc.h"
引数命名規則 TET メ ソ ッ ド 呼び出 し の際には、 引数を以下の規則に従っ て与え る 必要
があ り ます :
> 第一引数の値は メ ソ ッ ド 名の直後に、 コ ロ ン キ ャ ラ ク タ で区切っ て与え ます。
> その後の各引数については、 引数の名前 と 値を ( こ れ も コ ロ ン キ ャ ラ ク タ で互い を区
切っ て) 与え る 必要があ り ます。 引数の名前は 151 ページの 10 章 「TET ラ イ ブ ラ リ
API リ フ ァ レ ン ス」 と TET_objc.h にあ り ます。
た と えば、 API 記述におけ る 下記の行は :
int open_page(int doc, int pagenumber, String optlist)
下記の Objective-C と な り ます :
- (NSInteger) open_page: (NSInteger) doc pagenumber: (NSInteger) pagenumber optlist:
(NSString *) optlist;
つま り アプ リ ケーシ ョ ンでは、 下記の よ う に呼び出 し を行 う 必要があ る こ と にな り ます :
page = [tet open_page:doc pagenumber:pageno optlist:pageoptlist];
コ ー ド 補完のための XCode Code Sense は TET フ レーム ワ ー ク で利用で き ます。
Objective-C のエ ラ ー処理 Objective-C バ イ ンデ ィ ン グは、 TET エ ラ ーを、 ネ イ テ ィ ブ
な Objective-C 例外へ翻訳 し ます。 実行時の問題の場合には、 TET は ク ラ ス TETException
のネ イ テ ィ ブ Objective-C 例外を発生 さ せます。 こ れ ら の例外は通常の try/catch 機構で処
理で き ます :
1. developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html
参照。
3.7 Objective-C バイ ンデ ィ ング
39
@try {
...いろいろなTET命令...
}
@catch (TETException *ex) {
NSString * errorMessage =
[NSString stringWithFormat:@"TETエラー %d in '%@': %@",
[ex get_errnum], [ex get_apiname], [ex get_errmsg]];
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText: errorMessage];
[alert runModal];
[alert release];
}
@catch (NSException *ex) {
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText: [ex reason]];
[alert runModal];
[alert release];
}
@finally {
[tet release];
}
get_errmsg メ ソ ッ ド の他に、 例外オブジ ェ ク ト の reason フ ィ ール ド を用いてエ ラ ー メ ッ
セージ を取得す る こ と も 可能です。
40
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
3.8 Perl バ イ ン デ ィ ン グ
Perl 用 TET ラ ッ パは、 1 個の C ラ ッ パ と 2 個の Perl パ ッ ケージモジ ュ ールか ら 成 り ます。
こ のモジ ュ ールの一つは各 TET API 関数 と 同等の も の を Perl で提供す る も ので、 も う 一
つは TET オブジ ェ ク ト のための も のです。 C モジ ュ ールは、 Perl イ ン タ プ リ タ が実行時
に読み込む共有 ラ イ ブ ラ リ を、パ ッ ケージ フ ァ イ ルか ら い く ら かの助け を借 り て ビル ド す
る ために用い ら れます。 Perl ス ク リ プ ト は共有 ラ イ ブ ラ リ モジ ュ ールを、 use ス テー ト メ
ン ト を通 じ て参照 し ます。
TET の Perl エデ ィ シ ョ ン を イ ン ス ト ール Perl 拡張機構は共有 ラ イ ブ ラ リ を実行時に、
DynaLoader モジ ュ ールを通 じ て読み込みます。 Perl 実行形式が、 共有 ラ イ ブ ラ リ に対応 し
た形で コ ンパ イ ル さ れてい る 必要があ り ます(多 く の Perl 設定ではその よ う にな っ てい ま
す)。
TET バ イ ンデ ィ ン グが動作す る ためには、 Perl イ ン タ プ リ タ は TET Perl ラ ッ パ と モ
ジ ュ ール tetlib_pl.pm ・ PDFlib/TET.pm を利用可能であ る 必要があ り ます。 以下に説明す る
プ ラ ッ ト フ ォーム固有の方式のほかに、 Perl の @INC モジ ュ ール検索パ ス に、 -I コ マ ン ド
ラ イ ンオプシ ョ ン を用いてデ ィ レ ク ト リ を追加す る こ と も 可能です :
perl -I/path/to/tet extractor.pl
Unix Perl は、 tetlib_pl.so (Mac OS X では tetlib_pl.bundle) ・ tetlib_pl.pm ・ PDFlib/TET.pm
を、 カ レ ン ト デ ィ レ ク ト リ 内で、 あ る いは下記 Perl コ マ ン ド で印字 さ れ る デ ィ レ ク ト リ 内
で検索 し ます :
perl -e 'use Config; print $Config{sitearchexp};'
Perl はサブデ ィ レ ク ト リ auto/tetlib_pl も 検索 し ます。 上記 コ マ ン ド の典型的出力は下記
の よ う にな り ます :
/usr/lib/perl5/site_perl/5.10/i686-linux
Windows TET は、 Perl 5 の Windows に対す る ActiveState ポー ト に も 対応 し てい ます。 こ
れは ActivePerl と も 呼ばれます。DLL tetlib_pl.dll と モジ ュ ール tetlib_pl.pm・PDFlib/TET.pm
が、 カ レ ン ト デ ィ レ ク ト リ 内で、 あ る いは下記 Perl コ マ ン ド で印字 さ れ る デ ィ レ ク ト リ 内
で検索 さ れます :
perl -e "use Config; print $Config{sitearchexp};"
上記 コ マ ン ド の典型的出力は下記の よ う にな り ます :
C:\Program Files\Perl5.10\site\lib
Perl の例外処理 TET 例外が発生 し た際には、 Perl 例外が発生 し ます。 こ れは、 eval シー
ケ ン ス を用いて キ ャ ッ チ ・ 対処す る こ と がで き ます :
eval {
...いろいろなTET命令...
};
die "例外をキャッチしました: $@" if $@;
3.8 Perl バイ ンデ ィ ング
41
3.9 PHP バ イ ン デ ィ ン グ
TET の PHP エデ ィ シ ョ ン を イ ン ス ト ール TET は、 PHP に動的に結合で き る C ラ イ ブ
ラ リ と し て実装 さ れてい ます。 TET は、 PHP のい く つかのバージ ョ ンに対応 し てい ます。
使っ てい る PHP のバージ ョ ンに応 じ て、 適切な TET ラ イ ブ ラ リ を、 ア ンパ ッ ク し た TET
アーカ イ ブか ら 選ぶ必要があ り ます。
TET を PHP で利用す る 際の さ ま ざ ま な考慮点やオプシ ョ ンについては、 た と えば PHP
用の ロ ーダブル TET モジ ュ ールを用い る べ き か ど う か と いっ た疑問 も 含めて、PDFlib Web
サ イ ト か ら 入手で き る 文書 PDFlib-in-PHP-HowTo を参照 し て く だ さ い。 こ の文書では主に
PDFlib の PHP での利用について論 じ てい ますが、 その内容は、 TET の PHP での利用につ
いて も あ ては ま る も のです。
PHP の設定を行っ て、 外部の TET ラ イ ブ ラ リ について PHP に知 ら せ る 必要があ り ま
す。 次の 2 通 り の方法があ り ます :
> 以下の行の う ちのいずれか を php.ini に追加す る :
extension=php_tet.dll
; Windowsの場合
extension=php_tet.so
; Unix・Mac OS Xの場合
extension=php_tet.sl
; HP-UXの場合
PHP は、 Unix の場合は php.ini 内の変数 extension_dir で指定 さ れたデ ィ レ ク ト リ 内で、
Windows の場合はそれに加え て標準シ ス テ ムデ ィ レ ク ト リ 群の中で も 、 ラ イ ブ ラ リ を
検索 し ます。 下記の一行 PHP ス ク リ プ ト を用いれば、 PHP TET バ イ ンデ ィ ン グの ど の
バージ ョ ンが イ ン ス ト ール さ れてい る か を調べ る こ と がで き ます :
<?phpinfo()?>
こ れを実行す る と 、 現在の PHP の設定に関す る 長い情報ページが表示 さ れます。 こ の
ページ上で、 tet と い う タ イ ト ルのセ ク シ ョ ン を見て く だ さ い。 も し こ のセ ク シ ョ ンに
PDFlib TET Support
enabled
と い う フ レーズ (お よ び TET のバージ ョ ン番号) があれば、 PHP 用の TET が正 し く
イ ン ス ト ール さ れてい ます。
> あ る いは、 ス ク リ プ ト の冒頭に以下の行の う ちのいずれか を書 く こ と で、 TET を実行
時に読み込む こ と も で き ます :
dl("php_tet.dll");
# Windowsの場合
dl("php_tet.so");
# Unix・Mac OS Xの場合
dl("php_tet.sl");
# HP-UXの場合
PHP の フ ァ イル名処理 非限定の フ ァ イ ル名 (パ ス要素のない も の) と 相対フ ァ イ ル名
は、 PHP の Unix バージ ョ ン と Windows バージ ョ ン と で扱いが異な り ます :
> Unix シ ス テ ムの PHP では、パ ス要素のない フ ァ イ ルは、ス ク リ プ ト が読み込まれたデ ィ
レ ク ト リ の中で検索 さ れます。
> Windows の PHP では、パ ス要素のない フ ァ イ ルは、PHP DLL が読み込まれデ ィ レ ク ト リ
の中でのみ検索 さ れます。
例外処理 PHP 5 は構造化 さ れた例外処理に対応 し てい る ので、 TET の例外は PHP の例
外 と し て発生 し ます。 通常の try/catch 技法を用いて、 TET の例外を扱 う こ と がで き ます :
try {
42
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
...いろいろなTET命令...
} catch (TETException $e) {
print "TET例外発生:\n";
print "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": "
$e->get_errmsg() . "\n";
}
catch (Exception $e) {
print $e;
}
3.9 PHP バイ ンデ ィ ング
43
3.10 Python バ イ ン デ ィ ン グ
Python 版 TET を イ ン ス ト ール Python の拡張機構は、実行時に共有 ラ イ ブ ラ リ を読み込
む こ と に よ っ て動作 し ます。 TET バ イ ンデ ィ ン グが動作する ためには、 Python イ ン タ プ
リ タ がTET Python ラ ッ パを利用可能であ る 必要があ り ます。こ の ラ ッ パは、PYTHONPATH
環境変数内に挙げ ら れてい る デ ィ レ ク ト リ 群の中で検索 さ れます。Python ラ ッ パの名前は
プ ラ ッ ト フ ォームに よ っ て異な り ます :
> Unix ・ Mac OS X : tetlib_py.so
> Windows : tetlib_py.pyd
Python のエ ラ ー処理 Python バ イ ンデ ィ ン グは、TET 例外を ネ イ テ ィ ブな Python 例外へ
翻訳 し ます。 こ の Python 例外は、 通常の try/catch 技法で扱え ます :
try:
...いろいろなTET命令...
except TETException:
print("TET例外発生:\n[%d] %s: %s" %
((tet.get_errnum()), tet.get_apiname(),
44
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
tet.get_errmsg()))
3.11 REALbasic バ イ ン デ ィ ン グ
TET の REALbasic エデ ィ シ ョ ン を イ ン ス ト ール TET は、 Mac と Windows の REALbasic
開発環境 (REALbasic 2006 以上) に対応 し てい ます。
Mac で も Windows で も 、 TET の REALbasic エデ ィ シ ョ ン (TET.rbx) は、 REALbasic ア
プ リ ケーシ ョ ンが入っ てい る の と 同 じ フ ォ ルダ内の Plugins と い う フ ォ ルダへ複製す る 必
要があ り ます。 Mac OS X では、 TET.framework を /Library/Frameworks へ イ ン ス ト ール も
す る 必要があ り ます。 REALbasic 用 TET は一つのパ ッ ケージで配布 さ れ、 以下の種類を含
んでい ます :
> Mac OS X PowerPC
> Mac OS X Intel
> Windows
こ の こ と は、 Mac 版 ・ Windows 版ど ち ら を用いて も 、 Mac 用 ・ Windows 用の両方のアプ リ
ケーシ ョ ン を ビル ド で き る こ と を意味 し ます。 ス タ ン ド ア ロ ン なアプ リ ケーシ ョ ンが生成
さ れ る 際には、 REALbasic は TET の適切な部分を選んで、 プ ラ ッ ト フ ォーム固有の部分だ
け を生成アプ リ ケーシ ョ ン内へ含め ます。
追加の REALbasic ク ラ ス TET は、 REALbasic のオブジ ェ ク ト 階層構造に 2 個の新 し い
ク ラ ス を追加 し ます :
> TET ク ラ スはすべての TET API メ ソ ッ ド を含んでい ます。
> TETException ク ラ ス は、RuntimeException か ら 派生 し た も ので、TET が発生 さ せ る 例外
を扱 う ために使 う こ と がで き ます (後述)。
TET は、 GUI アプ リ ケーシ ョ ンの作成に も 、 コ ン ソ ールアプ リ ケーシ ョ ンの作成に も 用い
る こ と がで き ます。 TET は コ ン ト ロ ールではあ り ませんので、 こ れは REALbasic の コ ン ト
ロ ールパレ ッ ト に新 し いア イ コ ン を イ ン ス ト ールは し ません。 し か し TET が利用可能な
と き は、 REALbasic は TET ク ラ ス と その関連 メ ソ ッ ド 群を認識 し ます。 た と えば、 命令補
完や引数チ ェ ッ ク は、 TET API メ ソ ッ ド 群に対 し て完全に動作 し ます。
REALbasic のエ ラ ー処理 例外発生時には、 TET は ク ラ ス TETException のネ イ テ ィ ブな
REALbasic 例外を発生 さ せます。TET 例外は、標準的な REALbasic の技法で扱え ます : try/
catch ブ ロ ッ ク を用い る か ( こ れを推奨 し ますが、 REALbasic 5.5 以上が必要)、 あ る いは
Exception ブ ロ ッ ク でそれを処理 し ます。 後者を以下の コ ー ド で演示 し ます :
Exception err As TETException
MsgBox("TET例外がextractorサンプル内で発生しました: [" + _
Str(err.get_errnum()) + "] " + err.get_apiname() + ": " + err.get_errmsg())
こ の例で示 し てい る よ う に、 REALbasic 開発者は、 エ ラ ー番号、 エ ラ ー メ ッ セージ、 例外
を発生 さ せた API 関数の名前を取得する ための TETException メ ソ ッ ド 群を用いて詳細な
エ ラ ー情報を得 る こ と がで き ます。
3.11 REALbasic バイ ンデ ィ ング
45
3.12 Ruby バ イ ン デ ィ ン グ
Ruby 版 TET を イ ン ス ト ール Ruby1 の拡張機構は、 共有 ラ イ ブ ラ リ を実行時に読み込む
こ と に よ っ て動作 し ます。 TET バ イ ンデ ィ ン グが動作する ためには、 Ruby イ ン タ プ リ タ
が Ruby 用 TET 拡張 ラ イ ブ ラ リ へのア ク セ ス を有す る 必要があ り ます。 こ の ラ イ ブ ラ リ
(Windows ・ Unix の場合 : TET.so、 Mac OS X の場合 : TET.bundle) が イ ン ス ト ール さ れ る 先
は通常、 local ruby イ ン ス ト レーシ ョ ンデ ィ レ ク ト リ の site_ruby ブ ラ ンチ内であ り 、 すな
わち下記の よ う な名前のデ ィ レ ク ト リ 内にな り ます :
/usr/local/lib/ruby/site_ruby/<バージョン>/
し か し 、 Ruby は他のデ ィ レ ク ト リ で も 拡張を検索 し ます。 こ のデ ィ レ ク ト リ の一覧を取
得す る には下記の ruby 呼び出 し を用い ます :
ruby -e "puts $:"
こ の一覧は通常、 カ レ ン ト デ ィ レ ク ト リ を含みますので、 試験目的には、 TET 拡張 ラ イ ブ
ラ リ と ス ク リ プ ト 群を同一デ ィ レ ク ト リ 内に置けば よ いで し ょ う 。
Ruby のエ ラ ー処理 Ruby バ イ ンデ ィ ン グは、 TET 例外を ネ イ テ ィ ブな Ruby 例外へ翻訳
す る エ ラ ーハン ド ラ を イ ン ス ト ール し ます。 こ の Ruby 例外は通常の rescue 技法で扱え ま
す:
begin
...いろいろなTET命令...
rescue TETException => pe
print pe.backtrace.join("\n") + "\n"
print "エラー [" + pe.get_errnum.to_s + "] " + pe.get_apiname + ": " + pe.get_errmsg
print " on page pageno" if (pageno != 0)
print "\n"
rescue Exception => e
print e.backtrace.join("\n") + "\n" + e.to_s + "\n"
ensure
tet.delete() if tet
end
Ruby on Rails Ruby on Rails2 は、 Ruby に よ る Web 開発を支援す る オープン ソ ース フ レー
ム ワー ク です。 Ruby 用 TET 拡張は Ruby on Rails で使え ます。 TET 作成例を Ruby on Rails
で走 ら せ る には以下の手順に従い ます :
> Ruby と Ruby on Rails を イ ン ス ト ール。
> 新規 コ ン ト ロ ー ラ を コ マ ン ド ラ イ ンか ら セ ッ ト ア ッ プ :
$ rails new tetdemo
$ cd tetdemo
$ cp <TETディレクトリ>/bind/ruby/<バージョン>/TET.so vendor/
$ cp <TETディレクトリ>/bind/data/FontReporter.pdf .
$ rails generate controller home demo
$ rm public/index.html
> config/routes.rb を編集 :
1. www.ruby-lang.org/en 参照。
2. www.rubyonrails.org 参照。
46
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
# .so/.dll/.bundleを使用
...
# public/index.htmlの削除を忘れないように
root :to => "home#demo"
> app/controllers/home_controller.rb を以下の よ う に編集 し て、PDF内容を抽出す る ための
TET コ ー ド を挿入 し ます。出発点 と し て extractor-rails.rb サンプルの コ ー ド を利用で き
ます :
class HomeController < ApplicationController
def demo
require "TET"
begin
p = TET.new
doc = tet.open_document(infilename, docoptlist)
...TETアプリケーションコード、extractor-rails.rb参照...
...
# そして抽出したテキストを最後に表示
send_data text, :type => "text/plain", :disposition => "inline"
rescue TETException => pe
# エラー処理
end
end
end
> 自分の イ ン ス ト レーシ ョ ン を テ ス ト す る には、下記 コ マ ン ド でWEBrickサーバを開始 さ
せ、
$ rails server
ブ ラ ウ ザで http://0.0.0.0:3000 を表示 さ せます。 PDF 文書か ら 抽出 さ れた テ キ ス ト が
ブ ラ ウ ザに表示 さ れます。
TET を ロ ー カルに イ ン ス ト ール TET を Ruby on Rails でのみ利用 し たい場合で、 TET を
Ruby 全体で利用で き る よ う グ ロ ーバルに イ ン ス ト ールす る こ と がで き ない と き は、 Rails
ツ リ ー内の vendors デ ィ レ ク ト リ 内に TET を ロ ーカルに イ ン ス ト ールす る こ と も 可能で
す。 こ れは と り わけ、 全体で利用で き る Ruby 拡張を イ ン ス ト ールす る 権限を有 し ていな
いけれど も TET を Rails で利用 し たい と き に有用です。
3.12 Ruby バイ ンデ ィ ング
47
3.13 RPG バ イ ン デ ィ ン グ
TET は、 TET 関数群を埋め込んで ILE-RPG プ ロ グ ラ ム群を コ ンパ イ ルす る ために必要な
すべてのプ ロ ト タ イ プ と い く つかの有用な定数を定義する /copy モジ ュ ールを提供 し てい
ます。
Unicode 文字列処理 TET 関数はすべて可変長の Unicode 文字列を引数 と し て用い ますの
で、 %ucs2 ビル ト イ ン関数を用いてシ ン グルバ イ ト 文字列を Unicode 文字列へ変換す る 必
要があ り ます。TET 関数が返す文字列はすべて可変長の Unicode 文字列です。こ の Unicode
文字列を シ ン グルバ イ ト 文字列へ変換す る には %char ビル ト イ ン関数を用い ます。
注記 %CHAR ・ %UCS2 関数は、 カ レ ン ト ジ ョ ブの CCSID を用いて Unicode と の文字列相互変換
を行います。 TET と と も に提供 さ れている作成例は、 CCSID 37 (US EBCDIC) を ベース と
し ています。 他の コ ー ド ページで こ れ らの作成例を走らせた場合には、 オプ シ ョ ン リ ス ト
内のい く つかの特殊キ ャ ラ ク タ ({ [ ] } 等) が正 し く 翻訳 さ れない可能性があ り ます。
文字列はすべて可変長文字列 と し て渡 さ れますので、 さ ま ざ ま な関数で明示的な文字列長
を と る length 引数を渡 し てはいけ ません (可変長文字列の長 さ は文字列の先頭 2 バ イ ト
に格納 さ れてい ます)。
TET に対す る RPG プ ロ グ ラ ム を コ ンパ イ ル ・ バ イ ン ド RPG で TET の関数を利用す る
には、 コ ンパ イ ル さ れた TET サービ ス プ ロ グ ラ ムが必要です。 TET の定義群を コ ンパ イ
ル時に イ ン ク ルー ド す る には、 ILE-RPG プ ロ グ ラ ムの D スペ ッ ク 内でその名前を指定す
る 必要があ り ます :
d/copy QRPGLESRC,TETLIB
TET の ソ ース フ ァ イ ル ラ イ ブ ラ リ が ラ イ ブ ラ リ リ ス ト の ト ッ プにない場合は、ラ イ ブ ラ リ
も 指定す る 必要があ り ます :
d/copy tetsrclib/QRPGLESRC,TETLIB
ILE-RPG プ ロ グ ラ ムの コ ンパ イ ルの際には、開始前にバ イ ンデ ィ ン グデ ィ レ ク ト リ を作成
し 、 そ こ に TET 付属の TETLIB サービ ス プ ロ グ ラ ム を入れてお く 必要があ り ます。 た と え
ば、 ラ イ ブ ラ リ TETLIB の中に TETLIB と い う バ イ ンデ ィ ン グデ ィ レ ク ト リ を作成 し たい
と き は、 次の よ う に指定 し ます :
CRTBNDDIR BNDDIR(TETLIB/TETLIB) TEXT('TETlib Binding Directory')
バ イ ンデ ィ ン グデ ィ レ ク ト リ を作成 し た ら 、 TETLIB サービ ス プ ロ グ ラ ム をバ イ ンデ ィ ン
グデ ィ レ ク ト リ に追加す る 必要があ り ます。 た と えば、 ラ イ ブ ラ リ TETLIB の中のサービ
ス プ ロ グ ラ ム TETLIB を、 さ き に作成 し たバ イ ンデ ィ ン グデ ィ レ ク ト リ に追加 し たい と き
は、 次の よ う に指定 し ます :
ADDBNDDIRE BNDDIR(TETLIB/TETLIB) OBJ((TETLIB/TETLIB *SRVPGM))
そ し て、 CRTBNDRPG コ マ ン ド を用いて (ま たは PDM でオプシ ョ ン 14 を用いて) プ ロ グ
ラ ム を コ ンパ イ ルすれば完了です :
CRTBNDRPG PGM(TETLIB/EXTRACTOR) SRCFILE(TETLIB/QRPGLESRC) SRCMBR(*PGM) DFTACTGRP(*NO)
BNDDIR(TETLIB/TETLIB)
48
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
RPG のエ ラ ー処理 ILE-RPG で書かれ た TET ク ラ イ ア ン ト は、 ILE-RPG が提供す る
monitor/on-error/endmon エ ラ ー処理機構を利用す る こ と がで き ます。 例外を見張 る も う
一つの方法は、ILE-RPG 内の *PSSR グ ロ ーバルエ ラ ー処理サブルーチン を用い る こ と です。
例外が発生 し た際には、 ジ ョ ブ ロ グは、 エ ラ ー番号、 失敗 し た関数、 例外の理由を示 し ま
す。 TET は、 呼び出 し 側プ ロ グ ラ ムへエ ス ケープ メ ッ セージ を送 り ます。
c
*
c
*
c
c
:
:
*
c
*
*
c
c
eval
p=TET_new
monitor
callp
eval
TET_set_option(tet:globaloptlist)
doc=TET_open_document(tet:%ucs2(%trim(parm1)):docoptlist)
Error Handling
on-error
Do something with this error
don't forget to free the TET object
callp
TET_delete(tet)
endmon
3.13 RPG バイ ンデ ィ ング
49
50
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
4 TET コ ネ ク タ
TET コ ネ ク タ は、TET を他の ソ フ ト ウ ェ ア と イ ン タ フ ェースす る ために必要な グルー コ ー
ド を提供 し ます。 TET コ ネ ク タ は、 TET ラ イ ブ ラ リ か TET コ マ ン ド ラ イ ン ツールをベー
ス に し てい ます。
4.1 Adobe Acrobat 用無償 TET Plugin
こ の節では、Adobe Acrobat での試験 と 、任意の PDF 文書 と の TET の対話的使用のために
利用で き る TET の無償入手可能なパ ッ ケージ ン グであ る TET Plugin を説明 し ます。 TET
Plugin は、 Acrobat 8/9/X Standard ・ Pro ・ Pro Extended で動作 し ます ( し か し 無償の Adobe
Reader では動作 し ません)。 こ れは下記の場所か ら 無償でダ ウ ン ロ ー ド で き ます :
www.pdflib.com/products/tet-plugin
TET Plugin と は TET Plugin は、 TET へのシ ンプルな対話的ア ク セ ス を提供 し ます。 TET
Plugin は Acrobat のプ ラ グ イ ン と し て動作 し ますが、 背後の内容抽出機能は Acrobat の機
能を使わず、 完全に TET をベース と し てい ます。 TET Plugin は、 PDFlib TET のパ ワーを
演示す る 無償ツール と し て提供 さ れてい ます。 TET は Acrobat 内蔵のテ キ ス ト ・ 画像抽出
図 4.1
TET Plugin の設定画面
4.1 Adobe Acrobat 用無償 TET Plugin
51
ツ ール よ り も 強力で、 多 く の便利な ユーザ イ ン タ フ ェ ー ス 機能 も 提供 し て い ま すので、
Acrobat 内蔵の コ ピー ・ 検索機能のかわ り と し て有用です。 テ キ ス ト を抽出 し よ う と し た
と き に、 Acrobat な ら ただのゴ ミ し か返 さ ない よ う な場合で も 、 PDFlib TET な ら 多 く の文
書を う ま く 処理す る こ と がで き ます。 TET Plugin は以下の機能を提供 し てい ます :
> PDF 文書内のテ キ ス ト を、 シ ス テ ムの ク リ ッ プボー ド かデ ィ ス ク フ ァ イ ルへプ レーン
テ キ ス ト と し て複製。 改良 さ れた ク リ ッ プボー ド 制御に よ り 、 コ ピー / 貼 り 付けの利
用が実現 し てい ます。
> PDF を TETML に変換 し て、 それを ク リ ッ プボー ド かデ ィ ス ク フ ァ イ ルに入れます。
> XMP 文書 メ タ デー タ を ク リ ッ プボー ド かデ ィ ス ク フ ァ イ ルへ複製。
> 文書内の単語を検索。
> ページ上の検索文字列をすべて同時にハ イ ラ イ ト 。
> 文書内の画像を、 TIFF ・ JPEG ・ JPEG 2000 のいずれかの フ ァ イ ル と し て抽出。
> 画像の色空間 ・ 位置情報を表示。
> 必要に応 じ て テ キ ス ト ・ 画像抽出を調整す る ための詳細な設定が利用可能です。 設定
セ ッ ト は保存 し て再読込す る こ と も 可能です。
Acrobat の コ ピ ー機能に ま さ っ てい る点 TET Plugin は、 Acrobat 内蔵の コ ピー機能に対
し てい く つか ま さ っ てい る 点があ り ます :
> 出力を、 さ ま ざ ま な アプ リ ケーシ ョ ンの要請に合わせて カ ス タ マ イ ズす る こ と がで き
ます。
> Acrobat がゴ ミ だけ を ク リ ッ プボー ド へ複製す る 場合に も 、TET は多 く の場合において
テ キ ス ト を正 し く 解釈す る こ と がで き ます。
> 未知のグ リ フ (正 し い Unicode マ ッ ピ ン グが確立で き ない も の) は赤色でハ イ ラ イ ト さ
れ、 ユーザが選んだキ ャ ラ ク タ ( ク エ ス チ ョ ン マー ク 等) で置 き 換え可能です。
> TET は文書を Acrobat よ り ずっ と 速 く 処理 し ます。
> 書 き 出す画像群を対話的に選ぶ こ と も で き ます し 、 ページ内ま たは文書内のすべての
画像を抽出す る こ と も で き ます。
> 微小な画像素片を結合 し て、 利用可能な画像に し ます。
52
4 章 : TET コ ネ ク タ
4.2 Lucene 検索エ ン ジ ン用 TET コ ネ ク タ
Lucene はオープン ソ ース の検索エン ジ ンです。 Lucene は元来 Java プ ロ ジ ェ ク ト ですが、
C バージ ョ ン も 利用可能で、 .NET 用バージ ョ ン も 開発中です。 Lucene について詳 し く は
lucene.apache.org を参照 し て く だ さ い。
注記 暗号化文書は、 特定の条件下では shrug オプ シ ョ ン で イ ンデ ッ ク スで き ます (詳 し く は、
67 ページの 5.1 「暗号化 PDF か ら内容を抽出」 を参照)。 こ れは Connector フ ァ イル群の
中で用意 さ れますが、 このオプ シ ョ ン を手作業で有効にする必要があ り ます。
要件 と イ ン ス ト ール TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、Lucene Java で PDF イ ンデ ク シ ン
グ を可能にす る ために利用で き る TET コ ネ ク タ を含んでい ます。 以下、 こ の Lucene Java
用 コ ネ ク タ について詳 し く 説明 し ます。 以下の要件が満た さ れてい る こ と が前提です :
> Lucene 3.0.x に対 し JDK 1.5 以降。
> Ant ビル ド ツールが動作す る よ う イ ン ス ト ール さ れてい る 。
> Lucene コ ア JAR フ ァ イ ルを持つLuceneデ ィ ス ト リ ビ ュ ーシ ョ ン。TET と と も に配布 さ れ
る Ant ビル ド フ ァ イ ルはフ ァ イ ル lucene-core-3.0.2.jar を前提 し てい ます。 こ の フ ァ イ
ルは Lucene デ ィ ス ト リ ビ ュ ーシ ョ ンに含まれてい ます。
> Unix ・ Linux ・ Mac ・ Windows いずれか用の TET 配布パ ッ ケージが イ ン ス ト ール さ れてい
る。
Lucene 用 TET コ ネ ク タ を実装す る には、 コ マ ン ド プ ロ ンプ ト で以下の操作を行い ます :
> デ ィ レ ク ト リ <TET イ ン ス ト ールデ ィ レ ク ト リ >/connectors/lucene へ cd。
> フ ァ イ ル lucene-core-x.x.x.jar を こ のデ ィ レ ク ト リ へ複製。
> グ ロ ーバルな、あ る いは文書関連・ページ関連の TET オプシ ョ ン を TetReader.java に追
加す る こ と に よ っ て設定を カ ス タ マ イ ズす る こ と も で き ます。 た と えば、 グ ロ ーバル
なオプシ ョ ン リ ス ト を用いて、 リ ソ ースへの正 し い searchpath を与え る こ と が可能で
す (日中韓 CMap がデフ ォ ル ト イ ン ス ト ール と 異な る デ ィ レ ク ト リ に イ ン ス ト ール さ
れてい る 場合等に)。
PdfDocument.java モジ ュ ールは、 デ ィ ス ク フ ァ イ ルか メ モ リ バ ッ フ ァ (Web ク ロ ー ラ
に よ っ て与え ら れた等)に格納 さ れてい る PDF 文書を処理す る 方法を演示 し てい ます。
ク ラ ス com.pdflib.tet.lucene.IndexPdfFiles 内で、 Lucene エン ジ ンの タ ーゲ ッ ト バージ ョ
ン を LUCENE_VERSION 変数でカ ス タ マ イ ズす る こ と も 可能です。
> コ マ ン ド ant index を実行。こ れは ソ ース コ ー ド を コ ンパ イ ル し 、<TET イ ン ス ト ールデ ィ
レ ク ト リ >/bind/data デ ィ レ ク ト リ 内に含まれ る PDF フ ァ イ ル群に対 し て イ ンデ ク サ
を走 ら せます。
> コ マ ン ド ラ イ ン検索を開始す る には、 コ マ ン ド ant search を実行 し ます。 こ こ では、
Lucene ク エ リ 言語で ク エ リ を入力で き ます。
TET と Lucene を コ マ ン ド ラ イ ン検索 ク ラ イ ア ン ト で テ ス ト 以下のサ ン プルセ ッ シ ョ
ンは、 TET と Lucene で イ ンデ ク シ ン グ を行い、 生成 さ れた イ ンデ ッ ク ス を Lucene コ マ ン
ド ラ イ ン ク エ リ ツールでテ ス ト す る 場合の コ マ ン ド と 出力を演示 し てい ます。 こ の操作は
コ マ ン ド ant index を実行す る こ と か ら 始ま り ます :
devserver (1)$ ant index
Buildfile: build.xml
...
index:
[java] adding ../data/Whitepaper-XMP-metadata-in-PDFlib-products.pdf
[java] adding ../data/Whitepaper-PDFA-with-PDFlib-products.pdf
4.2 Lucene 検索エ ン ジ ン用 TET コ ネ ク タ
53
[java]
[java]
[java]
[java]
adding ../data/FontReporter.pdf
adding ../data/TET-PDF-IFilter-datasheet.pdf
adding ../data/PDFlib-datasheet.pdf
1255 total milliseconds
BUILD SUCCESSFUL
Total time: 2 seconds
devserver (1)$ ant search
Buildfile: build.xml
compile:
search:
[java] Enter query:
PDFlib
[java] Searching for: pdflib
[java] 5 total matching documents
[java] 1. ../data/PDFlib-datasheet.pdf
[java]
Title: PDFlib, PDFlib+PDI, Personalization Server Datasheet
[java] 2. ../data/Whitepaper-PDFA-with-PDFlib-products.pdf
[java]
Title: Whitepaper: Creating PDF/A with PDFlib
[java] 3. ../data/FontReporter.pdf
[java]
Title: PDFlib FontReporter 1.3 Manual
[java] 4. ../data/TET-PDF-IFilter-datasheet.pdf
[java]
Title: PDFlib TET PDF IFilter Datasheet
[java] 5. ../data/Whitepaper-XMP-metadata-in-PDFlib-products.pdf
[java]
Title: Whitepaper: XMP Metadata support in PDFlib Products
[java] Press (q)uit or enter number to jump to a page.
q
[java] Enter query:
title:FontReporter
[java] Searching for: title:fontreporter
[java] 1 total matching documents
[java] 1. ../data/FontReporter.pdf
[java]
Title: PDFlib FontReporter 1.3 Manual
[java] Press (q)uit or enter number to jump to a page.
q
[java] Enter query:
BUILD SUCCESSFUL
Total time: 57 seconds
2 つの ク エ リ が実行 さ れてい ます : 1 つはテ キ ス ト 内の単語 PDFlib に対 し て、 も う 1 つは
title フ ィ ール ド 内の単語 FontReporter に対 し てです。結果ページ ン グモー ド を抜けて次の
ク エ リ を始め ら れ る よ う にす る 前には q を入力す る 必要があ る 点に留意 し て く だ さ い。
Ant build.xml フ ァ イ ル内のパ ス と フ ァ イ ル名はすべて、 プ ロ パテ ィ を通 じ て定義 さ れ
てい ます。 こ れは、 こ の フ ァ イ ルを さ ま ざ ま な環境で使え る よ う にす る ためです。 すなわ
ち、 プ ロ パテ ィ 群を コ マ ン ド ラ イ ン で与え る こ と も で き ま す し 、 上書 き さ せたいプ ロ パ
テ ィ 群を フ ァ イ ル build.properties 内に、 あ る いはプ ラ ッ ト フ ォーム個別のプ ロ パテ ィ を
フ ァ イ ル windows.properties か unix.properties 内に記入す る こ と も で き ます。 た と えば、
Ant を下記の よ う に呼び出せば、 /tmp 下に イ ン ス ト ール さ れてい る Lucene JAR フ ァ イ ル
でサンプルを実行す る こ と がで き ます :
54
4 章 : TET コ ネ ク タ
ant -Dlucene.jar=/tmp/lucene-core-x.x.x.jar index
TET と Lucene を デモ Web ア プ リ ケーシ ョ ン で テ ス ト Lucene デモ Web アプ リ ケーシ ョ
ンは、Tomcat や GlassFish をは じ め と す る 任意の Java サーブ レ ッ ト コ ン テナ上に展開す る
こ と がで き ます。 必要な操作は、 Lucene に付いて来 る HTML 文書で説明 さ れてい ます。
オン ラ イ ンで lucene.apache.org/java/3_0_2/demo3.html で も 得 ら れます。
そのページの ス テ ッ プ Configuration に留意 し て く だ さ い。 こ こ で イ ンデ ッ ク ス の場所
を Web アプ リ ケーシ ョ ンに知 ら せ る ために、それを フ ァ イ ル configuration.jsp に記入す る
必要があ り ます。 こ こ で追加す る パ ス は、 Ant が Lucene イ ンデ ッ ク ス の場所に関す る プ
ロ パテ ィ を上書 き せずに動作 さ せ ら れてい る 場合は <TET イ ン ス ト ールデ ィ レ ク ト リ >/
bind/lucene/index と な る で し ょ う 。
メ タ デー タ フ ィ ール ド を イ ン デ ッ ク ス Lucene 用 TET コ ネ ク タ は以下の メ タ デー タ
フ ィ ール ド を イ ンデ ッ ク ス し ます :
> path ( ト ー ク ン化フ ィ ール ド ) : 文書のパ ス名
> modified (DateField) : 最終更新日
> contents (Reader フ ィ ール ド ) : 文書の全テ キ ス ト 内容
> Title ・ Subject ・ Author 等、 定義済み ・ カ ス タ ムの PDF 文書情報項目すべて。 文書情報項
目は、 TET に内蔵 さ れてい る pCOS イ ン タ フ ェ ース で取得す る こ と がで き ます (pCOS
について詳 し く は pCOS パス リ フ ァ レ ン ス を参照 し て く だ さ い)。 た と えば
String objType = tet.pcos_get_string(tetHandle, "type:/Info/Subject");
if (!objType.equals("null"))
{
doc.add(new Field("summary", tet.pcos_get_string(tetHandle,
"/Info/Subject"), Field.Store.YES, Field.Index.ANALYZED));
}
> font : PDF 文書内のすべての フ ォ ン ト の名前
PdfDocument.java 内で、 イ ンデ ッ ク スす る 文書情報項目のセ ッ ト を変更、 あ る いは pCOS
に基づいて情報を追加す る こ と に よ っ て、 メ タ デー タ フ ィ ール ド を カ ス タ マ イ ズす る こ と
も 可能です。
PDF フ ァ イル添付 Lucene 用 TET コ ネ ク タ は、 文書内のすべての PDF フ ァ イ ル添付を
再帰的に処理 し 、 各添付のテ キ ス ト と メ タ デー タ を イ ンデ ッ ク ス で き る よ う Lucene 検索
エン ジ ンに与え ます。 こ れに よ っ て、 検索テ キ ス ト が メ イ ン文書内にな く 添付内にあ る と
き で も 、 検索 ヒ ッ ト が生成 さ れます。 再帰的添付横断は と り わけ、 PDF パ ッ ケージ ・ ポー
ト フ ォ リ オに対 し て重要です。
4.2 Lucene 検索エ ン ジ ン用 TET コ ネ ク タ
55
4.3 Solr 検索サーバ用 TET コ ネ ク タ
Solr は高パフ ォーマ ン ス なオープン ソ ース のエン タ プ ラ イ ズ検索サーバで、Lucene 検索 ラ
イ ブ ラ リ をベース と し てい ます。 XML/HTTP ・ JSON/Python/Ruby API を有 し 、 ヒ ッ ト ハ
イ ラ イ ト ・ フ ァ セ ッ ト 検索 ・ キ ャ ッ シ ュ 化 ・ レ プ リ ケーシ ョ ン ・ Web 管理 イ ン タ フ ェース
を そなえ てい ます。 Java サーブ レ ッ ト コ ン テナ内で動作 し ます (lucene.apache.org/solr を
参照)。
Solr は Lucene コ アエン ジ ン を取 り 巻 く 追加レ イ ヤ と し てふ る ま い ます。 イ ンデ ッ ク ス
さ れたデー タ を シ ンプルな XML 形式で受け付け ます。Solr 入力は TETML をベース に非常
に簡単に生成で き ます。 TETML は TET が生成する 一種の XML です。 Solr 用 TET コ ネ ク
タ は、TETML を Solr が受け付け る XML 形式へ変換す る XSLT ス タ イ ルシー ト か ら 成 り ま
す。 こ の ス タ イ ルシー ト のための TETML 入力は、TET ラ イ ブ ラ リ か TET コ マ ン ド ラ イ ン
ツールで生成で き ます (131 ページの 9.1 「TETML を生成」 を参照)。
注記 暗号化文書は、 特定の条件下では shrug オプ シ ョ ン で イ ンデ ッ ク スで き ます (詳 し く は、
67 ページの 5.1 「暗号化 PDF か ら内容を抽出」 を参照)。 暗号化文書を イ ンデ ッ ク スする
には、 Solr のための TETML 入力を生成する際に、 TET ラ イ ブ ラ リ か TET コ マ ン ド ラ イ ン
ツールで このオプ シ ョ ン を有効にする必要があ り ます。
メ タ デー タ フ ィ ール ド を イ ン デ ッ ク ス Solr 用 TET コ ネ ク タ は、 すべての標準文書情報
フ ィ ール ド を イ ンデ ッ ク ス し ます。各フ ィ ール ド のキーが フ ィ ール ド 名 と し て用い ら れま
す。
PDF フ ァ イル添付 Solr 用 TET コ ネ ク タ は、 文書内のすべての PDF フ ァ イ ル添付を再帰
的に処理 し 、各添付のテ キ ス ト と メ タ デー タ を イ ンデ ッ ク ス で き る よ う 検索エン ジ ンに与
え ます。 こ れに よ っ て、 検索テ キ ス ト が メ イ ン文書内にな く 添付内にあ る と き で も 、 検索
ヒ ッ ト が生成 さ れます。 再帰的添付横断は と り わけ、 PDF パ ッ ケージ ・ ポー ト フ ォ リ オに
対 し て重要です。
TETML を変換す る ための XSLT ス タ イルシー ト
solr.xsl ス タ イ ルシー ト は、 glyph 以外
の任意のモー ド の TETML 入力を受け付け ます。 こ れは、 検索サーバに入力デー タ を与え
る ために必要な XML を生成 し ます。 文書情報項目群は、 その情報項目の名前 (に文字列
値であ る こ と を示す _s 接尾辞をつけた も の) を保持 し た フ ィ ール ド と し て与え ら れ、 メ
イ ン テ キ ス ト は多数のテ キ ス ト フ ィ ール ド で与え ら れます。文書内の PDF 添付 (PDF パ ッ
ケージ ・ ポー ト フ ォ リ オを含む) は再帰的に処理 さ れます :
<?xml version="1.0" encoding="UTF-8"?>
<add>
<doc>
<field name="id">PDFlib-FontReporter-E.pdf</field>
<field name="Author_s">PDFlib GmbH</field>
<field name="CreationDate_s">2008-07-08T15:05:39+00:00</field>
<field name="Creator_s">FrameMaker 7.0</field>
<field name="ModDate_s">2008-07-08T15:05:39+00:00</field>
<field name="Producer_s">Acrobat Distiller 7.0.5 (Windows)</field>
<field name="Subject_s">PDFlib FontReporter</field>
<field name="Title_s">PDFlib FontReporter 1.3 Manual</field>
<field name="text">PDFlib</field>
<field name="text">GmbH</field>
<field name="text">Munchen</field>
...
56
4 章 : TET コ ネ ク タ
4.4 Oracle 用 TET コ ネ ク タ
Oracle 用 TET コ ネ ク タ は、 TET を Oracle デー タ ベース に結合 し て、 PDF 文書を Oracle
Text で イ ンデ ッ ク ス し ク エ リ で き る よ う に し ます。 PDF 文書は、 デー タ ベース内のその
パ ス名を通 じ て参照す る こ と も で き ます し 、デー タ ベース内に BLOB と し て直接格納す る
こ と も で き ます。
注記 暗号化文書は、 特定の条件下では shrug オプ シ ョ ン で イ ンデ ッ ク スで き ます (詳 し く は、
67 ページの 5.1 「暗号化 PDF か ら内容を抽出」 を参照)。 こ れは Connector フ ァ イル群の
中で用意 さ れますが、 このオプ シ ョ ン を手作業で有効にする必要があ り ます。
要件 と イ ン ス ト ール TET コ ネ ク タ は Oracle 10i と Oracle 11g でテ ス ト さ れてい ます。
TET コ ネ ク タ を利用す る ためには、 デー タ ベース を作成す る 際に AL32UTF8 デー タ ベース
文字集合を指定す る 必要があ り ます。 こ れは、 Oracle Express の Universal 版ではつねにそ
う な り ます ( し か し Western European 版では異な り ます)。 AL32UTF8 は Oracle が推奨 し
てい る デー タ ベース文字集合であ り 、 TET で PDF 文書を イ ンデ ッ ク スす る 場合に も 最良
の動作を し ます。 ただ し 、 以下の方式のいずれかに従えば、 他の文字集合で TET を Oracle
Text に接続す る こ と も 可能です :
> Oracle Text 11.1.0.7 か ら は、必要な文字集合変換をデー タ ベース が行え ます。下記にあ
る Oracle Text 11.1.0.7 文書の 「Using USER_FILTER with Charset and Format Columns」
節を参照 し て く だ さ い :
download.oracle.com/docs/cd/B28359_01/text.111/b28304/cdatadic.htm#sthref497
> Oracle Text 11.1.0.6 ま では、TET フ ィ ル タ ス ク リ プ ト が生成す る UTF-8 テ キ ス ト をデー
タ ベー ス 文字集合へ変換す る 必要が あ り ま す。 こ れは、 文字集合変換 コ マ ン ド を
tetfilter.sh に追加す る こ と に よ っ て実現で き ます :
Unix : iconv (オープン ソ ース ソ フ ト ウ ェ ア) か uconv (無償の ICU Unicode ラ イ ブ ラ リ
に含まれてい ます) を呼び出 し ます。
Windows : tetfilter.bat 内の適切な コ ー ド ページ コ ンバー タ を呼び出 し ます。
Oracle 用 TET コ ネ ク タ を活用で き る よ う にす る には、 以下の よ う に し て TET フ ィ ル タ ス
ク リ プ ト を Oracle か ら 利用可能にす る 必要があ り ます :
> TET フ ィ ル タ ス ク リ プ ト を、 Oracle がそれを見つけ る こ と がで き る デ ィ レ ク ト リ へ複
製:
Unix : connectors/Oracle/tetfilter.sh を $ORACLE_HOME/ctx/bin へ複製
Windows : connectors/Oracle/tetfilter.bat を %ORACLE_HOME%\bin へ複製
> TET フ ィ ル タ ス ク リ プ ト (それぞれ tetfilter.sh・tetfilter.bat)内の TETDIR 変数が必ず TET
イ ン ス ト レーシ ョ ンデ ィ レ ク ト を指 し てい る よ う に し ます。
> 必要に応 じ て、 追加の TET オプシ ョ ン群を、 グ ロ ーバル ・ 文書レベル ・ ページ レベル
のいずれかについて TETOPT ・ DOCOPT ・ PAGEOPT 変数内で与え る こ と も で き ます
(オプシ ョ ン リ ス ト について詳 し く は、151 ページの 10 章 「TET ラ イ ブ ラ リ API リ フ ァ
レ ン ス」 を参照)。 こ れは特に TET ラ イ セ ン ス キーを与え る ために有用です。 例 :
TETOPT="license=aaaaaaa-bbbbbb-cccccc-dddddd-eeeeee"
TET ラ イ セ ン ス キーを与え る ための他の選択肢については 9 ページの 0.2「TET ラ イ セ
ン ス キーを適用」 を参照 し て く だ さ い。
Oracle ユーザに権限 を付与 以下の例はいずれ も 、 Oracle ユーザが イ ンデ ッ ク ス を作成
し ク エ リ す る 適切な権限 を 持 っ て い る こ と を 前提 と し て い ま す。 以下の コ マ ン ド 群は、
4.4 Oracle 用 TET コ ネ ク タ
57
ユーザ HR に適切な権限群を付与 し ます ( こ れ ら の コ マ ン ド は、 system と し て発行す る 必
要があ り 、 かつ適切に調整す る 必要があ り ます) :
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
CTXAPP TO HR;
EXECUTE ON CTX_CLS TO HR;
EXECUTE ON CTX_DDL TO HR;
EXECUTE ON CTX_DOC TO HR;
EXECUTE ON CTX_OUTPUT TO HR;
EXECUTE ON CTX_QUERY TO HR;
EXECUTE ON CTX_REPORT TO HR;
EXECUTE ON CTX_THES TO HR;
例 A : PDF 文書のパス名 を デー タ ベースに格納 こ の例は、 イ ンデ ッ ク ス さ れた PDF 文
書群への フ ァ イ ル名参照をデー タ ベース内に格納 し ます。 以下の よ う に操作 し ます :
> コ マ ン ド プ ロ ンプ ト で下記のデ ィ レ ク ト リ へ移動 :
<TETインストレーションディレクトリ>/connectors/Oracle
> tetsetup_a.sql ス ク リ プ ト 内の tetpath 変数を、TET が イ ン ス ト ール さ れてい る デ ィ レ ク
ト リ を指す よ う に変え ます。
> デー タ ベース を用意:Oracle の sqlplus プ ロ グ ラ ム を使っ て、テーブル pdftable_a を作成
し 、 こ のテーブルに PDF 文書群のパ ス名を記入 し 、 イ ンデ ッ ク ス tetindex_a を作成 し
ます (なお、 tetsetup_a.sql ス ク リ プ ト の内容は若干プ ラ ッ ト フ ォーム依存です。 パ ス
文法が異な る ためです) :
SQL> @tetsetup_a.sql
> デー タ ベース を、 イ ンデ ッ ク ス を用いて ク エ リ :
SQL> select * from pdftable_a where CONTAINS(pdffile, 'Whitepaper', 1) > 0;
> イ ンデ ッ ク ス を更新 (文書を追加 し た後に必要です) :
SQL> execute ctx_ddl.sync_index('tetindex_a')
> デー タ ベー ス を ク リ ーン ア ッ プ ( イ ンデ ッ ク ス と テーブルを削除) す る こ と も で き ま
す:
SQL> @tetcleanup_a.sql
例 B : PDF 文書を BLOB と し てデー タ ベース に格納 し て メ タ デー タ を追加 こ の 例 は、
PDF 文書本体を BLOB と し てデー タ ベース に格納 し ます。 PDF デー タ に加え て、 い く つ
かの メ タ デー タ を pCOS イ ン タ フ ェ ー ス で抽出 し 、 それ用のデー タ ベース列に格納 し ま
す。 tet_pdf_loader Java プ ロ グ ラ ムは、 PDF 文書群を BLOB と し てデー タ ベース に格納 し
ます。 メ タ デー タ 処理を演示す る ため、 こ のプ ロ グ ラ ムは、 pCOS イ ン タ フ ェース を用い
て、 文書 タ イ ト ル (pCOS パ ス /Info/Title を通 じ て) と 文書内のページ数 (pCOS パ ス
length:pages を通 じ て) を抽出 し ます。 こ の文書 タ イ ト ル と ページ数はデー タ ベース内の
別 コ ラ ムに格納 さ れます。 こ の例を動作 さ せる には以下の よ う に操作 し ます :
> コ マ ン ド プ ロ ンプ ト で下記のデ ィ レ ク ト リ へ移動 :
<TETインストレーションディレクトリ>/connectors/Oracle
> デー タ ベース を用意:Oracle の sqlplus プ ロ グ ラ ム を使っ て、テーブル pdftable_b と その
イ ンデ ッ ク ス tetindex_b を作成 し ます :
58
4 章 : TET コ ネ ク タ
SQL> @tetsetup_b.sql
> デー タ ベース に内容を入れます: こ のテーブルに、JDBC を通 じ て PDF 文書 と メ タ デー
タ を入れます ( こ れは ス ト ア ド プ ロ シージ ャ ではで き ない点に留意)。 TET パ ッ ケージ
と と も に供給 さ れ て い る ant ビ ル ド フ ァ イ ル は、 Oracle JDBC ド ラ イ バ に対す る
ojdbc14.jar フ ァ イ ルが tet_pdf_loader.java ソ ース コ ー ド と 同 じ デ ィ レ ク ト リ にあ る と 前
提 し てい ます。適切な JDBC 接続文字列を ant コ マ ン ド で指定 し ます。 こ のビル ド フ ァ
イ ルは、すべてのプ ロ パテ ィ の記述を含んでお り 、こ れを用いて Ant ビル ド のオプシ ョ
ン群を指定す る こ と がで き ます。 こ れ ら のオプシ ョ ン に対す る 値を コ マ ン ド ラ イ ン で
与え る こ と がで き ます。 下記の例では、 ホ ス ト 名 と し て localhost、 ポー ト 番号 1521、
デー タ ベース名 と し て xe、 ユーザ名 ・ パス ワ ー ド と し て HR を用いてい ます (自分の
デー タ ベース設定に合わせて適切に変えて く だ さ い) :
ant -Dtet.jdbc.connection=jdbc:oracle:thin:@localhost:1521:xe
-Dtet.jdbc.user=HR -Dtet.jdbc.password=HR
> イ ンデ ッ ク ス を更新 (最初 と 、 文書を追加 し た後に必要です) :
SQL> execute ctx_ddl.sync_index('tetindex_b')
> デー タ ベース を、 イ ンデ ッ ク ス を用いて ク エ リ :
SQL> select * from pdftable_b where CONTAINS(pdffile, 'Whitepaper', 1) > 0;
> デー タ ベース を ク リ ーン ア ッ プ ( イ ンデ ッ ク ス と テーブルを削除) す る こ と も で き ま
す:
SQL> @tetcleanup_b.sql
4.4 Oracle 用 TET コ ネ ク タ
59
4.5 Microsoft 製品用 TET PDF IFilter
こ の節では、 PDFlib TET をベース と し て構築 さ れた別製品であ る TET PDF IFilter を説明
し ます。 TET PDF IFilter の詳 し い情報 と 配布パ ッ ケージは www.pdflib.com/products/tetpdf-ifilter で入手可能です。
TET PDF IFilter は、 非商用デス ク ト ッ プ用途については無償で利用可能です。 デス ク
ト ッ プシ ス テ ム上での商用利用 と サーバ上での展開には商用 ラ イ セ ン ス が必要です。
PDFlib TET PDF IFilter と は TET PDF IFilter は、 PDF 文書か ら テ キ ス ト と メ タ デー タ を
抽出 し 、 それを Windows 上の検索 ソ フ ト ウ ェ アで利用可能に し ます。 こ れに よ っ て、 PDF
文書を ロ ーカルデス ク ト ッ プや企業サーバ、 あ る いは Web で検索す る こ と が可能にな り
ます。 TET PDF IFilter は、 特許を受けた PDFlib Text Extraction Toolkit (TET) をベース と
し てい ます。 TET は、 PDF 文書か ら 確実にテ キ ス ト を抽出す る ための定評あ る 開発者向
け製品です。
TET PDF IFilter は、 Microsoft の IFilter イ ンデ ク シ ン グ イ ン タ フ ェース の堅牢な実装で
す。 こ れは SharePoint や SQL Server 等、 IFilter イ ン タ フ ェース に対応 し てい る すべての検
索製品 と と も に動作 し ます。 そ う し た製品は HTML 等、 特定の フ ァ イ ル形式に対す る 形
式個別の フ ィ ル タ プ ロ グ ラ ム を用いてお り 、 こ の フ ィ ル タ プ ロ グ ラ ム を IFilter と 呼びま
す。 TET PDF IFilter はその よ う なプ ロ グ ラ ムの一つで、 PDF 文書に特化 し た も のです。 文
書を検索す る ための イ ン タ フ ェース は、Windows Explorer や Web やデー タ ベース の フ ロ ン
ト エン ド であ っ て も よ いです し 、 ク エ リ ス ク リ プ ト やカ ス タ ム アプ リ ケーシ ョ ン と す る こ
と も で き ます。 対話的検索だけでな く 、 ユーザ イ ン タ フ ェース一切な し で ク エ リ を プ ロ グ
ラ ム的に発す る こ と も で き ます。
特長 TET PDF IFilter は以下の利点を提供 し ます :
> 欧文テ キ ス ト 、 日本語 ・ 中国語 ・ 韓国語 (日中韓) テ キ ス ト 、 ア ラ ビ ア文字 ・ ヘブ ラ
イ 文字等の右書 き 言語に対応
> 暗号化文書を イ ンデ ッ ク ス し 、 ま た、 Acrobat が失敗す る PDF か ら も テ キ ス ト を抽出
> Unicode 字形統合 ・ 分解 ・ 正規化に対応
> 展開 : ス レ ッ ド セーフ、 高速 ・ 堅牢、 32 ・ 64 ビ ッ ト 版
> 自動用字系 ・ 言語検出に よ る 検索向上
エ ン タ プ ラ イ ズ PDF 検索 TET PDF IFilter は、 完全に ス レ ッ ド セーフ なネ イ テ ィ ブ 32 ・
64 ビ ッ ト 版 と し て利用可能です。 TET PDF IFilter と 以下の製品を用いて、 エン タ プ ラ イ
ズ PDF 検索 ソ リ ュ ーシ ョ ン を実装で き ます :
> Microsoft SharePoint Server お よ び SharePoint 用 FAST サーバ
> Microsoft Search Server
> Microsoft SQL Server
> Microsoft Exchange Server
> Microsoft Site Server
TET PDF IFilter は、 IFilter イ ン タ フ ェ ース に対応 し てい る 他のすべての Microsoft ・ サー ド
パーテ ィ 製品 と と も に利用で き ます。
デス ク ト ッ プ PDF 検索 TET PDF IFilter を利用す る と 、 た と えば以下の よ う な製品 と と
も に、 デス ク ト ッ プ PDF 検索を実装す る こ と も 可能です :
> Windows Search : Windows Vista/7 に内蔵 さ れてい ます。 Windows XP 用の無償ア ド オン
と し て も 利用可能です。
60
4 章 : TET コ ネ ク タ
> Windows Indexing Service
TET PDF IFilter は、デス ク ト ッ プオペレーテ ィ ン グ シ ス テ ム上での非商用利用については
無償ですので、 気軽にテ ス ト や評価を行 う こ と がで き ます。
受け入れ可能な PDF 入力 TET PDF IFilter は、あ ら ゆ る 種類の PDF 入力に対応 し てい ま
す:
> Acrobat X ま でのすべての PDF バージ ョ ン (ISO 32000 も 含め)
> 文書を開 く パス ワー ド を必要 と し ない暗号化 PDF
> 破損 し た PDF 文書は修復 さ れます。
Unicode 後処理 TET PDF IFilter は さ ま ざ ま な Unicode 後処理に対応 し てお り 、 こ れを利
用 し て検索結果を向上 さ せ る こ と がで き ます :
> 字形統合 : キ ャ ラ ク タ に対 し て温存 ・ 除去 ・ 置換のいずれか を行い ま す。 た と えば句
読点や、 無関係な用字系のキ ャ ラ ク タ を除去す る こ と がで き ます。
> 分解 : 一つのキ ャ ラ ク タ を、 等価な他のキ ャ ラ ク タ ない し キ ャ ラ ク タ 列へ置 き 換え ま
す。 た と えば漢字を、 それ と 正準等価な Unicode キ ャ ラ ク タ へ置 き 換え る こ と がで き
ます。
> テ キ ス ト を、4 種類の Unicode 正規形のいずれへ も 変換で き ます。た と えば、デー タ ベー
ス の要請に合 う よ う NFC 形式を出力する こ と がで き ます。
国際化 欧文テ キ ス ト に加えて、 TET PDF IFilter は日本語 ・ 中国語 ・ 韓国語 (日中韓) テ
キ ス ト に完全対応 し てい ま す。 すべての日中韓エ ン コ ーデ ィ ン グ が認識 さ れ ま す。 横書
き ・ 縦書 き に対応 し てい ます。 テ キ ス ト の ロ ケール ID (言語 ・ 地域識別子) の自動検出
が、 Microsoft の単語区切 り ・ 語幹処理アルゴ リ ズ ムの結果を向上 さ せ、 こ の こ と は と り わ
け東ア ジア テ キ ス ト について重要です。
ヘブ ラ イ 文字 ・ ア ラ ビ ア文字 と い っ た右書 き 言語に も 対応 し てい ます。 位置依存表示
形は正規化 さ れ、 テ キ ス ト は論理順に発出 さ れます。
PDF は単な る ページの寄せ集めではない TET PDF IFilter は PDF 文書を、単な る ページ
群だけの他に も 多 く の情報を含む可能性のあ る コ ン テナ と し て扱い ます。 TET PDF IFilter
は PDF 文書内の関連す る 項目をすべて イ ンデ ッ ク ス し ます :
> ページ内容
> し お り 内のテ キ ス ト
> メ タ デー タ (後述)
> 埋め込まれた PDF と PDF パ ッ ケージ / ポー ト フ ォ リ オは、埋め込まれてい る すべての
PDF 文書内のテ キ ス ト が検索で き る よ う 、 再帰的に処理 さ れます。
XMP メ タ デー タ と 文書情報 TET PDF IFilter の高度な メ タ デー タ 実装は、 Windows の メ
タ デー タ のためのプ ロ パテ ィ シ ス テ ムに対応 し てい ます。 こ れは XMP メ タ デー タ と 、 標
準 ・ カ ス タ ム文書情報項目を イ ンデ ッ ク ス し ます。 メ タ デー タ イ ンデ ク シ ン グはい く つか
の レベルで設定で き ます :
> 文書情報項目群 と Dublin Core フ ィ ール ド 群、お よ びその他の広 く 用い ら れ る XMP プ ロ
パテ ィ 群は、同等の Windows プ ロ パテ ィ へマ ッ プ さ れます。例 : Title ・ Subject ・ Author。
> TET PDF IFilter は、有用な PDF 独自の擬似プ ロ パテ ィ 群を追加 し ます。例:ページサ イ
ズ ・ PDF/A 準拠レベル ・ フ ォ ン ト 名。
> すべての定義済み XMP プ ロ パテ ィ 群を検索で き ます。
4.5 Microsoft 製品用 TET PDF IFilter
61
> ユーザ定義 XMP プ ロ パテ ィ 群を検索で き ます。 例 : 企業独自の分類プ ロ パテ ィ 、 PDF/
A 拡張ス キーマ。
TET PDF IFilter は、 メ タ デー タ を全文テ キ ス ト イ ンデ ッ ク ス内に統合す る こ と も で き ま
す。 結果 と し て、 メ タ デー タ 対応を持たない全文テ キ ス ト 検索エン ジ ン (SQL Server 等)
であ っ て も 、 メ タ デー タ の検索が可能にな り ます。
62
4 章 : TET コ ネ ク タ
4.6 Apache TIKA ツ ールキ ッ ト 用 TET コ ネ ク タ
TIKA は、 オープン ソ ース の 「既存のパーサ ラ イ ブ ラ リ を用いて さ ま ざ ま な文書か ら メ タ
デー タ ・ 構造化テ キ ス ト 内容を検出 ・ 抽出す る ための ツールキ ッ ト 」 です。 TIKA の詳細
については tika.apache.org を参照 し て く だ さ い。 Tika 用 TET コ ネ ク タ は、 Tika に設定 さ
れてい る デフ ォ ル ト の PDF パーサ を置 き 換え、 TET を PDF 形式用のパーサ と し て接続 し
ます。 TET コ ネ ク タ は以下の項目を Tika に与え ます :
> 全ページの非整形のテ キ ス ト 内容
> 定義済み ・ カ ス タ ムの文書情報フ ィ ール ド 群
> 文書のページ数
注記 暗号化文書は、 特定の条件下では shrug オプ シ ョ ン で イ ンデ ッ ク スで き ます (詳 し く は、
67 ページの 5.1 「暗号化 PDF か ら内容を抽出」 を参照)。 こ れは Connector フ ァ イル群の
中 で 用 意 さ れ ま す が、 こ の オ プ シ ョ ン を 手 作 業 で 有 効 に す る 必 要 が あ り ま す。
TETPDFParser.java では こ れに加えて、shrug オプ シ ョ ン では不足の場合にパスワー ド を与
え る方法を提供 し ています。
要件 と イ ン ス ト ール TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、 Tika ツールキ ッ ト 用 TET コ ネ ク
タ を含んでい ます。 以下の説明において <tet-dir> は、 TET パ ッ ケージ を ア ンパ ッ ク し た
デ ィ レ ク ト リ を意味 し ます。 下記の要件を満たす必要があ り ます :
> JDK 1.5 以降
> Ant ビル ド ツールの動作中の イ ン ス ト レーシ ョ ン
> Unix ・ Linux ・ Mac ・ Windows いずれか用の イ ン ス ト ール済み TET デ ィ ス ト リ ビ ュ ーシ ョ
ンパ ッ ケージ。
> 名前 tika-app-1.x.jar の Tika 用プ レ ビル ト JAR フ ァ イ ル。 こ の フ ァ イ ルのためのダ ウ ン
ロ ー ド 情報は下記の場所にあ り ます :
tika.apache.org/download.html
Tika 用 TET コ ネ ク タ を ビル ド し て テ ス ト Tika 用 TET コ ネ ク タ を ビル ド し てテ ス ト す る
には以下の手順に従い ます :
> tika-app-1.x.jar をデ ィ レ ク ト リ <tet-dir>/connectors/Tika へ コ ピー。
> <tet-dir>/connectors/Tika へ移動 し 、 Tika 用 TET コ ネ ク タ を ビル ド :
ant
Tika jar フ ァ イ ルの名前が tika-app-1.0.jar でない と き は、jar フ ァ イ ル名を コ マ ン ド ラ イ
ンで与え る 必要があ り ます :
ant -Dtika-app.jar=tika-app-1.5.jar
> ビル ド フ ァ イ ルは、Tika用TET コ ネ ク タ でのテ ス ト を走 ら せ る タ ーゲ ッ ト を含んでい ま
す:
ant test
こ の コ マ ン ド は、 <tet-dir>/bind/data/FontReporter.pdf の内容を XHTML と し て標準出
力に生成する はずです。 自分の選んだ PDF フ ァ イ ルでテ ス ト を行 う には、 下記の よ う
に Ant プ ロ パテ ィ test.inputfile を コ マ ン ド ラ イ ンで与え ます :
ant -Dtest.inputfile=/自分の/ファイル/への/パス.pdf test
暗号化文書にパス ワー ド を与え る 機能については下記の よ う にテ ス ト で き ます :
4.6 Apache TIKA ツールキ ッ ト 用 TET コ ネ ク タ
63
ant -Dtest.inputfile=<暗号化ファイル.pdf> -Dtest.outputfile=<出力ファイル名>
-Dtest.password=<パスワード> api-test
> Tika用TET コ ネ ク タ が実際に MIME タ イ プ application/pdf に対 し て用い ら れ る か ど う か
を検証す る には、 <tet-dir>/connectors/Tika デ ィ レ ク ト リ で、 Unix ・ Mac OS X シ ス テ ム
の場合は下記 コ マ ン ド を実行 し ます :
java -Djava.library.path=<tet-dir>/bind/java -classpath
<tet-dir>/bind/java/TET.jar:tika-app-1.0.jar:tet-tika.jar
org.apache.tika.cli.TikaCLI --list-parser-details
Windows の場合 :
java -Djava.library.path=<tet-dir>/bind/java -classpath
<tet-dir>/bind/java/TET.jar;tika-app-1.0.jar;tet-tika.jar
org.apache.tika.cli.TikaCLI --list-parser-details
生成出力内に下記記述が現れ る はずです :
com.pdflib.tet.tika.TETPDFParser
application/pdf
> Tika GUIアプ リ ケーシ ョ ン を TET コ ネ ク タ と と も に動作 さ せ る には、デ ィ レ ク ト リ <tetdir>/connectors/Tika で下記 コ マ ン ド を実行 し ます :
Unix ・ Mac OS X シ ス テ ムの場合 :
java -Djava.library.path=<tet-dir>/bind/java -classpath
<tet-dir>/bind/java/TET.jar:tika-app-1.0.jar:tet-tika.jar
org.apache.tika.cli.TikaCLI
Windows の場合 :
java -Djava.library.path=<tet-dir>\bind\java -classpath
<tet-dir>\bind\java\TET.jar;tika-app-1.0.jar;tet-tika.jar
org.apache.tika.cli.TikaCLI
Tike 用 TET コ ネ ク タ を カ ス タ マ イ ズ Tike コ ネ ク タ は、TETPDFParser.java ソ ース モジ ュ ー
ル内で下記の よ う にカ ス タ マ イ ズす る こ と も で き ます :
> DOC_OPT_LIST 変数に文書オプシ ョ ン群を追加。例:shrug オプシ ョ ンで暗号化文書を処
理。
> PAGE_OPT_LIST 変数にページオプシ ョ ン群を追加。
> SEARCHPATH 変数で。 日中韓 CMap な ど の リ ソ ースへの検索パ ス を カ ス タ マ イ ズ。 あ る
いは、 PDF 文書を処理す る 際に tet.searchpath プ ロ パテ ィ を与え る こ と も で き ます。
64
4 章 : TET コ ネ ク タ
4.7 MediaWiki 用 TET コ ネ ク タ
MediaWiki は無償の ウ ィ キ ソ フ ト ウ ェ アであ り 、 Wikipedia をは じ め と す る 多 く の コ ミ ュ ニ
テ ィ Web サ イ ト を動作 さ せ る ために利用 さ れてい ます。 MediaWiki に関す る 詳 し い情報は
下記にあ り ます :
www.mediawiki.org/wiki/MediaWiki
注記 暗号化文書は、 特定の条件下では shrug オプ シ ョ ン で イ ンデ ッ ク スで き ます (詳 し く は、
67 ページの 5.1 「暗号化 PDF か ら内容を抽出」 を参照)。 こ れは Connector フ ァ イル群の
中で用意 さ れますが、 このオプ シ ョ ン を手作業で有効にする必要があ り ます。
要件 と イ ン ス ト ール TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、 MediaWiki サ イ ト へア ッ プ ロ ー ド
さ れ る PDF 文書を イ ンデ ッ ク スす る ために利用で き る TET コ ネ ク タ を含んでい ま す。
MediaWiki はネ イ テ ィ ブに PDF 文書に対応は し てい ませんが、 PDF を 「画像」 と し てア ッ
プ ロ ー ド すれば受け付け ます。 MediaWiki 用 TET コ ネ ク タ は、 すべての PDF 文書を、 そ
れがア ッ プ ロ ー ド さ れ る 際に イ ンデ ッ ク ス し ます。MediaWiki内にすでに存在 し てい る PDF
文書は イ ンデ ッ ク ス さ れません。 以下の必要条件を満た し てい る 必要があ り ます :
> PHP 5.0 以上
> MediaWiki 1.11.2 以上 ( こ れ以外のバージ ョ ンについては後述)
> Unix ・ Linux ・ Mac ・ Windows のいずれか用の TET 配布パ ッ ケージ
MediaWiki 用 TET コ ネ ク タ を実装す る には以下の操作を行い ます :
> PHP 用 TET バ イ ンデ ィ ン グ を、42 ページの 3.9 「PHP バ イ ンデ ィ ン グ」 の説明の よ う に
イ ン ス ト ール。
> <TET イ ン ス ト ールデ ィ レ ク ト リ >/connectors/MediaWiki/PDFIndexer.php を <MediaWiki
イ ン ス ト ールデ ィ レ ク ト リ >/extensions/PDFIndexer/PDFIndexer.php へ複製。
> 日中韓テ キ ス ト への対応が必要な場合は、 <TET イ ン ス ト ールデ ィ レ ク ト リ >/resource/
cmap 内の CMap フ ァ イ ル群を <MediaWiki イ ン ス ト ールデ ィ レ ク ト リ >/extensions/
PDFIndexer/resource/cmap へ複製。
> MediaWiki 設定フ ァ イ ル LocalSettings.php に以下の行群を追加 :
# アップロードされるPDFをインデックスして検索可能にします
include("extensions/PDFIndexer/PDFIndexer.php");
> PDF 文書を ア ッ プ ロ ー ド す る 際に警告が出ない よ う にす る には、 <MediaWiki イ ン ス
ト ールデ ィ レ ク ト リ >/includes/DefaultSettings.php に以下の行群を追加 し て .pdf を既
知の フ ァ イ ル種別拡張子にす る こ と を推奨 し ます :
/**
* これはアップロードするファイルの好ましい拡張子のリストです。このリストにない拡張子
* を持つファイルをアップロードすると警告が発生します。
*/
$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'pdf' );
MediaWiki 用 TET コ ネ ク タ はどの よ う に動作す るか MediaWiki 用 TET コ ネ ク タ は、PHP
モジ ュ ール PDFIndexer.php か ら 成 り ます。 こ れは MediaWiki の定義済みフ ッ ク の一つを用
いて、 新規 PDF 文書がア ッ プ ロ ー ド さ れ る 際にいつ も 呼び出 さ れ る よ う フ ッ ク ア ッ プ さ
れます。 こ れは PDF 文書か ら テ キ ス ト と メ タ デー タ を抽出 し て、 それを、 ア ッ プ ロ ー ド
さ れ る 文書にオプシ ョ ナルに付属す る 、 ユーザが与え る コ メ ン ト の後に追加 し ます。 こ の
テ キ ス ト は、 ユーザが文書 コ メ ン ト を表示す る 際に表示 さ れない よ う 、 HTML コ メ ン ト 内
4.7 MediaWiki 用 TET コ ネ ク タ
65
図 4.2 MediaWiki 内で PDF 文書を検索
に隠 さ れてい ます。 MediaWiki は コ メ ン ト の内容全文を イ ンデ ッ ク ス し ます (隠 さ れてい
る 全文テ キ ス ト も 含めて) ので、 PDF のテ キ ス ト 内容 も イ ンデ ッ ク ス さ れます。 イ ンデ ッ
ク ス用テ キ ス ト は以下の よ う に構築 さ れます :
> TET コ ネ ク タ は、 すべての文書情報フ ィ ール ド の値を イ ンデ ッ ク スへ与え ます。
> すべてのページのテ キ ス ト 内容が抽出 さ れて結合 さ れます。
> 抽出 さ れた テ キ ス ト のサ イ ズが制限未満であれば、 それは ま る ご と イ ンデ ッ ク スへ与
え ら れます。 こ の方式の利点は、 検索結果が検索語を文脈の中で表示す る 点です。
> 抽出 さ れた テ キ ス ト のサ イ ズが制限を超え てい る 場合は、 テ キ ス ト はユニー ク な単語
群へ減量 さ れ ます (すなわち、 同一の単語が複数回出現 し てい る も のについて、 その
単語を 1 回だけに減量 さ れます)。
> 減量 し たテ キ ス ト のサ イ ズが制限未満であれば、 それは イ ンデ ッ ク スへ与え ら れます。
そ う でない場合には、 それは切 り 落 と さ れ ます。 すなわち、 その文書の終わ り のほ う
のテ キ ス ト は イ ンデ ッ ク ス さ れな く な り ます。
定義済みの制限は 512 KB ですが、 こ れは PDFIndexer.php 内で変更す る こ と も で き ます。
上記のサ イ ズテ ス ト の一つが制限に触れた場合には、 MediaWiki の ロ グ記録が有効に さ れ
てい る な ら ば、 警告 メ ッ セージが MediaWiki の DebugLogFile へ書き 込まれます。
PDF 文書 を検索
PDF 文書は MediaWiki に よ っ て画像 と し て扱われますので、Image 名前
空間内を検索す る 必要があ り ます。 こ れは、 Advanced search ダ イ ア ロ グ (図 4.2 参照) の
名前空間の一覧にあ る Image チ ェ ッ ク ボ ッ ク ス を オンにす る こ と で実現で き ます。 ただ
し 、 こ の設定は LocalSettings.php 設定フ ァ イ ル内で以下の よ う に有効にす る こ と も 可能で
す:
$wgNamespacesToBeSearchedDefault = array(
NS_MAIN
=> true,
NS_IMAGE
=> true,
}
検索結果は、 検索語を含む文書の一覧を表示 し ます。 テ キ ス ト 全文が イ ンデ ッ ク ス さ れて
い る 場合 (文書が長 く て単語 リ ス ト へ減量 さ れた場合ではな く ) には、 検索語の前後にい
く つかの語が表示 さ れて文脈を示 し ます。 PDF テ キ ス ト 内容は MediaWiki イ ンデ ッ ク ス に
HTML 形式で与え ら れますので、 テ キ ス ト の頭に行番号が表示 さ れます。 こ れ ら の行番号
は PDF 文書については意味があ り ませんので、 無視 し て差 し 支え あ り ません。
メ タ デー タ フ ィ ール ド を イ ン デ ッ ク ス MediaWiki 用 TET コ ネ ク タ は、 すべての標準文
書情報フ ィ ール ド を イ ンデ ッ ク ス し ます。 各フ ィ ール ド の値が、 検索で利用で き る よ う 、
イ ンデ ッ ク スへ与え ら れます。 MediaWiki は メ タ デー タ ベース の検索に対応 し てい ません
ので、 文書情報項目を直接検索す る こ と はで き ず、 全文テ キ ス ト の一部 と し てのみ情報項
目を検索で き ます。
66
4 章 : TET コ ネ ク タ
5 設定
5.1 暗号化 PDF か ら 内容 を抽出
PDF のセキ ュ リ テ ィ 機能 PDF 文書は、 以下の保護機能を提供す る パ ス ワー ド セキ ュ リ
テ ィ に よ っ て保護す る こ と がで き ます :
> フ ァ イ ルを開いて閲覧す る ためにユーザパス ワー ド (開 く パ ス ワー ド と も いい ます) が
必要。
> 権限群やユーザ/マ ス タ パ ス ワ ー ド と い っ たセキ ュ リ テ ィ 設定群の う ちのいずれか を
変更す る ためにマ ス タ パ ス ワ ー ド (所有者/権限パ ス ワ ー ド と も いい ま す) が必要。
ユーザパ ス ワ ー ド と マ ス タ パ ス ワ ー ド のあ る フ ァ イ ルは、 いずれかのパ ス ワ ー ド を与
えれば開いて閲覧で き ます。
> PDF 文書に対する 印刷やテ キ ス ト 抽出 と い っ た特定のア ク シ ョ ン を権限設定が制限。
> 添付パス ワー ド を与えて、 文書自体の内容ではな く フ ァ イ ル添付だけ を暗号化可能。
PDF 文書が こ れ ら の保護機能の う ちのいずれか を用いてい る と き 、 それは暗号化 さ れ ま
す。 文書のセキ ュ リ テ ィ 設定を Acrobat で表示ま たは変更す る には、 「フ ァ イル」 → 「プ
ロパテ ィ ...」 → 「セキ ュ リ テ ィ 」 →それぞれ 「詳細を表示 ...」 「設定を変更 ...」 を ク リ ッ
ク し ます。
TET は PDF 権限設定に従い ます。 dumper サンプルで演示 し てい る よ う に、 パ ス ワー
ド と 権限設定を、 pCOS パス encrypt/master ・ encrypt/user ・ encrypt/nocopy 等で取得す る
こ と がで き ます。 pCOS は pcosmode 擬似オブジ ェ ク ト も 提供 し てお り 、 こ れを用い る と 、
特定の文書について ど の操作が許 さ れてい る かを知 る こ と がで き ます。
内容抽出ス テー タ ス デフ ォ ル ト では、 文書を う ま く 開 く こ と がで き た な ら 、 TET に よ
る テ キ ス ト と 画像の抽出は可能にな り ます (open_document( ) の requiredmode オプシ ョ
ン を与えた場合には こ の限 り ではあ り ません)。nocopy 権限設定に よ っ て、制限 pCOS モー
ド での内容抽出が許 さ れ る か否かが決ま り ます (フル pCOS モー ド では内容抽出はつねに
許 さ れます) 。 以下の条件を用いれば、 内容抽出が許 さ れてい る か ど う か を調べ る こ と が
で き ます :
if ((int) tet.pcos_get_number(doc, "encrypt/nocopy") == 0)
{
/* 内容抽出は許されている */
}
暗号化文書 を処理す る必要 PDF 権限設定は、 文書作成者がその内容の作成者 と し ての
権利を強制す る こ と を支援 し 、 PDF 文書の利用者は、 テ キ ス ト ・ 画像内容を抽出す る 際に
はその文書作成者の権利を尊重す る 必要があ り ます。 デフ ォ ル ト では、 TET は制限モー ド
で動作 し 、 その よ う な暗号化文書か ら いかな る 内容を も 抽出する こ と を拒否 し ます。 し か
し 、内容抽出はあ ら ゆ る 場合においてただちに作成者の権利の侵害を構成す る わけではあ
り ません。 内容抽出が許容可能な状況 と し て以下の よ う な場合が挙げ ら れます :
> 少量の内容を引用目的で抽出す る 場合 (「フ ェ アユース」)。
> 組織に出入 り す る 文書の中に特定のキー ワ ー ド がないか を調べたい (文書ス ク リ ーニ
ン グ) か も し れません。 それを超え る 内容の再利用は行い ません。
> 文書作成者自身がマ ス タ パス ワー ド を紛失 し たか も し れません。
5.1 暗号化 PDF から 内容を抽出
67
> 検索エ ン ジ ン が暗号化文書を イ ンデ ッ ク スす る 場合。 その文書内容を ユーザに直接利
用可能には し ません (元の PDF への リ ン ク を示す こ と に よ っ て間接的にのみ利用可能
と し ます)。
最後の例が と り わけ重要です : 利用者が暗号化 PDF の内容抽出を許 さ れていない場合で
あ っ て も 、 企業内検索や Web ベース検索でその文書を見つけ出す こ と は可能であ る べ き
です。 抽出 し たテ キ ス ト を利用者に直接利用可能 と せず、 文書を見つけ出せ る よ う 検索エ
ン ジ ンの イ ンデ ッ ク ス に供す る ためにのみ用い る な ら ば、内容を抽出す る こ と は許容 さ れ
う る で し ょ う 。 利用者は元の暗号化 PDF をのみ利用可能 と な り ますので (検索エン ジ ン
が内容を イ ンデ ッ ク ス し て ヒ ッ ト リ ス ト が PDF への リ ン ク を含んだ後には)、 利用者がそ
の PDF を利用す る 際には、 その文書の内部権限設定が通常通 り その文書を保護す る こ と
にな り ます。
暗号化文書に対す る 「シ ュ ラ ッ グ」 機能 TET は、 TET ユーザが文書作成者の権利を尊
重す る こ と について責任を受け入れ る 前提の も と に、暗号化文書か ら テ キ ス ト と 画像を抽
出す る ために利用で き る 機能を提供 し てい ます。 こ の機能はシ ュ ラ ッ グ と 呼ばれ、 次の よ
う に動作 し ます:open_document( ) に shrug オプシ ョ ン を与え る こ と に よ っ て、ユーザは、
自身がいかな る 文書作成者の権利を も 侵害する 意志を持たない こ と を言明 し ます。 PDFlib
GmbH の取引条件は、TET のお客様が PDF権限設定を尊重す る べ き であ る と 定めてい ます。
以下のすべての条件が真であ る と き 、 シ ュ ラ ッ グ機能は有効化 さ れます :
> open_document( ) に shrug オプシ ョ ンが与え ら れてい る 。
> 文書がマ ス タ パ ス ワー ド を必要 と し てい る が、それがopen_document( )に与え ら れてい
ない。
> 文書がユーザ (文書を開 く ) パ ス ワー ド を必要 と し てい る 場合には、 それが
open_
document( ) に与え ら れてい る 必要があ り ます。
> 文書の権限設定でテ キ ス ト 抽出が許 さ れていない、 すなわち nocopy=true。
シ ュ ラ ッ グ機能は以下の効力を持ち ます :
> nocopy=true であ っ て も 文書か ら の内容抽出が許 さ れます。ユーザは文書作成者の権利
を尊重す る 責任を負い ます。
> pCOS 擬似オブジ ェ ク ト shrug が true/1 に設定 さ れます。
> pCOS が フルモー ド で動作 し ます (制限モー ド ではな く )。すなわち pcosmode 擬似オブ
ジ ェ ク ト が 2 に設定 さ れます。
shrug 擬似オブジ ェ ク ト を下記の形に従っ て用いれば、 内容を ユーザに直接利用可能 と し
て よ いか、それ と も イ ンデ ッ ク スす る こ と やその類の間接的用途にのみ利用す る べ き かを
決定す る こ と がで き ます :
int doc = tet.open_document(filename, "shrug");
...
if ((int) tet.pcos_get_number(doc, "shrug") == 1)
{
/* インデックスすることのみ許される */
}
else
{
/* 内容をユーザに渡してもよい */
}
68
5 章 : 設定
5.2 リ ソ ース設定 と フ ァ イ ル検索
UPR フ ァ イル と リ ソ ース カ テ ゴ リ 場合に よ っ ては TET は、 エン コ ーデ ィ ン グ定義やグ
リ フ名マ ッ ピ ン グ テーブル と いっ た リ ソ ース の場所を知っ て利用す る 必要があ り ます。 リ
ソ ー ス の取 り 扱い を プ ラ ッ ト フ ォ ーム に依存せずかつカ ス タ マ イ ズ可能な も のにす る た
めに、設定フ ァ イ ルを与えてそ こ に利用可能な リ ソ ース群 と それぞれのデ ィ ス ク フ ァ イ ル
名を記述す る こ と がで き ます。 静的な設定フ ァ イ ルだけでな く 、 set_option( ) を用いて リ
ソ ー ス を追加す る こ と に よ り 動的な設定 も 行 う こ と が可能です。 設定 フ ァ イ ルに関 し て
は、 Unix PostScript Resource (UPR) と い う テ キ ス ト 形式が用い ら れ ます。 TET で用い ら
れ る 形の UPR フ ァ イ ル形式を以下に説明 し ます。 TET は、 表 5.1 に挙げ る リ ソ ース カ テ
ゴ リ に対応 し てい ます。
表 5.1 リ ソ ース カ テ ゴ リ ( フ ァ イル名はすべて UTF-8 で指定する必要がある)
カテゴ リ
形式1
説明
cmap
キー = 値
CMap の リ ソ ース名 と フ ァ イル名
codelist
キー = 値
コ ー ド リ ス ト の リ ソ ース名 と フ ァ イル名
encoding
キー = 値
エ ン コ ーデ ィ ン グの リ ソ ース名 と フ ァ イル名
glyphlist
キー = 値
グ リ フ リ ス ト の リ ソ ース名 と フ ァ イル名
glyphmapping
オプ シ ョ ン リ ス ト
175 ページの表 10.9 に従 っ てグ リ フ マ ッ ピ ング方式を記述 し たオプ
シ ョ ン リ ス ト 。 こ の リ ソ ースは open_document( ) 内で評価 さ れ、 そ
の結果は、 open_document( ) のオプ シ ョ ン glyphmapping で指定 さ れ
たマ ッ ピ ングの後に追加 さ れます。
hostfont
キー = 値
埋め込まれていない フ ォ ン ト に対 し て用いるべき ホス ト フ ォ ン ト リ
ソ ースの名前 (キーは PDF フ ォ ン ト 名。 値は UTF-8 エ ン コ ーデ ィ ン
グによ る ホス ト フ ォ ン ト 名)
fontoutline
キー = 値
埋め込まれていない フ ォ ン ト に対 し て用いるべき TrueType フ ォ ン ト
または OpenType フ ォ ン ト のフ ォ ン ト と フ ァ イル名
searchpath
値
デー タ フ ァ イル群を含むデ ィ レ ク ト リ の相対パス または絶対パス
1. UPR 文法では等号 「=」 を名前 と 値の間に必要 と し ますが、 set_option( ) で リ ソ ース を指定する際は こ のキ ャ ラ ク タ は必
要な く 、 かつ入れてはいけません。
UPR フ ァ イル形式 PDF フ ァ イ ルは非常に簡単な構造 を 持 っ た テ キ ス ト フ ァ イ ルで あ
り 、 テ キ ス ト エデ ィ タ で書いた り 自動的に生成 さ せた り する こ と が容易にで き ます。 まず
はその文法について見てみま し ょ う :
> 1 行に書け る のは最長 255 キ ャ ラ ク タ ま でです。
> バ ッ ク ス ラ ッ シ ュ 「\」 は行末キ ャ ラ ク タ をエ ス ケープ し ます。 こ れは行を延長す る の
に使え ます。
> ピ リ オ ド 「.」 だけの行はセ ク シ ョ ンの終了を示 し ます。
> 注釈行はパーセ ン ト 「%」 で始め る こ と がで き 、 行末で終了 し ます。
> 空白は無視 さ れます。 ただ し リ ソ ース名 と フ ァ イ ル名の中の空白は無視 さ れません。
UPR フ ァ イ ルは以下の構成要素でで き てい ます :
> フ ァ イ ルを識別 さ せ る ための魔法行。 以下の形を と り ます。
PS-Resources-1.0
5.2 リ ソ ース設定 と フ ァ イル検索
69
> フ ァ イ ル内に記述 さ れ る すべての リ ソ ース カ テ ゴ リ を列挙 し たセ ク シ ョ ン。 各行に リ
ソ ース カ テ ゴ リ を 1 つずつ記述 し ます。 こ の列挙はピ リ オ ド 1 つの行に よ っ て終了 し
ます。
> フ ァ イ ル冒頭で列挙 さ れた各 リ ソ ース カ テ ゴ リ ご と にセ ク シ ョ ン 1 つずつ。各セ ク シ ョ
ン の先頭行で リ ソ ー ス カ テ ゴ リ を示 し 、 その後に、 利用可能な リ ソ ー ス を記述 し た行
を何行で も 列挙す る こ と がで き ます。 こ の列挙はピ リ オ ド 1 つの行に よ っ て終了 し ま
す。 各 リ ソ ースデー タ 行には リ ソ ー ス の名前を書 き ます (等号は ク オー ト では さ む必
要あ り )。 リ ソ ース がフ ァ イ ル名を必要 と する 場合は、 その名前を等号の後に加え る 必
要 が あ り ま す。 リ ソ ー ス 項目内 に 列挙 さ れ た フ ァ イ ル を TET が 検索す る 際 に は
searchpath (後述) が適用 さ れます。
UPR フ ァ イルの記述例
以下に UPR 設定フ ァ イ ルの記述例を示 し ます :
PS-Resources-1.0
searchpath
glyphlist
codelist
encoding
.
searchpath
/usr/local/lib/cmaps
/users/kurt/myfonts
.
glyphlist
myglyphlist=/usr/lib/sample.gl
.
codelist
mycodelist=/usr/lib/sample.cl
.
encoding
myencoding=sample.enc
.
フ ァ イル検索 と searchpath リ ソ ース カ テ ゴ リ 絶対パ スや相対パ ス だけでな く 、 パ ス指
定を一切つけずに フ ァ イ ル名を TET に与え る こ と も で き ます。 searchpath リ ソ ース カ テ
ゴ リ を用いれば、必要なデー タ フ ァ イ ル群を含むデ ィ レ ク ト リ のパ ス名を列挙指定す る こ
と がで き ます。 フ ァ イ ルを開 く 必要があ る と き 、 TET は まず与え ら れた通 り の フ ァ イ ル名
を用いて フ ァ イ ルを開 こ う と し ます。 それが失敗す る と 、 TET は searchpath リ ソ ース カ
テ ゴ リ に指定 さ れたデ ィ レ ク ト リ の中で フ ァ イ ルを開 こ う と 試み、 1 つのデ ィ レ ク ト リ で
失敗すれば次の指定デ ィ レ ク ト リ を試 し 、 成功す る ま で次々 と 試 し てい き ま す。 複数の
searchpath 項目は蓄積 さ せ る こ と が可能で、 逆順に検索 さ れます (後で設定 し たパ ス が、
前に設定 し たパ ス よ り も 先に検索 さ れます)。 こ の検索を行わせた く ない と き は、 TET 関
数で フルパ ス を指定 し ます。
Windows の場合、 TET は searchpath リ ソ ース カ テ ゴ リ を、 以下の レ ジ ス ト リ キーか ら
読んだ値で初期化 し ます :
HKLM\SOFTWARE\PDFlib\TET4\4.1\SearchPath
HKLM\SOFTWARE\PDFlib\TET4\SearchPath
HKLM\SOFTWARE\PDFlib\SearchPath
こ れ ら の レ ジ ス ト リ 項目は複数のパ ス を セ ミ コ ロ ン 「;」 で区切っ て持つ こ と がで き ます。
Windows イ ン ス ト ー ラ は こ の SearchPath レ ジ ス ト リ 項目を以下のデ ィ レ ク ト リ 名で初期化
70
5 章 : 設定
し ます(TET を カ ス タ ムのデ ィ レ ク ト リ に イ ン ス ト ール し た場合は こ れ と 同様のデ ィ レ ク
ト リ 名) :
C:\Program Files\PDFlib\TET 4.1 32bit\resource
C:\Program Files\PDFlib\TET 4.1 32bit\resource\cmap
IBM iSeries の場合、 searchpath リ ソ ース カ テ ゴ リ は以下の値で初期化 さ れます :
/PDFlib/TET/4.1/resource/cmap
/PDFlib/TET/4.1/resource/codelist
/PDFlib/TET/4.1/resource/glyphlst
/PDFlib/TET/4.1
/PDFlib/TET
/PDFlib
MVS では、 こ の searchpath 機能には対応 し てい ません。
デ フ ォ ル ト フ ァ イル検索パス Unix ・ Linux ・ Mac OS X ・ i5/iSeries シ ス テ ム の場合、 パ
ス ・デ ィ レ ク ト リ 名を何 も 指定 し な く て も い く つかのデ ィ レ ク ト リ で フ ァ イ ルが検索 さ れ
ます。 UPR フ ァ イ ル ( こ れが さ ら に検索パ ス を含む場合 も あ り ます) を検索 し て読み取 る
前に、 以下のデ ィ レ ク ト リ が検索 さ れます :
<rootpath>/PDFlib/TET/4.1/resource/cmap
<rootpath>/PDFlib/TET/4.1/resource/codelist
<rootpath>/PDFlib/TET/4.1/resource/glyphlst
<rootpath>/PDFlib/TET/4.1/resource/fonts
<rootpath>/PDFlib/TET/4.1/resource/icc
<rootpath>/PDFlib/TET/4.1
<rootpath>/PDFlib/TET
<rootpath>/PDFlib
Unix ・ Linux ・ Mac OS X の場合 <rootpath> は、 まず /usr/local で、 ついで HOME デ ィ レ ク
ト リ で置 き 換え ら れます。 i5/iSeries の場合 <rootpath> は空です。
ラ イ セ ン ス ・ リ ソ ース フ ァ イルのデ フ ォ ル ト フ ァ イル名 デフ ォ ル ト では、 下記の フ ァ
イ ル名がデフ ォ ル ト 検索パ スデ ィ レ ク ト リ 群内で検索 さ れます :
licensekeys.txt
pdflib.upr
(ライセンスファイル)
(リソースファイル)
こ の機能を利用すれば、 ラ イ セ ン ス フ ァ イ ルを、 環境変数や実行時オプシ ョ ン を何 も 設定
せずに扱 う こ と がで き ます。
UPR リ ソ ース フ ァ イルを検索
リ ソ ー ス フ ァ イ ル を 用い る 必要が あ る 場合に は、 set_
option( ) を呼び出 し てそれを指定す る こ と も で き ます し (後述) 、 ま たは UPR リ ソ ース
フ ァ イ ルで指定す る こ と も で き ます。 TET は こ の フ ァ イ ルを、 初めての リ ソ ース が要求 さ
れた時点で自動的に読み込みます。 具体的には以下の よ う に処理 さ れます :
> TETRESOURCEFILE 環境変数が定義 さ れてい る 場合、TET はその値を、読み込むべき UPR
フ ァ イ ルの名前 と し て採用 し ます。 その フ ァ イ ルが読み込めなか っ た と き は例外が発
生 し ます。
> TETRESOURCEFILE 環境変数が定義 さ れていない場合、TET は以下の名前の フ ァ イ ルを開
こ う と し ます :
5.2 リ ソ ース設定 と フ ァ イル検索
71
upr (MVSの場合。データセットが期待される)
/tet/4.1/tet.upr (iSeriesの場合)
tet.upr (Windows・Unix、その他すべてのシステムの場合)
こ の フ ァ イ ルが読み込めなか っ た と き に例外は発生 し ません。
> Windows の場合、 TET は さ ら に以下の レ ジ ス ト リ 項目を も 読 も う と し ます :
HKLM\SOFTWARE\PDFlib\TET\4.1\resourcefile
そ し て こ のキー (TET の イ ン ス ト ー ラ は こ のキーを作成 し て値 < イ ン ス ト ールデ ィ レ
ク ト リ >/tet.upr を与え ますが、 それ以外の手段で作成す る こ と も で き ます) の値を、
読み込むべ き リ ソ ー ス フ ァ イ ルの名前 と し て採用 し ます。 こ の フ ァ イ ルが読み込めな
か っ た と き は例外が発生 し ます。
> ク ラ イ ア ン ト 側で実行時に TET に強制 し て リ ソ ース フ ァ イ ルを読み込ませ る には、 次
の よ う に resourcefile オプシ ョ ン を明示的に設定 し ます :
set_option("resourcefile=/パス/です/tet.upr");
こ の呼び出 し は何回で も 繰 り 返す こ と がで き ます。 リ ソ ース項目が蓄積 さ れます。
リ ソ ース を実行時に設定 設定のために UPR フ ァ イ ルを用い る だけでな く 、set_option( )
を用いて個々の リ ソ ース を直接設定す る こ と も 可能です。 こ の関数は、 リ ソ ース カ テ ゴ リ
名 と 、 対応す る リ ソ ース名 ・ 値の対 (複数可) と を、 UPR リ ソ ース フ ァ イ ル内のそのカ テ
ゴ リ のセ ク シ ョ ンに書 く の と 同 じ 形で受け入れます。 た と えば :
set_option("glyphlist={myglyphnames=/usr/local/glyphnames.gl}");
1つのオプシ ョ ン リ ス ト の中で、1つの リ ソ ース カ テ ゴ リ オプシ ョ ンに対す る 複数の リ ソ ー
ス名を設定す る こ と も 可能です (ただ し set_option( ) への 1 度の呼び出 し の中で、 同 じ リ
ソ ース カ テ ゴ リ オプシ ョ ン を複数回繰 り 返す こ と はで き ません) 。 あ る いは、 複数回呼び
出 し て リ ソ ース設定を蓄積 さ せ る こ と も で き ます。
テキス ト フ ァ イルでのエ ス ケープ シーケ ン ス エ ス ケープシーケ ン ス は、 UPR フ ァ イ ル
と CMap フ ァ イ ル以外のすべてのテ キ ス ト フ ァ イ ル内で使用で き ます。特殊な キ ャ ラ ク タ
シーケ ン ス を用い る と 、テ キ ス ト フ ァ イ ル内に印字不能キ ャ ラ ク タ を含め る こ と がで き ま
す。 すべてのシーケ ン ス はバ ッ ク ス ラ ッ シ ュ 「\」 キ ャ ラ ク タ で始ま り ます :
> \x は 2 桁の 16 進数 (0 ~ 9、 A ~ F、 a ~ f) を開始 し ます。 例 : \x0D
> \nnn は 3 桁の 8 進数 (0 ~ 7) を表 し ます。例:\015。シーケ ン ス \000 は無視 さ れます。
> シーケ ン ス \\ は 1 個のバ ッ ク ス ラ ッ シ ュ を表 し ます。
> 行末のバ ッ ク ス ラ ッ シ ュ は行末キ ャ ラ ク タ を キ ャ ン セル し ます。
72
5 章 : 設定
5.3 代表的シ ナ リ オのための推奨方策
TET には さ ま ざ ま なオプシ ョ ンがあ り 、 それ ら を活用する こ と で、 操作の さ ま ざ ま な面を
制御す る こ と が可能です。 こ の項では、 TET の典型的な応用シナ リ オについて、 い く つか
の推奨方策を示 し ます。 以下でふれ る 関数やオプシ ョ ンについて詳 し く は、 151 ページの
10 章 「TET ラ イ ブ ラ リ API リ フ ァ レ ン ス」 を参照 し て下 さ い。
速度 を最適化 場合に よ っ ては、 と く に検索エン ジ ンのために PDF を イ ンデ ッ ク スす る
際には、 テ キ ス ト 抽出の速度が最重要であ り 、 最適出力を得 る こ と よ り も 優先 さ れ ます。
TET のデフ ォ ル ト 設定は、 可能なかぎ り 最良の出力が得 ら れ る よ う に選択 さ れてい ます
が、 処理を速め る よ う に調整す る こ と も 可能です。 open_page( ) でオプシ ョ ン を選ぶ こ と
に よ り テ キ ス ト 抽出の スループ ッ ト を最大化す る 方法をい く つか挙げます :
> docstyle=searchengine
検索エ ン ジ ンのための イ ンデ ッ ク ス処理に影響を及ぼ さ ないや り 方で出力品質を落 と
す こ と に よ っ て動作を高速化す る よ う にい く つかの内部パ ラ メ タ が設定 さ れます。
> skipengines={image}
画像抽出が必要ない場合、 動作を高速化す る ために内部の画像処理を ス キ ッ プで き ま
す。
> contentanalysis={merge=0}
こ れは、 時間のかか る ス ト リ ッ プ と 区域の結合 ス テ ッ プ を無効にす る も ので、 代表的
な フ ァ イ ルに対す る 処理時間をデフ ォ ル ト 設定の 60% 程度に低減 し ます。 ただ し 、 内
容がページ上に任意の順序でば ら ま かれてい る よ う な文書では、 テ キ ス ト が論理順に
抽出 さ れな く な る と こ ろがあ る か も し れません。
> contentanalysis={dehyphenate=false}
こ れは、 ハ イ フ ン分割 さ れてい る 単語の再結合を無効に し ます。 ハ イ フ ン除去が必要
でない場合であれば、 こ のオプシ ョ ンで処理時間を若干短縮で き る 場合があ り ます。
> contentanalysis={shadowdetect=false}
こ れは、 冗長な影付 き ・ 擬似太字テ キ ス ト の検出を無効に し ます。 こ れに よ っ て も 、 処
理時間を短縮で き る 場合があ り ます。
単語か行 レ イ ア ウ ト か折 り 返 し 可能テキス ト か 以下の よ う に、 応用の種類に よ っ て、
望ま し い出力の種類は異な り ます (ハ イ フ ネーシ ョ ン さ れた単語はつねに こ れ ら の設定で
ハ イ フ ン除去 さ れます) :
> 個々の単語 (レ イ ア ウ ト 無視) : 検索エン ジ ンでは、 レ イ ア ウ ト が ら みの事柄は関心の
対象 と はな ら ず、 テ キ ス ト の中の単語だけが関心の対象にな り ます。 こ の よ う な場合
には、 open_page( ) で granularity=word を用いて、 get_text( ) を 1 回呼び出すご と に 1
個の単語が抽出 さ れ る よ う に し ます。
> 行レ イ ア ウ ト を温存:get_text( ) を 1回呼び出すご と に1つのページ全体のテ キ ス ト 内容
が抽出 さ れ る よ う にす る には、 open_page( ) で granularity=page を用い ます。 テ キ ス ト
の行 と 行の間はそれぞれ、 ラ イ ン フ ィ ー ド キ ャ ラ ク タ で区切 ら れ る ので、 既存の行構
造が保持 さ れます。
> 折 り 返 し 可能テ キ ス ト : 改行を避け、 抽出 さ れた テ キ ス ト の折 り 返 し を実現す る ため
には、 open_page( ) で contentanalysis={lineseparator=U+0020} と granularity=page を
用い ます。 get_text( ) を一回呼び出せばページ内容全体が取得で き ます。 区域ど う し は
ラ イ ン フ ィ ー ド キ ャ ラ ク タ で区切 ら れ、 区域内の行ど う し の間には空白キ ャ ラ ク タ が
挿入 さ れます。
5.3 代表的シナ リ オのための推奨方策
73
検索エ ン ジ ンや イ ン デ ク サ を書 く イ ンデ ク サは通常、 テ キ ス ト のページ上におけ る 位
置には関心を持っ てい ません (検索 さ れた用語をハ イ ラ イ ト 表示 さ せたい場合を除 き ) 。
多 く の場合、 イ ンデ ク サは Unicode マ ッ ピ ン グにおいて起 こ る エ ラ ーを許容 し 、 得 ら れ る
テ キ ス ト 内容すべて を処理 し ます。 推奨方策 :
> open_page( ) で granularity=word を用い ます。
> 句読点を処理す る 方法を アプ リ ケーシ ョ ン が知っ てい る 場合には、 ページオプシ ョ ン
contentanalysis={punctuationbreaks=false} を設定すれば、句読点を隣接テ キ ス ト と 一緒
に し てお く こ と がで き ます。
位置情報 応用の種類に よ っ ては、 位置情報に関す る 機能が有用で し ょ う :
> get_char_info( ) イ ン タ フ ェース が必要にな る のは、 テ キ ス ト のページ上におけ る 位置
や、 それぞれの フ ォ ン ト 名や、 その他詳細情報を必要 と す る 場合だけです。 テ キ ス ト
の座標に関心がない場合には、 get_text( ) を呼び出せば充分です。
> ページの レ イ ア ウ ト に関 し て事前情報があ る 場合は、 open_page( ) で includebox オプ
シ ョ ンや excludebox オプシ ョ ン を用いて、 ヘ ッ ダ ・ フ ッ タ やその他本文テ キ ス ト には
含まれない部位を除外す る こ と がで き ます。
未知のキ ャ ラ ク タ TET は、 1 つない し 複数のキ ャ ラ ク タ に対す る 正 し い Unicode マ ッ ピ
ン グ を決定で き ない と き には、 それを Unicode 置き 換え キ ャ ラ ク タ U+FFFD で表 し ます。
自分のアプ リ ケーシ ョ ン が こ う し た マ ッ プ不能キ ャ ラ ク タ について関心を持た ない場合
は、 こ のキ ャ ラ ク タ が現れて も 単にすべて捨てて し ま えば済む こ と です。 アプ リ ケーシ ョ
ンがそれ よ り 精巧な結果を求め る 場合は、 対応す る フ ォ ン ト を考慮に入れ る こ と がで き 、
それを用いてマ ッ プ不能キ ャ ラ ク タ の処理方法を決め る こ と も で き る で し ょ う 。すべての
マ ッ プ不能キ ャ ラ ク タ を ク エ ス チ ョ ン マー ク へ置 き 換え る には下記の文書オプシ ョ ン を
用い ます :
unknownchar=?
すべてのマ ッ プ不能キ ャ ラ ク タ を出力か ら 除 く には下記の文書オプシ ョ ン を用い ます :
fold={{[:Private_Use:] remove} {[U+FFFD] remove} default}
複雑な レ イ アウ ト あ る 種の文書は、 非常に凝っ たページ レ イ ア ウ ト を用い る こ と が よ
く あ り ます。 た と えば雑誌な ど では、 TET はページ上の段組みど う し の関係を正 し く 決め
る こ と がで き ない場合が あ り ま す。 こ の よ う な場合には、 処理時間を かけ る こ と に よ っ
て、 抽出 さ れ る テ キ ス ト を向上 さ せ る こ と が可能です。 こ の目的に適 し たオプシ ョ ンは、
96 ページの 6.6 「レ イ ア ウ ト 分析」 に ま と めて あ り ます。 関連す る オプシ ョ ンについて詳
し く は、 183 ページの表 10.12 を参照 し て く だ さ い。
法律文書 法律文書を扱 う 際には通常、Unicode マ ッ ピ ン グの誤 り は一切許容 さ れません。
それに よ っ て文書の内容や解釈が変わっ て し ま う 危険があ る ためです。多 く の場合テ キ ス
ト の位置は必要ではな く 、 テ キ ス ト は単語ご と に抽出 さ れ る 必要があ り ます。 推奨方策 :
> open_page( ) で granularity=word オプシ ョ ン を用い ます。
> 開 く た め に パ ス ワ ー ド を 必 要 と す る 文 書 を 処 理 す る 必 要 が あ る と き は、 open_
document( ) で password オプシ ョ ン を用いて正 し い文書パ ス ワー ド を指定 し ます。 あ
る いは、 内容抽出が権限設定で許可 さ れていない と き は、 その文書か ら テ キ ス ト を抽
出す る 合法的立場に自分があ る な ら ば、 shrug オプシ ョ ン を用い ます (68 ページの 「暗
号化文書に対す る 「シ ュ ラ ッ グ」 機能」 を参照)。
74
5 章 : 設定
> テ キ ス ト の厳密 さ を正確に保つには : get_char_info( )
が返すキ ャ ラ ク タ 情報構造の
フ ィ ール ド が 1 であ っ た と き 、ま たは get_text( ) が返す文字列の中に Unicode 置 き 換え
キ ャ ラ ク タ が入っ ていた と き には、 ただちに処理を停止 さ せます。
テ キ ス ト モー ド glyph ま たは wordplus に よ る TETML 内では、 こ の状況は Glyph 要素
の下記の属性で特定で き ます :
unknown="true"
unknownchar オプ シ ョ ン を よ く あ る キ ャ ラ ク タ に設定 し な い よ う に し ま す。 正 し く
マ ッ プ さ れた キ ャ ラ ク タ と の区別が、 unknown フ ィ ール ド を調べないかぎ り で き な く
な っ て し ま う ためです。
> テ キ ス ト の厳密 さ を保つ も う 一つの方策 と し ては、 ページ上に表示 さ れていないテ キ
ス ト についてはテ キ ス ト 抽出を無効化す る と よ いで し ょ う :
ignoreinvisibletext=true
PDFlib+PDI で文書 を処理 PDFlib+PDI を用いて PDF 文書をページ ご と に処理 し てい る 場
合には、 TET を そ こ に組み合わせて分割や結合の処理を制御する こ と も で き ます。 た と え
ば、 PDF 文書をページ上の内容に従っ て分割す る こ と が可能にな り ます。 作成処理に関与
し てい る 場合には、テ キ ス ト 内にそのための適当な処理命令を持っ た区切 り ページ を挿入
す る こ と も で き ます。TET ク ッ ク ブ ッ ク には、TETで文書を分析 し てか ら それを PDFlib+PDI
で処理す る 例が含まれてい ます。
Unicode 値 を持た ない レ ガ シ PDF 文書 場合 に よ っ て は、 レ ガ シ ア プ リ ケ ー シ ョ ン に
よ っ て生成 さ れた PDF 文書を処理 し なければな ら ない こ と があ り ます。 その よ う な PDF
は、 正 し い Unicode マ ッ ピ ン グに必要な充分な情報を持たない こ と があ り え ます。 デフ ォ
ル ト 設定を用いた場合には、TET はそのテ キ ス ト 内容の一部ない し 全部抽出で き ないか も
し れません。 推奨方策 :
> ま ずは テ キ ス ト を デ フ ォ ル ト 設定で抽出 し てみて、 そ の結果 を 解析 し ま す。 正 し い
Unicode マ ッ ピ ン グに必要な充分な情報を与え ない フ ォ ン ト を見つけ ます。
> こ の フ ォ ン ト の問題を解決す る ため、 カ ス タ ム のエ ン コ ーデ ィ ン グ テーブル と グ リ フ
名 リ ス ト を書 き ます。 PDFlib FontReporter を利用 し て フ ォ ン ト を解析 し 、 Unicode マ ッ
ピ ン グ テーブルを作成 し ます。
> こ のカ ス タ ム のマ ッ ピ ン グ テーブルを設定 し て、 テ キ ス ト を ま た抽出 し てみます。 こ
の時は文書の量をは じ め よ り 多 く し てみます。 なお も マ ッ プ不能な グ リ フやフ ォ ン ト
が存在す る 場合には、 マ ッ ピ ン グ テーブルを適切に調整 し ます。
> マ ッ プ不能な フ ォ ン ト を持つ文書が大量にあ る 場合は、 必要なマ ッ ピ ン グ テーブルの
作成について PDFlib GmbH が支援で き る 場合 も あ り ます。
PDF 文書を他の形式に変換 PDF 文書のページ内容を、 で き る だけ多 く の情報を保ちな
が ら 自分のアプ リ ケーシ ョ ンに取 り 込みたい場合には、正確な キ ャ ラ ク タ メ ト リ ッ ク が必
要にな り ます。 推奨方策 :
> get_char_info( ) を用いて、正確な キ ャ ラ ク タ メ ト リ ッ ク と フ ォ ン ト 名を抽出 し ます。uv
フ ィ ール ド を用いて各キ ャ ラ ク タ の Unicode 値を抽出 し てい る 場合で も 、 char_info 構
造に内容を取 り 込むために get_text( ) を呼び出す必要があ り ます。
> open_page( )でgranularity=glyphかwordのいずれか を用い ます。自分のアプ リ ケーシ ョ
ンに合っ てい る方を選びま し ょ う 。 granularity=glyph で処理をす る と 、 テ キ ス ト の視
覚レ イ ア ウ ト と 、 TET が処理 し て生成す る 論理的テ キ ス ト と の間に齟齬が生 じ る 場合
があ り ます (た と えば、 合字グ リ フ に よ っ て生成 さ れた 2 個のキ ャ ラ ク タ は、 その合
字 と 同 じ 幅には収ま ら ないか も し れません)。
5.3 代表的シナ リ オのための推奨方策
75
カ ス タ ムエ ン コ ーデ ィ ン グの ロ ゴ を持つ企業 フ ォ ン ト 多 く の場合、 カ ス タ ム の ロ ゴ を
含んだ企業フ ォ ン ト は、 その ロ ゴに対す る Unicode マ ッ ピ ン グ情報を持っ ていないか、 あ
る いは持っ ていて も 誤っ てい ます。 こ の よ う な フ ォ ン ト が含んだ PDF 文書が大量にあ る
場合には、 正 し い Unicode 値でカ ス タ ムのマ ッ ピ ン グ テーブルを作成す る こ と を推奨 し ま
す。
まず、 その フ ォ ン ト を含んだ PDF に対する フ ォ ン ト レ ポー ト を生成 さ せ (116 ページ
の 「PDFlib FontReporter Plugin で PDF 文書を分析」 を参照)、 マ ッ プが誤っ てい る グ リ フ
を その フ ォ ン ト レ ポー ト 内で見つけ ます。その フ ォ ン ト の種類で利用で き る 設定テーブル
を選び、 それを用いて、 足 り ない Unicode マ ッ ピ ン グ を与え る こ と がで き ます。 ロ ゴ タ イ
プ フ ォ ン ト に対す る コ ー ド リ ス ト の詳 し い作成例は、 117 ページの 「 コ ー ド リ ス ト リ ソ ー
ス はあ ら ゆ る 種類の フ ォ ン ト に利用可能」 を参照。
TeX 文書 TeX 文書に よ っ て生成 さ れた PDF 文書は、 数値グ リ フ名や Type 3 フ ォ ン ト を
は じ め と す る 、他の製品がテ キ ス ト を う ま く 抽出で き ない原因 と な る 機能を含んでい る こ
と が よ く あ り ます。 TET は、 こ の よ う な文書を扱 う ための多 く の ヒ ュ ー リ ス テ ィ ッ ク と 回
避策を含んでい ます。 し か し あ る 種の TeX 文書は、 処理時間を よ り 多 く 要す る 、 デフ ォ
ル ト では無効にな っ てい る 回避策でのみ処理する こ と が可能です。下記の文書オプシ ョ ン
を用いれば、 こ う し た文書のための、 CPU 消費の よ り 多い フ ォ ン ト 処理を有効にす る こ
と がで き ます :
checkglyphlists=true
76
5 章 : 設定
6 テキス ト 抽出
6.1 PDF の さ ま ざ ま な文書領域
PDF 文書は、 ページ内容だけではな く 、 それ以外の多 く の場所にテ キ ス ト を含んでい る 可
能性があ り ます。 たいていのアプ リ ケーシ ョ ンはページ内容のみを扱い ますが、 他の文書
領域が必要な状況 も 多 く あ り ます。
ページ内容は、 最 も 活躍す る 関数 get_text( ) と get_image( ) で取得す る こ と がで き 、 一
方、他の文書領域か ら テ キ ス ト を取得す る には内蔵の pCOS イ ン タ フ ェース が主要な役割
を務め ます。
こ の節では以下、 TET ラ イ ブ ラ リ と TETML での領域検索について情報を提供 し ます。
あわせて、こ れ ら の文書領域を Acrobat 8/9/Xで検索す る 方法 も ま と め ます。こ れはAcrobat
で検索 ヒ ッ ト を見つけ る ために重要です。
ページ上のテキス ト ページ内容は PDF 内の主要なテ キ ス ト です。 ページ上のテ キ ス ト
はフ ォ ン ト で視覚表現 さ れ、PDF 内で利用可能な多様なエン コ ーデ ィ ン グ技法の一つを用
いて符号化 さ れてい ます。
> Acrobat 8/9/X での表示方法 : ページ内容はつねに表示 さ れてい ます。
> Acrobat 8/9/X で一個の PDF を検索す る 方法 : 「編集」 → 「検索」 ま たは 「編集」 → 「高
度な検索」。 Acrobat がグ リ フ を Unicode 値へ正 し く マ ッ プで き ない文書内のテ キ ス ト
を、 TET は処理で き る 可能性があ り ます。 こ の よ う な状況では、 TET をベース に し た
TET Plugin を利用す る こ と がで き ます (51 ページの 4.1 「Adobe Acrobat 用無償 TET
Plugin」 を参照)。 TET Plugin は、 その自前の検索ダ イ ア ロ グ を 「Plug-Ins」 → 「PDFlib
TET Plugin...」 → 「TET Find」 で提供 し ます。 ただ し こ れは、 完全な検索機能を提供す る
よ う には意図 さ れてい ません。
> Acrobat 8/9/X で複数の PDF を検索す る 方法 : 「編集」 → 「検索」 ま たは 「編集」 → 「高
度な検索」 の後、 「検索する場所を指定 し て く だ さ い。 」 の中で 「以下の場所にあるす
べての PDF 文書」 を選択 し 、 PDF 文書群が入っ てい る フ ォ ルダへブ ラ ウ ズ。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : extractor ミ ニサンプル
> TETML 要素 : /TET/Document/Pages/Page
定義済み文書情報項目 固有の文書情報項目はキー / 値対です。
> Acrobat 8/9/X での表示方法 : 「 フ ァ イル」 → 「プ ロパテ ィ ...」
> Acrobat 8/9/X で一個の PDF を検索す る 方法 : な し
> Acrobat 8/9/X で複数の PDF を検索す る 方法 : 「編集」 → 「検索」 ま たは 「編集」 → 「高
度な検索」 の後、 ダ イ ア ロ グの下端近 く の 「高度な検索オプ シ ョ ン を使用」 を ク リ ッ
ク 。 「検索する場所 : 」 プルダ ウ ンで PDF 文書群の フ ォ ルダ を選択 し 、 プルダ ウ ン メ
ニ ュ ー 「その他の条件」 で 「作成日」 「更新日」 「作成者」 「 タ イ ト ル」 「サブ タ イ ト ル」
「キーワー ド 」 のいずれか を選択。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : dumper ミ ニサンプル
> TETML 要素 : /TET/Document/DocInfo
カ ス タ ム文書情報項目
き ます。
標準項目に加え て、 カ ス タ ム文書情報項目を定義す る こ と も で
6.1 PDF の さ ま ざ ま な文書領域
77
図 6.1
Acrobat の高度な
検索ダ イ ア ロ グ
> Acrobat 8/9/X での表示方法 : 「 フ ァ イル」 → 「プ ロパテ ィ ...」 → 「カ ス タ ム」 (無償の
Acrobat Reader では利用で き ません)
> Acrobat 8/9/X での検索方法 : な し
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : dumper ミ ニサンプル
> TETML 要素 : /TET/Document/DocInfo/Custom
文書 レ ベルの XMP メ タ デー タ XMP メ タ デー タ は、拡張 さ れた メ タ デー タ を内容 と し て
持つ XML ス ト リ ームか ら 成 り ます。
> Acrobat 8/9/X での表示方法 : 「フ ァ イル」 → 「プ ロパテ ィ ...」 → 「その他の メ タ デー タ
...」 (無償の Acrobat Reader では利用で き ません)
> Acrobat 8/9/X で一個の PDF を検索す る 方法 : な し
> Acrobat 8/9/X で複数の PDF を検索す る 方法 : 「編集」 → 「検索」 ま たは 「編集」 → 「高
度な検索」 の後、 「高度な検索オプ シ ョ ン を使用」 を ク リ ッ ク 。 「検索する場所 : 」 プ
ルダ ウ ン で PDF 文書群の フ ォ ルダ を選択 し 、 プルダ ウ ン メ ニ ュ ー 「その他の条件」 で
「XMP メ タ デー タ 」 を選択 (無償の Acrobat Reader では利用で き ません)。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : dumper ミ ニサンプル
> TETML 要素 : /TET/Document/Metadata
78
6 章 : テキス ト 抽出
画像 レ ベルの XMP メ タ デー タ XMP メ タ デー タ は、 画像 ・ ページ ・ フ ォ ン ト と いっ た文
書構成要素に も 付け る こ と が可能です。 し か し 、 XMP が通常見つか る のは画像レベルに
おいてのみです (文書レベルに加え て)。
> Acrobat 8/9 での表示方法 : 「ツール」 → 「高度な編集」 → 「TouchUp オブ ジ ェ ク ト ツー
ル」 →画像を選択→右 ク リ ッ ク → 「 メ タ デー タ を表示 ...」 (無償の Acrobat Reader では
利用で き ません)
> Acrobat X での表示方法 : 「ツール」 → 「コ ン テ ン ツ」 → 「オブ ジ ェ ク ト を編集」 →画像
を選択→右 ク リ ッ ク → 「 メ タ デー タ を表示 ...」 (無償の Acrobat Reader では利用で き ま
せん)
> Acrobat 8/9/X での検索方法 : な し
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : pCOS ク ッ ク ブ ッ ク の ト ピ ッ ク image_metadata
> TETML 要素 : /TET/Document/Pages/Resources/Images/Image/Metadata
フ ォ ーム フ ィ ール ド 内のテキス ト フ ォ ーム フ ィ ール ド はページにかぶ さ っ て表示 さ れ
ます。 し か し 、 技術的には こ れはページ内容の一部分ではな く 、 別途のデー タ 構造に よ っ
て表現 さ れます。
> Acrobat 8 での表示方法 : 「表示」 → 「ナビゲーシ ョ ンパネル」 → 「フ ィ ール ド 」
> Acrobat 9 での表示方法 : 「 フ ォ ーム」 → 「フ ィ ール ド を追加または編集 ...」
> Acrobat X での表示方法 : 「ツール」 → 「フ ォ ーム」 → 「編集」 (無償の Acrobat Reader で
は利用で き ません)
> Acrobat 8/9/X での検索方法 : な し
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : pCOS ク ッ ク ブ ッ ク の ト ピ ッ ク fields
> TETML 要素 : な し
注釈内のテキス ト フ ォ ーム フ ィ ール ド と 同様、 注釈 ( ノ ー ト ・ テ キ ス ト 注釈等) は別
個のデー タ 構造に よ っ て表現 さ れます。注釈の興味対象 と な る テ キ ス ト 内容はその種類に
よ っ て異な り ます。た と えば、Web リ ン ク の場合はその興味対象 と な る 部分は URL で し ょ
う し 、 それ以外の種類の注釈では印字 さ れ る テ キ ス ト 内容が意味を持つで し ょ う 。
> Acrobat 8/9 での表示方法 : 「表示」 → 「ナビゲーシ ョ ンパネル」 → 「注釈」
> Acrobat X での表示方法 : 「注釈」 → 「注釈の リ ス ト 」
> Acrobat 8/9/X で一個の PDF を検索す る 方法 : 「編集」 → 「検索」 →ボ ッ ク ス 「注釈を含
める」 をチ ェ ッ ク 、 ま たは注釈の リ ス ト ツールバーで 「検索」 ボ タ ン を ク リ ッ ク
> Acrobat 8/9/X で複数の PDF を検索す る 方法 : 「編集」 → 「検索」 ま たは 「編集」 → 「高
度な検索」 の後、 「高度な検索オ プ シ ョ ン を使用」 を ク リ ッ ク 。 「検索する場所 : 」 プ
ルダ ウ ンで PDF 文書群の フ ォ ルダ を選択 し 、 プルダ ウ ン メ ニ ュ ー 「その他の条件」 で
「注釈」 を選択。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : pCOS ク ッ ク ブ ッ ク の ト ピ ッ ク annotations
> TETML 要素 : な し
し お り 内のテキス ト し お り は直接にはページ と 結びついてい ま せんが、 特定のページ
へ飛ぶア ク シ ョ ン を内容 と し て持つ場合があ り ます。 し お り は階層構造を形成す る よ う に
入れ子にす る こ と も 可能です。
> Acrobat 8/9 での表示方法 : 「表示」 → 「ナビゲーシ ョ ンパネル」 → 「 し お り 」
> Acrobat X での表示方法 : 「表示」 → 「表示切 り 替え」 → 「ナビゲーシ ョ ンパネル」 →
「し お り」
> Acrobat 8/9/X で一個の PDF を検索す る 方法 : 「編集」 → 「検索」 ま たは 「編集」 → 「高
度な検索」 の後、 ボ ッ ク ス 「 し お り を含める」 をチ ェ ッ ク
6.1 PDF の さ ま ざ ま な文書領域
79
> Acrobat 8/9/X で複数の PDF を検索す る 方法 : 「編集」 → 「検索」 ま たは 「編集」 → 「高
度な検索」 の後、 「高度な検索オプ シ ョ ン を使用」 を ク リ ッ ク 。 「検索する場所 : 」 プ
ルダ ウ ン で PDF 文書群の フ ォ ルダ を選択 し 、 プルダ ウ ン メ ニ ュ ー 「その他の条件」 で
「 し お り 」 を選択 (無償の Acrobat Reader では利用で き ません)
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : pCOS ク ッ ク ブ ッ ク の ト ピ ッ ク bookmarks
> TETML 要素 : な し
フ ァ イル添付 PDF 文書はフ ァ イ ル添付を含む こ と も で き (文書レベルかページ レベル
で)、 その フ ァ イ ル添付自体が PDF 文書であ る こ と も 可能です。
> Acrobat 8/9 での表示方法 : 「表示」 → 「ナビゲーシ ョ ンパネル」 → 「添付フ ァ イル」
> Acrobat X での表示方法 : 「表示」 → 「表示切 り 替え」 → 「ナビゲーシ ョ ンパネル」 →
「添付 フ ァ イル」
> Acrobat 8/9/X での検索方法 : 「編集」 → 「検索」 ま たは 「編集」 → 「高度な検索」 の
後、 ボ ッ ク ス 「添付 フ ァ イルを含める」 をチ ェ ッ ク (無償の Acrobat Reader では利用
で き ません)。 入れ子にな っ た添付は再帰的に検索 さ れません。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : get_attachments ミ ニサンプル
> TETML 要素 : /TET/Document/Attachments/Attachment/Document
PDF パ ッ ケージ ・ ポー ト フ ォ リ オ Acrobat 8 では、 PDF パ ッ ケージ と い う 概念が導入 さ
れま し た。 こ れはフ ァ イ ル添付に追加のプ ロ パテ ィ を与え た も のです。 Acrobat 9 では こ
の概念を拡張 し て、 PDF ポー ト フ ォ リ オが導入 さ れま し た。
> Acrobat 8/9/X での表示方法:Acrobat は、PDF パ ッ ケージ専用のユーザ イ ン タ フ ェース
で、 パ ッ ケージ / ポー ト フ ォ リ オの表紙 と 中身の PDF 文書群を表現 し ます。
> Acrobat 8/9 で一個の PDF パ ッ ケージ を検索する 方法 : 「編集」 → 「検索」 → 「検索する
場所 : 」 プルダ ウ ン で 「PDF パ ッ ケージ全体」 を選択
> Acrobat X で一個の PDF パ ッ ケージ を検索す る 方法:「編集」 → 「ポー ト フ ォ リ オ全体を
検索」
> Acrobat 8/9/X で複数の PDF パ ッ ケージ を検索す る 方法 : な し
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : get_attachments ミ ニサンプル
> TETML 要素 : /TET/Document/Attachments/Attachment/Document
PDF の各種規格 と その他各種 PDF プ ロパテ ィ こ の領域は明示的に テ キ ス ト を 含ん で
はお ら ず、 PDF/X ・ PDF/A ス テー タ ス、 タ グ付 き PDF ス テー タ ス と いっ た、 PDF 文書の
さ ま ざ ま な固有プ ロ パテ ィ を集めた コ ン テナ と し て用い ら れます。
> Acrobat 8 での表示方法 : な し
> Acrobat 9:「表示」→「ナビゲーシ ョ ンパネル」→「規格」(規格準拠 PDF でのみ現れます)
> Acrobat X : 「表示」 → 「表示切 り 替え」 → 「ナビゲーシ ョ ンパネル」 → 「規格」 (規格
準拠 PDF でのみ現れます)
> Acrobat 8/9/X での検索方法 : な し
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : dumper ミ ニサンプル
> TETML 要素 ・ 属性 : /TET/Document/@pdfa ・ /TET/Document/@pdfe ・
/TET/Document/@pdfua ・ /TET/Document/@pdfvt ・ /TET/Document/@pdfx
80
6 章 : テキス ト 抽出
6.2 ページ と テキス ト の視覚情報
デ フ ォ ル ト 座標系 デフ ォ ル ト では TET は、ページ と テ キ ス ト のすべての視覚情報を PDF
の標準座標系で表 し ま す。 た だ し 、 座標系の原点 (ページ の外に あ る 場合 も あ る ) は、
ページの表示可能領域の左下隅に一致 さ せます。 正確には、 CropBox が存在す る と き はそ
の左下隅、 そ う でない と き は MediaBox の左下隅が原点にな り ます。 ページが Rotate キー
を持つ場合はページ回転が行われます。 こ の座標系は DTP ポ イ ン ト を単位 と し て用い ま
す。
1 pt = 1 inch / 72 = 25.4 mm / 72 = 0.3528 mm
第 1 座標は右へ増加 し 、 第 2 座標は上へ増加 し ます。 TET に与え る 座標はすべて こ の座標
系で表 し た も のでなければな り ません し 、TET が返す座標 も すべて こ の座標系で表 さ れた
も のにな り ます。PDF 文書内でその座標が実際ど の よ う に表 さ れてい る かは関係あ り ませ
ん。PDF のページサ イ ズ を得 る 方法については pCOS パ ス リ フ ァ レ ン ス を参照 し て く だ さ
い。
下向 き座標系 PDF の上向 き 座標系 と は異な り 、 グ ラ フ ィ ッ ク 環境に よ っ ては上向 き 座
標系を用いてい る も のがあ り ます。 開発者に よ っ ては こ の方を好む場合があ り ます。 下向
き 座標系の利用を実現す る ため、 TET では代替座標系を使 う こ と がで き ます。 こ の代替座
標系では、 すべての関連す る 座標はページの左下隅ではな く 左上隅に対 し て解釈 さ れ、 y
座標は下向 き に増加 し ます。 こ の下向き機能は、 TET のユーザが下向 き 座標系を ご く 自然
に扱え る よ う にす る ために設計 さ れてい ます。 追加の利点 と し て、 下向 き 座標は Acrobat
で表示 さ れ る 座標値 と 等 し く な り ます (後述) 。 ページで下向 き 座標を有効にす る には、
topdown ページオプシ ョ ン を用い ます。
Acrobat で座標 を表示 Acrobatでページ座標を表示す る には以下の よ う に操作 し ます(図
6.2 参照) :
> カー ソ ル座標を表示す る には、 Acrobat X では 「表示」 → 「表示切 り 替え」 → 「カ ー ソ
ル座標」 (Acrobat 9 : 「表示」 → 「カ ー ソル座標」。 Acrobat 8 : 「表示」 → 「ナビゲーシ ョ
ン タ ブ」 → 「情報」) を用い ます。
> 座標は、Acrobat で現在選択 さ れてい る 単位で表示 さ れます。Acrobat 8/9/X で表示単位
を ポ イ ン ト に変更す る (TET で用い ら れてい る の と 同様に) には、 次の よ う に操作 し
ます : 「編集」 → 「環境設定」 (→ 「一般 ...」) → 「単位 と ガ イ ド 」 → 「単位」 へ行 き 、
「ポ イ ン ト 」 を選択。
こ の表示 さ れてい る 座標はページの左上隅を原点 と し てお り 、 左下隅を原点に持つ PDF ・
TET のデフ ォ ル ト 座標系 と は異な る こ と に留意 し て く だ さ い。 Acrobat の座標系 と 揃 う 下
向 き 座標系を選ぶための方法については前項を参照 し て く だ さ い。
テキス ト 抽出の領域 デフ ォ ル ト では TET は、 目に見え る ページ領域のテ キ ス ト をすべ
て抽出 し ます。 open_page( ) の clippingarea オプシ ョ ン (179 ページの表 10.10 を参照) を
用い る と 、 こ れを任意の PDF ページ枠項目 (TrimBox 等) へ変更す る こ と がで き ます。
キーワー ド unlimited を用い る と 、 いかな る ページ枠に も かかわ り な く すべてのテ キ ス ト
を抽出す る こ と がで き ます。 デフ ォ ル ト 値 cropbox は、 Acrobat で目に見え る 領域内のテ
キ ス ト を抽出す る よ う TET に指示 し ます。
6.2 ページ と テキス ト の視覚情報
81
図 6.2
Acrobat の座標表示を設定。 カ ー ソル座標を表示するには「表示」→「カーソル座標」を用います。
テ キ ス ト 抽出の領域は も っ と 細か く 、任意の数の矩形領域を open_page( )のincludebox・
excludebox オプシ ョ ン で与え る こ と に よ っ て指定す る こ と も で き ま す。 こ れは部分的な
ページ内容 (選んだ段組等) を抽出 し た り 、 あ る いは必要ない部分 (余白 ・ ヘ ッ ダ ・ フ ッ
タ 等) を除いた り す る ために有用です。 最終的な切 り 抜き 領域は、 includebox オプシ ョ ン
で指定 さ れたすべての矩形の和を算出 し 、 そ こ か ら excludebox オプシ ョ ンで指定 さ れた
すべての矩形の和を除外す る こ と に よ っ て構築 さ れます。 キ ャ ラ ク タ は、 その参照点が切
り 抜 き 領域の中にあ る と き 、 その切 り 抜 き 領域内に あ る と 判定 さ れ ま す。 こ れはすなわ
ち、キ ャ ラ ク タ の一部が切 り 抜 き 領域の外に出ていて も それがその切 り 抜 き 領域内にあ る
と 判定 さ れ る 場合があ り 、 ま たその逆の場合 も あ る こ と を意味 し ます。
グ リ フ メ ト リ ッ ク get_char_info( ) を用い る と 、任意のグ リ フ に対 し て返 さ れた キ ャ ラ ク
タ 群の フ ォ ン ト 情報や メ ト リ ッ ク 情報を取得する こ と がで き ます。出力内の各キ ャ ラ ク タ
に対 し て、 それぞれ以下の値が得 ら れます (図 6.3 と 189 ページの表 10.15 を参照) :
> uv フ ィ ール ド は、情報取得対象のキ ャ ラ ク タ (カ レ ン ト キ ャ ラ ク タ )の UTF-32 Unicode
値を持ち ます。 こ の フ ィ ール ド はつねに UTF-32 を持ち ます。 ネ イ テ ィ ブな Unicode 文
字列内で UTF-16 文字列 し か扱え ない言語バ イ ンデ ィ ン グにおいて も 同様です。 こ の
uv フ ィ ール ド を利用す る と 、BMP 領域外のキ ャ ラ ク タ を アプ リ ケーシ ョ ンで取 り 扱い
たい と き に、 サ ロ ゲー ト ペア を解釈す る 必要な し に取 り 扱え る よ う にな り ます。 サ ロ
ゲー ト ペアは 2 個の別々のキ ャ ラ ク タ と し て報告 さ れ る ので、 1 つ目の値の uv フ ィ ー
82
6 章 : テキス ト 抽出
width
(x, y)
beta
e
tsiz
fon
e
elin
bas
(x, y)
fontsize
th
wid
alpha
図 6.3
横書き と 縦書き におけるグ リ フ メ ト リ ッ ク
ル ド が実際の Unicode 値 (U+FFFF を超え る ) を持ち、 2 つ目の値の uv フ ィ ール ド は
無形キ ャ ラ ク タ と し て扱われて uv 値 0 を持ち ます。
> type フ ィ ール ド は、 そのキ ャ ラ ク タ の種別を表 し ます。 有形キ ャ ラ ク タ と 無形キ ャ ラ
ク タ の 2 種類があ り ます。 有形キ ャ ラ ク タ に分類 さ れ る も の と し ては、 通常のキ ャ ラ
ク タ (1 つのグ リ フ ま る ご と の結果等) と 、 1 つのグ リ フ に対応す る 複数のキ ャ ラ ク タ
の列の先頭キ ャ ラ ク タ (合字の 1 文字目等) が挙げ ら れます。 無形キ ャ ラ ク タ に分類
さ れ る も の と し ては、 複数のキ ャ ラ ク タ の列の中の後続キ ャ ラ ク タ (合字の 2 文字目
等) と 、 挿入 さ れた区切 り キ ャ ラ ク タ が挙げ ら れ ます。 無形キ ャ ラ ク タ の場合、 位置
(x, y) は も っ と も 最近の有形キ ャ ラ ク タ の終了点を指 し 、 幅 width は 0 にな り 、 その他
の フ ィ ール ド は uv 以外すべて も っ と も 最近の有形キ ャ ラ ク タ と 同 じ にな り ます。 こ の
終了点は、 方向が alpha (横書 き ) の場合は (x, y) に width を加えた点にな り 、 方向が
-90° (縦書 き ) の場合は fontsize を加え た点にな り ます。
> unknown フ ィ ール ド は通常は false(C・C++ では 0)ですが、ただ し 元のグ リ フ が Unicode
にマ ッ プする こ と がで き ないために unknownchar オプシ ョ ンに よ る 指定キ ャ ラ ク タ に
置 き 換え ら れた と き は値 true (C ・ C++ では 1) を持ち ます。 こ の フ ィ ール ド を用い る
と 、 ク エ ス チ ョ ン マー ク やスペース な ど のあ り がちな キ ャ ラ ク タ を unknownchar と し
て指定 し た よ う な場合に、 実際の文書の内容 と 置 き 換え キ ャ ラ ク タ と を区別す る こ と
が可能にな り ます。
> attributes フ ィ ール ド は、TET の内容分析アルゴ リ ズ ムで決定 さ れた下付き ・上付 き ・ ド
ロ ッ プキ ャ ッ プ ・ 影付 き ス テー タ ス に関す る 情報を内容 と し て持ち ます。
> (x, y) 両フ ィ ール ド は、 そのグ リ フ の参照点の位置を指 し ます。 こ の参照点は横書 き で
はグ リ フ矩形の左下隅にな り 、 縦書 き では上端中央にな り ます (87 ページの 6.3.1 「日
中韓エン コ ーデ ィ ン グ ・ CMap」 参照)。 無形キ ャ ラ ク タ については、 ページ上に対応す
る グ リ フ がないので、 点 (x, y) は も っ と も 最近の有形キ ャ ラ ク タ の終了点を指 し ます。
y の値は topdown ページオプシ ョ ンに依存 し ます。
> width フ ィ ール ド は、 そのグ リ フ に対応す る フ ォ ン ト メ ト リ ッ ク と 文字間隔 ・ 水平倍率
等のテ キ ス ト 出力パ ラ メ タ 群 と に従っ た グ リ フ の幅を表 し ます。 こ う し たパ ラ メ タ が
次のグ リ フ の位置を制御す る ので、 隣 り 合 う 2 つのグ リ フ の参照点間の間隔は width
6.2 ページ と テキス ト の視覚情報
83
ascender
capheight
font size
baseline
descender
図 6.4 フ ォ ン ト 固有 メ ト リ ッ ク
>
>
>
>
>
と は異な る 場合があ り ます。 ゼ ロ 幅キ ャ ラ ク タ の場合 width はゼ ロ にな る こ と があ り
ます。 逆に斜体テ キ ス ト 等、 実際のア ウ ト ラ イ ンの幅がそのグ リ フ の width 値 よ り 広
く な る 場合 も あ り ます。
無形キ ャ ラ ク タ の場合 width は 0 にな り ます。
角度 alpha は、 行内のテ キ ス ト の進行方向を与え ます。 こ れは、 標準方向か ら の偏移で
表 さ れます。 こ の標準方向は横書 き では 0° にな り 、 縦書き では -90° にな り ます (縦書
き について詳 し く は後述)。 よ っ て角度 alpha は、 通常の横書 き テ キ ス ト と 通常の縦書
き テ キ ス ト に対 し ては と も に 0° にな り ます。 alpha ・ beta の値は topdown ページオプ
シ ョ ンに依存 し ます。
角度 beta は、 斜体 (擬似 イ タ リ ッ ク ) テ キ ス ト 等の、 テ キ ス ト にかかっ た傾斜を表 し
ます。 こ の角度は alpha に対す る 垂線か ら 測 ら れます。 通常の正立 し た テ キ ス ト に対
し ては 0° にな り ます (横書 き で も 縦書 き で も )。 beta の絶対値が 90° を超え る 場合、 そ
のテ キ ス ト はベース ラ イ ン を軸に反転 し て裏返っ てい る こ と にな り ます。
fontid フ ィ ール ド は、そのグ リ フ に対 し て用い ら れてい る フ ォ ン ト の pCOS ID を持ち ま
す。 こ の ID を用い る と 、 フ ォ ン ト 名 ・ 埋め込み状況 ・ 記述方向 (横書 き か縦書 き か)
と いっ た詳 し い フ ォ ン ト 情報を取得す る こ と がで き ます。 pCOS パ ス リ フ ァ レ ン ス に、
こ う し た フ ォ ン ト 情報取得のためのサンプル コ ー ド があ り ます。
fontsize フ ィ ール ド は、 テ キ ス ト のサ イ ズ を ポ イ ン ト 単位で表 し ます。 こ れは正規化 さ
れ る ので、 つねに正の値にな り ます。
textrendering フ ィ ール ド は、 描線 ・ 塗 り ・ 不可視等、 グ リ フ の レ ン ダ リ ン グの種類を
表 し ます。 こ れは PDF ページ記述について定義 さ れてい る テ キ ス ト レ ン ダ リ ン グモー
ド の数値を反映 し ます (189 ページの表 10.15 を参照)。 不可視のテ キ ス ト はデフ ォ ル
ト では抽出 さ れますが、 open_page( ) で ignoreinvisibletext オプシ ョ ン を用いればそ う
でな く す る こ と も で き ます。
フ ォ ン ト 固有 メ ト リ ッ ク TET は、 PostScript と PDF が用いてい る グ リ フ ・ フ ォ ン ト メ
ト リ ッ ク シ ス テ ム を用いてい ます。 こ こ で簡単に説明 し ま し ょ う 。
文字サ イ ズには通常、 キ ャ ラ ク タ の各部が重な り 合わないために必要な、 隣 り 合 う 行
ど う し の最小限の間隔が選ばれます。 文字サ イ ズは一般に、 フ ォ ン ト 内の個々のキ ャ ラ ク
タ よ り も 大 き く な り ます。 なぜな ら 、 文字サ イ ズはアセ ン ダ と デ ィ セ ン ダにわた る う え、
さ ら に行間の追加のア キが加わ る 場合 も あ る か ら です。
84
6 章 : テキス ト 抽出
キ ャ ッ プハイ ト は、 多 く の欧文フ ォ ン ト の T や H の よ う な大文字の高 さ です。 x ハイ
ト は、 多 く の欧文フ ォ ン ト の x の よ う な小文字の高 さ です。 アセ ン ダは、 多 く の欧文フ ォ
ン ト の f や d の よ う な小文字の高 さ です。 デ ィ セ ン ダは、 多 く の欧文フ ォ ン ト の j や p の
よ う な小文字のベース ラ イ ン か ら 下端ま での間隔です。 デ ィ セ ン ダは通常、 負の値です。
x ハイ ト ・ キ ャ ッ プハイ ト ・ アセ ン ダ ・ デ ィ セ ン ダの値は文字サ イ ズの 1000 分の 1 を単
位に測 ら れます。
こ れ ら の値はフ ォ ン ト に よ っ て異な っ てお り 、 pCOS イ ン タ フ ェース で取得で き ます。
た と えば、 以下の コ ー ド はアセ ン ダ と デ ィ セ ン ダの値を取得 し ます :
/* アセンダとディセンダの値を取得 */
path = "fonts[" + i + "]/ascender";
System.out.println("アセンダ=" + p.pcos_get_number(doc, path));
path = "fonts[" + i + "]/descender";
System.out.println("ディセンダ=" + p.pcos_get_number(doc, path));
なお、 ア セ ン ダ等の フ ォ ン ト メ ト リ ッ ク 値は、 こ の フ ォ ン ト に よ る グ リ フ に対 し て get_
char_info( ) を呼び出 し た後にのみ取得す る べ き です。 言い換えれば、 get_char_info( ) か ら
返 さ れた フ ォ ン ト ID を用い る こ と は安全ですが、 fonts[] 配列内のすべての フ ォ ン ト を評
価す る こ と は必ず し も 埋め込 ま れた フ ォ ン ト デー タ か ら の メ ト リ ッ ク 値 を与えず、 PDF
FontDescriptor 辞書か ら の不正確な値を与え る 可能性があ り ます。 詳 し く は pCOS パ ス リ
フ ァ レ ン ス を参照 し て く だ さ い。
グ リ フ と 単語の終了点 ハ イ ラ イ ト を正 し く 行 う ためには、 単語内の末尾キ ャ ラ ク タ の
末尾位置が必要にな り ます。 get_char_info( ) が返す開始点座標 x, y と width ・ alpha 値を
用いれば、 横書 き でのグ リ フ の終了点を、 すなわちそのグ リ フ のア ド バン スベ ク ト ルの終
点 (グ リ フ枠の右下隅) を決定す る こ と がで き ます :
xend = lrx = x + 幅 * cos(alpha)
yend = lry = y + 幅 * sin(alpha)
通常の横書 き テ キ ス ト (すなわち alpha=0) では、 こ れは次の形に省略で き ます :
xend = lrx = x + 幅
yend = lry = y
よ り 一般的には、 グ リ フ枠のサ イ ズ を、 その右上隅の座標を決定す る こ と に よ っ て算出で
き ます ( こ の算式は、 グ リ フ が角度 beta に よ っ て斜形化 さ れてい る 可能性を考慮に入れ
てい ません) :
urx = x + 幅 * cos(alpha) - 向き * 高さ * sin(alpha)
ury = y + 幅 * sin(alpha) + 向き * 高さ * cos(alpha)
こ こ で、 topdown=true な ら ば向き =-1、 topdown=false な ら ば向き =1 です (81 ページの
「下向 き 座標系」 参照)。 高 さ の値は文字サ イ ズ と フ ォ ン ト の幾何情報に依存 し ます。 下記
は、 広 く 用い ら れてい る 多 く の フ ォ ン ト について、 使え る 値を与え ます (アセ ン ダ値の取
得については 84 ページの 「フ ォ ン ト 固有 メ ト リ ッ ク 」 を参照) :
高さ = 文字サイズ * アセンダ / 1000
多 く のグ ラ フ ィ ッ ク 開発環境において、 グ リ フ変換は以下の よ う に表す こ と がで き ます :
6.2 ページ と テキス ト の視覚情報
85
translate(x,y);
rotate(alpha);
skew(0, -beta);
if (abs(beta) > 90)
scale(1 -1);
こ れ ら の変換を行な っ た後は、 グ リ フ枠の右上隅は以下の よ う に表す こ と がで き ます :
urx = x + 幅
ury = y + 向き * 高さ
縦書 き でのグ リ フ 計算
う に行われます :
縦書 き の日中韓テ キ ス ト については、 終了点の計算は以下の よ
xend = x
yend = y - 文字サイズ
グ リ フ枠の左上隅 と 右下隅は以下の よ う に算出で き ます :
ulx = x - 幅/2 * cos(alpha)
uly = y - 幅/2 * sin(alpha)
lrx = ulx + 幅 * cos(alpha) + 向き * 文字サイズ * sin(alpha)
lry = uly + 幅 * sin(alpha) - 向き * 文字サイズ * cos(alpha)
こ こ で、 topdown=true な ら ば向き =-1、 topdown=false な ら ば向き =1 です (81 ページの
「下向 き 座標系」 参照)。
86
6 章 : テキス ト 抽出
6.3 日本語 ・ 中国語 ・ 韓国語テキス ト
6.3.1 日中韓エ ン コ ーデ ィ ン グ ・ CMap
TET は日本語 ・ 中国語 ・ 韓国語 (日中韓) のテ キ ス ト に対応 し てお り 、 横書 き ・ 縦書 き
の、 任意の レ ガシエン コ ーデ ィ ン グ (CMap) の日中韓テ キ ス ト を Unicode に変換 し ます。
TET は Adobe のすべての日中韓キ ャ ラ ク タ 集合に対応 し てい ます :
> 日本語 : Adobe-Japan1 ~ 6
> 中国語繁体字 : Adobe-CNS1 ~ 5
> 中国語簡体字 : Adobe-GB1 ~ 5
> 韓国語 : Adobe-Korea1 ~ 2
こ れ ら の PDF CMap は、今日用い ら れてい る すべての日中韓キ ャ ラ ク タ エン コ ーデ ィ ン グ
を カバー し てい ます。 た と えば Shift-JIS ・ EUC ・ Big-5 ・ KSC 等、 多数のエン コ ーデ ィ ン
グです。 ロ ケール独自エン コ ーデ ィ ン グで符号化 さ れた日中韓フ ォ ン ト 名 (Shift-JIS で符
号化 さ れた和文フ ォ ン ト 名な ど) は、 Unicode へ正規化 さ れます。
注記 レ ガシ エ ン コ ーデ ィ ングで符号化 さ れた日中韓テキス ト を抽出するには、 TET に同梱の
CMap フ ァ イル群の場所を、 7 ページの 0.1 「 ソ フ ト ウ ェ ア を イ ン ス ト ール」 に従っ て設定
する必要があ り ます。
6.3.2 日中韓テキス ト の単語境界
日中韓テ キ ス ト の単語境界検出は ideographic ページオプシ ョ ン で制御で き ます :
> ideographic=split にす る と 、 表意文字キ ャ ラ ク タ はつねに単語境界を構成 し ます。 すな
わち、granularity=word の場合に表意文字が 1 個ずつ返 さ れます。表意文字日中韓キ ャ
ラ ク タ は単語境界 と 見な さ れ ますが、 カ タ カナキ ャ ラ ク タ は単語境界 と し て扱われ ま
せん。
> ideographic=keep にす る と 、表意文字キ ャ ラ ク タ は一般に単語境界を構成 し ません。句
読点 と 、 表意文字キ ャ ラ ク タ と 非表意文字キ ャ ラ ク タ と の間の切 り 替わ り は、 なお単
語境界を構成 し ます。 granularity=word の場合、 表意文字読点 U+3001 と 表意文字句点
U+3002 も 単語境界を構成 し ます。 granularity=page の場合、 行末に行区切 り が挿入 さ
れません。
互換上の理由か ら デフ ォ ル ト 値は ideographic=split ですが、 日中韓テ キ ス ト に対 し てはテ
キ ス ト 抽出向上のため ideographic=keep を用い る こ と を強 く 推奨 し ます。
6.3.3 縦書 き
TET は横書き に も 縦書 き に も 対応 し てお り 、それぞれについて適切な メ ト リ ッ ク 計算をす
べて行い ます。 縦書 き のテ キ ス ト を扱 う 際には以下の こ と に留意 し て下 さ い。
> グ リ フ の参照点は縦書 き の場合にはグ リ フ矩形の上端中央にあ り ます。 テ キ ス ト の位
置は下へ向か っ て進み ます。 その進行幅はフ ォ ン ト サ イ ズ と 文字間隔に よ っ て決定 さ
れ、 グ リ フ幅には依存 し ません (図 6.3 参照)。
> 角度 alpha は通常の縦書 き テ キ ス ト については 0° です。いいかえれば、縦書 き の フ ォ ン
ト で alpha=0° な ら ば下へ、 すなわち -90° の方向に向かっ て進む と い う こ と です。
> 上述の違いのため、ク ラ イ ア ン ト コ ー ド 側では下記の pCOS コ ー ド を用いて記述方向を
考慮に入れ る 必要があ り ます (テ キ ス ト が縦に並んでい る か ら と い っ て、 それが実際
には縦書 き の フ ォ ン ト を用いてい る と は限 ら ない こ と に留意 し て下 さ い) :
6.3 日本語 ・ 中国語 ・ 韓国語テキス ト
87
count = p.pcos_get_number(doc, "length:fonts");
for (i=0; i < count; i++)
{
if (p.pcos_get_number(doc, "fonts[" + id + "]/vertical"))
{
/* フォントは縦書きを用いている */
vertical = true;
}
}
> 縦書 き のテ キ ス ト と 句読点の回転済みグ リ フは、それぞれ対応す る 未回転 Unicode キ ャ
ラ ク タ へマ ッ プ さ れ ます。 回転済みキ ャ ラ ク タ を温存す る には下記の文書オプシ ョ ン
を用い ます :
decompose={vertical=_none}
> 縦書 き テ キ ス ト のテ キ ス ト 行検出は下記のページオプシ ョ ン で改善で き る こ と が多い
です :
layoutanalysis={forcelayoutanalysis=0}
6.3.4 日中韓分解 : narrow ・ wide ・ vertical 等
Unicode と 多 く の レ ガシエン コ ーデ ィ ン グでは、 全角 と 半角のキ ャ ラ ク タ と い う 概念が使
え ます (ダブルバ イ ト ・ シ ン グルバ イ ト キ ャ ラ ク タ と 呼ばれ る 時 も あ り ます) 。 デフ ォ ル
ト では TET は、 全角 ・ 半角キ ャ ラ ク タ を それぞれ対応す る 標準幅のキ ャ ラ ク タ へ置 き 換
え る Unicode 分解 wide ・ narrow を行い ます。
元の全角 ・ 半角キ ャ ラ ク タ を温存す る には、 decompose 文書オプシ ョ ン を用いてそれ
ぞれの分解を無効化 し ます :
decompose={wide=_none narrow=_none}
同様に、 small ・ square ・ vertical 分解 も 日中韓キ ャ ラ ク タ に対 し て効力を持ち ます。 こ れ
ら の分解は (wide と narrow も 含めて) デフ ォ ル ト ではすべて有効にな っ てい ますので、
キ ャ ラ ク タ はそれぞれ対応す る 標準的キ ャ ラ ク タ へ変換 さ れます。元のキ ャ ラ ク タ を温存
す る には、 それぞれの分解を無効化 し ます。 下記の文書オプシ ョ ンはすべての分解を無効
化 し ます :
decompose={none}
表 6.1 に、 日中韓分解を例 と と も に示 し ます。 分解について詳 し く は、 108 ページの 7.3.2
「Unicode 分解」 を参照 し て く だ さ い。
88
6 章 : テキス ト 抽出
表 6.1 日中韓互換分解の例 (decompose オプ シ ョ ンのサブオプ シ ョ ン)
分解名
narrow
small
square
vertical
wide
説明
対象 Unicode キ ャ ラ ク タ
半角キ ャ ラ ク タ
U+FF61 ~ U+FFDC、
U+FFE8 ~ U+FFEE
CNS 11643 互換の
ための小型字体
U+FE50 ~ U+FE6B
日中韓の組文字
U+3250、
U+32CC ~ U+32CF、
U+3300 ~ U+3357、
U+3371 ~ U+33DF、
U+337B ~ U+337F、
U+33FF、
U+1F131 ~ U+1F14E、
U+1F190、
U+1F200、
U+1F210 ~ U+1F231
縦書き字体
全角字体
U+309F、
U+30FF、
U+FE10 ~ U+FE19、
U+FE30 ~ U+FE48
U+3000、
U+FF01 ~ U+FF60、
U+FFE0 ~ U+FFE6
分解が有効の と き
(デ フ ォ ル ト )
分解が無効の と き
ዏ
ᩀ
U+30F2
U+FF66
ᤸ
U+002C
U+FE50
ኊ ዊ
ᑐ
U+30AD U+30ED
U+3314
ᤣ
^
U+FE37
U+007B
£
£
U+00A3
U+FFE1
6.3 日本語 ・ 中国語 ・ 韓国語テキス ト
89
6.4 双方向ア ラ ビ ア文字 ・ ヘ ブ ラ イ 文字テキス ト
TET は、ア ラ ビ ア文字やヘブ ラ イ 文字 と いっ た右書 き 用字系に よ る 文書か ら テ キ ス ト を正
し く 抽出す る ために、 追加の処理を行い ます。 こ う し た用字系では し ば し ば左書 き テ キ ス
ト が挿入 さ れますので (数等) 、 その よ う な文書は、 双方向であ る と いい ます。 双方向テ
キ ス ト の抽出には、 以下に説明す る 処理ス テ ッ プの一つない し 複数が関与 し ます。
6.4.1 双方向の一般的性質
右書 き ・ 双方向テキス ト を並べ替え 右書 き の並び と 左書 き の並びは、 論理的な テ キ ス
ト の正 し い並びを形成す る よ う 並べ替え る 必要があ り ます。 粒度が word 以上の場合、 下
記のページオプシ ョ ン を用い る と 、 TET はテ キ ス ト を論理順に発出 し ます ( こ れがデフ ォ
ル ト 設定です) :
contentanalysis={bidi=logical}
双方向処理は下記ページオプシ ョ ンで明示的に無効化する こ と も で き ます :
contentanalysis={bidi=visual}
ページの優勢テキス ト 向 き を決定 双方向並べ替えは、 単語内のキ ャ ラ ク タ 群 と 行内の
単語群に対 し て効力を持つばか り ではな く 、それ以外のページ レ イ ア ウ ト 認識の諸側面に
対 し て も 効力を持ち ます。 混在双方向行は場合に よ っ ては、 ページ全体が右書 き なのか左
書 き なのかを考慮に入れ る こ と な し には安心 し て並べ替えで き ない こ と も あ り ます。 こ の
決定を自動的に行 う ために、 TET はページの優勢テ キ ス ト 向 き を調べ、 そのページが主に
左書 き と 見なすべ き かそれ と も 主に右書 き と 見なすべ き かにそのアルゴ リ ズ ム を合わせ
ます。
こ の決定は bidilevel オプシ ョ ンで上書 き す る こ と も で き ます。た と えば下記のオプシ ョ
ン リ ス ト は、 テ キ ス ト の大多数が左書 き のページ上であ っ て も 右書 き 処理を強制 し ます :
contentanalysis={bidilevel=rtl}
グ リ フ 順序 get_char_info( ) と TETML 内の Glyph 要素に よ っ て返 さ れ る グ リ フ情報は、
つねに視覚的順序に従っ て、すなわち普通の水平ベース ラ イ ンについては左書 き と し て並
べ ら れます。 こ の左書 き グ リ フ順序に よ っ て、 ク ラ イ ア ン ト アプ リ ケーシ ョ ンは、 テ キ ス
ト の双方向 ス テー タ ス を調べ る 必要な し に決め打ちの順序で グ リ フ座標を受け取 る こ と
がで き ま す。 こ の動作は、 実際のテ キ ス ト 向 き は右書 き で あ る と い う 事実に も かかわ ら
ず、 ア ラ ビ ア文字やヘブ ラ イ 文字の フ ォ ン ト 内のグ リ フは概 し て、 その左辺に参照点があ
り 右へ進行 し てい る と い う 現実を反映 し てい ます。
6.4.2 ア ラ ビ ア文字テキス ト を後処理
ア ラ ビ ア文字の表示形 を正規化 し 合字 を分解 ア ラ ビ ア文字のキ ャ ラ ク タ は、 最高 4 種
類の形で存在 し てい ます。 単独形 ・ 語頭形 ・ 語中形 ・ 語尾形です。 こ れ ら の形は、 意味的
には同一のキ ャ ラ ク タ を表 し てい ますが、別々の Unicode 値を持っ てい る 場合があ り ます。
デフ ォ ル ト では TET は、 すべての表示形を、 それぞれ対応す る 正準形へ変換 し ます。 表
6.2 に示す よ う に、 decompose オプシ ョ ン を用いて表示形を温存す る こ と も で き ます (108
ページの 7.3.2 「Unicode 分解」 を参照)。
PDF 文書では各表示形は、 単独形の Unicode キ ャ ラ ク タ へマ ッ プ さ れてい る こ と も あ
れば、 表示形の う ちの一つ (た と えばその文書の ToUnicode CMap 内の) へマ ッ プ さ れて
90
6 章 : テキス ト 抽出
い る こ と も あ る ため、 た と え分解が無効化 さ れていて も 、 出力が表示形を含む こ と を TET
は保証はで き ません。
表 6.2 ア ラ ビ ア文字の表示形を decompose オプ シ ョ ン で処理
説明 と オプ シ ョ ン リ ス ト
分解前
語尾形 ・ 語頭形 ・ 単独形 ・ 語中形を分解 : decompose オプ シ ョ
ン な し (デ フ ォ ル ト ) または
decompose=none
ま たは
decompose=
{final=_all medial=_all initial=_all isolated=_all}
ᦒ
ҷ
U+FEB2
U+0633
ᦓ
ҷ
U+FEB3
U+0633
ᡤ
U+FD0E
語尾形 ・ 語頭形 ・ 単独形 ・ 語中形を温存 :
decompose=
{final=_none medial=_none initial=_none isolated=_none}
分解後 (論理順で)
ҷ
ҵ
U+0633 U+0631
ᦔ
ҷ
U+FEB4
U+0633
ᦒ
ᦒ
U+FEB2
U+FEB2
ᦓ
ᦓ
U+FEB3
U+FEB3
ᡤ
ᡤ
U+FD0E
U+FD0E
ᦔ
ᦔ
U+FEB4
U+FEB4
ア ラ ビ ア文字の タ ト ウ ィ ールキ ャ ラ ク タ を除去 タ ト ウ ィ ール キ ャ ラ ク タ U+0640 (カ
シーダ と も 呼ばれます) は、 単語を伸ば し て行を埋めつ く す よ う にす る ために頻繁に用い
ら れ ます。 タ ト ウ ィ ールはそれ自体は何のテ キ ス ト 情報 も 持ち ませんので、 通常 こ れは、
抽出 さ れ る テ キ ス ト 内では必要ではあ り ません。 表 6.3 に示す よ う に、 fold オプシ ョ ン を
用いて タ ト ウ ィ ールキ ャ ラ ク タ を温存す る こ と も で き ます (105 ページの 7.3.1 「Unicode
字形統合」 を参照)。
表 6.3 タ ト ウ ィ ールキ ャ ラ ク タ U+0640 を fold オプ シ ョ ン で処理
説明 と オプ シ ョ ン リ ス ト
字形統合前
ア ラ ビ ア文字の タ ト ウ ィ ールキ ャ ラ ク タ を除去 : fold オプ
シ ョ ン な し (デ フ ォル ト ) または fold={{[U+0640] remove}}
ま たは fold={default}
U+0640
ア ラ ビ ア文字の タ ト ウ ィ ールキ ャ ラ ク タ (デ フ ォ ル ト では除
去 さ れる) を温存 : fold={{[U+0640] preserve}}
ҿ
字形統合後
なし
ҿ
ҿ
U+0640
U+0640
6.4 双方向ア ラ ビ ア文字 ・ ヘブ ラ イ文字テキス ト
91
6.5 内容分析
PDF 文書は、 テ キ ス ト の個々のキ ャ ラ ク タ のページ上におけ る 位置のみな ら ず、 そのセマ
ン テ ィ ッ ク ス (Unicode マ ッ ピ ン グ) を も 提供 し ます。 し か し 一般に PDF 文書では、 単
語 ・ 行 ・ コ ラ ム ・ その他高次のテ キ ス ト ユニ ッ ト に関す る 情報は伝え て く れません。 ペー
ジ上のテ キ ス ト を構成す る それぞれの断片には、 個々のキ ャ ラ ク タ や音節や行、 ない し そ
れ ら の任意の混合が含まれてい る 可能性があ り ますが、明示的に単語や行や コ ラ ムの始ま
り や終わ り を示す印はそ こ には一切ついていないのです。
さ ら に悪い こ と には、 ページ上のテ キ ス ト 断片の順序は、 論理的な (読む) 順序 と は
違っ てい る 可能性があ り ます。テ キ ス ト の各部分をページ上に配置す る 際には規則な ど何
も ないのです。 た と えば 2 段組みのページの場合で も 、 その内容の生成順は まず左 コ ラ ム
の 1 行目、 次は右 コ ラ ムの 1 行目、 左 コ ラ ムの 2 行目、 右 コ ラ ムの 2 行目、 … と な っ てい
る か も し れません。 が、 論理的な順序な ら ば、 まず左 コ ラ ム内のテ キ ス ト をすべて処理 し
た後に右 コ ラ ムのテ キ ス ト を処理 し なければな ら ないわけです。 こ の よ う な文書か ら テ キ
ス ト を抽出す る 場合には、 ただ PDF ページ上の命令群を再生 し ていただけでは、 一般に
は望ま し か ら ぬ結果を も た ら し ます。 テ キ ス ト の論理構造が失われてい る か ら です。
TET の内容解析エン ジ ンは、 テ キ ス ト 断片の内容 ・ 位置 ・ 関係を解析 し て、 以下の目
標を達成 し よ う と し ます :
> キ ャ ラ ク タ 群か ら 単語を再構成 し 、単語間に区切 り キ ャ ラ ク タ を (望まれていれば) 挿
入
> 冗長テ キ ス ト を除去 (た と えば影付 き に見せ る ためだけのダブ り 等)
> 複数行に ま たがっ てハ イ フ ネーシ ョ ン さ れてい る 単語の各部を再結合
> テ キ ス ト の コ ラ ム (区域) を認識
> 区域内のテ キ ス ト 断片を ソ ー ト 。 ページ内の区域 も ソ ー ト
こ れ ら の動作について以下詳 し く 説明 し ます。 こ う し た内容処理を制御す る オプシ ョ ンに
ついて も 解説 し ます。
テキス ト の粒度 open_page( ) で granularity オプシ ョ ン を用い る と 、 get_text( ) を 1 回呼
び出すご と に返 さ れ る テ キ ス ト の量を指定する こ と がで き ます。
> granularity=glyph と 設定す る と 、各断片はそれぞれ 1 つのグ リ フ を マ ッ プ し た結果を持
ち ます。 こ れは複数のキ ャ ラ ク タ にな る こ と も あ り ます (合字の場合等)。 こ のモー ド
では内容分析は無効に さ れ、 TET は、 ページ上の元通 り のテ キ ス ト 断片を その元通 り
の順序の ま ま 返 し ま す。 こ れは最 も 速いモー ド ではあ り ま すが、 こ れが有用なのは、
TET ク ラ イ ア ン ト 側で精巧な後処理を行お う と す る と き のみです (あ る いはテ キ ス ト
の論理構造には関心がな く て位置にのみ興味があ る と き )。 なぜな ら こ のモー ド ではテ
キ ス ト がページ全体に散 ら ばっ て し ま っ てい る 可能性があ る か ら です。
> granularity=word と 設定す る と 、単語検出機能アルゴ リ ズ ムがキ ャ ラ ク タ 群を ま と めて
論理的な単語を再構成 し ます。 各断片はそれぞれ 1 つの単語を持ち ます。 孤立 し た句
読点 (カ ン マ ・ コ ロ ン ・ ク エ ス チ ョ ン マー ク ・ ク オー ト 等) はデフ ォ ル ト では独立 し
た断片 と し て返 さ れ、 連続す る 句読点キ ャ ラ ク タ は一個の単語 と し て グループ化 さ れ
ます (ピ リ オ ド キ ャ ラ ク タ を連続 さ せて点線の よ う に見せかけてい る 場合等)。ただ し 、
句読点処理は変更す る こ と も 可能です (後述の 「欧文テ キ ス ト の単語境界検出」 を参
照)。
> granularity=line と 設定す る と 、 単語検出機能に よ っ て認識 さ れた単語群を ま と めて行
を再構成 し ます。 ハ イ フ ン除去が有効の と き (デフ ォ ル ト ) は、 行末でハ イ フ ン で分
割 さ れた単語は再結合 さ れ、 そのハ イ フ ン除去 さ れた完全な単語はその行に繰 り 込ま
れます。
92
6 章 : テキス ト 抽出
> granularity=page と 設定す る と 、ページ上に含まれ る すべての単語が 1 つの断片で返 さ
れます。
複数の単語 ・ 行 ・ 区域の間には、 選択 さ れた粒度がその単位 よ り 大 き ければ、 それぞれ区
切 り キ ャ ラ ク タ が挿入 さ れます。 た と えば granularity=word の場合、 TET_get_text( ) は呼
び出 さ れ る ご と に単語を き っか り 1 つずつ返すのですか ら 、区切 り キ ャ ラ ク タ を挿入す る
必要な ど ないわけです。
区切 り キ ャ ラ ク タ を指定す る には、 open_page( ) の wordseparator ・ lineseparator オプ
シ ョ ン を用い ます (区切 り キ ャ ラ ク タ を無効にす る には U+0000 を用い ます)。 た と えば :
lineseparator==U+000A
デフ ォ ル ト では、 granularity=glyph の場合にはすべての内容分析動作が無効に さ れ、 それ
以外の粒度設定では有効に さ れます。 し か し 、 区切 り オプシ ョ ン を用いれば よ り き め細か
な制御 も 可能です (後述)。
欧文テキス ト の単語境界検出 単語検出機能は、 glyph を除 く すべての粒度モー ド で有効
に さ れ、ページ全体にでた ら めな順序で散 ら ばっ てい る か も し れない複数のグ リ フ を ま と
めて論理的な単語を再構成 し ます。欧文テ キ ス ト の単語境界は 2 つの判定基準に よ っ て認
識 さ れます :
> 精巧な アルゴ リ ズ ム がグ リ フ ど う し の位置関係を解析 し て、 キ ャ ラ ク タ のグループ を
検出 し 、 単語を再構成 し ます。 こ のアルゴ リ ズ ムは さ ま ざ ま な属性や特例を考慮 し て、
レ イ ア ウ ト が複雑な場合やページ上のテ キ ス ト 順序がば ら ば ら な場合で も 単語を正確
に認識で き る よ う 努め ます。
> スペースや句読点 ( コ ロ ン ・ カ ン マ ・ ピ リ オ ド ・ 括弧等) と い っ た あ る 種のキ ャ ラ ク
タ は、 そ の幅 ・ 位置に か か わ ら ずつねに単語境界 と 認識 さ れ ま す。 open_page( ) の
punctuationbreaks オプシ ョ ン を false に設定す る と 、単語検出機能は句読点キ ャ ラ ク タ
を単語境界 と し て扱わな く な り ます :
contentanalysis={punctuationbreaks=false}
単語境界検出の際に句読点キ ャ ラ ク タ を無視す る こ と は、 た と えば、 Web URL を扱 う 際
に有用で し ょ う 。 URL では通常、 ピ リ オ ド ・ ス ラ ッ シ ュ キ ャ ラ ク タ は語の一部 と 見な さ れ
る か ら です (図 6.5 参照)。
注記 表意文字キ ャ ラ ク タ によ る テキス ト に対する単語境界検出は動作が異な り ます。詳 し く は
87 ページの 6.3.2 「日中韓テキス ト の単語境界」 を参照 し て く だ さ い。
図 6.5
デ フ ォ ル ト 設定 punctuationbreaks=true で
は URL は各部に分解 さ れますが (上)、
punctuationbreaks=false では各部はひ と
ま と ま り のま ま保持 さ れます (下)。
6.5 内容分析
93
ハ イ フ ン除去 行末でハ イ フ ン 区
切 り さ れ た 単語 と い う も の は通
常、 抽出 し た テ キ ス ト を 論理 レ ベ
ルで処理 し た い ア プ リ ケーシ ョ ン
に と っ て は好 ま し く あ り ま せ ん。
そのため TET はハ イ フ ン除去、 す
なわ ちハ イ フ ン区切 り さ れた単語
の各部分の再結合 を 行い ま す。 よ
り 正確にい う と 、 行末の単語の末
尾にハ イ フ ン キ ャ ラ ク タ が あ り 、
かつその次の行の最初の単語の先
頭が小文字な ら ば、 ハ イ フ ン は除
去 さ れ、 単語の前半部は次行後半
部 と 結合 さ れ ま す。 ただ し 同 じ 区域内に少な く と も あ と 1 行存在す る 場合に限 り ま す。
ダーシ キ ャ ラ ク タ (ハ イ フ ンではない) は変更 さ れない ま ま温存 さ れます。 ハ イ フ ン区切
り さ れた単語の各部分に変更が加え ら れ る こ と はな く 、ただハ イ フ ンが除去 さ れ る だけで
す。ハ イ フ ン除去を無効にす る には、open_page( ) で下記のオプシ ョ ン リ ス ト を用い ます:
contentanalysis={dehyphenate=false}
注記 区域の末尾でハイ フ ン区切 り さ れた単語は認識 さ れませんので、ハイ フ ン除去はそれに対
し ては一切行われません (すなわち そのハイ フ ンはテキス ト の中に残 り ます)。
影付 き ・ 擬似太字テキス ト 除去 PDF 文書は と き に、 ページの意味内容には貢献 し ない、
ただあ る 種の視覚効果を生み出すためだけの冗長テ キ ス ト を含んでい ます。影付 き テ キ ス
ト 効果を生み出すにはたいてい、テ キ ス ト 本体を少 し ずつ位置をず ら し なが ら 複数複製 し
て重ね る と い う 方法が採 ら れます。 こ の各層のテ キ ス ト に不透明な色をつければ、 下層の
テ キ ス ト はほ と ん ど隠れ、見え る 部分が影付 き 効果を生み出す よ う に見かけ上見え る ので
す。
同様に、 ワ ープ
ロ ソ フ ト はと きに
擬似太字テ キ ス ト
生成機能に対応 し
て い ま す。 ボール
ド フ ォ ン ト が入手不可能な と き に も テ キ ス ト を見かけ上太字に見せかけ る ため、そのテ キ
ス ト はページ上に同 じ 色で何度 も 配置 さ れます。その際にほんの少 し 位置をず ら し ていけ
ば、 太字テ キ ス ト であ る かの よ う に見せ ら れ る わけです。
擬似影付 き や擬似太字テ キ ス ト 、 ない し 同様の擬似視覚効果は、 テ キ ス ト を抽出 し て
再利用 し よ う と す る 際に困っ た問題をひ き 起 こ し ます。ただ視覚効果のためだけの冗長テ
キ ス ト 内容が、ページ内容 と し ては不要であ る に も かかわ ら ず一緒に処理 さ れて し ま う た
めです。
単語検出機能が有効に さ れてい る 場合、 デフ ォ ル ト では TET は こ う し た冗長な擬似視
覚効果を認識 し て除去 し ます。 影付 き 除去を無効にする には、 open_page( ) で下記のオプ
シ ョ ン リ ス ト を用い ます :
contentanalysis={shadowdetect=false}
ア ク セ ン ト 付 き キ ャ ラ ク タ 多 く の言語で、 ア ク セ ン ト な ど の分音記号が、 別のキ ャ ラ
ク タ のそばに配置 さ れて複合キ ャ ラ ク タ を形成 し ます。TeX をは じ め と す る い く つかの組
版プ ロ グ ラ ムでは、 2 つのキ ャ ラ ク タ (字母キ ャ ラ ク タ と ア ク セ ン ト ) を別々に出力 し て
94
6 章 : テキス ト 抽出
1 個の複合キ ャ ラ ク タ を生成 し ます。 た と えば、 ä キ ャ ラ ク タ を生成す る ために、 まず文
字 a がページ上に配置 さ れ、ついで分音符キ ャ ラ ク タ ¨ がその上に配置 さ れます。TET は
こ の状況を検出 し 、 2 個のキ ャ ラ ク タ を再結合 し て正 し い複合キ ャ ラ ク タ を形成 し ます。
6.5 内容分析
95
6.6 レ イ ア ウ ト 分析
TET は、 最 も 可能性の高いテ キ ス ト 抽出順序を決定す る ために、 ページ上のテ キ ス ト の レ
イ ア ウ ト を分析 し ます。 こ の自動処理は、 い く つかのオプシ ョ ンで支援す る こ と も 可能で
す。 処理す る 文書の性質について事前の知識があ る 場合には、 適切なオプシ ョ ン を与え る
こ と に よ っ てテ キ ス ト 抽出結果を向上 さ せ る こ と がで き ます。
各種文書ス タ イル さ ま ざ ま な レ イ ア ウ ト や ス タ イ ルの文書を処理す る ために、 い く つ
かの内部パ ラ メ タ が利用可能です。 た と えば、 新聞のページは大量のテ キ ス ト が多段組に
な っ てい る こ と が多 く 、 事業報告書は余白に注釈が し ば し ば現れ る 、 な ど です。 TET は、
い く つかの種類の文書に対す る 定義済み設定を含んでい ます。 こ れ ら の設定は、 下記の よ
う に open_page( ) でオプシ ョ ン リ ス ト を用いて有効にす る こ と がで き ます :
docstyle=papers
入力文書の種類がわかっ てい る 場合には、 docstyle ページオプシ ョ ンお よ び (あ ては ま る
場合 に は) layouthint ペー ジ オ プ シ ョ ン の適切 な 値 を 与 え る こ と を 強 く 推奨 し ま す。
docstyle オプシ ョ ン を与えれば、 高度な レ イ ア ウ ト 認識アルゴ リ ズ ム が有効にな り ます。
ただ し 、 こ のオプシ ョ ンに不適切な値を与え て し ま う と 逆に生成結果が悪化す る 場合 も あ
り ます。
docstyle オプシ ョ ンでは以下の種類が利用可能です (表 6.4 にい く つか典型的な文書ス
タ イ ルの例を挙げます) :
> book : 通常のページに よ る 典型的な書籍レ イ ア ウ ト
> business : ビ ジネ ス文書
> fancy : 複雑な、 ま た と き に イ レ ギ ュ ラ ーな レ イ ア ウ ト を持つ、 意匠を凝 ら し たページ
> forms : 構造化 さ れた フ ォーム
> generic : と く に分類のない最 も 一般的な文書
> magazines : 雑誌の記事。 多 く は 3 段組ない し それ以上で、 画像やグ ラ フ ィ ッ ク がち り
ばめ ら れてい る
> papers : 多段組 ・ 大紙面 ・ 小活字の新聞
> science : 科学記事。 多 く は 2 段組ない し それ以上で、 画像 ・ 式 ・ 表組な ど がち り ばめ ら
れてい る
> searchengine : こ の分類は、 入力文書の特定の種類を指す も のではな く 、 TET を検索エ
ン ジ ンのための イ ンデ ク サの典型的要請に最適化 し ます。生テ キ ス ト のみを発出 し 、処
理を高速化す る ために、 い く つかの レ イ ア ウ ト 検出機能が無効化 さ れます。 た と えば、
表組 ・ ページ構造認識が無効化 さ れます。
> spacegrid: こ の分類は、 メ イ ン フ レーム シ ス テ ムで よ く 生成 さ れ る リ ス ト 指向の レ ポー
ト を対象 と し てい ます。 こ の種の文書の特徴は、 視覚レ イ ア ウ ト が、 テ キ ス ト の明示
的な位置合わせではな く 、 空白キ ャ ラ ク タ に よ っ て作 り 出 さ れてい る こ と です。 こ の
種の文書を処理す る 際には、 い く つかの処理ス テ ッ プ (影付 き 検出な ど) を ス キ ッ プ
し う る ので、 テ キ ス ト 抽出が高速化 さ れえ ます。
最 も 適切な文書ス タ イ ルを選ぶ こ と に よ っ て、 処理を速め、 テ キ ス ト 抽出結果を向上 さ せ
ら れ る 可能性があ り ます。
複雑な レ イ アウ ト 文書の種類に よ っ ては、 非常に凝っ たページ レ イ ア ウ ト を用い る も
のがあ り ます。 た と えば雑誌や定期刊行物では、 TET はページ上の段組間の関係を正 し く
決定す る こ と がで き ない場合があ り ます。 こ の よ う な状況では、 処理時間を長 く かけ る こ
96
6 章 : テキス ト 抽出
表 6.4 い ろ い ろ な文書ス タ イル
docstyle=book
docstyle=business
docstyle=fancy
docstyle=magazines
docstyle=papers
docstyle=science
docstyle=spacegrid
6.6 レ イ アウ ト 分析
97
と に よ り 、 抽出 さ れ る テ キ ス ト を 改善す る こ と が可能です。 こ れは structureanalysis ・
layoutanalysis ページオプシ ョ ンで制御で き ます。 例 :
structureanalysis={list=true bullets={{fontname=ZapfDingbats}}}
layoutanalysis = {layoutrowhint={full separation=preservecolumns}}
layoutdetect=2
layouteffort=high
表組検出 TET は、 ページ上の表構造を検出 し て、 表組の内容を表行 ・ 列 ・ セルに構造
化 し ます。表組に関 し てページ上で検出 さ れた情報は API に よ っ て直接提供 さ れ る こ と は
な く 、 下記の例の よ う に TETML 出力内でのみ利用可能 と な り ます :
<Table>
<Row>
<Cell colSpan="5">
<Para>
<Word>
<Text>5</Text>
<Box llx="317.28" lly="637.14" urx="324.59" ury="650.29"/>
</Word>
<Word>
<Text>.</Text>
<Box llx="324.60" lly="637.14" urx="328.25" ury="650.29"/>
</Word>
<Word>
<Text>REFERENCES</Text>
<Box llx="335.04" lly="637.14" urx="407.64" ury="647.47"/>
</Word>
</Para>
</Cell>
</Row>
...
</Table>
98
6 章 : テキス ト 抽出
7 高度な Unicode 処理
7.1 Unicode の さ ま ざ ま な重要概念
こ の節では、 Unicode に関す る 基本的な情報を提供 し ます。 TET におけ る テ キ ス ト 処理は
Unicode 規格に大いに依存 し てい る か ら です。 Unicode Web サ イ ト では さ ら に詳 し い情報
が大量に提供 さ れてい ます :
www.unicode.org
キ ャ ラ ク タ と グ リ フ テ キ ス ト を扱 う 際には以下の概念をは っ き り 区別す る こ と が重要
にな り ます :
> キ ャ ラ ク タ は、 言語の中で情報を伝え る 最小の単位です。 代表例 と し ては ラ テ ン アル
フ ァ ベ ッ ト の音素文字や、日本語の音節文字、中国語の表意文字が挙げ ら れます。 キ ャ
ラ ク タ は意味を持ち ます。 すなわち意味的な実体であ る と いえ ます。
> グ リ フ は、1 つない し 複数のキ ャ ラ ク タ を表す さ ま ざ ま な図形です。 グ リ フは外観を持
ち ます。 すなわち表象的な実体であ る と いえ ます。
キ ャ ラ ク タ と グ リ フ と の間には一対一の対応は存在 し ません。 た と えば、 合字は 1 つのグ
リ フ ですが複数のキ ャ ラ ク タ で表 さ れます。 その一方では、 1 つのグ リ フ を場面に応 じ て
異な る キ ャ ラ ク タ を表すために使い ま わ し た り す る こ と も あ り ます (つま り キ ャ ラ ク タ ど
う し の形が同 じ と い う 場合が存在 し ます。 図 7.1 参照)。
TET の Unicode 後処理に よ っ て、 グ リ フ群 と 生成キ ャ ラ ク タ 群 と の関係は さ ら に変わ
る こ と も あ り ます。 た と えば、 分解に よ っ て 1 個のキ ャ ラ ク タ が複数のキ ャ ラ ク タ に変換
さ れ る こ と があ り 、 ま た、 字形統合に よ っ て キ ャ ラ ク タ が除去 さ れ る こ と も あ り ます。 こ
う し た理由か ら 、キ ャ ラ ク タ と グ リ フ の間にはいかな る 特定の関係を も 前提す る こ と はで
き ません。
BMP と PUA
Unicode ベース の環境では以下の用語が頻出 し ます :
図 7.1
グ リ フ とキャ ラ ク タ
の関係
7.1 Unicode の さ ま ざ ま な重要概念
99
> 基本多言語面 (BMP) は、 Unicode 範囲 U+0000 ~ U+FFFF 内の コ ー ド 点か ら 成 り ます。
Unicode 規格は、さ ら に多 く の コ ー ド を追加面群に、すなわち範囲 U+10000 ~ U+10FFFF
内に含んでい ます。
> 私用領域 (PUA) は、 私用のために予約 さ れてい る い く つかの範囲の一つです。 Unicode
規格は こ の範囲内にいかな る キ ャ ラ ク タ も 指定 し てい ませんので、 PUA コ ー ド 点は一
般的なや り と り には使え ません。 基本多言語面は PUA を範囲 U+E000 ~ U+F8FF 内に
含んでい ます。第十五面 (U+F0000 ~ U+FFFFD) と 第十六面 (U+100000 ~ U+10FFFD)
は ま る ご と 私用のために予約 さ れてい ます。
さ ま ざ ま な 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) 内の コ ー ド 点を 16 ビ ッ ト 値 1 個で表 し ます。追加面群内
の コ ー ド 点、 すなわち範囲 U+10000 ~ U+10FFFF 内の も のは、 16 ビ ッ ト 値の対で表 し
ます。 こ の対をサ ロ ゲー ト ペア (代用対) と いい ます。 サ ロ ゲー ト ペア 1 個は、 範囲
D800 ~ DBFF 内の高位サ ロ ゲー ト 値 1 個 と 、 範囲 DC00 ~ DFFF 内の低位サ ロ ゲー ト
値 1 個か ら 成 り ます。 高 ・ 低サ ロ ゲー ト 値はサ ロ ゲー ト ペアの一部 と し てのみ現れ る
こ と がで き 、 それ以外の場面では現れ る こ と がで き ません。
> UTF-32 : 各コ ー ド 点を 32 ビ ッ ト 値 1 個で表 し ます。
Unicode 符号化スキーム と BOM (Byte Order Mark) コ ン ピ ュ ー タ ア ー キ テ ク チ ャ に
よ っ てバ イ ト の順序は異な り ます。 すなわち、 大き な値 (16 ビ ッ ト や 32 ビ ッ ト ) を構成
す る バ イ ト 群を、 最高位バ イ ト を先頭に格納する か (ビ ッ グエンデ ィ ア ン) 、 それ と も 最
低位バ イ ト を最初に格納す る か ( リ ト ルエンデ ィ ア ン) と い う 違いがあ り ます。 ビ ッ グエ
ンデ ィ ア ン アーキ テ ク チ ャ の よ く 知 ら れた例は PowerPC であ り 、一方 x86 アーキ テ ク チ ャ
は リ ト ルエンデ ィ ア ンです。UTF-8 と UTF-16 はシ ン グルバ イ ト よ り も 大 き な値に基づい
てい ますので、 バ イ ト 順序を考慮す る 必要が こ こ で生 じ て き ます。 符号化ス キーム (上述
の符号化形式 と は異な る こ と に留意) は、 符号化形式に加え てバ イ ト 順序を指定 し ます。
た と えば、 UTF-16BE はビ ッ グエンデ ィ ア ンバ イ ト 順序の UTF-16 を意味 し ます。 バ イ ト
順序が事前にわか ら ない場合には、 コ ー ド 点 U+FEFF を用いて指定す る こ と も で き ます。
こ れを BOM (Byte Order Mark) と いい ます。 UTF-8 では BOM は必須ではあ り ませんが、
存在す る こ と も で き 、 その場合はバ イ ト 列を UTF-8 と し て識別す る ために用い る こ と が
で き ます。 表 7.1 に、 さ ま ざ ま な符号化形式におけ る BOM の表現を挙げます。
表 7.1 さ ま ざ ま な Unicode 符号化形式における BOM
100
符号化形式
BOM (16 進)
UTF-8
EF BB BF
WinAnsi での視覚表現1

UTF-16 big-endian
FE FF
þÿ
UTF-16 little-endian FF FE
ÿþ
UTF-32 big-endian
00 00 FE FF
■■þÿ
UTF-32 little-endian FF FE 00 00
ÿþ■■
7 章 : 高度な Unicode 処理
1. 黒四角■は null バイ ト の意。
組文字 と キ ャ ラ ク タ 列 グ リ フ のなかには、 複数のキ ャ ラ ク タ の列にマ ッ プ さ れ る も の
があ り ます。 た と えば合字は、 その構成キ ャ ラ ク タ 群に従っ て複数のキ ャ ラ ク タ にマ ッ プ
さ れます。 し か し 組文字は分割 し て よ い場合 と よ く ない場合があ り (図 7.1 の ロ ーマ数字
等)、それはフ ォ ン ト 内 ・ PDF 内の情報に よ っ て決ま る と と も に、decompose 文書オプシ ョ
ンに も 依存 し ます (105 ページの 7.3 「Unicode 後処理」 を参照)。
適切な ら ば、 TET は組文字を構成キ ャ ラ ク タ 列に分割 し ま す。 こ のキ ャ ラ ク タ 列は、
get_text( ) が返すテ キ ス ト に組み込まれます。 各キ ャ ラ ク タ ご と に、 その元 と な っ た グ リ
フ (群) に関す る 情報は get_char_info( ) で得 る こ と がで き ますが、 その際、 そのキ ャ ラ
ク タ がキ ャ ラ ク タ 列内の先頭なのかそれ と も 後続なのか と い う 情報 も 一緒に得 ら れ る よ
う にな っ てい ま す。 位置情報はキ ャ ラ ク タ 列内の先頭キ ャ ラ ク タ に対 し てのみ返 さ れ ま
す。 キ ャ ラ ク タ 列内の後続キ ャ ラ ク タ は固有の位置情報 ・ 幅情報 と い う も のを一切持た な
いので、 先頭キ ャ ラ ク タ と 併せて処理す る 必要があ り ます。
対応グ リ フ を持た ないキ ャ ラ ク タ ページ上のグ リ フは、 そのすべてが 1 つない し 複数
の Unicode キ ャ ラ ク タ にマ ッ プ さ れますが、 逆に TET が出力す る キ ャ ラ ク タ は、 そのす
べてが実在のグ リ フ にマ ッ プ さ れてい る と は限 り ません。対応す る グ リ フ を持つキ ャ ラ ク
タ を有形キ ャ ラ ク タ (real character) と 呼び、 持た ない も の を無形キ ャ ラ ク タ (artificial
character) と 呼びます。 こ の よ う な、 直接対応す る グ リ フ がないのに出力 さ れ る 無形キ ャ
ラ ク タ は、 い く つかの種類に分類で き ます。
> 組文字 (上述) は複数の Unicode キ ャ ラ ク タ の列にマ ッ プ さ れますが、 こ の と き 列内の
先頭キ ャ ラ ク タ は実在のグ リ フ に対応 し ますが、 残 り のキ ャ ラ ク タ は対応グ リ フ を持
ち ません。
> lineseparator/wordseparator オプシ ョ ンで挿入 さ れ る 区切 り キ ャ ラ ク タ は、 対応グ リ フ
を持たない無形キ ャ ラ ク タ です。
7.1 Unicode の さ ま ざ ま な重要概念
101
7.2 Unicode 前処理 ( フ ィ ル タ リ ン グ)
TET は、 有用でな さ そ う なテ キ ス ト を除去す る ためにい く つかの フ ィ ル タ を適用 し ます。
こ れ ら の フ ィ ル タ はテ キ ス ト を、 いかな る Unicode 後処理ス テ ッ プを も 適用す る 前に変更
し ます。 い く つかの フ ィ ル タ はつねに有効であ り 、 それ以外は単語検出機能を必要 と し ま
すので granularity=word 以上の場合にのみ有効です。
7.2.1 すべての粒度のための フ ィ ル タ
以下の フ ィ ル タ はすべての粒度で使用で き ます。
異常な文字サ イ ズのテキス ト 非常に小 さ な テ キ ス ト や非常に大 き な テ キ ス ト は無視 さ
せ る こ と も で き ま す。 た と え ばペー ジ 背景 の 大 き な キ ャ ラ ク タ で す。 上限 ・ 下限 は
fontsizerange ページオプシ ョ ンで制御で き ます。 デフ ォ ル ト では、 すべての文字サ イ ズの
テ キ ス ト が抽出 さ れます。
下記のページオプシ ョ ンは、 抽出す る テ キ ス ト の文字サ イ ズの範囲を 10 ~ 50 ポ イ ン
ト に制限 し ます。 こ れを外れてい る 文字サ イ ズのテ キ ス ト は無視 さ れます :
fontsizerange={10 50}
不可視テキス ト 不可視テ キ ス ト (すなわち textrendering=3 のテ キ ス ト ) はデフ ォ ル ト
では抽出 さ れます。 PDF 内のテ キ ス ト は、 textrendering プ ロ パテ ィ 以外に も さ ま ざ ま な理
由で見え な く な っ てい る 可能性があ る こ と に留意 し て く だ さ い。た と えばテ キ ス ト の色が
背景色 と 同一であ る か も し れません し 、テ キ ス ト がページ上の他のオブジ ェ ク ト に隠れて
い る か も し れません。 こ こ で記述す る 動作は textrendering=3 のテ キ ス ト にのみ効力を持
ち ます。 こ の PDF 技法は OCR の生成テ キ ス ト に対 し て広 く 用い ら れてい ます。 ス キ ャ ン
さ れた ラ ス タ 画像の 「後ろ」 にテ キ ス ト が見え ない形で存在 し てい る のです。
不可視テ キ ス ト は、 get_char_info( ) が返す TET_char_info 構造の textrendering メ ンバ
に よ っ て識別す る こ と も で き ます し (189 ページの表 10.15 を参照)、 あ る いは TETML 内
の Glyph/@textrendering 属性に よ っ て識別す る こ と も で き ます。
不可視テ キ ス ト を無視 し たい と き は下記のページオプシ ョ ン を用い ます :
ignoreinvisibletext=true
特定 フ ォ ン ト 名ま たは フ ォ ン ト 種別のテキス ト を完全無視 場合に よ っ ては、 1 個ない
し 複数の フ ォ ン ト を名前で指定 し て そのテ キ ス ト を完全に無視 さ せ る こ と が有用で し ょ
う 。 た と えば、 意味のあ る テ キ ス ト を ま っ た く 構成 し ない記号フ ォ ン ト な ど です。 あ る い
は、 問題のあ る フ ォ ン ト を フ ォ ン ト 種別で指定する こ と も で き ます。 こ れは、 装飾のため
に 用 い ら れ る こ と の あ る Type 3 フ ォ ン ト に 対 し て 主に 有用 で す。 こ の フ ィ ル タ は、
glyphmapping 文書オプシ ョ ンの remove サブオプシ ョ ンに よ っ て制御で き ます。
た と えば、 Type 3 フ ォ ン ト のテ キ ス ト をすべて無視 :
glyphmapping={{fonttype={Type3} remove}}
Webdings ・ Wingdings ・ Wingdings 2 ・ Wingdings 3 フ ォ ン ト のテ キ ス ト をすべて無視 :
glyphmapping={{fontname=Webdings remove} {fontname=Wingdings* remove}}
フ ォ ン ト 名に対す る 条件 と フ ォ ン ト 種別に対す る 条件 と を組み合わせ る こ と も 可能です。
た と えば、 文字 A で始ま る すべての Type 3 フ ォ ン ト のテ キ ス ト を無視 :
glyphmapping={{fonttype={Type3} fontname=A* remove}}
102
7 章 : 高度な Unicode 処理
7.2.2 粒度 word 以上のための フ ィ ル タ
以下の フ ィ ル タ は granularity=word ・ line ・ page でのみ使用で き ます。
ハ イ フ ン除去 ハ イ フ ン除去は、 ハ イ フ ン を削除 し て、 ハ イ フ ン で分割 さ れていた単語の
各部分を結合 さ せます。
単語 を 複数行に分割す る た め に用い ら れ て い る ハ イ フ ン は、 TET_char_info 構造の
attributes メ ンバに よ っ て識別す る こ と も で き ます し (189 ページの表 10.15 を参照)、 あ
る いは TETML 内の Glyph/@hyphenation 属性に よ っ て識別する こ と も で き ます。
ハ イ フ ン除去は下記のページオプシ ョ ンに よ っ て無効化す る こ と がで き ます :
contentanalysis={dehyphenate=false}
ハ イ フ ン報告 ハ イ フ ン除去が有効にな っ てい る と き 、 生成 さ れ る グ リ フ リ ス ト 内、すな
わち get_char_info( ) が返すグ リ フ の リ ス ト 内で、 あ る いは TETML 内の Glyph 要素群で、
ハ イ フ ネーシ ョ ン さ れた単語の各部の間のハ イ フ ン キ ャ ラ ク タ が報告 さ れ る か ど う か を
選ぶ こ と がで き ます。 デフ ォ ル ト ではハ イ フ ンは除去 さ れます。
し か し 、 応用に よ っ ては、 ページ上のハ イ フ ンの正確な位置を知 る 必要があ る 場合が
あ り ます。 た と えば、 TET ク ッ ク ブ ッ ク の highlight_search_terms ・ search_and_replace_text
ト ピ ッ ク では、元の単語の上に注釈ま たは置換テ キ ス ト をかぶせ る 際にハ イ フ ン グ リ フ を
考慮に入れてい ます。 こ の よ う な状況の場合には、 下記のページオプシ ョ ン を用いれば、
ハ イ フ ン除去処理に よ っ て検知 さ れたすべてのハ イ フ ン を含め る よ う TET に指示す る こ
と がで き ます :
contentanalysis={keephyphenglyphs=true}
ハ イ フ ンは、get_char_info( ) が返す TET_char_info 構造内の attributes メ ンバの TET_ATTR_
DEHYPHENATION_ARTIFACT フ ラ グ に よ っ て識別す る こ と も で き ま す し (189 ページの表
10.15 を参照)、 あ る いは、 TETML 内で Glyph/@dehyphenation 属性の値 artifact で識別す
る こ と も で き ます。
影付 き除去 影付 き や擬似太字 と い っ た視覚効果のためだけの冗長テ キ ス ト は削除 さ れ
ます。
影付 き ・ 擬似太字テ キ ス ト は、 TET_char_info 構造の attributes メ ンバに よ っ て識別す
る こ と も で き ます し (189 ページの表 10.15 を参照)、あ る いは TETML 内で Glyph/@shadow
属性に よ っ て識別す る こ と も で き ます。
影付 き 除去は下記のページオプシ ョ ンで無効化で き ます :
contentanalysis={shadowdetect=false}
マ ッ プ な し グ リ フ Unicode へマ ッ プで き ないグ リ フは、 私用領域内のキ ャ ラ ク タ へ置 き
換え ら れます (115 ページの 「マ ッ プ不能グ リ フ」 の項を参照) 。 場合に よ っ ては、 使え
る Unicode 値を グ リ フ に割 り 当て る ために必要な充分な情報を PDF 文書が含んでいない
(あ る い は情報 が あ っ て も 整合 し て い な い) こ と が あ り ま す。 こ の よ う な 場合 に は、
unknownchar 文書オプシ ョ ンで指定 さ れた キ ャ ラ ク タ が割 り 当て ら れます。
すべての PUA キ ャ ラ ク タ は、 デフ ォ ル ト では Unicode 未知キ ャ ラ ク タ U+FFFD へ置 き
換え ら れ ま す。 こ の動作は、 fold 文書オプシ ョ ン で変え る こ と も で き ま す。 下記のオプ
シ ョ ン リ ス ト は、 すべての未知の キ ャ ラ ク タ を、 すな わち PUA キ ャ ラ ク タ と 、 有用な
Unicode 値を決定で き なか っ た キ ャ ラ ク タ と を、 除去 し ます :
fold={{[:Private_Use:] remove} {[U+FFFD] remove} default}
7.2 Unicode 前処理 (フ ィ ル タ リ ング)
103
マ ッ プな し グ リ フ (すなわち、 ページ上では見え てい る が、 TET で抽出で き ないキ ャ ラ ク
タ ) は、 TET_char_info 構造の unknown メ ンバに よ っ て識別する こ と も で き ます し 、 あ る
いは、 TETML 内で Glyph/@unknown 属性で識別する こ と も で き ます。
104
7 章 : 高度な Unicode 処理
7.3 Unicode 後処理
TET は、抽出 し たテ キ ス ト を構成す る Unicode キ ャ ラ ク タ 群を微調整す る ための さ ま ざ ま
な制御手段を提供 し てい ます。 こ の節で述べ る 各種の後処理ス テ ッ プは、 Unicode 規格で
定義 さ れてい る も のです。 こ れ ら は TET で利用可能であ り 、 以下の順序で処理 さ れます :
> 字形統合は、 fold 文書オプシ ョ ンに よ っ て制御 さ れ、 特定のキ ャ ラ ク タ 群に対 し て温
存 ・ 除去 ・ 置換のいずれか を行い ます。 例 : 単語の分割に用い ら れてい る ハ イ フ ン を
除去。 ア ラ ビ ア文字の タ ト ウ ィ ールキ ャ ラ ク タ を除去。
> 分解は、decompose 文書オプシ ョ ンに よ っ て制御 さ れ、1 個のキ ャ ラ ク タ を 1 個ない し 複
数の等価な キ ャ ラ ク タ へ置 き 換え ます。 例 : 合字を分割。 全角英数 ・ 記号をおのおの
対応す る 非全角キ ャ ラ ク タ へマ ッ プ。
> 正規化は、normalize 文書オプシ ョ ンに よ っ て制御 さ れ、テ キ ス ト を正規化 Unicode 形式
の一つへ変換 し ます。 例 : 字母キ ャ ラ ク タ と 分音キ ャ ラ ク タ を結合 し て通用キ ャ ラ ク
タ 化。 オーム記号を ギ リ シ ャ 文字オ メ ガへマ ッ プ。
7.3.1 Unicode 字形統合
字形統合は、 1 個ない し 複数の Unicode キ ャ ラ ク タ を処理 し て、 各キ ャ ラ ク タ に対 し て特
定の操作を適用 し ます。 以下の操作が利用可能です :
> キ ャ ラ ク タ を温存。
> キ ャ ラ ク タ を除去。
> 別の (固定の) キ ャ ラ ク タ へ置 き 換え。
字形統合は連鎖 さ れません : 字形統合の出力が、 利用可能な字形統合に よ っ て さ ら に処理
さ れ る こ と はあ り ません。 字形統合は、 Unicode テ キ ス ト 出力に対 し てのみ効力を持ち、
TET_char_info 構造内で、 ま たは TETML の <Glyph> 要素群で報告 さ れ る グ リ フ の集合に対
し ては効力を持ち ません。 た と えば、 あ る Unicode キ ャ ラ ク タ 群が字形統合に よ っ て除去
さ れた場合で も 、その元のキ ャ ラ ク タ 群を生み出 し たそれに対応す る グ リ フ群は報告 さ れ
ます。
読みやす く す る ために、以下の表の中の例では、fold オプシ ョ ン リ ス ト のサブオプシ ョ
ン を個別に記 し てい ます。 複数の字形統合を適用 し たい と き には、 こ れ ら のサブオプシ ョ
ン を連結 し て単一の大 き なfoldオプシ ョ ン リ ス ト にす る 必要があ る こ と に留意 し て く だ さ
い。 fold オプシ ョ ン を複数回与え てはいけ ません。 た と えば、 下記は誤 り です :
fold={ {[:blank:] U+0020} } fold={ {_dehyphenation remove} }
誤り!
下記のオプシ ョ ン リ ス ト は、 複数の字形統合に対す る 正 し い文法を示 し てい ます :
fold={ {[:blank:] U+0020 } {_dehyphenation remove} }
字形統合の さ ま ざ ま な例 表 7.2 に、 字形統合の さ ま ざ ま な応用を演示す る さ ま ざ ま な
fold オプシ ョ ンの例を挙げます。 こ れ ら のサンプルのオプシ ョ ンは、 open_document( ) に
対す る オプシ ョ ン リ ス ト の中で与え る 必要があ り ます。 TET は、 全 Unicode キ ャ ラ ク タ か
7.3 Unicode 後処理
105
ら 選択 さ れた部分集合に対 し て字形統合を適用する こ と も で き ます。 こ れを Unicode 集合
と いい ます。 その文法は、 154 ページの 「Unicode 集合」 で解説 し てい ます。
表 7.2 さ ま ざ ま な fold オプ シ ョ ンの例
説明 と オプ シ ョ ン リ ス ト
字形統合前
字形統合後
1 個の Unicode 集合内のすべてのキ ャ ラ ク タ を除去
ISO 8859-1 (Latin-1) 内のキ ャ ラ ク タ のみを出力内に保持、 すなわち、 基本
欧文ブ ロ ッ ク外のすべてのキ ャ ラ ク タ を除去 :
fold={{[^U+0020-U+00FF] remove}}
すべての非アル フ ァ ベ ッ ト キ ャ ラ ク タ (句読点 ・ 数字な ど) を除去 :
fold={{[:Alphabetic=No:] remove}}
数字以外のすべてのキ ャ ラ ク タ を除去 :
fold={{[^[:General_Category=Decimal_Number:]] remove}}
Æ
U+0104
U+0037
なし
なし
$
$
U+0041
U+0041
U+0037
U+0037
$
U+0041
すべての未知キ ャ ラ ク タ を、 すなわち、 PUA キ ャ ラ ク タ 群 と 、 有用な Unib
code 値が決定で き なか っ たキ ャ ラ ク タ 群 と を除去 (残 り のデ フ ォ ル ト 字形統 U+FFFF
合は再有効化 さ れます) :
fold={{[:Private_Use:] remove} {[U+FFFD] remove} default}
すべてのダーシ約物キ ャ ラ ク タ を除去 し ます :
fold={{[:General_Category=Dash_Punctuation:] remove}}
U+002D
すべての双方向制御キ ャ ラ ク タ を除去 し ます :
fold={{[:Bidi_Control:] remove}}
U+200E
なし
なし
なし
なし
1 個の Unicode 集合内のすべてのキ ャ ラ ク タ を 1 個の特定のキ ャ ラ ク タ へ置き換え
空白字形統合 : Unicode 空白キ ャ ラ ク タ のすべての種類を U+0020 へマ ッ プ :
fold={{[:blank:] U+0020}}
b
U+00A0
U+0020
ダーシ字形統合 : Unicode ダーシキ ャ ラ ク タ のすべての種類を U+002D へ
マ ッ プ : fold={{[:Dash:] U+002D}}
ತ
U+2011
U+002D
すべての未割 り 当てキ ャ ラ ク タ (すなわち、 キ ャ ラ ク タ が割 り 当て られてい
ない Unicode コ ー ド 点) を U+FFFD へマ ッ プ : fold={{[:Unassigned:]
U+FFFD}}
b
᪽
U+03A2
U+FFFD
改行位置のすべてのハイ フ ンキ ャ ラ ク タ を温存 し つつ、 残 り のデ フ ォ ル ト 字
形統合を保持。 こ れら のキ ャ ラ ク タ は TET に よ っ て内部的に識別 さ れていま U+002D
すので (固定の Unicode プ ロパテ ィ を持つのではな く )、 この字形統合の ド
メ イ ン を指定するにはキーワー ド _dehyphenation を用います :
U+002D
個別のキ ャ ラ ク タ に対 し て特別処理
fold={{_dehyphenation preserve}}
ア ラ ビ ア文字の タ ト ウ ィ ールキ ャ ラ ク タ (デ フ ォ ル ト では除去 さ れます) を
温存 : fold={{[U+0640] preserve}}
さ ま ざ ま な約物キ ャ ラ ク タ をおのおの対応する ASCII キ ャ ラ ク タ へ置き換
え:
fold={ {[U+2018] U+0027} {[U+2019] U+0027} {[U+201C] U+0022}
{[U+201D] U+0022}}
106
7 章 : 高度な Unicode 処理
ҿ
ҿ
U+0640
U+0640
ಯ
U+201C
U+002D
U+0022
デ フ ォ ル ト 字形統合 granularity=glyph の場合を除 き 、 TET はデフ ォ ル ト で表 7.3 に挙げ
る 字形統合をすべて適用 し ます。カ ス タ ムの字形統合を初期デフ ォ ル ト 字形統合 と 結合す
る には、 カ ス タ ム字形統合オプシ ョ ン群の後にキーワー ド default を与え る 必要があ り ま
す。 例 :
fold={ {_dehyphenation preserve} default }
すべてのデフ ォ ル ト 字形統合を明示的に無効化 し たい場合でない限 り 、 fold オプシ ョ ン リ
ス ト にはキー ワー ド default を追加す る こ と を推奨 し ます。
表 7.3 fold オプ シ ョ ンのデ フ ォル ト 値一覧
説明 と オプ シ ョ ン リ ス ト
入力例
空白字形統合 : Unicode 空白キ ャ ラ ク タ のすべての種類を U+0020 へマ ッ プ :
fold={{[:blank:] U+0020}}
b
U+00A0
U+0020
私用領域 (PUA) 内のすべてのキ ャ ラ ク タ を未知キ ャ ラ ク タ (デ フ ォ ル ト で
は こ れは U+FFFD ですが、 unknownchar オプ シ ョ ン で変え る こ と も で き ます) U+E001
へマ ッ プ : fold={{[:Private_Use:] unknownchar}}
ハイ フ ン除去 さ れた単語の中のすべてのハイ フ ン を除去 :
fold={{_dehyphenation remove}}
U+002D
ア ラ ビ ア モ ジの タ ト ウ ォ ールキ ャ ラ ク タ をすべて除去 :
fold={{[U+0640] remove}}
U+0640
ҿ
すべての制御キ ャ ラ ク タ と 、 Unicode で割 り 当て られていないすべてのキ ャ
b
ラ ク タ と を除去 (TETML 出力を生成する際には、 こ れらの字形統合は、 他の U+000C U+03A2
すべての字形統合の後つねに行われます) :
fold={{[:Control:] remove} {[:Unassigned:] remove}}
出力
᪽
U+FFFD
なし
なし
なし
7.3 Unicode 後処理
107
7.3.2 Unicode 分解
分解は、1 個のキ ャ ラ ク タ を、他の 1 個ない し 複数の等価な キ ャ ラ ク タ 列へ置 き 換え ます。
あ る Unicode キ ャ ラ ク タ が、 他の 1 個ない し 複数のキ ャ ラ ク タ と 実際には同 じ 意味であ り
なが ら 、 歴史的理由に よ り Unicode 内で別々の コ ー ド を与え ら れてい る と き (多 く はレ ガ
シ符号化形式 と の可逆のか ら みで)、 その Unicode キ ャ ラ ク タ はそのキ ャ ラ ク タ (群) と
(互換あ る いは正準) 等価であ る と いい ます。 分解は情報を破壊 し ます。 こ れは、 元のキ ャ
ラ ク タ と その等価キ ャ ラ ク タ と の使い分けに関心がない場合には有用です。 し か し 使い分
けに関心があ る 場合には、 その分解は適用する べき ではあ り ません。 Unicode 分解に関す
る 完全な説明は下記を参照 し て く だ さ い :
www.unicode.org/versions/Unicode5.2.0/ch03.pdf#G729
注記 こ こ で用いている 「分解」 と い う 用語は、 Unicode 規格で定義 さ れている ものですが、 実
際には多 く の分解は、 1 個のキ ャ ラ ク タ を複数の部分へ分割するのではな く 、 1 個のキ ャ
ラ ク タ を別の 1 個のキ ャ ラ ク タ へ変換 し ます。
正準分解 互いに正準等価であ る キ ャ ラ ク タ ま たはキ ャ ラ ク タ 列は、同一の抽象キ ャ ラ ク
タ を表現 し てお り 、 し たがっ て必ず同一の体裁 と 動作を持つべ き も のです。 よ く あ る 例 と
† ) と 連結キ ャ ラ ク タ 列 (例 : $
し ては、 合成済みキ ャ ラ ク タ (例 :
U+00C4
ɰ ) が挙げ
U+0041 U+0308
ら れます : 2 つの表現は互いに正準等価です。 1 つの表現か ら 別の表現へ切 り 替え て も 情
報は失われません。 正準分解は、 1 つの表現を、 正準表現 と 見な さ れ る 別の表現へ置 き 換
え ます。
Unicode コ ー ド チ ャ ー ト 1 では、 正準マ ッ ピ ン グには記号 IDENTICAL TO
†
ิ が付け
U+00C4
U+2261
ら れてい ます (キ ャ ラ ク タ テーブルにはな し )。 分解名 <canonical> と 暗黙的に見な さ れま
す。 表 7.4 にい く つかの例を挙げます。
表 7.4 正準分解 : decompose オプ シ ョ ンのサブオプ シ ョ ン (正準等価なキ ャ ラ ク タ には、 Unicode コ ー ド
チ ャ ー ト で記号 IDENTICAL TO
†
ิ
が付け ら れています)
U+00C4
U+2261
分解名
説明
canonical1
正準分解
分解前
‚
U+00C0
分解後
$
ɨ
U+0041 U+0300
ᙔ
㨦
U+F9F4
U+6797
വ
˖
U+2126
U+03A9
ቓ
വ ቸ
വ
ቒ
ቒ
U+3070
U+2126
U+306F U+2126
U+306F
U+3099
ᚫ
U+FB2F
҂
Ѷ
U+05D0 U+05B8
1. デ フ ォ ル ト では この分解は、 特定のキ ャ ラ ク タ 群を温存する ために、 すべてのキ ャ ラ ク タ に対 し ては適用 さ れませ
ん。 詳 し く は、 107 ページの 「デ フ ォル ト 字形統合」 を参照 し て く だ さ い。
1. www.unicode.org/Public/5.2.0/charts/ を参照。
108
7 章 : 高度な Unicode 処理
互換分解 互換等価な キ ャ ラ ク タ ど う し は、 同一の抽象キ ャ ラ ク タ を表 し ますが、 その体
裁や動作は互いに異な っ てい る 可能性があ り ます。 例 と し ては、 ア ラ ビ ア文字キ ャ ラ ク タ
の単独形 (
ҷ 等) と 位置依存表示形 ( ᦒ ・ ᦔ ・ ᦓ 等) が挙げ ら れます。 互換等
U+0633
U+FEB2 U+FEB4 U+FEB3
価キ ャ ラ ク タ は組版上互いに異な る も のです。 こ の組版情報を除去する と 、 情報が失われ
る 可能性が あ り ま すが、 あ る 種の応用の場合 (検索等) には処理を単純化で き る で し ょ
う 。 互換分解は組版情報を除去 し ます。
Unicode コ ー ド チ ャ ー ト では、 互換マ ッ ピ ン グには記号 ALMOST EQUAL TO
†
ป が
U+00C4
U+2248
付いてお り 、 その後に、 分解名 (「 タ グ」 と も いい ます) が <noBreak> の よ う に山括弧に
く く っ て書かれてい ます。 タ グ名が書かれていない も のについては、 <compat> と 見な さ
れます。 こ の タ グ名は、 表 7.5 のオプシ ョ ン名 と 同一です。 い く つかの例に見 ら れ る よ う
に、 分解の結果、 1 個のキ ャ ラ ク タ が複数キ ャ ラ ク タ 列へ変換 さ れ る こ と も あ り ます。
注記 表 7.5 の項目はすべて互換分解を記 し ているのに対 し 、 「compat」 タ グは 「他の」 互換分
解のみを、 すなわち特定の名前を持たない もののみを内容 と し て持ち ます。
注記 PDF 文書によ っ ては、 グ リ フが、 分解 さ れていない Unicode 値へではな く 、 分解済みキ ャ
ラ ク タ 列へすでにマ ッ プ さ れてい る場合 も あ る こ と に留意 し て く だ さ い。 その場合には
decompose オプ シ ョ ンは出力に対 し て効力を持ち ません。
分解の さ ま ざ ま な例 TET におけ る 分解は、文書オプシ ョ ン decompose で制御で き ます。
1 種類の分解が、 全 Unicode キ ャ ラ ク タ に対 し てではな く 、 い く つかのキ ャ ラ ク タ に対 し
てのみ適用 さ れ る よ う 制限す る こ と も で き ます。 あ る 分解の適用対象 と な る 部分集合を、
その ド メ イ ン と いい ます。 表 7.5 に、 すべての Unicode 分解に対す る サブオプシ ョ ン を例
と と も に挙げます。
以下の decompose オプシ ョ ンの例は、 open_document( ) に対す る オプシ ョ ン リ ス ト の
中で与え る 必要があ り ます。 decompose オプシ ョ ン リ ス ト 内の分解名は表 7.5 か ら 取 ら れ
ます。
すべての分解を無効化 :
decompose={none}
全角 (ダブルバ イ ト ) ・ 半角キ ャ ラ ク タ を温存 :
decompose={wide=_none narrow=_none}
すべての正準等価キ ャ ラ ク タ をおのおの対応キ ャ ラ ク タ へマ ッ プ :
decompose={canonical=_all}
下記のオプシ ョ ン リ ス ト は circle 分解を有効化 し ますが、 それ以外の分解はすべて無効化
し ます :
decompose={none circle=_all}
反対に、 下記のオプシ ョ ン リ ス ト はすべての分解を有効化 し ま す (なぜな ら 、 他のオプ
シ ョ ン を省略す る と デフ ォ ル ト が有効にな る か ら です) :
decompose={circle=_all}
7.3 Unicode 後処理
109
表 7.5 互換分解 : decompose オプ シ ョ ンのサブオプ シ ョ ン一覧 (互換等価なキ ャ ラ ク タ には、 Unicode コ ー
ド チ ャ ー ト で記号 ALMOST EQUAL TO
†
ป
が付け られています)
U+00C4
U+2248
分解名
circle
compat1
final
font
fraction1
説明
分解前
分解後 (論理順で)
U+3251
U+0032 U+0031
丸囲みキ ャ ラ ク タ
その他の互換分解。 例 : 広 く 用い られている合
字
語尾形。 特にア ラ ビ ア文字の
フ ォ ン ト バ リ ア ン ト 。 例 : 数学の集合の文字、
ヘブ ラ イ文字の合字
俗用分数字体
ᚏ
U+FB01
ᦒ
ҷ
U+0633
഑
&
U+2102
U+0043
~
isolated
語頭形。 特にア ラ ビ ア文字の
単独形。 特にア ラ ビ ア文字の
medial
narrow
nobreak
語中形。 特にア ラ ビ ア文字の
半角キ ャ ラ ク タ
改行禁止キ ャ ラ ク タ
none
明示的に decompose オプ シ ョ ン リ ス ト で指定 さ
れていないすべての分解を無効化
small
CNS 11643 互換のための小型字体
square
sub1
super1
日中韓の組文字
下付き字体
上付き字体
ᦓ
ҷ
U+0633
ᡤ
wide
全角字体
ҷ
ᦔ
ҷ
U+0633
ᩀ
ዏ
U+FF66
U+30F2
b
U+00A0
U+0020
ҵ
(すべてのキ ャ ラ ク タ を変更せず温存)
ᤸ
U+FE50
U+002C
ᑐ
ኊ ዊ
U+3314
U+30AD U+30ED
ೢ
U+2081
U+0031
l
D
U+00AA
U+0061
റ
縦書き字体
೑
U+0633 U+0631
U+FEB4
U+2122
vertical
U+0031 U+2044 U+0034
U+FEB3
U+FD0E
L
U+0066 U+0069
U+FEB2
U+00BC
initial
I
7
0
U+0054 U+004D
ᤣ
^
U+FE37
U+007B
£
£
U+FFE1
U+00A3
1. デ フ ォ ル ト では この分解は、 特定のキ ャ ラ ク タ 群を温存する ために、 すべてのキ ャ ラ ク タ に対 し ては適用 さ れませ
ん。 詳 し く は、 107 ページの 「デ フ ォル ト 字形統合」 を参照 し て く だ さ い。
110
7 章 : 高度な Unicode 処理
デ フ ォ ル ト 分解 デフ ォ ル ト では、 fraction 以外のすべての分解が有効にな っ てい ます。
多 く のデフ ォ ル ト 分解は _all ド メ イ ンに対 し て (すなわちすべてのキ ャ ラ ク タ に対 し て)
適用 さ れますが、 い く つかは、 表 7.6 に従っ た、 よ り 小 さ なデフ ォ ル ト ド メ イ ンに対 し て
適用 さ れます。 分解を扱 う 正攻法は正規化に よ る こ と です (112 ページの 7.3.3 「Unicode
正規化」 を参照)。 granularity=glyph の と き は、 Unicode 後処理は完全に無効化 さ れますの
で、 その場合には分解はいずれ も 有効にはな り ません。
表 7.6 Unicode 分解 (decompose オプ シ ョ ンのサブオプ シ ョ ン) のデ フ ォ ル ト ド メ イ ン一覧
分解
canonical
TET におけるデ フ ォル ト
canonical={[U+0374 U+037E U+0387 U+1FBE U+1FEF U+1FFD U+2000 U+2001 U+2126 U+212A
U+212B U+2329-U+232A]}
デ フ ォ ル ト ド メ イ ンは正準重複 (シ ングル ト ン) を含みますが、 それ以外の正準等価キ ャ
ラ ク タ を含みません。 デ フ ォ ル ト が _all でないのは、
†
のよ う なキ ャ ラ ク タ を温存す
U+00C4
compat
る ためです。
compat={[U+FB00-U+FB17]}
デ フ ォ ル ト ド メ イ ンは欧文 と アル メ ニア文字の合字を含みますが、 それ以外の互換キ ャ ラ
ク タ を含みません。 デ フ ォ ル ト が _all で ないのは、
ô
のよ う なキ ャ ラ ク タ を温存する
U+0132
fraction
ためです。
fraction=_none
分数はデ フ ォ ル ト では分解 さ れません。 分解する と 整数部 と 分数部が合わ さ っ て不適切な
数字列にな るおそれがあるから です。 た と えば、 ク ラ イ ア ン ト ア プ リ ケーシ ョ ンがキ ャ ラ
ク タ列

(数値 9.5 を表す) を
U+0039 U+00BD
sub
super
೑
と 勘違い し て、 数値
U+0039 U+0031 U+2044 U+0032
(91)/2=45.5 と 解釈 し て し ま う おそれがあ り ます。
sub={[U+208A-U+208E]}
super={[U+207A-U+207E]}
デ フ ォ ル ト ド メ イ ンは数学記号のみを含みます。 上付き ・ 下付き数字はデ フ ォル ト では分
解 さ れません。 これは、 上で fraction について述べたの と 同様の数値解釈上の問題を避け
る ためです。 商標記号
റ
のよ う なキ ャ ラ ク タ はデ フ ォ ル ト では
U+2122
all others
7
0
へ分解 さ
U+0054 U+004D
れません。
circle=_all final=_all ... vertical=_all wide=_all
その他のすべての分解は、 デ フ ォ ル ト ですべてのキ ャ ラ ク タ に対 し て有効にな っ ています。
7.3 Unicode 後処理
111
7.3.3 Unicode 正規化
Unicode 規格では、 正準等価 と 互換等価の概念に基づ き ( こ れ ら は 108 ページの 7.3.2
「Unicode 分解」 で説明 し てい ます)、 4 種類の正規形を定義 し てい ます。 すべての正規形
は、 結合記号を特定の順序に置 き 、 分解 と 合成を異な る 方式で適用 し ます :
> 正規形 C (NFC) は、 正準分解の後に正準合成を適用 し ます。
> 正規形 D (NFD) は、 正準分解を適用 し ます。
> 正規形 KC (NFKC) は、 互換分解の後に正準合成を適用 し ます。
> 正規形 KD (NFKD) は、 互換分解を適用 し ます。
正 規 形 は、 Unicode 規 格 付 録 #15 「Unicode Normalization Forms」 で 定義 さ れ て い ま す
(www.unicode.org/versions/Unicode5.2.0/ch03.pdf#G21796 ・ www.unicode.org/reports/tr15/
を参照)。
TET は 4 種類の Unicode 正規形すべてに対応 し てい ます。 Unicode 正規化は normalize
文書オプシ ョ ンで制御で き ます。 例 :
normalize=nfc
TET はデフ ォ ル ト では正規化を適用 し ません。 decompose オプシ ョ ン と normalize オプ
シ ョ ンはかち合 う おそれがあ る こ と か ら 、normalize オプシ ョ ン を none 以外の値に設定す
る と デフ ォ ル ト 分解は無効化 さ れます。
正規形の選択はアプ リ ケーシ ョ ン の要請に依存 し ます。 た と えば、 い く つかのデー タ
ベース はテ キ ス ト を NFC で受け付け ます。 NFC は、 Web 上の Unicode テ キ ス ト について
推奨 さ れ る 形式で も あ り ます。 表 7.7 に、 さ ま ざ ま な キ ャ ラ ク タ に対す る 正規化の効果を
示 し ます。
表 7.7 Unicode 正規形 : さ ま ざ ま な例
正規化前
†
†
U+00C4
U+00C4
$
ɰ
U+0041 U+0308
ɰ
$
U+0308 U+0041
NFD
$
†
$
U+0308 U+0041
ɰ
ᚏ
ᚏ
U+FB01
ೖ
ೖ
U+0033 U+2075
ഺ
‡
U+212B
U+00C5
$
$
റ
റ
U+2122
U+2122
൘
൘
൘
U+2163
U+2163
U+2163
$
U+00C4
ɰ
ೖ
ɲ
$
L
U+0033 U+0035
‡
$
I
L
U+0066 U+0069
U+0033 U+0035
ɲ
U+0041 U+030A
0
U+0054 U+004D
,
ɰ
U+0308 U+0041
$
U+00C5
7
ɰ
U+0041 U+0308
U+0308 U+0041
I
ɰ
U+0041 U+0308
U+0066 U+0069
U+0041 U+030A
റ
$
U+00C4
†
U+0033 U+2075
U+2122
7 章 : 高度な Unicode 処理
ɰ
U+0308 U+0041
U+FB01
NFKD
†
U+0041 U+0308
ᚏ
ɰ
$
U+00C4
ɰ
NFKC
U+0041 U+0308
U+FB01
U+0033 U+2075
112
NFC
9
U+0049 U+0056
7
0
U+0054 U+004D
,
9
U+0049 U+0056
表 7.7 Unicode 正規形 : さ ま ざ ま な例
正規化前
ᚿ
U+FB48
NFC
Қ
NFD
ѹ
U+05E8 U+05BC
Қ
NFKC
ѹ
U+05E8 U+05BC
Қ
NFKD
ѹ
Қ
U+05E8 U+05BC
ѹ
U+05E8 U+05BC
閵
閵
৆ ਢ
閵
৆ ਢ
U+AC00
U+AC00
U+1100 U+1161
U+AC00
U+1100 U+1161
ᚿ
ቅ
ᚿ
ቅ
ቄ ቸ
ᚿ
ቅ
ቄ ቸ
U+FB48
U+3062
U+FB48
U+3062
U+3061 U+3099
U+FB48
U+3062
U+3061 U+3099
ᐊ
ᐊ
ᐊ
U+32C9
U+32C9
U+32C9
㦗
U+0031 U+0030 U+6708
㦗
U+0031 U+0030 U+6708
7.3 Unicode 後処理
113
7.4 追加キ ャ ラ ク タ と サ ロ ゲー ト
Unicode の基本多言語面 (BMP) の外にあ る 追加キ ャ ラ ク タ 、すなわち Unicode 値が U+FFFF
を超え る キ ャ ラ ク タ は、 1 つの UTF-16 値では表す こ と がで き ず、 サ ロ ゲー ト ペア と 呼ば
れ る 2 つの UTF-16 値を必要 と し ます。 追加キ ャ ラ ク タ の例 と し ては、 U+1DXXX にあ る 数
学記号 ・ 音楽記号や、 U+20000 か ら 始ま る 日中韓の拡張キ ャ ラ ク タ が挙げ ら れます。
TET は追加キ ャ ラ ク タ を解釈 ・ 保持 し 、 それに対応する UTF-32 値を、 ネ イ テ ィ ブな
Unicode 文字列が UTF-16 に し か対応 し ていない言語バ イ ンデ ィ ン グにおいて も 利用可能
に し てい ます。 1 番目のサ ロ ゲー ト 値に対 し て get_char_info( ) が返す uv フ ィ ール ド は、
対応す る UTF-32 値を持ち ます。 こ れを利用すれば、 UTF-32 に対応 し ていない UTF-16
環境で作業を し てい る 場合で も 追加キ ャ ラ ク タ の UTF-32 値を直接利用可能です。
1 番目の (高位) サ ロ ゲー ト と 2 番目の (低位) サ ロ ゲー ト は保持 さ れます。 get_text( )
が返す文字列は 2 個の UTF-16 値を内容 と し て持ち ます。
114
7 章 : 高度な Unicode 処理
7.5 グ リ フ に対す る Unicode マ ッ ピ ン グ
PDF 内のテ キ ス ト は、さ ま ざ ま な フ ォ ン ト やエン コ ーデ ィ ン グ方式に よ っ て表 さ れてい る
可能性があ る のに対 し 、 TET は、 PDF 内の元のテ キ ス ト 表現にかかわ ら ず、 グ リ フ か ら
抽象情報を抽出 し 、 すべてのテ キ ス ト を Unicode キ ャ ラ ク タ へ正規化 し ます。 PDF 内で見
つか っ た情報を、 おのおの対応す る Unicode 値へ変換す る こ と を、 Unicode マ ッ ピ ング と
いい、 こ れはテ キ ス ト の意味を理解す る (テ キ ス ト の視覚表現を画面上や紙に展開す る の
ではな く ) ために必須です。 正 し い Unicode マ ッ ピ ン グ を与え る ために、 TET は、 PDF 文
書内で見つか る さ ま ざ ま なデー タ 構造を照会 し た り 、 埋め込まれた、 あ る いは外部の フ ォ
ン ト フ ァ イ ルを照会 し た り 、 内蔵の、 あ る いはユーザが与えた テーブルを照会 し た り し ま
す。 さ ら に TET は、 非標準な グ リ フ名に対 し て Unicode マ ッ ピ ン グ を決定す る い く つか
の方式 も 適用 し ます。
あ ら ゆ る 方策を尽 く し て も なお、 一部のテ キ ス ト が Unicode へマ ッ プで き ない PDF 文
書 も あ り ます。 こ の よ う な場合に対処す る ため、 TET は、 問題のあ る PDF フ ァ イ ルに対
す る Unicode マ ッ ピ ン グ を制御す る ために利用で き る さ ま ざ ま な設定機能を提供 し てい ま
す。
マ ッ プ不能グ リ フ PDF 内のテ キ ス ト が Unicode へ う ま く マ ッ プで き ない場合、その原因
は何種類かあ り ます。 た と えば、 Type 1 フ ォ ン ト が未知のグ リ フ名を含んでい る こ と が原
因か も し れ ません。 あ る いは、 TrueType ・ OpenType ・ CID のいずれかの フ ォ ン ト の場合
には、 グ リ フ ID で指定 さ れていて、 フ ォ ン ト ま たは PDF の中に Unicode 値が含まれてい
ない こ と が原因か も し れません。 TET はその よ う なマ ッ プな し キ ャ ラ ク タ に対 し て、 私用
領域内の コ ー ド 点を割 り 当て ます。 こ の PUA 値は fold オプシ ョ ン で除去ま たは置 き 換え
が可能です。 デフ ォ ル ト では PUA キ ャ ラ ク タ は U+FFFD へ、 すなわち Unicode 未知キ ャ
ラ ク タ へマ ッ プ さ れ ま す。 こ の キ ャ ラ ク タ に対 し て自分の コ ー ド は対処す る べ き です。
Unicode マ ッ ピ ン グの問題を意に介 し ない場合であれば、 単に U+FFFD を無視 し て も よ い
です し 、 あ る いは下記の文書オプシ ョ ン を用いて こ れを除去す る こ と も で き ます :
fold={ {[:Private_Use:] remove} }
マ ッ プ不能グ リ フ か ど う か を調べ る には、 get_char_info( ) が返す unknown フ ィ ール ド を
利用 し ます。
Unicode マ ッ ピ ン グ制御の概要 TET には、 実際には Unicode 値を持たない PDF 文書か
ら 、 それで も 何 と か し てテ キ ス ト を う ま く 抽出で き る よ う 処理する ための、 さ ま ざ ま な代
替機能が備わっ てい ます。 し か し なが ら それで も なお、 PDF やフ ォ ン ト デー タ の構造内で
充分な情報が得 ら れないためにテ キ ス ト を抽出す る こ と がで き ない文書 と い う も のは存
在 し ます。 TET は、 Unicode マ ッ ピ ン グ情報を追加供給す る ために活用す る こ と ので き る
さ ま ざ ま な設定機能を持っ てい ます。 こ の節ではそ う し た機能について解説 し ます。
open_document( ) で glyphmapping オプシ ョ ン を用い る と (171 ページの 10.6 「文書関
数」 を参照)、 グ リ フ に対す る Unicode マ ッ ピ ン グ を何通 り かの方式で制御す る こ と がで
き ます。 利用可能な方式の概要を以下に列挙 し ます (組み合わせて利用す る こ と も 可能)。
こ う し た制御は、 フ ォ ン ト ご と に適用す る こ と も で き ま す し 、 1 つの文書内のすべての
フ ォ ン ト に対 し て グ ロ ーバルに適用す る こ と も で き ます :
> forceencoding サブオプシ ョ ン を用い る と 、 PDF におけ る 定義済みのエン コ ーデ ィ ン グ
WinAnsiEncoding ・ MacRomanEncoding が用い ら れ る たびに、 すべて別のエン コ ーデ ィ
ン グで処理 さ せ る こ と がで き ます。
> codelist ・ tounicodecmap サブオプシ ョ ン を用い る と 、 Unicode 値の リ ス ト を シ ンプルテ
キ ス ト 形式 (codelist リ ソ ース) で与え る こ と がで き ます。
7.5 グ リ フ に対する Unicode マ ッ ピ ング
115
> glyphlist サブオプシ ョ ン を用い る と 、非標準グ リ フ名を Unicode 値にマ ッ プ し た リ ス ト
を与え る こ と がで き ます。
> glyphrule サブオプシ ョ ン を用い る と 、グ リ フ名の数値か ら Unicode 値を アルゴ リ ズ ム的
に導 き 出すための規則を定義す る こ と がで き ます。 encodinghint オプシ ョ ン を用い る
と 、 内部規則を制御す る こ と がで き ます。
> 定義済みのエ ン コ ーデ ィ ン グはすでに何ダース も あ り ますが、 それに加え て カ ス タ ム
のエン コ ーデ ィ ン グ を定義す る こ と も 可能で、 こ れは encodinghint オプシ ョ ンで、 ま
たは glyphrule オプシ ョ ンの encoding サブオプシ ョ ンで利用する こ と がで き ます。
> PDF が充分な情報を与えずフ ォ ン ト が PDF に埋め込まれて も いない と き に外部の フ ォ
ン ト か ら Unicode マ ッ ピ ン グ情報が得 ら れ る よ う 設定 し てお く こ と も 可能です。
PDFlib FontReporter Plugin1 で PDF 文書 を分析 正 し いUnicode マ ッ ピ ン グ テーブルを作
り たい と き 、 それに必要な情報を得 る には、 問題を含むその PDF 文書を分析 し なければ
な り ません。
PDFlib GmbH は こ う し た場面で役立つ TET の無償派生製品 PDFlib FontReporter を提供
し てい ま す。 こ れは、 フ ォ ン ト ・ エ ン コ ーデ ィ ン グ ・ グ リ フ の情報を簡単に収集で き る
Adobe Acrobat プ ラ グ イ ンです。 こ のプ ラ グ イ ンは、 実際の各グ リ フ に以下の情報を付 し
た詳 し い フ ォ ン ト レ ポー ト を作成 し ます。
> その対応す る コ ー ド :16 進の 1 桁目が左端の列に示 さ れ、16 進の 2 桁目が上端の行に示
さ れます。 CID フ ォ ン ト の場合はヘ ッ ダに印字 さ れ る オ フ セ ッ ト を加え る と 、 グ リ フ
に対応す る コ ー ド が得 ら れます。
> そのグ リ フ名 : も し あれば。
> そのグ リ フ に対応す る (1 つない し 複数の) Unicode 値 (Acrobat がそれを決定で き る 場
合)。
こ う し た さ ま ざ ま な情報は、 TET のグ リ フ マ ッ ピ ン グ制御に対 し て重要な役割を演 じ ま
す。 あ る フ ォ ン ト レ ポー ト の一例か ら 2 つのページ を 抜 き 出 し て図 7.2 に示 し ま す。
FontReporter Plugin に よ っ て作成 さ れた フ ォ ン ト レ ポー ト を利用すれば、 PDF フ ォ ン ト を
分析 し 、 ひいては TET がテ キ ス ト を正 し く 抽出で き る よ う にマ ッ ピ ン グ テーブルを作 る
こ と が可能です。TET のテ キ ス ト 抽出を制御す る ために Unicode マ ッ ピ ン グ テーブルやグ
リ フ名 ヒ ュ ー リ ス テ ィ ッ ク ス を書 こ う と 思 う な ら ば、それに対応す る フ ォ ン ト レ ポー ト に
目を通 し てお く こ と を強 く 推奨 し ます。
1. PDFlib FontReporter Plugin は www.pdflib.com/products/fontreporter か ら 無償ダウ ン ロー ド 可能です。
116
7 章 : 高度な Unicode 処理
図 7.2
Adobe Acrobat 用 PDFlib FontReporter Plugin が作成する フ ォ ン ト レ ポー ト の例
優先規則 TET はグ リ フ マ ッ ピ ン グ制御を以下の順番で適用 し ます :
> codelist ・ ToUnicode CMap リ ソ ース が まず照会 さ れます。
> フ ォ ン ト が内部 ToUnicode CMap を持つな ら それが次に考慮 さ れます。
> グ リ フ名について TET は、 外部か内部のグ リ フ名マ ッ ピ ン グ規則を、 ど ち ら か フ ォ ン
ト と グ リ フ名の一致す る も のが見つかれば適用 し ます。
> 最後の手段 と し て、 ユーザが与えた グ リ フ リ ス ト が適用 さ れます。
コ ー ド リ ス ト リ ソ ースはあ ら ゆる種類の フ ォ ン ト に利用可能 コ ー ド リ ス ト はグ リ フ リ
ス ト に似てお り 、 ただ各 コ ー ド のグ リ フ名でな く Unicode 値を指定する 点が違い ます。 同
じ 鋳造場で作 ら れた複数の フ ォ ン ト な ら ば、互いに同一の コ ー ド 割 り 当て を使用 し てい る
こ と も あ る か も し れませんが、 一般には コ ー ド (グ リ フ ID と も い う ) と い う のはフ ォ ン
ト ご と に異な る も のです。 その結果、 フ ォ ン ト ご と に別々の コ ー ド リ ス ト が必要にな り ま
す。 コ ー ド リ ス ト はテ キ ス ト フ ァ イ ルであ り 、 各行ご と に、 1 つの コ ー ド に対する Unicode
マ ッ ピ ン グ を以下の規則に従っ て記述 し てい ます :
> パーセ ン ト 記号 「%」 の後のテ キ ス ト は無視 さ れます。 こ れは注釈に使え ます。
> 1 列目にはグ リ フ の コ ー ド を 10 進か 16 進記法で書 き ます。こ れは 1 バ イ ト フ ォ ン ト の場
合は 0 ~ 255 の範囲、 CID フ ォ ン ト の場合は 0 ~ 65535 の範囲内の値でなければな り
ません。
7.5 グ リ フ に対する Unicode マ ッ ピ ング
117
図 7.3
あ る ロ ゴ タ イ プのフ ォ ン ト に対する フ ォ ン ト レポー ト を見た と こ ろ、 こ のフ ォ ン ト は誤っ た Unicode
マ ッ ピ ン グ を持 っ ている こ と がわか っ た。 こ れはカ ス タ ムの コ ー ド リ ス ト で正す こ と が可能。
> その後につづけてその行には、その コ ー ド に対す る Unicode コ ー ド 点を 7 つま で書 く こ
と がで き ます。 値は 10 進か (前に x か 0x をつけて) 16 進記法で与え る こ と がで き ま
す。 UTF-32 に対応 し てい ますので、 サ ロ ゲー ト ペア も 使え ます。
コ ー ド リ ス ト はフ ァ イ ル名の拡張子 と し て .cl を用い る き ま り にな っ てい ます。 コ ー ド リ
ス ト は codelist リ ソ ース を用いて設定を行 う こ と がで き ます。 コ ー ド リ ス ト リ ソ ース が何
も 明示的に指定 さ れていない場合、 TET は <mycodelist>.gl ( こ こ で <mycodelist> は リ ソ ー
ス名) と い う 名前の フ ァ イ ルを searchpath ヒ エ ラ ルキーの中で探 し ます (詳 し く は、 69
ページの 5.2 「 リ ソ ース設定 と フ ァ イ ル検索」 を参照)。 つま り いいかえれば、 リ ソ ース名
と フ ァ イ ル名 (か ら 拡張子 .cl を除いた も の) と が同一の と き は リ ソ ース を設定す る 必要
はない と い う こ と で、 なぜな ら その場合 TET は下記の呼び出 し と 等価な動作を暗黙に行
う か ら です ( こ こ で name は任意の リ ソ ース名) :
set_option("codelist {name name.cl}");
次の例は コ ー ド リ ス ト の使用例です。 こ こ では、 図 7.3 に示す よ う に ロ ゴ タ イ プのグ リ フ
が誤っ てマ ッ プ さ れてい る 場合を想定 し ます。 こ のフ ォ ン ト では、 1 つのグ リ フ が実際に
は複数のキ ャ ラ ク タ を表 し てお り 、キ ャ ラ ク タ をすべて並べ る と 会社の ロ ゴ タ イ プが形成
さ れ る よ う にな っ てい る のですが、 各グ リ フ が誤っ て キ ャ ラ ク タ a ・ b ・ c ・ d ・ e にマ ッ プ
さ れて し ま っ てい る のです。 こ れを正すには以下の コ ー ド リ ス ト を作れば よ いで し ょ う :
% GlobeLogosOneフォントの各コードに対するUnicodeマッピング
x61
x62
x63
x64
x65
x0054
x0042
x0073
x0047
x0062
x0068 x0065 x0020
x006F
x0074 x006F x006E x0020
x006C x006F
x0065
%
%
%
%
%
The
Bo
ston
Glo
be
そ し て open_document( ) で下記のオプシ ョ ン を用いて コ ー ド リ ス ト を与え ます( こ の コ ー
ド リ ス ト は GlobeLogosOne.cl と い う フ ァ イ ルにあ り 、検索パ ス で見つか る よ う に し て あ る
と し て) :
glyphmapping {{fontname=GlobeLogosOne codelist=GlobeLogosOne}}
ToUnicode CMap リ ソ ースはあ ら ゆる種類の フ ォ ン ト に利用可能 PDF は ToUnicode
CMap と い う デー タ 構造に対応 し てい ます。 こ れを用い る と 、 フ ォ ン ト の各グ リ フ に対す
る Unicode 値を与え る こ と がで き ます。 こ のデー タ 構造が PDF フ ァ イ ル内に存在す る 場
合、 TET はそれを利用 し ます。 あ る いは、 ToUnicode CMap を外部フ ァ イ ル と し て与え る
こ と も 可能です。 こ れは PDF 内の ToUnicode CMap が不完全な場合や、 誤っ た内容を含ん
でい る と き や、 存在 し ない場合に有用です。 ToUnicode CMap は コ ー ド リ ス ト よ り も 優先
さ れます。 ただ、 コ ー ド リ ス ト のほ う が ToUnicode CMap よ り も 形式が簡単なため、 好ん
で用い ら れます。
118
7 章 : 高度な Unicode 処理
CMap では、 フ ァ イ ル名に拡張子をつけない き ま り にな っ てい ます。 ToUnicode CMap
は cmap リ ソ ース を用いて設定を行 う こ と がで き ます (69 ページの 5.2 「 リ ソ ース設定 と
フ ァ イ ル検索」 を参照)。 cmap リ ソ ース の内容は、 標準的な CMap の文法に従 う 必要があ
り ます。1 ToUnicode CMap を Warnock フ ァ ミ リ のすべての フ ォ ン ト に適用す る には、open_
document( ) で下記のオプシ ョ ン を用い ます :
glyphmapping {{fontname=Warnock* tounicodecmap=warnock}}
グ リ フ リ ス ト リ ソ ースは 1 バ イ ト フ ォ ン ト に利用可能 グ リ フ リ ス ト (グ リ フ名 リ ス ト
の略) を用い る と 、 非標準のグ リ フ名に対 し て カ ス タ ムの Unicode 値を与えた り 、 あ る い
は標準の グ リ フ名に対す る 既存の値を無視 さ せて別の値を使わせた り す る こ と がで き ま
す。 グ リ フ リ ス ト はテ キ ス ト フ ァ イ ルであ り 、 以下の規則に従っ て各行ご と に、 1 つのグ
リ フ名に対す る 1 つの Unicode マ ッ ピ ン グ を記述 し ます :
> パーセ ン ト 記号 「%」 の後のテ キ ス ト は無視 さ れます。 こ れは注釈に使え ます。
> 1 列目にはグ リ フ名を書 き ます。フ ォ ン ト 内で用い ら れてい る 任意のグ リ フ名を書 く こ
と がで き ます (すなわち、 標準のグ リ フ名の Unicode 値を無視 さ せて別の値を使わせ
る こ と も 可能)。 グ リ フ名の中にパーセ ン ト 記号を入れたい場合は \% と シーケ ン ス で
書 く 必要があ り ます (パーセ ン ト 記号は注釈を開始 さ せ る 役割を持つので)。
> 1 つのグ リ フ名に対 し ては 1 つのマ ッ ピ ン グだけが許 さ れます。同一のグ リ フ名に対 し
て複数のマ ッ ピ ン グがあ る 場合はエ ラ ー と し て扱われます。
> その後につづけてその行には、そのグ リ フ名に対す る Unicode コ ー ド 点を 7 つま で書 く
こ と がで き ます。 値は 10 進記法か (前に x か 0x をつけて) 16 進記法で与え る こ と が
で き ます。 UTF-32 に対応 し てい ますので、 サ ロ ゲー ト ペア も 使え ます。
> グ リ フ名の中に印字不能キ ャ ラ ク タ を入れたい場合はテ キ ス ト フ ァ イ ル用のエ ス ケー
プシーケ ン ス を用い ます (69 ページの 5.2 「 リ ソ ース設定 と フ ァ イ ル検索」 を参照)。
グ リ フ リ ス ト はフ ァ イ ル名の拡張子 と し て .gl を用い る き ま り にな っ てい ます。 グ リ フ リ
ス ト は glyphlist リ ソ ース を用いて設定を行 う こ と がで き ます。グ リ フ リ ス ト リ ソ ース が何
も 明示的に指定 さ れていない場合、 TET は <myglyphlist>.gl ( こ こ で <myglyphlist> は リ
ソ ース名) と い う 名前の フ ァ イ ルを searchpath ヒ エ ラ ルキーの中で探 し ます (詳 し く は、
69 ページの 5.2 「 リ ソ ース設定 と フ ァ イ ル検索」 を参照)。 つま り いいかえれば、 リ ソ ー
ス名 と フ ァ イ ル名 (か ら 拡張子 .gl を除いた も の) と が同一の と き は リ ソ ース を設定す る
必要はない と い う こ と で、 なぜな ら その場合 TET は下記の呼び出 し と 等価な動作を暗黙
に行 う か ら です ( こ こ で name は任意の リ ソ ース名) :
set_option("glyphlist {name name.gl}");
グ リ フ マ ッ ピ ン グの優先規則に よ っ て、 フ ォ ン ト が ToUnicode CMap を含んでい る 場合に
はグ リ フ リ ス ト は照会 さ れません。 以下の例はグ リ フ リ ス ト の使用例です :
% TeX文書で用いられるグリフ名に対するUnicode値
precedesequal
similarequal
negationslash
union
prime
0x227C
0x2243
0x2044
0x222A
0x2032
1. partners.adobe.com/public/developer/en/acrobat/5411.ToUnicode.pdf を参照
7.5 グ リ フ に対する Unicode マ ッ ピ ング
119
CMSY で始 ま る すべて の フ ォ ン ト 名に対 し て グ リ フ リ ス ト を 適用 し た い と き は、 open_
document( ) で下記のオプシ ョ ン を用い ます :
glyphmapping {{fontname=CMSY* glyphlist=tarski}}
1 バ イ ト フ ォ ン ト の数値グ リ フ 名 を規則で解釈 さ せ る PDF文書内のグ リ フ名は と き に、
何 ら かの定義済みの リ ス ト か ら 採っ て来 ら れないで、アルゴ リ ズ ム的に生成 さ れてい る こ
と があ り ます。 こ れはその PDF を生成 し た アプ リ ケーシ ョ ンの 「機能」 か も し れません
し 、あ る いはプ リ ン タ ド ラ イ バが フ ォ ン ト を別の形式に変換 し た こ と に よ る も のか も し れ
ませんが、 その過程で元のグ リ フ名が失われ、 G00, G01, G02,…の よ う な規則的な名前に
置 き 換え ら れてい る こ と があ る のです。 TET は、 普及 し てい る さ ま ざ ま な アプ リ ケーシ ョ
ンや ド ラ イ バが生成す る 数値グ リ フ名を処理す る ためのグ リ フ名規則を内蔵 し てい ます。
ただ、グ リ フ名が同 じ であ っ て も それが別々のエン コ ーデ ィ ン グに対 し て生成 さ れ る 場合
も あ る ので、 open_document( ) で encodinghint オプシ ョ ン を与え て、 文書内に現れ る 規則
的な グ リ フ名が従 う べ き エ ン コ ーデ ィ ン グ を指定す る こ と も で き る よ う にな っ てい ます。
た と えば文書に ロ シ ア語のテ キ ス ト が入っ てい る こ と がわか っ てい る のに、PDF 内の情報
不足で う ま く それが抽出で き ない場合は、 オプシ ョ ン encodinghint= cp1250 を与え て キ リ
ル文字 コ ー ド ページ を指定す る こ と がで き ます。
こ う し た数値グ リ フ名を解釈す る 内蔵の規則のほかに、 自分でカ ス タ ム の規則を定義
す る こ と も で き ます。それには open_document( ) で glyphmapping オプシ ョ ンに fontname・
glyphrule サブオプシ ョ ン を用い ます。 その際には以下の情報を与え る 必要があ り ます :
> その規則を適用す る べ き フ ォ ン ト の完全名か短縮名 (fontname オプシ ョ ン)
> グ リ フ名の接頭辞、 すなわち数値部の前につ く キ ャ ラ ク タ 列 (prefix サブオプシ ョ ン)
> 数値を解釈す る 際の基数= 10 進か 16 進か (base サブオプシ ョ ン)
> で き た数値 コ ー ド を解釈す る べ き エン コ ーデ ィ ン グ (encoding サブオプシ ョ ン)
た と えばフ ォ ン ト T1, T2, T3,…内のグ リ フ名が c00, c01, c02, …, cFF で、各グ リ フ名が WinAnsi
キ ャ ラ ク タ の 16 進位置 (00, …, FF) にそれぞれ対応 し て い る こ と がわか っ た (PDFlib
FontReporter を利用す る な ど し て) 場合には、 open_document( ) で下記のオプシ ョ ン を用
い ます :
glyphmapping {{fontname=T* glyphrule={prefix=c base=hex encoding=winansi} }}
外部 フ ォ ン ト フ ァ イル と シ ス テム フ ォ ン ト PDF が Unicode マ ッ ピ ン グのための充分な
情報を持たず、 し か も フ ォ ン ト が埋め込まれていない と き は、 TET が Unicode マ ッ ピ ン グ
の導出に利用で き る フ ォ ン ト デー タ が追加 さ れ る よ う 設定する こ と も で き ます。フ ォ ン ト
デー タ はデ ィ ス ク 上の TrueType か OpenType の フ ォ ン ト フ ァ イ ルか ら 来 る よ う にす る こ
と も で き 、 その場合は fontoutline リ ソ ース カ テ ゴ リ を用いてその よ う に設定す る こ と が
可能です。 あ る いは Mac や Windows シ ス テ ム上では、 TET はホ ス ト オペレーテ ィ ン グ シ
ス テ ム上に イ ン ス ト ール さ れた フ ォ ン ト を利用す る こ と も で き ます。 こ う し た ホ ス ト フ ォ
ン ト を利用 さ せない よ う にす る には open_document( ) で fontoutline オプシ ョ ン を用い ま
す。
デ ィ ス ク フ ァ イ ルを WarnockPro フ ォ ン ト のために設定す る には下記の呼び出 し を行い
ます :
TET_set_option("fontoutline {WarnockPro WarnockPro.otf}");
外部フ ォ ン ト フ ァ イ ルの設定については、 詳 し く は、 69 ページの 5.2 「 リ ソ ー ス 設定 と
フ ァ イ ル検索」 を参照 し て く だ さ い。
120
7 章 : 高度な Unicode 処理
8 画像抽出
8.1 画像抽出の基本
さ ま ざ ま な画像形式 TET は PDF ページ群か ら ラ ス タ 画像群を抽出 し 、 その抽出 し た画
像を、 以下のいずれかの形式で格納 し ます :
> TIFF (.tif) 画像は多 く の場合に生成 さ れます。 TET が生成す る 多 く の TIFF 画像は、 多
く の TIFF ビ ュ ーア ・ コ ン シ ュ ーマで利用で き ます。 ただ し 、 い く つかの高度な TIFF
機能には、 すべての画像ビ ュ ーアが対応 し てい る わけではあ り ません。 Windows XP の
画像ビ ュ ーアは、 TIFF で広 く 使われてい る Flate 圧縮に対応 し ていない こ と に留意 し
て く だ さ い。 当社では Adobe Photoshop を、 TIFF 画像の有効性に関す る ベンチマー ク
と し てい ます。
> JPEG (.jpg) は、PDF 内ですでに JPEG アルゴ リ ズ ム (DCTDecode フ ィ ル タ ) で圧縮 さ れ
てい る 画像について生成 さ れます。 ただ し 、 DCT 圧縮 さ れた画像を TIFF と し て抽出
す る 必要があ る 場合 も い く つかあ り ます。 PDF 色処理のすべての側面が JPEG で表現
で き る わけではないか ら です。
> JPEG 2000 (.jpx) は、PDF 内ですでに JPEG 2000 アルゴ リ ズ ム (JPXDecode フ ィ ル タ ) を
用いて圧縮 さ れてい る 画像について生成 さ れます。
画像 を デ ィ ス ク ま たは メ モ リ へ抽出 TET API は、 PDF 文書か ら 抽出 し た画像を 2 種類
の方式で受け渡す こ と がで き ます :
> write_image_file( ) API 関数は、画像フ ァ イ ルをデ ィ ス ク 上に生成 し ます。こ の画像フ ァ
イ ルのベース フ ァ イ ル名は filename オプシ ョ ンで指定す る 必要があ り ます。 TET は画
像種別に応 じ て適切な接尾辞を自動的に付加 し ます。
> get_image_data( ) API 関数は、 画像デー タ を メ モ リ 内で受け渡 し ます。 こ れは、 画像
デー タ を他の処理構成要素へ、 デ ィ ス ク フ ァ イ ルを扱 う 必要な し に受け渡 し たい と き
に便利です。
詳細は、 自分の画像抽出上の要請に依存 し ます (126 ページの 8.4 「ページベース と リ ソ ー
スベース の画像ループ」 を参照) 。 いずれの場合に も 、 抽出画像の種別を知 る こ と が可能
です (次項参照)。
抽出画像の フ ァ イル種別 を知 る 画像フ ァ イ ル種別は、TETML 内の Image/@extractedAs
属性で報告 さ れてい ます。 API レベルでは、 以下の慣用表現を用いて抽出画像の種別を知
る こ と がで き ます。
int imageType = tet.write_image_file(doc, tet.imageid, "typeonly");
/* 画像種別を表す数値を種別名へマップ */
String imageFormat;
switch (imageType) {
case 10:
imageFormat = "TIFF";
break;
case 20:
imageFormat = "JPEG";
break;
8.1 画像抽出の基本
121
case 30:
imageFormat = "JPEG2000";
break;
case 40:
imageFormat = "RAW";
break;
default:
System.err.println("write_image_file() が未知の値を返しました "
+ imageType + ", 画像をスキップします, エラー : "
+ tet.get_errmsg());
}
画像の XMP メ タ デー タ PDF では、 XMP 形式を用いて、 文書全体ま たは文書の一部に対
し て メ タ デー タ を付与 し てい ます。 XMP と その用途に関 し て詳 し く は右記を参照 し て く
だ さ い : www.pdflib.com/knowledge-base/xmp-metadata/
画像オブジ ェ ク ト には、 PDF 文書の中で、 XMP メ タ デー タ が関連づけ ら れてい る こ と
があ り ます。 XMP メ タ デー タ が存在 し てい る と き は、 TET はデフ ォ ル ト では、 出力形式
JPEG ・ TIFF の抽出画像につい て、 そ の中に それ を 埋め込み ま す。 こ の動作は、 write_
image_file( ) ・ get_image_data( ) の keepxmp オプシ ョ ンで制御す る こ と がで き ます。 こ の
オプシ ョ ンが false に設定 さ れてい る と き は、 TET は、 画像出力フ ァ イ ルを生成す る 際に
画像 メ タ デー タ を無視 し ます。
pCOS ク ッ ク ブ ッ ク 内の image_metadata ト ピ ッ ク では、画像フ ァ イ ルを一切生成せず
に pCOS イ ン タ フ ェース を用いて画像 メ タ デー タ を直接抽出す る 方法を示 し てい ます。
122
8 章 : 画像抽出
8.2 画像の連結 と フ ィ ル タ リ ン グ
画像連結 画像を、 PDF 文書内で表現 さ れてい る と お り に抽出す る こ と が望ま し く ない
場合 も あ り ます : 一見 1 個の画像であ る も のが、 実はた く さ んの小画像を並べた も のであ
る 場合が多 く あ り ます。 こ の よ う に画像を断片化す る 理由 と し て よ く あ る のは以下の と お
り です :
> アプ リ ケーシ ョ ンや ド ラ イ バのなかには、マルチ ス ト リ ッ プ TIFF 画像を断片化 PDF 画
像へ変換す る も のがあ り ます。 ス ト リ ッ プの数は数ダース か ら 何百個に も 及ぶ場合が
あ り ます。
> ス キ ャ ン ソ フ ト ウ ェ アのなかには、 ス キ ャ ン し たページ を小 さ な断片 (ス ト リ ッ プ ま
たは タ イ ル) に分割す る も のがあ り ます。 断片の数は通常、 数ダース を超え る こ と は
あ り ません。
> アプ リ ケーシ ョ ンのなかには、 印刷出力や PDF 出力を生成す る 際に画像を小 さ な断片
に分割す る も のがあ り ます。 極端な例 と し ては、 と り わけ Microsoft Office アプ リ ケー
シ ョ ン群に よ っ て作成 さ れた文書では、1 つのページが数千 も の小画像断片を含んでい
る 場合 も あ り ます。
TET の画像連結エン ジ ンは、 こ の よ う な状況を検出 し て、 画像断片を再結合 し て 1 つの大
き な有用な画像に し ます。 画像群が連結候補 と 見な さ れ る ためには、 い く つかの条件が満
た さ れ る 必要があ り ます :
> 画像断片群が水平ま たは垂直に並んでお り (任意の角度でではな く )、 サブ画像群の矩
形グ リ ッ ド を形成 し てい る こ と 。
> 構成要素あ た り のビ ッ ト 数が同 じ であ る こ と 。
> 色空間が同 じ 、 ない し 互換であ る こ と 。
> 色空間 と 圧縮方式 (特に JPEG 2000 圧縮) の組み合わせに よ っ ては、画像連結がで き ま
せん。
連結候補群が、 結合 し て大 き な画像にで き る 場合には、 それ ら は連結 さ れます。 連結 さ れ
た画像は、images[ ]/mergetype pCOS 擬似オブジ ェ ク ト に よ っ てその よ う に識別で き ます。
それは、 連結 さ れた画像については値 1 (擬似) を持ち、 連結処理に よ っ て消費 さ れた画
像については 2 (消費済) を持ち ます。 消費済画像は一般に、 受け取っ た アプ リ ケーシ ョ
ン側では無視す る べ き です。
画像連結を完全に無効化す る には下記のページオプシ ョ ン を用い ます :
図 8.1
こ の画像はた く
さ んの小 さ な ス
ト リ ッ プか ら
成っ ています
が、 TET は これ
を 1 個の再利用
可能な画像 と し
て抽出 し ます。
8.2 画像の連結 と フ ィ ル タ リ ング
123
imageanalysis={merge={disable}}
画像はいつ連結 さ れ るか ページ上の画像の分析 と 連結は、 おのおの open_page( ) への
呼び出 し に よ っ て引 き 起 こ さ れます。 こ れは、 以下の重要な結果につなが り ます :
> pCOS images[ ] 配列内の項目数は、すなわち length:images 擬似オブジ ェ ク ト の数は、増
え てい く 可能性があ り ます : ページが順次処理 さ れてい く につれて、 画像連結に よ っ
てで き た擬似画像が配列に加わ っ てい く か ら です。 ですので、 すべての連結済画像を
抽出す る ためには、 length:images を取得 し て画像デー タ を抽出する 前に、 文書内のす
べてのページ を開 く 必要があ り ます。 擬似 (連結済) 画像は、 images[ ]/mergetype 擬
似オブジ ェ ク ト で、 それに対応す る フ ラ グ artificial (数値 1) でマー ク さ れてい ます。
> 一方、 images[ ] 配列内の要素のなかには、 連結済画像の一部分 と し てのみ用い ら れ る
も のがあ り え ます。 し か し 、 消費済の項目は、 images[ ] 配列か ら 除去 さ れ る のではな
く 、 images[ ]/mergetype 擬似オブジ ェ ク ト で、 それに対応する フ ラ グ consumed (数値
2) でマー ク さ れてい ます。
文書内に画像がい く つあ るか なん と 、 こ の簡単な質問には簡単な答えがあ り ません。答
えは以下の決定に よ っ て変わ り ます :
> 画像 リ ソ ース を数えたいか、 それ と も 配置 さ れた画像を数えたいのか。
> 連結済画像の一部分 と し てのみ用い ら れてい る 、 単独では配置 さ れていない画像を数
に入れたいか。
TET と pCOS 擬似オブジ ェ ク ト を用いれば、こ れ ら すべての種類の画像数の答え を知 る こ
と がで き ます。TET ク ッ ク ブ ッ ク 内の image_count ト ピ ッ ク では、画像の さ ま ざ ま な数え
方の可能性を演示 し てい ます。 それは以下の よ う な出力を生成 し ます :
No of raw image resources before merging: 82
No of placed images: 12
No of images after merging (all types): 83
normal images: 1
artificial (merged) images: 1
consumed images: 81
No of relevant (normal or artificial) image resources: 2
小画像 フ ィ ル タ リ ン グ TET は、 ページ上に微小画像がた く さ んあ る と き は、 それ ら を
無視 し ます。 多 く の小画像は、 画像連結処理に よ っ て結合 さ れて 1 つの大画像に さ れ る こ
と が多いですので、小画像除去は画像除去の後に行われます。かつそれ ら は、imageanalysis
ページオプシ ョ ンの smallimages サブオプシ ョ ンの maxarea ・ maxcount サブオプシ ョ ン
で指定で き る 大 き さ と 数に関す る 条件を満たす必要があ り ます。小画像除去を完全に無効
化す る には、 下記のページオプシ ョ ン を用い ます :
imageanalysis={smallimages={disable}}
124
8 章 : 画像抽出
8.3 配置画像 と 画像 リ ソ ース
TET では、 配置画像 と 画像 リ ソ ース を区別 し ます :
> 配置画像は、 ページ上の画像に対応 し ます。 配置画像は視覚特性を持ち ます : 特定の
位置に配置 さ れてお り 、 寸法 (ポ イ ン ト ・ ミ リ メ ー ト ルな ど の絶対単位で測 ら れ る ) を
持っ てい ます。 多 く の場合その画像はページ上で可視にな っ てい ますが、 場合に よ っ
ては、 ページ上の他のオブジ ェ ク ト に よ っ て隠 さ れていた り 、 可視ページ領域の外に
配置 さ れていた り 、 全体的ない し 部分的に ク リ ッ プ さ れていた り し て不可視にな っ て
い ます。 配置画像は、 TETML 内で PlacedImage 要素で表 さ れてい ます。
> 画像 リ ソ ース は、 実際の ピ ク セルデー タ ・ 色空間 ・ 要素数 ・ 要素あ た り ビ ッ ト 数な ど
を表現す る リ ソ ース です。 配置画像 と 違っ て、 画像 リ ソ ース は明示的な視覚情報を持
ち ません。 ただ し 、 幅 と 高 さ の特性 (ピ ク セル単位で測 ら れ る ) は持っ てい ます。 画
像 リ ソ ース はそれぞれ一意な ID を持っ てお り 、 それを用いてその ピ ク セルデー タ を抽
出す る こ と がで き ます。 画像 リ ソ ース は、 TETML 内で Image 要素で表 さ れてい ます。
1 個の画像 リ ソ ース は、 その文書内の任意の数の配置画像の も と と し て使われ る こ と があ
り え ます。 通常、 画像 リ ソ ース はそれぞれ 1 回だけ配置 さ れますが、 同一ページ上に、 ま
たは複数ページ上に繰 り 返 し 配置 さ れ る こ と も あ り え ます。 た と えば、 文書内の各ページ
のヘ ッ ダに繰 り 返 し 用い ら れ る 企業 ロ ゴの画像を考え てみま し ょ う 。ページ上の ロ ゴはそ
れぞれ、 1 個の配置画像か ら 成っ てい ますが、 最適化 さ れた PDF においては、 それ ら の配
置画像がすべて同一の画像 リ ソ ース に紐付け ら れてい る こ と があ り え ます。 一方、 最適化
さ れていない PDF においては、 配置 ロ ゴはそれぞれ、 同一の画像 リ ソ ース の自分用の複
製を元に し てい る こ と があ り え ます。 こ れは見た目は同 じ 結果にな り ますが、 PDF 文書の
フ ァ イ ルサ イ ズは大 き く な り ます。 最適化 さ れていない PDF 文書は、 ど のページか ら も
参照す ら さ れていない画像 リ ソ ース (すなわち未使用 リ ソ ース) を含んでい る こ と も あ り
え ます。
表 8.1 で、 配置画像 と 画像 リ ソ ース の さ ま ざ ま な特性を比較 し てい ます。
表 8.1 配置画像 と 画像 リ ソ ースの比較
特性
配置画像
画像 リ ソ ース
TETML 要素
PlacedImage
Image
画像連結によ る影響
あり
あり
ページ と の紐付け
あり
-
ピ ク セル単位の幅 と 高 さ
あり
あり
ポ イ ン ト 単位の幅 と 高 さ
あり
-
ページ上の位置
あり
-
視覚上の出現回数
1
0、 1 ない し それ以上
一意な ID
な し : get_image_info( ) が返す imageid メ ン
はい : get_image_info( )
バ と 、 TETML 内の PlacedImage/@image 属性は、 が返す imageid メ ンバ と 、
背後の画像 リ ソ ース を特定するにすぎ ません
TETML 内の Image/@id 属
性
TET コ マ ン ド ラ イ ン ツール < ファイル名 >_p< ページ番号 >_< 画像番号 >.
における フ ァ イル命名規則 [tif|jpg|jpx]
< ファイル名 >_I< 画像
ID>.
[tif|jpg|jpx]
8.3 配置画像 と 画像 リ ソ ース
125
8.4 ページベース と リ ソ ースベースの画像ルー プ
配置画像 と 画像 リ ソ ース の違いは、 すなわち、 画像抽出について 2 種類の根本的に異な る
アプ ロ ーチを も た ら し ます : ページベース と リ ソ ースベース の画像抽出ループです。 ど ち
ら の方式 も 、 画像をデ ィ ス ク フ ァ イ ルか メ モ リ へ抽出する ために用い る こ と がで き ます。
ページベースの画像抽出ループ こ の場合には、 アプ リ ケーシ ョ ン は正確なページ レ イ
ア ウ ト と 配置画像に関心があ り 、 画像デー タ の重複はい と わない こ と にな り ます。 ページ
ベース のループで画像を抽出す る と 、配置画像ご と に 1 つずつ画像フ ァ イ ルが生成 さ れま
すので、 複数の抽出配置画像に同一の画像デー タ が含 ま れ る こ と が あ り え ま す。 ア プ リ
ケーシ ョ ン側で画像 ID の重複をチ ェ ッ ク す る こ と で画像の重複を避け る こ と も で き ます。
し か し 、 一意な画像 リ ソ ース を抽出 し たいな ら 、 リ ソ ースベース の画像抽出ループを用い
る ほ う が簡単です (後述)。
ペ ー ジ ベー ス の 画 像 抽 出 ル ー プ は、 TET
コ マ ン ド ラ イ ン ツ ールではオ プ シ ョ
ン - - imageloop page で有効にす る こ と がで き ます。 API レベルでのページベース の画像抽
出のための コ ー ド は、 TET ク ッ ク ブ ッ ク の images_per_page ・ images_in_memory ト ピ ッ
ク 内で演示 し てい ます。 images_per_page ク ッ ク ブ ッ ク ト ピ ッ ク で、 ページ上の画像の座
標を取得す る 方法 も 示 し てい ます。
ページベース の画像抽出ループの詳細 (上述のサンプル コ ー ド を参照 し て く だ さ い) :
get_image_info( ) が、 配置画像に関す る 視覚情報 と 、 その背景画像デー タ の pCOS 画像 ID
(imageid フ ィ ール ド で) を取得 し ます。 こ の ID を用いて、 pcos_get_number( ) で画像の
色空間や、 幅 ・ 高 さ を ピ ク セル単位で表 し た も の と い っ た さ ら な る 詳細 を 取得 し た り 、
write_image_file( ) ま たは get_image_data( ) でその画像の ピ ク セルデー タ 本体を取得 し た
り す る こ と がで き ます。同一の画像が 1 つない し 複数のページ上で複数回参照 さ れてい る
場合、 その対応す る ID は同一にな り ます。
リ ソ ースベースの画像抽出ループ こ の場合には、 アプ リ ケーシ ョ ン は文書内の画像 リ
ソ ース に関心があ り 、 ど の画像が ど のページで用い ら れてい る かはい と わない こ と にな り
ます。 複数回 (1 つない し 複数のページ上に) 配置 さ れてい る 画像 リ ソ ース が 1 回だけ抽
出 さ れます。 その半面、 ど のページに も 全 く 配置 さ れていない画像 も 抽出 さ れます。
リ ソ ー ス ベー ス の 画像抽 出 ル ー プ は、 TET コ マ ン ド ラ イ ン ツ ー ル で は オ プ シ ョ
ン - - imageloop resource で有効にす る こ と がで き ます。API レベルでの リ ソ ースベース の画
像抽出のための コ ー ド は、 image_resources ミ ニサンプル ・ ク ッ ク ブ ッ ク ト ピ ッ ク 内で演
示 し てい ます。 pCOS パス リ フ ァ レ ン ス には、 pCOS イ ン タ フ ェース に関 し て さ ら に詳 し
い情報があ り ます。
リ ソ ー ス ベー ス の画像抽出ループの詳細 (上述のサ ン プル コ ー ド を 参照 し て く だ さ
い) : 画像 リ ソ ース を抽出す る 前に、 画像連結が必ず有効にな る よ う に、 すべてのページ
が開かれます。 画像連結が関係ない場合は こ の ス テ ッ プは ス キ ッ プで き ます。 画像を抽出
す る ためには、 その対応す る 画像 ID が必要です。 コ ー ド は、 0 か ら 最大画像 ID ま でのす
べての値を評価 し ます。 こ の最大画像 ID は、 pcos_get_number( ) を用いて、 pCOS パ ス
length:images の値 と し て取得 さ れます。 連結済画像の消費済部分 (マルチ ス ト リ ッ プ画
像の ス ト リ ッ プな ど) を ス キ ッ プす る ために、 mergetype pCOS 擬似オブジ ェ ク ト を用い
て各画像 リ ソ ース の種別が調べ ら れます。 こ れに よ っ て、 画像連結処理に よ っ て消費 さ れ
た画像部分を ス キ ッ プす る こ と がで き ます (最終的な連結済画像にのみ関心があ る か ら で
す)。 ひ と たび画像 ID がわかれば、 関数 write_image_file( ) ま たは get_image_data( ) を呼
び出せば、 前者な ら 画像デー タ をデ ィ ス ク フ ァ イ ルへ書 き 出す こ と がで き 、 後者な ら ピ ク
セルデー タ を メ モ リ 内で受け渡す こ と がで き ます。
126
8 章 : 画像抽出
8.5 配置画像の視覚情報
get_image_info( ) を用い る と 、 配置画像の視覚情報を取得する こ と がで き ます。 各画像に
ついて、 image_info 構造内で以下の値が得 ら れます (図 8.2 参照) :
> x ・ y フ ィ ール ド は、 画像参照点の座標です。 参照点は通常、 画像の左下隅です。 ただ
し 、 ページ上の座標系変換に よ っ て参照点が変わ る こ と も あ り ます。 た と えば、 画像
が水平反転 さ れていれば、 参照点は画像の左上隅にな る で し ょ う 。 y の値は topdown
ページオプシ ョ ンに依存 し ます。
> width ・ height フ ィ ール ド は、 ページ上の配置画像の物理的寸法に対応 し ます。 こ れ ら
はポ イ ン ト (すなわち 1/72 イ ンチ) 単位で与え ら れます。
> 角度 alpha は、ピ ク セル行の向 き を記述 し ます。こ の角度は範囲 -180°< alpha < +180°
を と り ます。 角度 alpha は、 画像を その参照点を中心に回転 さ せます。 正立 し た画像
については alpha は 0°にな り ます。 alpha と beta の値は topdown ページオプシ ョ ン
に依存 し ます。
> 角度 beta は、ピ ク セル列の向 き を記述 し ます。 こ れは alpha の垂線に平行です。 こ の角
度は範囲 -180°< beta < +180°、 ただ し ± 90°以外の値を と り ます。 角度 beta は画像
を斜形化 し 、 beta=180°は画像を x 軸で反転 し ます。 正立 し た画像については、 beta
は範囲 -90°< beta < +90°を と り ます。 abs(beta) > 90°な ら 、 その画像はベース ラ イ
ンで反転 さ れてい ます。
> imageid フ ィ ール ド は、画像の pCOS ID を内容 と し て持ち ます。こ れを用い る と 、pCOS
関数群で詳 し い画像情報を取得 し た り 、write_image_file( ) ま たは get_image_data( ) で
画像ピ ク セルデー タ 本体を取得 し た り す る こ と がで き ます。
画像変形の結果 と し て、 抽出画像の向 き は誤 り に見え る 場合があ り ます。 なぜな ら 、 抽出
さ れ る 画像デー タ は、 PDF 内の画像オブジ ェ ク ト に基づいてい る か ら です。 PDF ページ
上で配置画像に対 し て適用 さ れてい る 回転や反転 と いっ た変形はいずれ も 、 ピ ク セルデー
タ には適用 さ れず、 元の ピ ク セルデー タ が抽出 さ れます。
画像解像度 画像解像度を dpi (dots per inch) 単位で算出す る には、 ピ ク セル単位の画像
幅を ポ イ ン ト 単位の画像幅で割 り 、 それに 72 をかけ る 必要があ り ます :
while (tet.get_image_info(page) == 1) {
String imagePath = "images[" + tet.imageid + "]";
int width = (int) tet.pcos_get_number(doc, imagePath + "/Width");
int height = (int) tet.pcos_get_number(doc, imagePath + "/Height");
double xDpi = 72 * width / tet.width;
図 8.2
画像の視覚情報
ght
hei
(x, y)
th
wid
alpha
8.5 配置画像の視覚情報
127
double yDpi = 72 * height / tet.height;
...
}
回転 さ れた り 斜形化 さ れた り し てい る 画像については、 dpi 値は無意味か も し れない こ と
に留意 し て く だ さ い。 画像の dpi 計算の た めの完全な コ ー ド は、 TET ク ッ ク ブ ッ ク の
determine_image_resolution ト ピ ッ ク 内にあ り ます。
128
8 章 : 画像抽出
8.6 制約 と 注意
画像の色再現性 TET は画像を抽出す る 際に、 画像品質を下げません :
> ラ ス タ 画像がダ ウ ンサンプル さ れ る こ と はあ り ません。
> 画像の色空間は、出力内で温存 さ れます。CMYK か ら RGB への変換や、同様の色変換を
TET が適用す る こ と はあ り ません。
> 色要素の数はつねに不変 と な り ます。 た と えば、 RGB 画像は、 灰色 し か含んでいな く
て も 、 グ レース ケールへ変更 さ れません。
各種画像対応 場合に よ っ ては、 抽出 さ れた画像の色の見た目が、 PDF ページ上での見
た目 と 異な る こ と があ り ます。 画像の輪郭は温存 さ れていなが ら も 、 色は以下の よ う な理
由で違っ て見え る 場合があ り ます :
> 画像マ ス ク が適用 さ れてい る 。
> 着色 さ れた グ レース ケール画像は、 その色な し で、 グ レー ス ケール画像 と し て抽出 さ
れます。
> DeviceN カ ラ ーは TIFF では対応 し てい ませんので、DeviceN 色空間を持つ画像は、N=1・
3 ・ 4 の場合にはそれぞれグ レース ケール ・ RGB ・ CMYK 画像 と し て抽出 さ れます。 N>4
の も のについては、 1 個ない し 複数のアルフ ァ チ ャ ン ネルを持つ CMYK TIFF 画像が生
成 さ れます。
> 分版色空間を持つ画像は、 グ レー ス ケール画像 と し て抽出 さ れ ます。 画像の着色に用
い ら れていた特色は失われます。
> イ ンデ ッ ク ス付き ICCBased 色空間を持つ画像 : ICC プ ロ フ ァ イ ルは無視 さ れます。
画像抽出の予期せぬ結果 場合に よ っ ては、 抽出 さ れた画像の輪郭が PDF ページ と 違っ
て見え る こ と があ り ます :
> 画像が水平に (上下逆)、 ま たは垂直に反転 し て見え る こ と があ り ます。 こ れは、 PDF
ページ上で何 ら かの変形が画像に適用 さ れていて も 、 TET はそれにかかわ ら ず、 その
画像の元の ピ ク セルデー タ を抽出 し てい る こ と に よ り ます。
> 画像マ ス ク は無視 さ れますので、 マ ス ク 効果は抽出画像へは反映 さ れません。
非対応の画像種別 以下の種別の PDF 画像は抽出で き ません。 すなわち、 write_image_
file( ) は こ れ ら の場合には -1 を返 し ます :
> PDF イ ン ラ イ ン画像: こ れは まれに し か用い ら れない種類の PDF 画像であ り 、と き た ま
小 さ な ラ ス タ 画像に対 し て用い ら れてい ます。
> JBIG2 圧縮を用いた画像
> イ ンデ ッ ク ス付 き Lab 色空間を用いた画像
8.6 制約 と 注意
129
130
8 章 : 画像抽出
9 TET マー ク ア ッ プ言語 (TETML)
9.1 TETML を生成
PDF 文書文書の内容をプ ロ グ ラ ミ ン グ イ ン タ フ ェース経由で提供す る こ と のほかに、TET
では、 こ れ と 同 じ 情報を表す XML 出力を生成す る こ と も で き ます。 TET が生成す る こ の
XML 出力を TET マー ク ア ッ プ言語 (TETML) と 呼んでい ます。 TETML は、 PDF ページ
群のテ キ ス ト 内容を含んでい る ほか、 テ キ ス ト 位置 ・ フ ォ ン ト ・ 文字サ イ ズな ど の情報 も
含んでい る こ と があ り ます。 TET がページ上に表組の よ う な構造を検出 し た と き は、 その
表組は TETML 内で表 ・ 表行 ・ セル要素の階層構造 と し て表 さ れます。 なお、 表組情報は
TET プ ロ グ ラ ミ ン グ イ ン タ フ ェ ース では得 る こ と がで き ず、 TETML を通 じ てのみ得 る こ
と がで き ます。 TETML は画像 と 色空間に関す る 情報 も 含んでい ます。
PDF 文書を TETML へ変換す る には、 TET コ マ ン ド ラ イ ン ツールか TET ラ イ ブ ラ リ の
いずれか を用い る こ と がで き ます。 いずれの場合に も 、 TETML 生成の詳細を制御す る た
めに利用で き る さ ま ざ ま なオプシ ョ ンがあ り ます。
TET コ マ ン ド ラ イ ン ツ ールで TETML を生成 TET コ マ ン ド ラ イ ン ツールを用い る 場合
は、 --tetml オプシ ョ ンで TETML オプシ ョ ン を生成す る こ と がで き ます。 下記の コ マ ン ド
は TETML 出力文書 file.tetml を生成 し ます :
tet --tetml word file.pdf
さ ま ざ ま なオプシ ョ ン を用いて、 文書の一部分のページのみを変換 し た り 、 処理オプシ ョ
ン を与えた り す る こ と も で き ます。 詳 し く は、 19 ページの 2.1 「 コ マ ン ド ラ イ ンオプシ ョ
ン」 を参照 し て く だ さ い。
TET ラ イ ブ ラ リ で TETML を生成 TET ラ イ ブ ラ リ では、 API 呼び出 し の簡単な連鎖を用
いて TETML 出力を生成す る こ と がで き ます。 tetml サンプルプ ロ グ ラ ム では、 プ ロ グ ラ
ム的に TETML を生成す る ための正統的な指示列を演示 し てい ます。 こ のサンプルプ ロ グ
ラ ムは、 すべての対応言語バ イ ンデ ィ ン グで利用可能です。
TETML 出力は、 デ ィ ス ク フ ァ イ ル上に も メ モ リ 内に も 生成で き ま す。 生成 さ れ た
TETML ス ト リ ー ム は、 現在利用 さ れて い る 多 く のプ ロ グ ラ ミ ン グ言語が提供 し てい る
XML 対応を用いて XML ツ リ ーへパースす る こ と がで き ます。 tetml サンプルプ ロ グ ラ ム
では、 TETML ツ リ ーを処理す る 様子 も 演示 し てい ます。
TETML の中身 TETML 出力は UTF-8 (USS ま たは MVS を用いた zSeries 上 :EBCDICUTF-8。 www.unicode.org/reports/tr16 を参照) で符号化 さ れてお り 、 以下の情報を含んで
い ます ( こ れ ら の項目のい く つかはオプシ ョ ナルです) :
> 一般文書情報 : 暗号化ス テー タ ス ・ PDF 規格 ・ タ グ付き PDF な ど
> 文書情報フ ィ ール ド ・ XMP メ タ デー タ
> 各ページのテ キ ス ト 内容 (単語ま たは段落。 行を含め る こ と も 可能)
> グ リ フ の フ ォ ン ト と 位置情報 (フ ォ ン ト 名 ・ サ イ ズ ・ 座標)
> グ リ フ の レ イ ア ウ ト 属性 (下 / 上付 き ・ ド ロ ッ プキ ャ ッ プ ・ 影付 き )
> ハ イ フ ネーシ ョ ン属性
> 構造情報。 例 : 表組
> ページ上の配置画像に関す る 情報
9.1 TETML を生成
131
> リ ソ ース情報、 すなわち フ ォ ン ト ・ 色空間 ・ 画像
> PDF 処理中に例外が発生 し た場合はエ ラ ー メ ッ セージ
TETML 内では、 さ ま ざ ま な要素 と 属性がオプシ ョ ナルです。 詳 し く は、 135 ページの 9.2
「TETML の詳細を制御」 を参照 し て く だ さ い。
さ ま ざ ま な TETML の例
す:
以下に、 TETML 文書の最 も 重要な各部分を抜 き 出 し て示 し ま
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created by the PDFlib Text Extraction Toolkit TET (www.pdflib.com) -->
<TET xmlns="http://www.pdflib.com/XML/TET3/TET-3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.pdflib.com/XML/TET3/TET-3.0
http://www.pdflib.com/XML/TET3/TET-3.0.xsd"
version="4.1">
<Creation platform="Linux-x86_64" tetVersion="4.1dev" date="2012-01-27T11:16:43+01:00" />
<Document filename="FontReporter.pdf" pageCount="9" filesize="132437" linearized="true"
pdfVersion="1.6">
<DocInfo>
<Author>PDFlib GmbH</Author>
<CreationDate>2010-07-06T22:51:50+00:00</CreationDate>
<Creator>FrameMaker 7.0</Creator>
<ModDate>2010-07-06T23:07:59+02:00</ModDate>
<Producer>Acrobat Distiller 9.3.3 (Windows)</Producer>
<Subject>PDFlib FontReporter</Subject>
<Title>PDFlib FontReporter Manual</Title>
</DocInfo>
<Metadata>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c043 52.372728, 2009/
01/18-15:08:04
">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
...XMPメタデータ...
</rdf:RDF>
</x:xmpmeta>
</Metadata>
<Options>tetml={} </Options>
<Pages>
<Page number="1" width="485" height="714">
<Options>tetml={} granularity=word </Options>
<Content granularity="word" dehyphenation="false" dropcap="false" font="false"
geometry="false" shadow="false" sub="false" sup="false">
<Para>
<Word>
<Text>FontReporter</Text>
<Box llx="28.32" lly="613.53" urx="214.98" ury="643.53"/>
</Word>
</Para>
<Para>
<Word>
<Text>Version</Text>
<Box llx="28.32" lly="582.87" urx="100.24" ury="604.83"/>
</Word>
<Word>
<Text>1.4</Text>
<Box llx="105.05" lly="582.87" urx="128.79" ury="604.83"/>
132
9 章 : TET マー ク ア ッ プ言語 (TETML)
</Word>
</Para>
...さらなるページ内容...
</Content>
</Page>
...さらなるページ群...
<Resources>
<Fonts>
<Font id="F0" name="PDFlibLogo-Regular" fullname="MMOHKN+PDFlibLogo-Regular"
type="TrueType" embedded="true" ascender="1000" capheight="700" italicangle="0"
descender="0" weight="400" xheight="500"/>
<Font id="F1" name="ThesisAntiqua-Bold" fullname="MMOHKO+ThesisAntiqua-Bold"
type="Type 1 CFF" embedded="true" ascender="741" capheight="679" italicangle="0"
descender="-250" weight="606" xheight="505"/>
...さらなるフォント群...
</Fonts>
<Images>
<Image id="I0" extractedAs=".tif" width="595" height="750" colorspace="CS3"
bitsPerComponent="8"/>
<Image id="I1" extractedAs=".tif" width="595" height="750" colorspace="CS3"
bitsPerComponent="8"/>
</Images>
<ColorSpaces>
<ColorSpace id="CS0" name="DeviceGray" components="1"/>
<ColorSpace id="CS1" name="DeviceCMYK" components="4"/>
...さらなるカラースペース群...
</ColorSpaces>
</Resources>
</Pages>
</Document>
</TET>
選択す る TETML モー ド に応 じ て、 さ ら な る 詳細を TETML 内で表す こ と も で き ま す。
TETML モー ド について詳 し く は、 136 ページの 「テ キ ス ト モー ド を選択」 で説明 し ます。
上記サンプルにグ リ フ詳細が加わっ た 1 つの変化形を以下に示 し ます。Glyph 要素は、フ ォ
ン ト ・ 位置情報を含んでい ます :
<Word>
<Text>PDFlib</Text>
<Box llx="111.48" lly="636.33" urx="161.14" ury="654.33">
<Glyph font="F1" size="18" x="111.48" y="636.33" width="9.65">P</Glyph>
<Glyph font="F1" size="18" x="121.12" y="636.33" width="11.88">D</Glyph>
<Glyph font="F1" size="18" x="133.00" y="636.33" width="8.33">F</Glyph>
<Glyph font="F1" size="18" x="141.33" y="636.33" width="4.88">l</Glyph>
<Glyph font="F1" size="18" x="146.21" y="636.33" width="4.88">i</Glyph>
<Glyph font="F1" size="18" x="151.08" y="636.33" width="10.06">b</Glyph>
</Box>
</Word>
<Word>
<Text>GmbH</Text>
<Box llx="165.06" lly="636.33" urx="214.84" ury="654.33">
<Glyph font="F1" size="18" x="165.06" y="636.33" width="12.06">G</Glyph>
<Glyph font="F1" size="18" x="177.12" y="636.33" width="15.44">m</Glyph>
<Glyph font="F1" size="18" x="192.56" y="636.33" width="10.06">b</Glyph>
<Glyph font="F1" size="18" x="202.61" y="636.33" width="12.22">H</Glyph>
9.1 TETML を生成
133
</Box>
</Word>
<Word>
<Text>Munchen</Text>
<Box llx="218.75" lly="636.33" urx="292.23" ury="654.33">
<Glyph font="F1" size="18" x="218.75" y="636.33" width="15.77">M</Glyph>
<Glyph font="F1" size="18" x="234.52" y="636.33" width="10.19">u</Glyph>
<Glyph font="F1" size="18" x="244.70" y="636.33" width="10.22">n</Glyph>
<Glyph font="F1" size="18" x="254.92" y="636.33" width="7.52">c</Glyph>
<Glyph font="F1" size="18" x="262.44" y="636.33" width="10.22">h</Glyph>
<Glyph font="F1" size="18" x="272.66" y="636.33" width="9.34">e</Glyph>
<Glyph font="F1" size="18" x="282.00" y="636.33" width="10.22">n</Glyph>
</Box>
</Word>
134
9 章 : TET マー ク ア ッ プ言語 (TETML)
9.2 TETML の詳細 を制御
さ ま ざ ま な TETML テキス ト モー ド TETML は、 さ ま ざ ま な テ キ ス ト モー ド で生成す る
こ と がで き ます。 各モー ド は、 含むフ ォ ン ト ・ 位置情報の量が異な り 、 ま た、 テ キ ス ト を
よ り 大 き な単位 (粒度) に ま と め る や り 方が異な っ てい ます。 テ キ ス ト モー ド は、 各ペー
ジに対 し て個別に指定す る こ と が可能です。し か し 多 く の場合、TETML フ ァ イ ルは全ペー
ジに対す る デー タ を同一のモー ド で含みます。 以下のテ キ ス ト モー ド が利用可能です :
> glyph モー ド は、 各グ リ フ のテ キ ス ト ・ フ ォ ン ト ・ 座標を含み、 単語グループ化や構造
情報を一切含ま ない低レベルな種類です。 こ れはページ上の元のテ キ ス ト 情報を表 し
てい ますので、 デバ ッ グや分析の用途を想定 し てい ます。
> word モー ド では、 テ キ ス ト は単語ご と に ま と め ら れ、 各単語の座標を持つ Box 要素が
加わ り ます。 フ ォ ン ト 情報は一切得 ら れ ません。 こ のモー ド は、 単語ベース で動作す
る アプ リ ケーシ ョ ン に適 し てい ます。 約物キ ャ ラ ク タ はデフ ォ ル ト では独立 し た単語
と し て扱われますが、 こ の動作はページオプシ ョ ンで変え る こ と も で き ます (93 ペー
ジの 「欧文テ キ ス ト の単語境界検出」 を参照)。 テ キ ス ト の行を Line 要素で特定 さ せ る
こ と も 可能です。 こ れは tetml ページオプシ ョ ンで制御 さ れます。
> wordplus モー ド は、 word モー ド と 似てい ますが、 単語内の全グ リ フ の フ ォ ン ト ・ 座標
の詳細が加わ り ます。 座標は、 topdown ページオプシ ョ ンに従っ て、 左下隅か左上隅
か ら の相対位置で表 さ れ ます。 wordplus モー ド では、 フ ォ ン ト の使われ方を分析 し 、
単語内での フ ォ ン ト や文字サ イ ズな ど の変化を追 う こ と が可能です。 wordplus は、 関
連する TETML 要素をすべて含む唯一のテ キ ス ト モー ド ですので、あ ら ゆ る 種類の処理
作業に適 し てい ます。 その半面、 こ れは TETML 内に大量の情報を含みますので、 最 も
大 き な量の出力を生成 し ます。
> line モー ド は、個別の Line 要素を構成す る すべてのテ キ ス ト を含みます。 その う え、複
数の行が 1 個の Para 要素内に ま と め ら れ る こ と も あ り ます。 line モー ド は、 ページ内
容が行に ま と め ら れてい る こ と がわか っ てい る 場合か、 ま たは受取先アプ リ ケーシ ョ
ンが行ベース のテ キ ス ト 入力 し か扱えない場合にのみ推奨 し ます。
> page モー ド は、 段落レベルか ら 始ま る 構造情報を含みますが、 フ ォ ン ト ・ 座標の詳細
は一切含みません。
表 9.1 に、 各種テ キ ス ト モー ド 内に存在する TETML 要素を挙げます。
表 9.1 各種テキス ト モー ド 内の TETML 要素一覧
テキス ト
モー ド
構造
表組
テキス ト 位置
テキス ト 詳細
glyph
-
-
-
Glyph
word
Para ・ Word
Table ・ Row ・ Cell
Box
-
Table ・ Row ・ Cell
Box
Glyph
オプ シ ョ ナル :
Line
wordplus
Para ・ Word
オプ シ ョ ナル :
Line
line
Para ・ Line
-
-
-
page
Para
Table ・ Row ・ Cell
-
-
9.2 TETML の詳細を制御
135
テキス ト モー ド を選択 TET コ マ ン ド ラ イ ン ツール (19 ページの 2.1 「 コ マ ン ド ラ イ ンオ
プシ ョ ン」 を参照) では、 望むページモー ド を、 --tetml オプシ ョ ンに対す る 引数 と し て
指定す る こ と がで き ます。下記の コ マ ン ド は、wordplusモー ド でTETML出力を生成 し ます。
tet --tetml wordplus file.pdf
TET ラ イ ブ ラ リ では、 テ キ ス ト モー ド は直接指定す る こ と はで き ず、 オプシ ョ ン群の組み
合わせ と し て指定 し ます :
> 最小要素内のテ キ ス ト の量を、process_page( ) の granularity オプシ ョ ンで指定す る こ と
がで き ます。
> granularity=glyph ま たは word の場合には、さ ら にグ リ フ詳細の量を指定す る こ と も 可
能です。 グ リ フ情報の一部分が必要ない と き は、 tetml オプシ ョ ンの glyphdetails サブ
オプシ ョ ン でそれを省略 さ せ る こ と も で き ます。
下記のページオプシ ョ ン リ ス ト は、すべてのグ リ フ詳細を含めたwordplusモー ド でTETML
出力を生成 し ます :
granularity=word tetml={ glyphdetails={all} }
表 9.2 に、 各種ページモー ド を作成す る ためのオプシ ョ ン を ま と め ます。
表 9.2 TET ラ イ ブ ラ リ で各種 TETML テキス ト モー ド を作成
テキス ト モー ド
process_page( ) の
granularity オプ シ ョ ン
process_page( ) の tetml オプ シ ョ ン
glyph
granularity=glyph
tetml={glyphdetails={all}}
word
granularity=word
-
wordplus
granularity=word
tetml={glyphdetails={all}}
Line 要素付き word
granularity=word
tetml={elements={line}}
Line 要素付き
wordplus
granularity=word
tetml={glyphdetails={all} elements={line}}
line
granularity=line
-
page
granularity=page
-
TETML 出力 を制御す る ための文書オ プ シ ョ ン こ の項では、 生成 さ れ る TETML 出力を
直接制御す る さ ま ざ ま なオプシ ョ ン の効力を ま と め ま す。 他のすべての文書オプシ ョ ン
は、 処理の詳細を制御す る ために用い る こ と がで き ま す。 文書オプ シ ョ ン の完全な説明
は、 172 ページの表 10.8 にあ り ます。
文書関連 の オ プ シ ョ ン は、 --docopt コ マ ン ド ラ イ ン オ プ シ ョ ン に、 ま た は open_
document( ) 関数に与え る 必要があ り ます。
tetml オプシ ョ ンは、 TETML の一般的な諸側面を制御 し ます。 い く つかの TETML 要
素は、 必要なければ、 elements サブオプシ ョ ン を用いてな く す こ と も で き ます。 下記の文
書オプシ ョ ン リ ス ト は、 生成 さ れ る TETML 出力内に文書レベルの XML メ タ デー タ がな
い よ う に し てい ます :
tetml={ elements={nodocxmp} }
136
9 章 : TET マー ク ア ッ プ言語 (TETML)
engines オプシ ョ ンは、 テ キ ス ト ・ 画像抽出エン ジ ン を有効化ま たは無効化 し ます。 下記
のオプシ ョ ン リ ス ト は、 テ キ ス ト 内容を処理 し ますが、 画像処理は無効化 し てい ます :
engines={noimage}
TETML を生成す る 際に与え ら れたすべての文書オプシ ョ ンは、 下記の文書オプシ ョ ンで
無効化 さ れないかぎ り 、 /TET/Document/Options 要素内に記録 さ れます :
tetml={ elements={nooptions} }
TETML 出力 を制御す る ためのページ オ プ シ ョ ン ペー ジ オ プ シ ョ ン の完全 な 説明は表
10.10 にあ り ます。 ページ関連のオプシ ョ ンは、 --pageopt コ マ ン ド ラ イ ン オプシ ョ ンに、
ま たは process_page( ) 関数に与え る 必要があ り ます。
tetml オプシ ョ ンは、 Glyph 要素内の座標 ・ フ ォ ン ト 関連情報を有効化ま たは無効化 し
ます。 下記のページオプシ ョ ン リ ス ト は、 Glyph 要素内の フ ォ ン ト 詳細を有効化 し てい ま
すが、 それ以外のグ リ フ属性はない よ う に し てい ます :
tetml={ glyphdetails={font} }
下記のページオプシ ョ ン リ ス ト は、 TETML 出力に Line 要素を加え てい ます :
tetml={ glyphdetails={font} elements={line} }
下記のページオプシ ョ ンは、 下付 き と 上付 き を示すために、 Glyph 要素に sub ・ sup 属性
を追加 し てい ます :
tetml={ glyphdetails={sub sup} }
下記のページオプシ ョ ンは、 all を用いて、 Glyph 要素に可能なすべての属性を生成 し てい
ます :
tetml={ glyphdetails={all} }
下記のページオプシ ョ ンは、デフ ォ ル ト の上向 き 座標ではな く 下向 き 座標を要請 し てい ま
す:
topdown={output}
下記のページオプシ ョ ン リ ス ト は、 TET に対 し て、 約物キ ャ ラ ク タ を隣接す る 単語に結合
す る よ う 指示 し てい ます。 すなわち こ の場合、 約物キ ャ ラ ク タ は独立 し た単語 と し ては扱
われません :
contentanalysis={nopunctuationbreaks}
下記のページオプシ ョ ンは、 page モー ド でのみ意味を持ち ます。 デフ ォ ル ト 区切 り キ ャ
ラ ク タ を ラ イ ン フ ィ ー ド か ら スペースへ変更 し ます :
contentanalysis={lineseparator=U+0020}
TETML を生成す る 際に与え ら れたすべてのページオプシ ョ ンは、 下記の文書オプシ ョ ン
で無効化 さ れないかぎ り 、 /TET/Document/Pages/Page/Options 要素内に (各ページ ご と に
個別に) 記録 さ れます :
tetml={ elements={nooptions} }
9.2 TETML の詳細を制御
137
例外処理 PDF 解析中にエ ラ ーが発生 し た場合、 TET は一般には、 可能な ら ばその問題
を 修復 ま た は無視 し よ う と し 、 可能で な い な ら 例外 を 発生 さ せ ま す。 し か し 、 TET で
TETML 出力を生成 し てい る 際には、 PDF 解析上の問題は通常、 TETML 内の Exception 要
素 と し て報告 さ れます :
<Exception errnum="4506">Object 'objects[49]/Subtype' does not exist</Exception>
TETML 出力を処理 し てい る 際に、期待 し た要素でな く Exception 要素が現れた場合をいか
に処理す る かは、 アプ リ ケーシ ョ ン側で手はずを整え る 必要があ り ます。
TETML 出力フ ァ イ ルの生成を妨げ る 問題の場合は (出力フ ァ イ ルへの書 き 込み権限が
ないな ど)、 例外が発生 し 、 有効な TETML 出力は生成 さ れません。
138
9 章 : TET マー ク ア ッ プ言語 (TETML)
9.3 TETML の さ ま ざ ま な要素 と TETML スキーマ
すべての TETML 要素 ・ 属性 と それ ら の関係についての正式な XML ス キーマ定義 (XSD)
が、 TET デ ィ ス ト リ ビ ュ ーシ ョ ンに含まれてい ます。 TET 名前空間は下記の と お り です :
http://www.pdflib.com/XML/TET3/TET-3.0
こ の ス キーマは Web 上の下記 URL か ら ダ ウ ン ロ ー ド す る こ と も で き ます :
http://www.pdflib.com/XML/TET3/TET-3.0.xsd
各 TETML 文書のルー ト 要素内には、 TETML 名前空間 と ス キーマ ロ ケーシ ョ ンが と も に
存在 し てい ます。
表 9.3 に、 すべての TETML 要素の役割を説明 し ます。 TET 4.1 と TET 4.0 で導入 さ れ
た属性にはその旨記 し てい ます。図 9.1 に、TETML 要素群の XML 階層構造を図示 し ます。
表 9.3 TETML 要素 ・ 属性一覧
TETML 要素
説明 と 属性
Attachment
PDF 添付については、 入れ子にな っ た Document 要素内にその内容を記述 し ます。 非 PDF
添付にすいては、 その名前のみが挙げ ら れ、 内容は記述 さ れません。
属性 : name ・ level ・ pagenumber
Attachments
Attachment 要素群の コ ン テナ
Box
単語の座標を記述 し ます。 属性 llx と lly は Box の左下隅を、 urx と ury は右上隅を、 標
準 PDF 座標で記述 し ます。 Box が表す矩形の各辺がページの各辺 と 平行な場合には、 4 個
の値 llx ・ lly ・ urx ・ ury は左下隅 と 右上隅を表 し ます。 そ う でない場合には 4 個の隅すべ
てが存在 し ます。 1 個の単語が複数の Box 要素を含む場合も あ り ます。 た と えばハイ フ ン
区切 り さ れた単語が複数のテキス ト 行にわた っ ている場合や、 単語の先頭が大き なキ ャ ラ
ク タ にな っ ている場合な ど です。
属性 : llx ・ lly1 ・ urx ・ ury1 ・ ulx ・ uly1 ・ lrx ・ lry1
Cell
1 個の表セルの内容を記述 し ます。
属性 : colSpan
ColorSpace
PDF 色空間を記述 し ます。
属性 : alternate ・ base ・ components ・ id ・ name
ColorSpaces
Content
ColorSpace 要素群の コ ン テナ
ページ内容を階層構造 と し て記述 し ます。
属性 : granularity ・ dehyphenation (TET 4.0) ・ dropcap (TET 4.0) ・ font ・ geometry ・
shadow (TET 4.0) ・ sub (TET 4.0) ・ sup (TET 4.0)
Creation
TET 実行に関する日付 と オペレーテ ィ ングシ ス テムプ ラ ッ ト フ ォ ーム と 、 TET のバージ ョ
ン番号を記述 し ます。
属性 : platform ・ tetVersion ・ date
DocInfo
定義済 ・ カ ス タ ム文書情報項目
Document
PDF フ ァ イル名 ・ サイ ズ ・ PDF バージ ョ ン番号を含む一般的文書情報を記述 し ます。
属性 : filename ・ pageCount ・ filesize ・ linearized ・ pdfVersion ・ pdfa (TET 4.0 : PDF/
A-2 に対する新 し い値群。 TET 4.1 : PDF/A-3 に対する新 し い値群) ・ pdfe (TET 4.0 ・ TET
4.1 : PDF/E-2 に対する新 し い値群) ・ pdfx ・ pdfua (TET 4.1) ・ pdfvt (TET 4.1) ・ pdfx
(TET 4.1 : 列挙値群) ・ tagged
9.3 TETML の さ ま ざ ま な要素 と TETML スキーマ
139
表 9.3 TETML 要素 ・ 属性一覧
TETML 要素
Encryption
説明 と 属性
さ ま ざ ま なセキ ュ リ テ ィ 設定を記述 し ます。
属性 : keylength ・ algorithm (TET 4.1 : 新 し い値 8 ~ 11) ・ attachment (TET 4.1) ・
description (TET 4.1 : アルゴ リ ズムに対する新 し い値 8 ~ 11) ・ masterpassword ・
userpassword ・ noprint ・ nomodify ・ nocopy ・ noannots ・ noassemble ・ noforms ・
noaccessible ・ nohiresprint ・ plainmetadata
Exception
TET が発生 さ せた例外に関連する エ ラ ー メ ッ セージ ・ 番号。 PDF デー タ 構造が正 し く ない
ために入力から充分な情報を抽出で き ない場合には、 この Exception 要素が他の要素を置
き換え る こ と があ り ます。
属性 : errnum
Font
フ ォ ン ト リ ソ ース を記述 し ます。 必須の name 属性は正準 フ ォ ン ト 名を内容 と し て持ち、 オ
プ シ ョ ナルな fullname 属性はサブ セ ッ ト 接頭辞を含む フ ォ ン ト 名を持ち ます。
属性 : ascender (TET 4.1) ・ capheight (TET 4.1) ・ descender (TET 4.1) ・ embedded ・
fullname (TET 4.0) ・ id ・ italicangle (TET 4.1) ・ type ・ name ・ vertical ・ weight (TET
4.1) ・ xheight (TET 4.1)
Fonts
Font 要素群の コ ン テナ
Glyph
1 個のグ リ フ に対する フ ォ ン ト ・ 位置情報の詳細を記述 し ます。 こ の要素は、 こ のグ リ フ
が生み出す Unicode キ ャ ラ ク タ (1 個ない し 複数) を内容 と し て持ち ます。 1 個のグ リ フが
複数のキ ャ ラ ク タ を生成する こ と も あ り ます。 た と えば合字の場合な ど です。 単語に対す
る Glyph 要素群は、 1 個ない し 複数の Box 要素内にま と め られています。
属性 : x ・ y1 ・ width ・ alpha1 ・ beta1 ・ shadow (TET 4.0) ・ dropcap (TET 4.0) ・ font ・
size ・ sub (TET 4.0) ・ sup (TET 4.0) ・ textrendering ・ unknown ・ dehyphenation (TET 4.0)
Image
画像 リ ソ ース を、 すなわち、 画像を構成する ピ ク セル配列本体を記述 し ます。
属性 : bitsPerComponent ・ colorspace ・ extractedAs (TET 4.0) ・ height ・ id ・ mask ・
maskonly ・ mergetype ・ width
Images
Image 要素群の コ ン テナ
Line
1 個の行に対する テキス ト 。 TET 4.0 : Line は Word 要素群を含む こ と も あ り え ます。
Metadata
文書 ・ フ ォ ン ト ・ 画像のいずれか と 紐付け ら れる XMP メ タ デー タ 。
Options
TETML を生成する ために用い られた文書またはページオプ シ ョ ン。
Page
1 個のページの内容。
属性 : number ・ height ・ width ・ topdown (TET 4.0)
Pages
Page 要素群の コ ン テナ
Para
1 個の段落を構成する テキス ト 。
PlacedImage
ページ上に配置 さ れている画像のイ ン ス タ ン ス を記述 し ます。
属性 : alpha1 ・ beta1 ・ height ・ image ・ width ・ x ・ y1
Resources
色空間 リ ソ ース ・ フ ォ ン ト リ ソ ース ・ 画像 リ ソ ース。
Row
1 個ない し 複数の表セル。
Table
1 個ない し 複数の表行。
TET
ルー ト 要素
属性 : version (TET 4.1 は 4.1 を生成 し ます。 TET 4.0 は 4.0 を生成 し ま し た。 TET 3 は 3
を生成 し ま し た)
140
9 章 : TET マー ク ア ッ プ言語 (TETML)
表 9.3 TETML 要素 ・ 属性一覧
TETML 要素
説明 と 属性
Text
単語な どの要素のテキス ト 内容
Word
1 個の単語
1. 垂直座標 と 角度はすべて、 topdown ページオ プ シ ョ ン に従 っ て、 左下隅か左上隅のいずれかか ら の相対位置で表 さ れます。
9.3 TETML の さ ま ざ ま な要素 と TETML スキーマ
141
142
図 9.1
TETML 要素の階層構造。 オプ シ ョ ナルな要素は破線の枠
で示 し ています。 実線の枠の要素は必須です。
9 章 : TET マー ク ア ッ プ言語 (TETML)
9.4 TETML を XSLT で変換
XSLT のご く 簡単な概略 XSLT (eXtensible Stylesheet Language Transformations の略) は、
XML 文書を他の文書へ変換す る ための言語です。 その入力は必ず XML 文書ですが (私た
ちの場合は TETML 文書)、 出力は必ず し も XML であ る 必要はあ り ません。 XSLT では、 任
意の計算を行 う こ と も で き 、 プ レーン テ キ ス ト や HTML 出力を生成す る こ と も で き ます。
XSLT ス タ イ ルシー ト を用いて TETML 入力を処理 し 、 その入力に基づいた新 し いデー タ
セ ッ ト (テ キ ス ト ・ XML ・ CSV ・ HTML のいずれかの形式で提供) を生成 し ま し ょ う 。 こ
の TETML 入力は、 PDF 文書の内容を反映 し てい ます。 TETML 文書は、 131 ページの 9.1
「TETML を生成」 で説明 し た よ う に、 TET コ マ ン ド ラ イ ン ツールで、 ま たは TET ラ イ ブ
ラ リ で生成 さ れてい ます。
XSLT は非常に強力ですが、 通常のプ ロ グ ラ ミ ン グ言語 と はか な り 異な っ てい ま す。
XSLT プ ロ グ ラ ミ ン グの初歩を こ の節で解説 し よ う と す る つ も り はあ り ません。 それに関
し ては さ ま ざ ま な書籍や Web の情報があ り ますのでそち ら を参照 し て く だ さ い。 私た ち
のサンプルは XSLT 1.0 だけに し て あ り ます。いろいろ な XSLT 2.0 実装が入手可能ではあ
り ますが、XSLT 1.0 に比べ る と ま だ広 く 普及 し てい る と は言いがたい現状です。XSLT 1.0
の仕様は www.w3.org/TR/xslt にあ り ます。
と はいえ、読者が TETML 文書の XSLT 処理にすばや く 着手 し 実現で き る よ う 手助けす
る こ と は私た ちの望みです。 こ の節では、 XSLT ス タ イ ルシー ト を動作 さ せ る ために最 も
重要な環境を説明す る と と も に、 こ の目的のために広 く 利用 さ れてい る ソ フ ト ウ ェ ア を挙
げます。 XSLT ス タ イ ルシー ト を XML 文書に適用す る ためには、 XSLT プ ロ セ ッ サが必要
です。 無償や商用の さ ま ざ ま な XSLT プ ロ セ ッ サが入手可能であ り 、 そのなかには ス タ ン
ド ア ロ ン なや り 方で利用で き る も の も あれば、プ ロ グ ラ ミ ン グ言語の助けに よ っ て自分の
プ ロ グ ラ ムの中で利用可能な も の も あ り ます。
XSLT ス タ イ ルシー ト では、処理の詳細を制御す る ために環境か ら ス タ イ ルシー ト へ渡
さ れ る パ ラ メ タ を活用す る こ と も 可能です。 私たちの XSLT サンプルのなかに も ス タ イ ル
シー ト パ ラ メ タ を利用 し てい る も のがい く つかあ り ますので、 さ ま ざ ま な環境でパ ラ メ タ
を ス タ イ ルシー ト へ受け渡す方法について も 情報を提供 し ます。
さ ま ざ ま なパ ッ ケージ ン グで利用で き る 、 広 く 利用 さ れてい る XSLT プ ロ セ ッ サには、
以下の よ う な も のがあ り ます :
> Microsoft の MSXML と い う XML 実装。Windows 2000 SP4 か ら オペレーテ ィ ン グ シ ス テ ム
に内蔵 さ れてい ます。
> Microsoft の .NET Framework 2.0 XSLT 実装
> Saxon。 無償版 と 商用版が入手可能です。
> Xalan。Apache フ ァ ウ ンデーシ ョ ンがホ ス ト し てい る オープン ソ ース プ ロ ジ ェ ク ト です
(C++ 実装 と Java が入手可能です)。
> GNOME プ ロ ジ ェ ク ト のオープン ソ ース の libxslt ラ イ ブ ラ リ
> Sablotron。 オープン ソ ース の XSLT ツールキ ッ ト です。
コ マ ン ド ラ イ ン で XSLT XSLT ス タ イ ルシー ト を コ マ ン ド ラ イ ン か ら 適用す る こ と は、
便利な開発 ・ 試験環境を提供 し ます。 以下の さ ま ざ ま な例は、 XSLT ス タ イ ルシー ト を コ
マ ン ド ラ イ ン 上 で 適用す る 方法 を 示 し て い ま す。 サ ン プ ル はすべ て、 入力 フ ァ イ ル
FontReporter.tetml を ス タ イ ルシー ト tetml2html.xsl で処理 し てお り 、 その際、 XSLT パ ラ
メ タ toc-generate (ス タ イ ルシー ト 内で用い ら れてい る ) を値 0 に設定 し てお り 、 そ し て
生成 さ れた出力を FontReporter.html へ送っ てい ます :
> Java ベース の Saxon プ ロ セ ッ サ (www.saxonica.com 参照) は下記の よ う に使え ます :
9.4 TETML を XSLT で変換
143
java -jar saxon9.jar -o FontReporter.html FontReporter.tetml tetml2html.xsl
toc-generate=0
> xsltproc ツールは、多 く の Linux デ ィ ス ト リ ビ ュ ーシ ョ ンに含まれてい ます。xmlsoft.org/
XSLT を参照 し て く だ さ い。 ス タ イ ルシー ト を TETML 文書に適用す る には下記の コ マ
ン ド を用い ます :
xsltproc --output FontReporter.html --param toc-generate 0 tetml2html.xsl
FontReporter.tetml
> Xalan C++ は、 コ マ ン ド ラ イ ン ツールを提供 し てお り 、 こ れは下記の よ う に し て起動で
き ます :
Xalan -o FontReporter.html -p toc-generate 0 FontReporter.tetml tetml2html.xsl
> MSXML パーサを持つ Windows シ ス テ ムでは、Microsoft が提供 し てい る 無償の msxsl.exe
プ ロ グ ラ ム を利用で き ます。 こ のプ ロ グ ラ ムは ( ソ ース コ ー ド も 含め) 下記の場所で
入手可能です :
www.microsoft.com/download/en/details.aspx?displaylang=en&id=21714
こ のプ ロ グ ラ ムは下記の よ う に動作 さ せます :
msxsl.exe FontReporter.tetml tetml2html.xsl -o FontReporter.html toc-generate=0
自分のア プ リ ケーシ ョ ン内で XSLT 自分のアプ リ ケーシ ョ ンの中に XSLT 処理を組み込
みたい場合には、 XSLT プ ロ セ ッ サの選択は当然、 使 う プ ロ グ ラ ミ ン グ言語 と 環境に依存
し ます。 TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、 さ ま ざ ま な重要な環境のためのサンプル コ ー ド
を含んでい ます。 runxslt サンプル群は、 TETML 文書を読み込み、 XSLT ス タ イ ルシー ト
をパ ラ メ タ 付 き で適用 し 、 生成 さ れた出力を フ ァ イ ルへ書 き 出す方法を演示 し てい ます。
こ れ ら のプ ロ グ ラ ムは、 引数な し で実行 さ れた場合には、 TET デ ィ ス ト リ ビ ュ ーシ ョ ン と
と も に提供 さ れてい る すべての XSLT サンプルを実行 し ます。あ る いは、TETML 入力フ ァ
イ ル名 ・ XSLT ス タ イ ルシー ト 名 ・ 出力フ ァ イ ル名 ・ パ ラ メ タ / 値対群について引数群を
与え る こ と も で き ます。 runxslt サンプル群は、 XSLT 処理を自分のアプ リ ケーシ ョ ンへ組
み込むための出発点 と し て活用す る こ と がで き ます :
> Java 開発者は、javax.xml.transform パ ッ ケージ内の メ ソ ッ ド 群を利用で き ます。 こ れは
runxslt.java サンプルで演示 し てい ます。 ま た、 ant ビル ド ツールでは、 コ ーデ ィ ン グ
な し で Java ベース の XSLT を実行で き ます。TET デ ィ ス ト リ ビ ュ ーシ ョ ン内の build.xml
フ ァ イ ルは、 全サンプル用の XSLT タ ス ク 群を含んでい ます。
> .NET 開発者は、 System.Xml.Xsl.XslTransform 名前空間内の メ ソ ッ ド 群を利用で き ます。
こ れは runxslt.ps1 PowerShell ス ク リ プ ト で演示 し てい ます。 同様の コ ー ド を、 C# や他
の .NET 言語で利用で き ます。
> COM オー ト メ ーシ ョ ンに対応 し てい る すべての Windows ベース のプ ロ グ ラ ミ ン グ言語
は、MSXML パーサが提供 し てい る MSXML2.DOMDocument オー ト メ ーシ ョ ン ク ラ ス の
メ ソ ッ ド 群を利用で き ます。こ れは runxslt.vbs サンプルで演示 し てい ます。同様の コ ー
ド を、 他の COM 対応言語で利用で き ます。
Perl な ど他の多 く のプ ロ グ ラ ミ ン グ言語では、 XSLT 拡張が利用可能です。
Web サーバで XSLT XML か ら HTML への変換は XSLT の用途 と し て代表的な も のです
ので、 XSLT ス タ イ ルシー ト を Web サーバ上で動作 さ せたい と き も 多 く あ り ます。 い く つ
かの重要なシナ リ オ :
144
9 章 : TET マー ク ア ッ プ言語 (TETML)
> ASP ま たはASP.NETを持つWindowsベース のWebサーバでは、上述のCOM ま たは.NET イ
ン タ フ ェース を利用で き ます。
> Java ベース の Web サーバでは javax.xml.transform パ ッ ケージ を利用で き ます。
> PHP ベース の Web サーバでは Sablotron プ ロ セ ッ サを利用で き ます。 www.php.net/
manual/en/intro.xsl.php を参照 し て く だ さ い。
Web ブ ラ ウザで XSLT 現在普及 し てい る 多 く のブ ラ ウ ザ も 、 XSLT 変換に対応 し てい ま
す。 XSLT ス タ イ ルシー ト を TETML 文書に適用す る よ う ブ ラ ウ ザに指示す る には、 その
TETML 文書の xml 処理命令を含む先頭行の後、 かつルー ト 要素の前に、 適切な処理命令
を持つ行を追加 し ま す。 そ し て それ を ブ ラ ウ ザへ読み込めば、 ブ ラ ウ ザはその ス タ イ ル
シー ト を適用 し 、 結果の出力を表示 し ます (なお、 Internet Explorer では、 ロ ーカルデ ィ
ス ク か ら の フ ァ イ ルを処理す る 際にはフ ァ イ ル名接尾辞 .xml が必要です) :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="tetml2html.xsl" version="1.0"?>
<TET xmlns="http://www.pdflib.com/XML/TET3/TET-3.0"
...
ブ ラ ウ ザは、 XSLT ス タ イ ルシー ト を TETML 文書に適用 し 、 そ し てその結果のテ キ ス ト ・
HTML ・ XML のいずれかの出力を表示 し ま す。 あ る いは、 ブ ラ ウ ザでの XSLT 処理は、
JavaScript コ ー ド か ら 引 き 起 こ さ せ る こ と も 可能です。
Firefox 2 以上では、xslt-param 処理命令を用いてパ ラ メ タ を XSLT ス タ イ ルシー ト に与
え る こ と も で き ます :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="tetml2html.xsl" version="1.0"?>
<?xslt-param name="toc-generate" value="0"?>
<TET xmlns="http://www.pdflib.com/XML/TET3/TET-3.0"
...
9.4 TETML を XSLT で変換
145
9.5 さ ま ざ ま な XSLT サ ン プル
TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、 XSLT を TETML に適用 し た場合の強力 さ を演示す る
XSLT ス タ イ ルシー ト をい く つか含んでい ます。 こ れ ら は、 TETML アプ リ ケーシ ョ ンの出
発点 と し て活用す る こ と も で き ます。 こ の節では、 こ の XSLT サンプル群の概要を紹介す
る と と も に、 サンプル出力を掲載 し ます。 143 ページの 9.4 「TETML を XSLT で変換」 で、
XSLT ス タ イ ルシー ト を動作 さ せ る ための多 く のオプシ ョ ン を説明 し てい ます。 こ の ス タ
イ ルシー ト 群の機能 と 内部動作に関 し て詳 し く は、 XSLT コ ー ド の コ メ ン ト に記 し て あ り
ます。 こ の ス タ イ ルシー ト サンプル群のい く つかの一般的側面 :
> 多 く の XSLT サンプルはパ ラ メ タ に対応 し てお り 、こ れを用いて さ ま ざ ま な処理詳細を
制御す る こ と がで き ます。 こ れ ら のパ ラ メ タ は、 XSLT コ ー ド 内で設定す る こ と も で き
ます し 、 環境 (ant な ど) か ら 上書 き す る こ と も で き ます。
> 多 く の XSLT サンプルでは、 特定のテ キ ス ト モー ド (た と えば word モー ド 。 詳 し く は、
135 ページの 「 さ ま ざ ま な TETML テ キ ス ト モー ド 」 を参照) の TETML 入力を必要 と
し ます。 それ ら のサンプルは、 誤っ た入力か ら 自己を守る ために、 与え ら れた TETML
入力が要請に準拠 し てい る か ど う か をチ ェ ッ ク し て、 準拠 し ていないな ら エ ラ ーを報
告 し ます。
> XSLT サンプルのなかには、文書内の PDF 添付を再帰的に処理する も のがあ り ます ( こ
れは後述の説明の中でその旨記 し てい ます)。 し か し 多 く のサンプルは PDF 添付を無
視 し ます。 それ ら も 、 添付を処理す る よ う に拡張す る こ と が容易な よ う に書かれてい
ます。 Attachments 要素内の対象要素を選択すれば充分です。 関連す る xsl:template 要
素自体に変更を加え る 必要はあ り ません。
> XSLTサンプルはすべてXSLT 1で動作 し ます。サンプルに よ っ てはXSLT 2の機能を使え
ば も っ と 簡単化で き る も の も あ り ますが、使いやす さ を考え て XSLT 1 に こ だわ り たい
と 考え ま し た。
コ ン コ ーダ ン ス を生成 concordance.xsl ス タ イ ルシー ト は、word ま たは wordplus モー ド
の TETML 入力を受け付け ます。 こ れは コ ン コ ーダ ン ス を、 すなわち、 文書内の単語を出
現頻度の高い順に並べた一覧を生成 し ま す。 こ れは、 言語分析のための コ ン コ ーダ ン ス
や、 翻訳者のための相互参照や、 整合性チ ェ ッ ク な ど を生成する のに有用で し ょ う 。
List of words in the document along with the number of occurrences:
the 207
font 107
of 100
a 92
in 83
and 75
fonts 64
PDF 60
FontReporter 58
...
フ ォ ン ト フ ィ ル タ リ ン グ fontfilter.xsl ス タ イ ルシー ト は、 glyph ま たは wordplus モー ド
の TETML 入力を受け付け ます。 こ れは文書内の、 特定の フ ォ ン ト を用いた、 かつ指定 さ
れた値 よ り 大 き なサ イ ズの単語の一覧を作 り ます。 こ れは、 特定の フ ォ ン ト / サ イ ズの組
み合わせを検出 し た り 、 品質管理のために有用で し ょ う 。 同 じ コ ン セプ ト を用いて、 大 き
な文字サ イ ズ を用いたテ キ ス ト 部分に基づいた目次を生成する こ と も で き ます。
146
9 章 : TET マー ク ア ッ プ言語 (TETML)
Text containing font 'TheSansBold-Plain' with size greater than 10:
[TheSansBold-Plain/24] Contents
[TheSansBold-Plain/13.98] 1
[TheSansBold-Plain/13.98] Installing
[TheSansBold-Plain/13.98] PDFlib
[TheSansBold-Plain/13.98] FontReporter
[TheSansBold-Plain/13.98] 2
[TheSansBold-Plain/13.98] Working
[TheSansBold-Plain/13.98] with
[TheSansBold-Plain/13.98] FontReporter
[TheSansBold-Plain/13.98] A
[TheSansBold-Plain/13.98] Revision
[TheSansBold-Plain/13.98] History
[TheSansBold-Plain/24] 1
[TheSansBold-Plain/24] Installing
[TheSansBold-Plain/24] PDFlib
[TheSansBold-Plain/24] FontReporter
...
フ ォ ン ト の使用箇所 を検索 fontfinder.xsl ス タ イ ルシー ト は、glyph ま たは wordplus モー
ド の TETML 入力を受け付け ます。 文書内のすべての フ ォ ン ト について、 特定の フ ォ ン ト
を用いてい る テ キ ス ト の出現箇所をすべて、そのページ番号 と ページ上の位置 と と も に一
覧に し ます。 こ れは、 望ま し く ない フ ォ ン ト を検出 し て整合性をチ ェ ッ ク し た り 、 特定の
悪い文字サ イ ズの使用を見つけた り す る ために有用で し ょ う 。
TheSansExtraBold-Plain used on:
page 1:
(111, 636), (165, 636), (219, 636), (292, 636), (301, 636), (178, 603), (221, 603), (226,
603),
(272, 603), (277, 603), (102, 375), (252, 375), (261, 375), (267, 375)
TheSans-Plain used on:
page 1:
(102, 266), (119, 266), (179, 266), (208, 266), (296, 266), (346, 266), (367, 266)
...
フ ォ ン ト 統計 fontstat.xsl ス タ イ ルシー ト は、glyph ま たは wordplus モー ド の TETML 入
力を受け付け ます。 こ れはフ ォ ン ト と グ リ フ の統計を生成 し ます。 こ れは、 品質管理に有
用なほか、 各フ ォ ン ト についてマ ッ プな し グ リ フ (すなわち、 いかな る Unicode キ ャ ラ ク
タ を も マ ッ プで き ない グ リ フ) も 報告 さ れ ま すので、 ア ク セ シ ビ リ テ ィ 試験に も 有用で
し ょ う。
19894 total glyphs in the document; breakdown by font:
68.71% ThesisAntiqua-Normal: 13669 glyphs
22.89% TheSans-Italic: 4553 glyphs
6.38% TheSansBold-Plain: 1269 glyphs
0.9% TheSansMonoCondensed-Plain: 179 glyphs
0.49% TheSansBold-Italic: 98 glyphs
0.27% TheSansExtraBold-Plain: 54 glyphs
0.21% TheSerif-Caps: 42 glyphs
0.15% TheSans-Plain: 29 glyphs
0.01% Gen_TheSans-Plain: 1 glyphs
9.5 さ ま ざ ま な XSLT サン プル
147
索引 を生成
index.xsl ス タ イ ルシー ト は、 word ま たは wordplus モー ド の TETML 入力を
受け付け ます。 こ れは索引を、 すなわち、 文書内の単語を アルフ ァ ベ ッ ト 順に並べ、 おの
おのページ番号 と と も に一覧に し た も のを生成 し ます。数字 と 約物キ ャ ラ ク タ は無視 さ れ
ます。
Alphabetical list of words in the document along with their page number:
A
about 2 7 8
access 8 12
accessible 11
achieving 9 12
Acrobat 2 5 7 8 9 10 11 14 15 17
ActiveX 2
actual 9 12
actually 11 12 14
addition 9
Additional 12
additions 17
address 9 12
addressed 9
addressing 9
Adobe 2 5 8 12 14
...
XMP メ タ デー タ を抽出
metadata.xsl ス タ イ ルシー ト は、任意のモー ド の TETML 入力を
受け付け ます。 こ れは文書レベルの XMP メ タ デー タ を対象 と し てお り 、 XMP か ら い く つ
かの メ タ デー タ プ ロ パテ ィ を抽出 し ます。 文書内の PDF 添付 (PDF パ ッ ケージ ・ ポー ト
フ ォ リ オを含め) は再帰的に処理 さ れます :
dc:creator = PDFlib GmbH
xmp:CreatorTool = FrameMaker 7.0
表組内容 を CSV 形式で抽出
table.xsl ス タ イ ルシー ト は、 word ・ wordplus ・ page のいず
れかのモー ド の TETML 入力を受け付け ます。 こ れは、指定 さ れた表組の内容を抽出 し て、
その表組内容を含む CSV フ ァ イ ル (カ ン マ区切 り 値) を生成 し ます。 CSV フ ァ イ ルは、
あ ら ゆ る 表計算アプ リ ケーシ ョ ンで開 く こ と がで き ます。 こ れは、 PDF 文書内の表組の内
容を再利用す る のに有用で し ょ う 。
TETML を HTML へ変換
tetml2html.xsl ス タ イ ルシー ト は、wordplus モー ド の TETML 入
力を受け付け ます。 こ れは TETML を、 ブ ラ ウ ザで表示で き る HTML へ変換 し ます。 こ の
コ ンバー タ は、 PDF 文書 と 同等の視覚表現を生成 し よ う と す る も のではな く 、 以下の側面
を演示す る も のです :
> 見出 し 要素 (H1 ・ H2 な ど) を、 設定可能な文字サ イ ズに基づいて生成 し ます。
> TETML 内の表組要素を、 おのおの HTML 表組構造へマ ッ プ し て、 表組を ブ ラ ウ ザで表
示可能に し ます。
> HTML ページの冒頭に目次を生成 し ます。その各項目は、文書内の何 ら かの見出 し に基
づいてお り 、 おのおのの見出 し へ飛ぶア ク テ ィ ブ リ ン ク を含んでい ます。
> 各ページについて画像の一覧を生成 し ます。 おのおの、 TET コ マ ン ド ラ イ ン ツールに
よ っ て resource 画像ループモー ド で (例 : tet --image --tetml file.pdf) 生成 さ れた画像
フ ァ イ ル名を用いて画像フ ァ イ ルへ リ ン ク さ れてい ます。
148
9 章 : TET マー ク ア ッ プ言語 (TETML)
生テキス ト を TETML か ら 抽出 textonly.xsl ス タ イ ルシー ト は、 任意のモー ド の TETML
入力を受け付け ます。 こ れは、 すべての Text 要素を取得 し つつ、 他のすべての要素を無
視す る こ と に よ り 、 生テ キ ス ト 内容を抽出 し ます。 文書内の PDF 添付 (PDF パ ッ ケージ ・
ポー ト フ ォ リ オを含め) は再帰的に処理 さ れます。
9.5 さ ま ざ ま な XSLT サン プル
149
150
9 章 : TET マー ク ア ッ プ言語 (TETML)
10 TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.1 オ プ シ ョ ン リ ス ト
オプシ ョ ン リ ス ト は、 さ ま ざ ま な API 関数呼び出 し を制御す る ための、 強力で、 それでい
て簡単な方式です。 多 く の API メ ソ ッ ド では、 オプシ ョ ン リ ス ト が使え る よ う にな っ てい
ますので、 関数に膨大な引数を与え る 必要があ り ません。 略 し て optlist と も いい ます。 こ
れは、 任意の数のオプシ ョ ン を内容 と し て持つ こ と ので き る 文字列です。 オプシ ョ ン リ ス
ト は、 さ ま ざ ま なデー タ 型や、 リ ス ト の よ う な複合デー タ に対応 し てい ます。 多 く の言語
バ イ ンデ ィ ン グでは、 オプシ ョ ン リ ス ト は、 必要な キーワー ド と 値を連結 し てい く こ と に
よ っ て、 簡単に構築す る こ と がで き ます。
バインディング C 言語バ イ ンデ ィ ン グ : sprintf( ) 関数を用いてオプシ ョ ン リ ス ト を構築す る と よ いで し ょ
う。
バインディング .NET 言語バ イ ンデ ィ ン グ : C# プ ロ グ ラ マーは、 AppendFormat( ) StringBuilder メ ソ ッ ド は
整形項目を表すのに中括弧 { } を用いて、 それが引数の文字列表現へ置 き 換え ら れ る こ と
に留意す る 必要があ り ます。 一方 Append( ) メ ソ ッ ド では、 中括弧キ ャ ラ ク タ にいかな る
特別な意味を も 持たせてい ません。オプシ ョ ン リ ス ト 文法は中括弧キ ャ ラ ク タ を利用 し て
い ますので、AppendFormat( ) と Append( ) の ど ち ら の メ ソ ッ ド を使 う か を選ぶ と き には注
意が必要です。
10.2 オ プ シ ョ ン リ ス ト 文法
正式な オ プ シ ョ ン リ ス ト 文法定義 オプシ ョ ン リ ス ト は、 以下の規則に従っ て構築す る
必要があ り ます :
> オプシ ョ ン リ ス ト 内のすべての要素 (キー と 値) は、 1 個ない し 複数の右記区切 り キ ャ
ラ ク タ に よ っ て区切 る 必要があ り ます : スペース ・ タ ブ ・ キ ャ リ ッ ジ リ タ ーン ・ ニ ュ ー
ラ イ ン ・ 等号 「=」。
> 一番外側の囲み中括弧は、 要素には含まれません。 { } と 書けば空要素を意味 し ます。
> 一番外側の中括弧の中の区切 り キ ャ ラ ク タ は、要素を分割す る 効力を も はや持たず、要
素の一部分 と な り ます。 ですので、 区切 り キ ャ ラ ク タ を含む要素は、 中括弧で囲む必
要があ り ます。
> 先頭ま たは末尾に中括弧を持つ要素は、 中括弧で囲む必要があ り ます。
> 要素が片方だけの中括弧を含む場合には、 その中括弧は直前にバ ッ ク ス ラ ッ シ ュ キ ャ
ラ ク タ を 付け て保護す る 必要が あ り ま す。 要素の閉 じ 中括弧の直前のバ ッ ク ス ラ ッ
シ ュ も 、 直前にバ ッ ク ス ラ ッ シ ュ キ ャ ラ ク タ を付け る 必要があ り ます。
> オプシ ョ ン リ ス ト はバ イ ナ リ ゼ ロ 値を含んではいけ ません。
オプシ ョ ン リ ス ト は、 こ の PDFlib リ フ ァ レ ン ス内の仕様に従い、 リ ス ト 値を持つ こ と が
あ り え ます。 リ ス ト 値は 1 個ない し 複数の要素 ( こ れ自体 も ま た リ ス ト であ る 場合 も あ り
ます) を内容 と し て持ち ます。 それ ら は上述の規則に従っ て区切 ら れますが、 等号は区切
り キ ャ ラ ク タ と し て も はや見な さ れない と い う 点が唯一異な り ます。
単純オ プ シ ョ ン リ ス ト 多 く の場合、 オプシ ョ ン リ ス ト は 1 個ない し 複数のキー / 値対
を内容 と し て持ち ます。 キー と 値は、 ま た複数のキー / 値対 も 同様に、 1 個ない し 複数の
10.1 オプ シ ョ ン リ ス ト
151
空白キ ャ ラ ク タ (スペース ・ タ ブ ・ キ ャ リ ッ ジ リ タ ーン ・ ニ ュ ー ラ イ ン) で区切 る 必要が
あ り ます。 あ る いは、 キーは等号 「=」 で値 と 区切 る こ と も で き ます :
key=value
key = value
key value
key1 = value1
key2 = value2
可読性を増すため、 キー と 値の間には等号を用い、 隣 り 合 う キー / 値対の間には空白を用
い る こ と を推奨 し ます。
オプシ ョ ン リ ス ト は左か ら 右へ と 評価 さ れ ますので、 オプシ ョ ンは同一 リ ス ト 内で複
数回与え る こ と も で き ます。 こ の場合、 最後に現れたオプシ ョ ンがそれ以前の も のを上書
き し ます。 下記の例では、 1 番目のオプシ ョ ンでの割 り 当ては 2 番目に よ っ て上書 き さ れ
ますので、 オプシ ョ ン リ ス ト 処理後に key は値 value2 を持つ こ と にな り ます :
key=value1 key=value2
リ ス ト 値 リ ス ト は、 1 個ない し 複数の区切 ら れた値を内容 と し て持ち ます。 こ の値は単
純値であ る こ と も あ り ます し 、 それ自体が リ ス ト 値であ る こ と も あ り ます。 リ ス ト は中括
弧 { } で囲まれてお り 、 リ ス ト 内の値群は空白キ ャ ラ ク タ で区切る 必要があ り ます。 例 :
searchpath={/usr/lib/tet d:\tet}
(ディレクトリ名2個を持つリスト)
リ ス ト は、 入れ子にな っ た リ ス ト を内容 と し て持つ こ と も あ り ます。 こ の場合、 各 リ ス ト
の間は空白で区切 る 必要があ り ます。 区切 り キ ャ ラ ク タ は、 隣 り 合 う キ ャ ラ ク タ } と { の
間には挿入す る 必要が あ り ま すが、 同 じ 種類の中括弧ど う し の間では省 く こ と も で き ま
す:
fold={ {[:Private_Use:] remove} {[U+FFFD] remove} }
(リスト2個を持つリスト)
リ ス ト がち ょ う ど 1 個の リ ス ト を内容 と し て持つ と き も 、入れ子にな っ た リ ス ト の中括弧
群を省 く こ と はで き ません :
fold={ {[:Private_Use:] remove} }
(入れ子のリスト1個を持つリスト)
入れ子にな っ たオ プ シ ョ ン リ ス ト と リ ス ト 値 オプシ ョ ン に よ っ ては、 オ プ シ ョ ン リ ス
ト 型ま たはオプ シ ョ ン リ ス ト の リ ス ト 型を受け付け る も のがあ り ます。オプ シ ョ ン リ ス ト
型のオプシ ョ ン は、 1 個ない し 複数の子オプシ ョ ン リ ス ト を内容 と し て持ち ま す。 オ プ
シ ョ ン リ ス ト の リ ス ト 型のオプシ ョ ンは、 1 個ない し 複数の入れ子にな っ たオプシ ョ ン リ
ス ト を内容 と し て持ち ます。 入れ子にな っ たオプシ ョ ン リ ス ト を扱 う 際には、 囲む中括弧
の数を正 し く 指定す る こ と が重要です。 い く つかの例を以下に挙げます。
オプシ ョ ン contentanalysis の値はオプシ ョ ン リ ス ト であ り 、 そのオプシ ョ ン リ ス ト 自
体が 1 個のオプシ ョ ン punctuationbreaks を内容 と し て持ち ます :
contentanalysis={punctuationbreaks=false}
下記の例で、 オプシ ョ ン glyphmapping の値は、 オプシ ョ ン リ ス ト ただ 1 個を内容 と し て
持つオプシ ョ ン リ ス ト の リ ス ト です :
glyphmapping={ {fontname=GlobeLogosOne codelist=GlobeLogosOne} }
下記の例で、 オプシ ョ ン glyphmapping の値は、 オプシ ョ ン リ ス ト 2 個を内容 と し て持つ
オプシ ョ ン リ ス ト の リ ス ト です :
152
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
glyphmapping { {fontname=CMSY* glyphlist=tarski} {fontname=ZEH* glyphlist=zeh}}
オプシ ョ ン リ ス ト 1 個を内容 と し て持つ リ ス ト において、 そのオプシ ョ ン リ ス ト の中の
fontname 値が スペース を含んでい る ので、 さ ら に中括弧で囲む必要があ り ます :
glyphmapping={ {fontname={Globe Logos One} codelist=GlobeLogosOne} }
キー ワー ド 2 個を内容 と し て持つ リ ス ト :
fonttype={Type1 TrueType}
異な る 型が混在 し た リ ス ト 。 内側の リ ス ト 群は、 Unicode 集合 1 個 と キーワー ド 1 個を内
容 と し て持っ てお り 、 外側の リ ス ト は、 オプシ ョ ン リ ス ト 2 個 と キーワ ー ド default を内
容 と し て持っ てい ます :
fold={ {[:Private_Use:] remove} {[U+FFFD] remove} default }
矩形 1 個を内容 と し て持つ リ ス ト :
includeboxes={{10 20 30 40}}
はま り やすい罠 こ の項では、 オプシ ョ ン リ ス ト 文法について よ く あ る 誤 り を挙げます。
中括弧は区切 り キ ャ ラ ク タ ではあ り ませんので、 下記は誤 り です :
key1 {value1}key2 {value2}
誤り!
こ れはエ ラ ー メ ッ セージ Unknown option 'value2' を引き 起 こ し ます。 同様に、 下記は区切
り キ ャ ラ ク タ が抜けてい る ので誤 り です :
key{value}
key={{value1}{value2}}
誤り!
誤り!
中括弧は照応 し てい る 必要があ り ますので、 下記は誤 り です :
key={open brace {}
誤り!
こ れはエ ラ ー メ ッ セージ Braces aren't balanced in option list 'key={open brace {}' を引 き 起 こ
し ます。 文字列の中のただ 1 個の中括弧は、 バ ッ ク ス ラ ッ シ ュ キ ャ ラ ク タ を直前に付け る
必要があ り ます :
key={closing brace \} and open brace \{}
正しい!
文字列値の末尾のバ ッ ク ス ラ ッ シ ュ は、 直後が閉 じ 中括弧キ ャ ラ ク タ であ る 場合には、 も
う 1 個のバ ッ ク ス ラ ッ シ ュ を直前に付け る 必要があ り ます :
filename={C:\path\name\}
filename={C:\path\name\\}
誤り!
正しい!
10.2 オプ シ ョ ン リ ス ト 文法
153
10.3 基本型
文字列 文字列は、 一般に非 ロ ー カ ラ イ ズ の キ ー ワ ー ド の た め に用い ら れ る プ レ ー ン
ASCII 文字列です (EBCDIC プ ラ ッ ト フ ォームでは EBCDIC 文字列)。 空白ま たは 「=」 キ ャ
ラ ク タ を含む文字列は、 { } で囲む必要があ り ます :
password={ secret string }
contents={length=3mm}
(3個の空白を含む文字列値)
(1個の等号を含む文字列値)
キ ャ ラ ク タ { } は、 文字列の一部分 と し たい場合には、 \ キ ャ ラ ク タ を直前に付け る 必要が
あ り ます :
password={weird\}string}
(右中括弧を含む文字列値)
要素の閉 じ 中括弧の直前のバ ッ ク ス ラ ッ シ ュ は、直前にバ ッ ク ス ラ ッ シ ュ キ ャ ラ ク タ を付
け る 必要があ り ます :
filename={C:\path\name\\}
(1個のバックスラッシュで終わる文字列)
空文字列は、 中括弧の対で構築で き ます :
{}
内容文字列 ・ ハ イ パーテ キ ス ト 文字列 ・ 名前文字列 : こ れ ら は、 さ ま ざ ま な形式の Unicode
内容を持つ こ と がで き ます。 パ ラ メ タ escapesequence が設定 さ れてい る 場合には、 シ ン グ
ルバ イ ト はエ ス ケープシーケ ン ス で表す こ と も で き ます。 こ れ ら の文字列型 と 、 文字列オ
プシ ョ ンに対す る エン コ ーデ ィ ン グ選択について詳 し く は、PDFlib チ ュ ー ト リ アルを参照
し て く だ さ い。
非Unicode対応言語バ イ ンデ ィ ン グ:オプシ ョ ン リ ス ト の先頭が [EBCDIC-]UTF-8 BOM
で あ る 場合には、 オプ シ ョ ン リ ス ト の内容 ・ ハ イ パーテ キ ス ト ・ 名前文字列はそれぞれ
[EBCDIC-]UTF-8 文字列 と し て解釈 さ れます。
Unichar Unichar は、 1 個の Unicode 値であ り 、 い く つかの種類の文法に対応 し てい ます :
10 以上の 10 進値 (例 : 173)、 接頭辞 x ・ X ・ 0x ・ 0X ・ U+ のいずれかを付けた 16 進値
(xAD ・ 0xAD ・ U+00AD)、 数値参照、 文字参照、 グ リ フ名参照か ら 「&」 ・ 「;」 修飾を除い
た も の (shy ・ #xAD ・ #173)。 あ る いは、 リ テ ラ ルな キ ャ ラ ク タ を与え る こ と も で き ます。
Unichar は、 範囲 0 ~ 1 114 111 (0 ~ 0x10FFFF) 内であ る 必要があ り ます : 例 :
unknownchar=?
unknownchar=63
unknownchar=x3F
unknownchar=0x3F
unknownchar=U+003F
lineseparator={CRLF}
(リテラル)
(10進)
(16進)
(16進)
(Unicode記法)
(標準グリフ名参照)
1 個の数字キ ャ ラ ク タ は、 10 進 Unicode 値 と し てではな く 、 リ テ ラ ルに扱われます :
replacementchar=3
(U+0033 THREE。U+0003ではありません!)
Unicode 集合 Unicode 集合は、 以下の構成要素に よ っ て構築する こ と がで き ます :
> パ タ ーンは、 一連のキ ャ ラ ク タ を角括弧で ま と めた も のであ り 、 Unicode キ ャ ラ ク タ 群
と Unicode プ ロ パテ ィ 集合群の リ ス ト を内容 と し て持ち ます。
154
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
> リ ス ト は、 Unicode キ ャ ラ ク タ の連鎖であ り 、 2 個のキ ャ ラ ク タ の間に 「-」 で示 し た範
囲を持つ こ と がで き ます。 例 : U+FB00-U+FB17。 連鎖は、 Unicode 順に左か ら 右ま での
すべてのキ ャ ラ ク タ の範囲を示 し ます。 複数の Unicode キ ャ ラ ク タ は、 間を空白で区
切 ら ずに直接つなげて書 く 必要があ り ます。 例 : U+0048U+006C。
> リ ス ト 内の Unicode キ ャ ラ ク タ は以下の よ う に指定で き ます :
ASCII キ ャ ラ ク タ は リ テ ラ ル と し て指定で き ます
ち ょ う ど 4 桁の 16 進数字 : \uhhhh ま たは U+hhhh
ち ょ う ど 5 桁の 16 進数字 : U+hhhhh
1 ~ 6 桁の 16 進数字 : \x{hhhhhh}
ち ょ う ど 8 桁の 16 進数字 : \Uhhhhhhhh
エ ス ケープ さ れたバ ッ ク ス ラ ッ シ ュ : \\
> Unicode プ ロ パテ ィ 集合は、Unicode プ ロ パテ ィ に よ っ て指定 さ れます。プ ロ パテ ィ 名を
指定す る ための文法は、 POSIX と Perl 文法の拡張であ り 、 こ こ で type は Unicode プ ロ
パテ ィ の名前を (www.unicode.org/Public/UNIDATA/PropertyAliases.txt 参照)、 value は
その値を (www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt 参照) 表 し ます :
POSIX 式文法 : [:type=value:]
POSIX 式文法で否定 : [:^type=value:]
Perl ス タ イ ル文法 : \p{type=value}
Perl ス タ イ ル文法で否定 : \P{type=value}
type= は、 Category ・ Script プ ロ パテ ィ については省け ますが、 それ以外のプ ロ パテ ィ
については必要です。
> 集合演算をパ タ ーンに適用す る こ と も で き ます :
2 個の集合の和を と る には、 単純にそれ ら を連結 し ます : [[:letter:] [:number:]]
2 個の集合の積を と る には、 「&」 演算子を用い ます : [[:letter:] & [U+0061-U+007A]]
2 個の集合の差を と る には、 「-」 演算子を用い ます : [[:letter:]-[U+0061-U+007A]]
補集合を得 る には、 開 き 「[」 の直後に 「^」 を入れ ま す : [^U+0061-U+007A]。 それ以
外の場所では、 「^」 は特別な意味を持ち ません。
表 10.1 にいろいろ な Unicode 集合の例を挙げます。 下記 Web サ イ ト を利用す る と 、 いろ
いろ な Unicode 集合表現を対話的に試す こ と がで き ます :
unicode.org/cldr/utility/list-unicodeset.jsp
論理値
論理値は、値 true ま たは false を と り ます。論理値オプシ ョ ン で値を省略す る と 、
値 true と 見な さ れます。name=false の短縮記法 と し て noname を用い る こ と も 可能です:
usehostfonts
nousehostfonts
(usehostfonts=trueと同等)
(usehostfonts=falseと同等)
キーワー ド キー ワー ド 型のオプシ ョ ンは、決め ら れた キーワー ド の定義済 リ ス ト の 1 つ
を と る こ と がで き ます。 例 :
clippingarea=cropbox
オプシ ョ ンに よ っ ては、 数値 と キー ワー ド のいずれかの値を と る も の も あ り ます。
数値
オプシ ョ ン リ ス ト は、 い く つかの数値型に対応 し てい ます。
10.3 基本型
155
表 10.1 い ろ い ろ な Unicode 集合の例
Unicode 集合の指定
[U+0061-U+007A]
その Unicode 集合内のキ ャ ラ ク タ 群
a から z ま での小文字
[U+0640]
ア ラ ビ ア文字 タ ト ウ ィ ールの 1 キ ャ ラ ク タ のみ
[\x{0640}]
ア ラ ビ ア文字 タ ト ウ ィ ールの 1 キ ャ ラ ク タ のみ
[U+FB00-U+FB17]
欧文 ・ アル メ ニア文字の合字群
[^U+0061-U+007A]
a から z ま で以外のすべてのキ ャ ラ ク タ
[:Lu:]
[:UppercaseLetter:]
すべての大文字 (Unicode 集合の短形式 と 長形式)
[:L:]
[:Letter:]
L で始ま るすべての Unicode カ テ ゴ リ (Unicode 集合の
短形式 と 長形式)
[:General_Category=Dash_Punctuation:]
一般カ テ ゴ リ Dash_Punctuation 内のすべてのキ ャ ラ ク
タ
[:Alphabetic=No:]
すべての非アルフ ァ ベ ッ ト キ ャ ラ ク タ
[:Private_Use:]
私用領域 (PUA) 内のすべてのキ ャ ラ ク タ
整数型は、 10 進 と 16 進の整数を と り ます。 x ・ X ・ 0x ・ 0X のいずれかで始ま る 正の整数
は 16 進値を意味 し ます :
-12345
0
0xFF
float は、 10 進浮動小数点数ま たは整数を と り ます。 ピ リ オ ド ま たはカ ン マ を浮動小数点
値の小数点 と し て使え ます。 指数記法に も 対応 し てい ます。 以下の値はすべて同等です :
size
size
size
size
156
=
=
=
=
-123.45
-123,45
-1.2345E2
-1.2345e+2
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.4 図形型
矩形 矩形は、 矩形の左下隅 と 右上隅の x ・ y 座標を指定す る float 値 4 個の リ ス ト です。
座標を解釈す る ための座標系 (デフ ォ ル ト ま たはユーザ座標系) はオプシ ョ ンに よ っ て異
な り ますので、 都度説明 し て あ り ます。 例 :
includebox = {{0 0 500 100} {0 500 500 600}}
10.4 図形型
157
10.5 一般関数
10.5.1 オ プ シ ョ ン処理
C++ void set_option(wstring optlist)
C# Java void set_option(String optlist)
Perl PHP set_option(string optlist)
VB RB Sub set_option(optlist As String)
C void TET_set_option(TET *tet, const char *optlist)
TET に対する 1 個ない し 複数のグローバルオプ シ ョ ン を設定 し ます。
optlist 表 10.2 に従っ て グ ロ ーバルオプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。1 つのオ
プシ ョ ンが複数回与え ら れた と き は、最後に出現 し た も のがそれ以前の も のを上書 き し ま
す。 1 個のオプシ ョ ンに複数の値を与え る ためには (searchpath な ど)、 こ のオプシ ョ ン
の リ ス ト 引数内ですべての値を与え て く だ さ い。
右記のオプシ ョ ンが使え ます : asciifile ・ cmap ・ codelist ・ encoding ・
filenamehandling ・ fontoutline ・ glyphlist ・ license ・ licensefile ・ logging ・ userlog ・
outputformat ・ resourcefile ・ searchpath
詳細 表 10.2 でその旨記 さ れてい る オプシ ョ ンについては、 こ の関数を複数回呼び出 し て値を
蓄積 さ せ る こ と も で き ます。 その旨記 し ていないオプシ ョ ンでは、 新 し い値が古い値を上
書 き し ます。
表 10.2 TET_set_option( ) のグ ローバルオプ シ ョ ン一覧
オプ シ ョ ン
説明
asciifile
(論理値。 i5/iSeries ・ zSeries 上でのみ対応) ASCII エ ン コ ーデ ィ ングのテキス ト フ ァ イル (UPR 設
定フ ァ イル ・ グ リ フ リ ス ト ・ コ ー ド リ ス ト な ど) を受け付けます。 デ フ ォ ル ト : i5/iSeries では
true、 zSeries では false
cmap1 , 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 CMap リ ソ ース 1 個の名前 と 値を内容 と し て
持ち ます (69 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
codelist1, 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 コ ー ド リ ス ト リ ソ ース 1 個の名前 と 値を内容
と し て持ち ます (69 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
encoding1, 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 エ ン コ ーデ ィ ング リ ソ ース 1 個の名前 と 値を
内容 と し て持ち ます (69 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
158
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 10.2 TET_set_option( ) のグローバルオプ シ ョ ン一覧
オプ シ ョ ン
説明
filenamehandling
(キーワー ド 。 Windows では必須ではあ り ません) フ ァ イル名の タ ーゲ ッ ト エ ン コ ーデ ィ ング。
Windows の場合 このオプ シ ョ ンは、 与え られた フ ァ イル名には適用 さ れますが、 生成 さ れる フ ァ イ
ルの名前には適用 さ れません (デ フ ォル ト : Mac OS X では unicode、 それ以外では honorlang) :
ascii
7 ビ ッ ト ASCII
basicebcdic コ ー ド ページ 1047 に従っ た、 ただ し Unicode 値 <= U+007E のみの基本 EBCDIC
basicebcdic_37
コ ー ド ページ 0037 に従っ た、 ただ し Unicode 値 <= U+007E のみの基本 EBCDIC
honorlang 環境変数 LC_ALL ・ LC_CTYPE ・ LANG を解釈 し 、 それが utf8 ・ UTF-8 ・ cpXXXX ・
CPXXXX ・ iso8859-x ・ ISO-8859-x のいずれかを指定 し ている な ら フ ァ イル名へ適用。
legacy
auto エ ン コ ーデ ィ ング (すなわち カ レ ン ト シ ス テムエ ン コ ーデ ィ ン グ) を用いて フ ァ
イル名を解釈 し 、 honorlang パラ メ タ が設定 さ れている な ら LANG 変数を解釈。
unicode (EBCDIC-) UTF-8 形式の Unicode エ ン コ ーデ ィ ン グ
すべての有効な エ ン コ ーデ ィ ング名
TET が認識する任意の (内蔵ま たはユーザ定義の) エ ン コ ーデ ィ ング
Unicode 非対応言語バイ ンデ ィ ングで UTF-8 BOM な し で length=0 で与え ら れた フ ァ イル名は こ の
filenamehandling オプ シ ョ ン に従っ て解釈 さ れます。
fontoutline1, 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 FontOutline リ ソ ース 1 個の名前 と 値を内容 と
し て持ち ます (69 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
glyphlist1, 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 グ リ フ リ ス ト リ ソ ース 1 個の名前 と 値を内容
と し て持ち ます (69 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
hostfont1, 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 埋め こ まれていない フ ォ ン ト に対 し て用いた
いホス ト フ ォ ン ト の PDF フ ォ ン ト 名 と UTF-8 符号化 さ れた名前を内容 と し て持ち ます。
license
(文字列) ラ イ セ ン スキーを設定 し ます。 これは、 open_document*( ) を初めて呼び出すよ り 前に設
定する必要があ り ます。
licensefile
(文字列) ラ イ セ ン スキー (群) を内容 と し て持つ フ ァ イルの名前を設定 し ます。 こ のラ イ セ ン ス
フ ァ イルは、 TET_open_document*( ) を初めて呼び出すよ り 前に 1 回だけ設定する こ と がで き ます。
あ るいは、 ラ イ セ ン ス フ ァ イルの名前は、 PDFLIBLICENSEFILE と い う 環境変数で、 または
(Windows では) レ ジ ス ト リ を通 じ て与え る こ と も で き ます。
logging1
(オプ シ ョ ン リ ス ト 。 非サポー ト ) 表 10.7 に従 っ て ログ記録出力を指定する オプ シ ョ ン リ ス ト 。 あ
るいは、 ログ記録オプ シ ョ ン群は、 TETLOGGING と い う 環境変数で、 ま たは Windows ではレ ジ ス
ト リ を通 じ て与え る こ と も で き ます。 空のオプ シ ョ ン リ ス ト にする と 、 前回の呼び出 し で設定 し
たオプ シ ョ ン群によ っ て ログ記録が有効にな り ます。 環境変数が設定 さ れている場合には、 ロ グ
記録は、 TET_new( ) への最初の呼び出 し の直後から 開始 さ れます。
userlog
(名前文字列。 非サポー ト ) ログ記録が有効に さ れている場合に ログ フ ァ イルへ書き込まれる任意
の文字列。
outputformat
(キーワー ド 。 C ・ Ruby ・ Perl ・ Python ・ PHP 言語バイ ンデ ィ ングのみ) TET_get_text( ) が返すテキ
ス ト の形式を指定 し ます :
utf8
文字列は、 (C の場合はヌル終端の) UTF-8 形式で返 さ れます。
utf16
文字列は、 そのマ シ ンのネ イ テ ィ ブバイ ト 順序の UTF-16 形式で返 さ れます。
utf32
文字列は、 そのマ シ ンのネ イ テ ィ ブバイ ト 順序の UTF-32 形式で返 さ れます。
ebcdicutf8 (EBCDIC ベースのシ ス テムでのみ利用可能) 文字列は、 ヌル終端 EBCDIC 符号化 UTF8 形式で返 さ れます。 i5/iSeries では コ ー ド ページ 37 が、 zSeries では コ ー ド ページ
1047 が用い られます。
デ フ ォル ト : C ・ Ruby ・ Perl ・ Python ・ PHP の場合は utf8、 i5/iSeries ・ zSeries 上の C の場合は
ebcdicutf8
10.5 一般関数
159
表 10.2 TET_set_option( ) のグ ローバルオプ シ ョ ン一覧
オプ シ ョ ン
説明
resourcefile
(名前文字列) UPR リ ソ ース フ ァ イルの相対または絶対フ ァ イル名。 この リ ソ ース フ ァ イルはただ
ちに読み込まれます。 既存の リ ソ ースは温存 さ れ、 その値は再設定 さ れた場合には新 し い もので
上書き さ れます。 明示的な リ ソ ースオプ シ ョ ンは、 リ ソ ース フ ァ イル内の項目の後に評価 さ れま
す。
リ ソ ース フ ァ イル名は、 環境変数 TETRESOURCEFILE で、 ま たは Windows のレ ジ ス ト リ キーで与
え る こ と も で き ます (69 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。 デ フ ォ ル ト :
tet.upr (MVS では upr)
searchpath1
(名前文字列の リ ス ト ) 読み込みたい フ ァ イル群を含むデ ィ レ ク ト リ の相対または絶対パス名
(群)。 こ の検索パスは複数回設定する こ と も で き、 その場合には項目は蓄積 さ れ、 設定 し た順に
使用 さ れます (69 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。 空文字列にする と 、 既
存のすべての検索パス項目が削除 さ れます。 Windows では、 検索パスはレ ジ ス ト リ 項目を通 じ て設
定する こ と も で き ます。 デ フ ォル ト : 空
shutdownstrategy
(整数) すべての TET オブ ジ ェ ク ト に対 し て 1 回割 り 当て ら れるグ ローバル リ ソ ースの解放の方
式。 グ ローバル リ ソ ースはそれぞれ、 それが初めて必要 と さ れた時点で初期化 さ れます。 このオ
プ シ ョ ンは 1 個のプ ロ セス内のすべての TET オブ ジ ェ ク ト に対 し て同 じ 値に設定する必要があ り
ます。 そ う でない場合は動作は未定義です (デ フ ォル ト : 0) :
0
その リ ソ ース を何個の PLOP オブ ジ ェ ク ト が使用 し ているかを参照カ ウ ン タ が追跡 し ま
す。 最後の TET オブ ジ ェ ク ト が削除 さ れて参照カ ウン タ が 0 に落ち た時に、 その リ
ソ ースは解放 さ れます。
1
リ ソ ースはそのプ ロ セスの終わ り ま で保持 さ れます。 こ れはパフ ォ ーマ ン ス を若干向上
さ せる可能性があ り ますが、 最後の TET オブ ジ ェ ク ト が削除 さ れた後に必要な メ モ リ
が増加 し ます。
1. 複数回呼び出す と オ プ シ ョ ン値を蓄積で き ます。
2. UPR 文法 と は異な り 、 名前 と 値の間の等号 「=」 は必須ではな く 、 許容 も さ れません。
160
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.5.2 セ ッ ト ア ッ プ
C TET *TET_new(void)
新規 TET オブ ジ ェ ク ト を作成 し ます。
戻り値 後続の呼び出 し で使用す る TET オブジ ェ ク ト へのハン ド ル。 メ モ リ が得 ら れなか っ たた
めに こ の関数が成功 し なか っ た と き は NULL を返 し ます。
バインディング オブジ ェ ク ト 指向言語バ イ ンデ ィ ン グでは、こ の関数は TET コ ン ス ト ラ ク タ 内に隠蔽 さ れ
てい ますので、 利用で き ません。
Java void delete( )
C# void Dispose( )
C void TET_delete(TET *tet)
TET オブ ジ ェ ク ト を削除 し て、 関連する内部 リ ソ ース をすべて解放 し ます。
詳細 TET オブジ ェ ク ト を削除す る と 、 その開いてい る 文書 も 自動的にすべて閉 じ ら れます。
TET オブジ ェ ク ト は、 閉 じ ら れた後は、 いかな る 関数で も 使用 し てはいけ ません。
バインディング オブジ ェ ク ト 指向言語バ イ ンデ ィ ン グでは、こ の関数は TET デス ト ラ ク タ 内に隠蔽 さ れて
い ますので、 一般に必要ではあ り ません。 ただ し Java では、 自動的なガベージ コ レ ク シ ョ
ンに加え て明示的な ク リ ーン ア ッ プ を可能にす る ために、利用可能 と な っ てい ます。.NET
では、 処理の最後に、 非マネージの リ ソ ース を ク リ ーン ア ッ プす る ために Dispose( ) を呼
び出すべ き です。
10.5 一般関数
161
10.5.3 PDFlib 仮想 フ ァ イ ルシ ス テム (PVF)
C++ void create_pvf(wstring filename, const void *data, size_t size, wstring optlist)
C# Java void create_pvf(String filename, byte[] data, String optlist)
Perl PHP create_pvf(string filename, string data, string optlist)
VB RB Sub create_pvf(filename As String, data, optlist As String)
C void TET_create_pvf(TET *tet,
const char *filename, int len, const void *data, size_t size, const char *optlist)
メ モ リ 内で与え ら れたデー タ か ら、 名前付 きの仮想の読み取 り 専用 フ ァ イ ルを作成 し ま
す。
filename (名前文字列) 仮想フ ァ イ ルの名前。 こ れは、 後続す る TET 呼び出 し において
こ の仮想フ ァ イ ルを参照す る ために使え る 任意の文字列です。
len (C 言語バ イ ンデ ィ ン グのみ) filename が UTF-16 文字列の場合の長 さ (バ イ ト 単位
で)。 len=0 な ら ば、 ヌ ル終端文字列を与え る 必要があ り ます。
data 仮想フ ァ イ ルのためのデー タ への参照。 COM では、 こ れは仮想フ ァ イ ルを構成す
る デー タ を内容 と し て持つ Byte の Variant です。 C ・ C++ では、 こ れは メ モ リ 位置へのポ
イ ン タ です。 Java では、 こ れは byte 配列です。 Perl ・ PHP では、 こ れは文字列です。
size
(C・C++ のみ) こ のデー タ を内容 と し て持つ メ モ リ ブ ロ ッ ク の長 さ をバ イ ト 単位で。
optlist
表 10.3 に従っ たオプシ ョ ン リ ス ト 。 右記のオプシ ョ ンが使え ます : copy
詳細 仮想フ ァ イ ル名は、 入力フ ァ イ ル名を と る 任意の API 関数に対 し て与え る こ と がで き ま
す。 こ う し た関数のなかには、 そのデー タ が も う 必要な く な る ま でその仮想フ ァ イ ルに
ロ ッ ク を かけ る も の も あ り ま す。 仮想フ ァ イ ルは、 TET_delete_pvf( ) に よ っ て明示的に、
あ る いは TET_delete( ) で自動的に削除 さ れ る ま で、 メ モ リ 内に保持 さ れます。
各 TET オブジ ェ ク ト は、 それぞれ自分自身の PVF フ ァ イ ルのセ ッ ト を保持 し ます。 仮
想フ ァ イ ルを、 異な る TET オブジ ェ ク ト 間で共有す る こ と はで き ません。 複数ス レ ッ ド
で個別の TET オブジ ェ ク ト を操作 し てい る 場合、 PVF の使用を同期す る 必要はあ り ませ
ん。 filename で、 すでにあ る 仮想フ ァ イ ル と 同 じ 名前を指定す る と 例外が発生 し ます。 こ
の関数では、filename がすでに通常のデ ィ ス ク フ ァ イ ルで使われてい る か ど う かはチ ェ ッ
ク し ません。
copy オプシ ョ ン を与え ていないかぎ り 、 与え たデー タ を、 それに対応す る TET_delete_
pvf( ) への呼び出 し が成功す る 前に、 呼び出 し 側で変更 し た り 解放 (削除) し た り し ては
いけ ません。 こ の決ま り に従わない と ク ラ ッ シ ュ する おそれが高いです。
表 10.3 TET_create_pvf( ) のオプ シ ョ ン一覧
オプ シ ョ ン
説明
copy
(論理値) TET は、 与え られたデー タ の内部 コ ピーを ただ ちに作成 し ます。 こ の場合、 与えたデー
タ を、 こ の呼び出 し の直後に呼び出 し 側で廃棄 し て も かまいません。 この copy オプ シ ョ ンは、
COM ・ .NET ・ Java バイ ンデ ィ ングでは自動的にに設定 さ れます (それ以外のバイ ンデ ィ ン グでの
デ フ ォ ル ト : false)。 それ以外のバイ ンデ ィ ン グでは、 copy オプ シ ョ ン を与えないかぎ り デー タ
は複製 さ れません。
162
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
C++ int delete_pvf(wstring filename)
C# Java int delete_pvf(String filename)
Perl PHP int delete_pvf(string filename)
VB RB Function delete_pvf(filename As String) As Long
C int TET_delete_pvf(TET *tet, const char *filename, int len)
指名 さ れた仮想 フ ァ イルを削除 し 、 そのデー タ 構造を解放 し ます (ただ し その内容は解放
し ません)。
filename
(名前文字列) TET_create_pvf( ) に与えたの と 同 じ 、 仮想フ ァ イ ルの名前。
len (C 言語バ イ ンデ ィ ン グのみ) filename が UTF-16 文字列の場合の長 さ (バ イ ト 単位
で)。 len=0 な ら ば、 ヌ ル終端文字列を与え る 必要があ り ます。
戻り値 指定 さ れた仮想フ ァ イ ルが存在 し てい る が ロ ッ ク さ れてい る 場合は -1、 それ以外の場合
は 1。
詳細
フ ァ イ ルが ロ ッ ク さ れていなければ、 TET はただちに、 filename に関連づけ ら れたデー タ
構造を削除 し ます。 filename と い う 名前の有効な仮想フ ァ イ ルが存在 し ない場合には、 こ
の関数は何 も 警告な ど出 さ ずに終了 し ます。 こ の関数を呼び出 し て成功 し た後には、 その
filename は再利用す る こ と も で き ます。 仮想フ ァ イ ルはすべて、 TET_delete( ) で自動的に
削除 さ れます。
詳細な動作は、 こ れに対応す る TET_create_pvf( ) への呼び出 し の際に copy オプシ ョ ン
を与え ていたか ど う かに依存 し ます : copy オプシ ョ ン を与え ていた場合には、 フ ァ イ ル
の管理デー タ 構造 と フ ァ イ ル内容本体 (デー タ ) の両方が解放 さ れますが、 そ う でなか っ
た場合には、 内容は解放 さ れません。 後者の場合には ク ラ イ ア ン ト 側で内容を解放す る こ
と が期待 さ れてい ます。
C++ int info_pvf(wstring filename, wstring keyword)
C# Java int info_pvf(String filename, String keyword)
Perl PHP int info_pvf(string filename, string keyword)
VB RB Function info_pvf(filename As String, keyword As String) As Long
C int TET_info_pvf(TET *tet, const char *filename, int len, const char *keyword)
仮想 フ ァ イルまたは PDFlib 仮想 フ ァ イルシス テム (PVF) のプ ロパテ ィ を取得 し ます。
filename (名前文字列) 仮想フ ァ イ ルの名前。 keyword=filecount の場合 こ の filename は
空 と す る こ と がで き ます。
len (C 言語バ イ ンデ ィ ン グのみ) filename が UTF-16 文字列の場合の長 さ (バ イ ト 単位
で)。 len=0 な ら ば、 ヌ ル終端文字列を与え る 必要があ り ます。
keyword
詳細
表 10.4 に従っ た キー ワー ド 。
こ の関数は、 仮想フ ァ イ ルま たは PDFlib 仮想フ ァ イ ルシ ス テ ム (PVF) の さ ま ざ ま なプ ロ
パテ ィ を返 し ます。 プ ロ パテ ィ を キー ワー ド で指定 し ます。
10.5 一般関数
163
表 10.4 TET_info_pvf( ) のキーワー ド 一覧
オプ シ ョ ン
説明
filecount
カ レ ン ト TET オブ ジ ェ ク ト のために保持 さ れている PDFlib 仮想 フ ァ イルシ ス テム内のフ ァ イルの
総数。 filename 引数は無視 さ れます。
exists
そのフ ァ イルが PDFlib 仮想 フ ァ イルシ ス テム内に存在 し ている な ら (かつ削除 さ れていないな ら)
1、 そ う でないな ら 0
size
(存在する仮想フ ァ イルに対 し てのみ) 指定 し た仮想フ ァ イルのサイ ズをバイ ト 単位で。
iscopy
(存在する仮想フ ァ イルに対 し てのみ) 指定 し た仮想フ ァ イルが作成 さ れた際に copy オプ シ ョ ン
が与え られていたな ら 1、 そ う でないな ら 0
lockcount
(存在する仮想フ ァ イルに対 し てのみ) 指定 し た仮想フ ァ イルに対 し て TET 関数によ っ て内部的に
セ ッ ト さ れた ロ ッ ク の数。 こ のロ ッ ク カ ウン ト が 0 にな ら なければそのフ ァ イルは削除 さ れる こ
と がで き ません。
164
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.5.4 Unicode 変換関数
C++ string convert_to_unicode(wstring inputformat, string input, wstring optlist)
C# Java String convert_to_unicode(String inputformat, byte[ ] input, String optlist)
Perl PHP string convert_to_unicode(string inputformat, string input, string optlist)
VB RB Function convert_to_unicode(inputformat As String, input As String, optlist As String) As String
C const char *TET_convert_to_unicode(TET *tet,
const char *inputformat, const char *input, int inputlen, int *outputlen, const char *optlist))
任意のエ ン コ ーデ ィ ングの文字列を、 さ ま ざ ま な形式の Unicode 文字列へ変換 し ます。
inputformat 入力文字列の解釈を指定す る Unicode テ キ ス ト 形式ま たはエン コ ーデ ィ ン
グ名 :
> Unicode テ キ ス ト の各形式 : utf8 ・ ebcdicutf8 ・ utf16 ・ utf16le ・ utf16be ・ utf32
> すべての内部的に知 ら れ る 8 ビ ッ ト エン コ ーデ ィ ン グ と 、ホ ス ト シ ス テ ム上で利用可能
なエン コ ーデ ィ ン グ と 、 日中韓エン コ ーデ ィ ン グ cp932 ・ cp936 ・ cp949 ・ cp950
> キー ワー ド autoは右記の動作を指定 し ます:入力文字列にUTF-8かUTF-16のBOMがあ
る 場合には、 それを用いて正 し い形式が決定 さ れ、 そ う でない場合はカ レ ン ト シ ス テ
ム コ ー ド ページ と 見な さ れます。
input
Unicode へ変換 し たい文字列。
input Unicode へ変換 し たいデー タ を内容 と す る バ リ ア ン ト (REALbasic な ら メ モ リ ブ
ロ ッ ク )。
inputlen (C 言語バ イ ンデ ィ ン グのみ) 入力文字列の長 さ をバ イ ト 単位で。inputlen=0 な
ら ば、 ヌ ル終端文字列を与え る 必要があ り ます。
outputlen (C 言語バ イ ンデ ィ ン グのみ) 返 さ れ る 文字列の長 さ (バ イ ト 単位で) を格納
さ せたい メ モ リ 位置への C ス タ イ ルポ イ ン タ 。
optlist 表 10.5 に従っ てオプシ ョ ン を指定 し たオプシ ョ ン リ ス ト :
> 入力フ ィ ル タ オプシ ョ ン : charref ・ escapesequence
> Unicode 変換オプシ ョ ン : bom ・ errorpolicy ・ inflate ・ outputformat
戻り値 指定 し た引数 と オプシ ョ ンに従っ て入力文字列か ら 生成 さ れた Unicode 文字列。 入力文字
列 が、 指 定 し た 入 力 形 式 に 従 っ て い な い (無 効 な UTF-8
文字列 な ど) と き は、
errorpolicy=return であれば空の出力文字列が返 さ れ、 errorpolicy=exception であれば例外
が発生 し ます。
詳細
こ の関数は Unicode 文字列変換全般に有用で し ょ う 。 こ れは、 適当な Unicode 変換機能を
提供 し ていない環境で作業す る ユーザの利便のために提供 さ れてい ます。
バインディング C バ イ ンデ ィ ン グ : 返 さ れ る 文字列は、 最大 10 項目を持つ リ ン グバ ッ フ ァ に格納 さ れま
す。 10 個を超え る 文字列が変換 さ れた と き には、 バ ッ フ ァ は再利用 さ れますので、 10 個
を超え る 文字列を同時に利用 し たい場合には、 ク ラ イ ア ン ト 側でその文字列を複製 し てお
く 必要があ り ます。 た と えば printf( ) 文 1 個の中には こ の関数への呼び出 し を最大 10 個
ま で引数 と し て入れ る こ と がで き ます。 10 個を超え る 文字列が同時に使用 さ れないな ら
ば、 その戻 り 文字列は互いに独立であ る こ と が保証 さ れてい る か ら です。
10.5 一般関数
165
C++ バ イ ンデ ィ ン グ : inputformat と optlist は通常通 り wstring と し て渡す必要があ り ま
すが、 input と 戻 り デー タ は string 型を持つ必要があ り ます。
Python バ イ ンデ ィ ン グ : UTF-8 の戻 り 値は文字列 と し て返 り ます。 Python 3 : 非 UTF-8
の戻 り 値はバ イ ト 列 と し て返 り ます。
表 10.5 TET_convert_to_unicode( ) のオプ シ ョ ン一覧
オプ シ ョ ン
説明
charref
(論理値) true の場合、 数値 ・ 文字実体参照 と グ リ フ名参照の置き換え を有効に し ます。 デ フ ォ ル
ト : false
bom
(キーワー ド 。 outputformat=utf32 の と きは無視 さ れます) 出力文字列にバイ ト 順序マー ク
(BOM) を付加する方式。 使え るキーワー ド (デ フ ォル ト : none) :
add
BOM を付加。
keep
入力文字列に BOM があ る な ら BOM を付加。
none
BOM を付加 し ない。
optimize outputformat=utf8 または ebcdicutf8 かつ出力文字列が範囲 < U+007F のキ ャ ラ ク タ の
みを含む場合を除いて BOM を付加。
errorpolicy
(キーワー ド ) 変換エ ラ ーの際の動作 (デ フ ォ ル ト : exception) :
return
文字参照が解決で き ない と き、 ま たは指定 さ れた フ ォ ン ト 内に内蔵 コ ー ド かグ リ フ ID
が存在 し ない と き、 置換キ ャ ラ ク タ U+FFFD が使用 さ れます。 変換エ ラ ーの場合には空
文字列が返 さ れます。
exception 変換エ ラ ーの場合には例外が発生 し ます。
escapesequence
(論理値) true の場合、 文字列内のエスケープ シーケ ン スの置き換え を有効に し ます。 デ フ ォル
ト : false
inflate
(論理値。 inputformat=utf8 の場合のみ。 outputformat=utf8 の と きは無視 さ れます) true の場
合、 無効な UTF-8 入力文字列は例外を発生 さ せず、 指定 さ れた出力形式のイ ン フ レー ト さ れたバ
イ ト 文字列が生成 さ れます。 これはデバ ッ グに有用で し ょ う 。 デ フ ォル ト : false
outputformat
(キーワー ド ) 生成 し たい文字列の Unicode テキス ト 形式 : utf8 ・ ebcdicutf8 ・ utf16 ・ utf16le ・
utf16be ・ utf32。 空文字列は utf16 と 同等です。 デ フ ォル ト : utf16
Unicode 対応言語バイ ンデ ィ ン グ : 出力形式は強制的に utf16 にな り ます。
C++ 言語バイ ンデ ィ ング : 右記の出力形式のみ許 さ れます : ebcdicutf8 ・ utf8 ・ utf16 ・ utf32。
166
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.5.5 例外処理
C++ wstring get_apiname( )
C# Java String get_apiname( )
Perl PHP string get_apiname( )
VB RB Function get_apiname( ) As String
C const char *TET_get_apiname(TET *tet)
例外を発生 さ せた、 または失敗 し た API 関数の名前を得ます。
戻り値 例外を発生 さ せた関数の名前、 ま たは、 呼び出 さ れてエ ラ ー コ ー ド を持っ て失敗 し た最近
の関数の名前。 エ ラ ーがなか っ た場合は空文字列が返 さ れます。
C++ wstring get_errmsg( )
C# Java String get_errmsg( )
Perl PHP string get_errmsg( )
VB RB Function get_errmsg( ) As String
C const char *TET_get_errmsg(TET *tet)
最後に発生 し た例外の、 または失敗 し た関数呼び出 し の原因のテキス ト を得ます。
戻り値 最後に発生 し た例外の説明を、 ま たは、 呼び出 さ れてエ ラ ー コ ー ド を持っ て失敗 し た最近
の関数の原因を内容 と し て持つテ キ ス ト 。 エ ラ ーがなか っ た場合は空文字列が返 さ れ ま
す。
C++ int get_errnum( )
C# Java int get_errnum( )
Perl PHP long get_errnum( )
VB RB Function get_errnum( ) As Long
C int TET_get_errnum(TET *tet)
最後に発生 し た例外の、 または、 失敗 し た関数呼び出 し の原因の番号を得ます。
Get the number of the last thrown exception or the reason for a failed function call.
戻り値 例外の番号、 ま たは、 呼び出 さ れてエ ラ ー コ ー ド を持っ て失敗 し た最近の関数のエ ラ ー
コ ー ド 。 エ ラ ーがなか っ た場合は こ の関数は 0 を返 し ます。
C TET_TRY(tet)
C TET_CATCH(tet)
C TET_RETHROW(tet)
C TET_EXIT_TRY(tet)
例外処理ブ ロ ッ ク を セ ッ ト ア ッ プ し ます。 例外をキ ャ ッ チ し ます。 例外を再び投げます。
例外機構に対 し 、対応する TET_CATCH( ) ブ ロ ッ ク に入る こ と な く TET_TRY( ) ブ ロ ッ クか ら
10.5 一般関数
167
抜ける こ と を通知 し ます。 TET_RETHROW( ) を用いる と 、 例外をキ ャ ッ チ し た後に、 よ り
高い レ ベルの関数へそれを再び投げる こ と がで き ます。
詳細 (C 言語バ イ ンデ ィ ン グのみ) 29 ページの 3.2 「C バ イ ンデ ィ ン グ」 を参照。
168
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.5.6 ロ グ記録
ロ グ記録機能を利用す る と 、 API 呼び出 し 群を追跡す る こ と がで き ます。 その ロ グ フ ァ イ
ルの内容は、 デバ ッ グ目的に有用なほか、 PDFlib GmbH サポー ト か ら 求め ら れ る こ と があ
り ます。 表 10.6 に、 TET_set_option( ) (158 ページの 10.5.1 「オプシ ョ ン処理」 を参照) で
ロ グ記録機能を有効にす る ためのオプシ ョ ン を挙げます。
表 10.6 TET_set_option( ) のログ記録関連キー一覧
キー
説明
logging
表 10.7 に従っ た ログ記録オプ シ ョ ン群を持つオプ シ ョ ン リ ス ト
userlog
ログ フ ァ イルへ複製 さ れる文字列
ロ グ記録オプシ ョ ンは、 以下の方法で与え る こ と がで き ます :
> TET_set_option( ) の logging オプシ ョ ンに対す る オプシ ョ ン リ ス ト と し て。 例 :
tet.set_option("logging", "filename=debug.log remove")
> TETLOGGING と い う 環境変数で。 こ の場合、 ロ グ記録出力は、 API 関数のいずれか を最
初に呼び出 し た時か ら 開始 さ れます。
表 10.7 TET_set_option( ) の logging オプ シ ョ ンのサブオプ シ ョ ン一覧
キー
説明
(空 リ ス ト )
disable で無効化 さ れている ロ グ出力を有効に し ます。
disable
(論理値) ログ出力を無効化 し ます。 デ フ ォル ト : false
enable
(論理値) ログ出力を有効に し ます。
filename
(文字列) ログ フ ァ イルの名前 (stdout と stderr も受け付けます)。 すでに内容があ る と き、 出力
はその末尾に追加 さ れます。 ログ フ ァ イル名はあ るいは、 TETLOGFILENAME と い う 環境変数で与
え る こ と も で き ます ( こ の場合、 こ のオプ シ ョ ン filename はつねに無視 さ れます)。 デ フ ォ ル ト :
tet.log (Windows と Mac では / デ ィ レ ク ト リ 内。 Unix では /tmp 内)
flush
(論理値) true の場合、 ログ フ ァ イルは、 必ず出力が実際に フ ラ ッ シ ュ さ れる よ う 、 出力のたびに
閉 じ られ、 次の出力の時にまた開かれます。 プ ログ ラ ムのク ラ ッ シ ュ を追跡する際に、 ログ フ ァ
イルが途中で終わっ て し ま っ ている場合に有用で し ょ う 。 ただ し 速度はかな り 遅 く な り ます。
false の場合、 ロ グ フ ァ イルは 1 回だけ開かれます。 デ フ ォ ル ト : false
remove
(論理値) true の場合は、 新 し い出力を書き こ む際に、 既存のログ フ ァ イルは削除 さ れます。 デ
フ ォ ル ト : false
stringlimit
(整数) テキス ト 文字列内のキ ャ ラ ク タ の数の上限。 0 な ら無制限。 デ フ ォ ル ト : 0
10.5 一般関数
169
表 10.7 TET_set_option( ) の logging オプ シ ョ ンのサブオプ シ ョ ン一覧
キー
説明
classes
(オプ シ ョ ン リ ス ト ) 整数型のオプ シ ョ ン群を内容 と し て持つ リ ス ト 。 こ こ で各オプ シ ョ ンはログ
記録ク ラ ス を記述 し 、 おのおのの値はその粒度を記述 し ます。 レ ベル 0 はログ記録ク ラ ス を無効
化 し 、 正の数値はク ラ ス を有効に し ます。 レ ベルが上がるほど詳細な出力を与え ます。 以下のオ
プ シ ョ ンが使え ます (デ フ ォ ル ト : {api=1 warning=1}) :
api
すべての API 呼び出 し を、 その引数 と 結果 と と も に ログ記録 し ます。 api=2 の場合は、
すべての API 追跡行の頭に タ イ ムス タ ン プが生成 さ れる と と も に、 非推奨の関数 ・ オプ
シ ョ ンにはその旨注記 さ れます。 api=3 の場合は、 try/catch 呼び出 し がログ記録 さ れま
す (入れ子の例外処理によ るデバ ッ グ問題に対 し て有用です)。
filesearch SearchPath ま たは PVF を通 じ た フ ァ イルの場所特定に関連するすべての試みを ロ グ記
録 し ます。
resource Windows レ ジ ス ト リ ・ UPR 定義を通 じ た リ ソ ースの場所特定のすべての試みを、 その リ
ソ ース検索の結果 と と も に ログ記録 し ます。
user
userlog オプ シ ョ ン で与え られたユーザ指定のログ記録出力。
warning すべての警告を、 すなわち、 無視または内部修復で き る エ ラ ー状況を ログ記録 し ます。
warning=2 の場合は、 例外を発生 さ せずに、 TET_get_errmsg( ) を通 じ て取得で き る メ ッ
セージ テキス ト を残す関数か らの メ ッ セージ と 、 フ ァ イルを開こ う と し た試みの失敗す
べての原因も ログ記録 さ れます。
170
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.6 文書関数
C++ int open_document(wstring filename, wstring optlist)
C# Java int open_document(String filename, String optlist)
Perl PHP long open_document(string filename, string optlist)
VB RB Function open_document(filename As String, optlist As String) As Long
C int TET_open_document(TET *tet, const char *filename, int len, const char *optlist)
内容を抽出 し たい、 デ ィ ス ク ベースの、 または仮想の PDF 文書を開き ます。
filename (名前文字列) 処理 さ せたい PDF 入力フ ァ イ ルの絶対ま たは相対名。 こ の フ ァ
イ ルは、searchpath リ ソ ース カ テ ゴ リ 内で指定 さ れてい る すべてのデ ィ レ ク ト リ 内で検索
さ れます。 Windows では、 UNC パ ス と 、 マ ッ プ さ れたネ ッ ト ワー ク ド ラ イ ブ も 使え ます。
PHP では、 Unicode フ ァ イ ル名は UTF-8 であ る 必要があ り ます。
非 Unicode 言語バ イ ンデ ィ ン グでは、 len = 0 の場合、 フ ァ イ ル名はカ レ ン ト シ ス テ ム
コ ー ド ページで解釈 さ れます。 ただ し 、 UTF-8 BOM が頭に付いてい る 場合は、 UTF-8 か
EBCDIC-UTF-8 と し て解釈 さ れます。
len (C 言語バ イ ンデ ィ ン グのみ) filename が UTF-16 文字列の場合の長 さ (バ イ ト 単位
で)。 len=0 な ら ば、 ヌ ル終端文字列を与え る 必要があ り ます。
optlist 表 10.8 に従っ て文書オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。 右記のオプ
シ ョ ンが使え ます : checkglyphlists ・ decompose ・ encodinghint ・ fold ・ glyphmapping ・
lineseparator ・ normalize ・ inmemory ・ password ・ repair ・ requiredmode ・ shrug ・ tetml ・
usehostfonts ・ wordseparator ・ zoneseparator
戻り値 エ ラ ー時は -1、 そ う でないな ら 文書ハン ド ル。 た と えば、 入力文書ま たは TETML 出力
フ ァ イ ルを開 く こ と がで き ない と き はエ ラ ーにな り ます。 -1 が返 さ れた場合には、 TET_
get_errmsg( ) を呼び出 し てエ ラ ーの詳細を知 る こ と を推奨 し ます。
詳細 1 個の TET オブジ ェ ク ト 内で、 任意の数の文書を同時に開いてお く こ と がで き ます。 し か
し 、 1 個の TET オブジ ェ ク ト を複数の ス レ ッ ド で同時に、 ア ク セ ス を同期す る ロ ッ ク 機構
な し で使用 し てはいけ ません。
暗号化 : 文書が暗号化 さ れてい る 場合は、 その権限設定が内容抽出を許 し てい る な ら
ば、 そのユーザパ ス ワー ド を password オプシ ョ ン で与え る 必要があ り ます。 権限設定が
内容抽出を許 し ていない場合には、 その文書のマ ス タ パ ス ワ ー ド を与え る 必要があ り ま
す。 requiredmode オプシ ョ ン を指定 し てい る 場合は、 正 し いパ ス ワ ー ド がな く て も 文書
を開 く こ と がで き ますが、 操作は制限 さ れます。 shrug オプシ ョ ン を用い る と 、 保護 さ れ
た文書か ら 一定の条件下で内容抽出を可能にす る こ と がで き ます (67 ページの 5.1 「暗号
化 PDF か ら 内容を抽出」 を参照)。
i5/iSeries 上での対応フ ァ イ ルシ ス テ ム : TET は、 PC タ イ プの フ ァ イ ルシ ス テ ムでの
みテ ス ト さ れてい ます。 ですので、 入力 ・ 出力フ ァ イ ルは、 IFS (統合フ ァ イ ルシ ス テ ム)
内の PC タ イ プ フ ァ イ ル内になければな り ません。QSYS.lib フ ァ イ ルシ ス テ ム内の入力フ ァ
イ ルはテ ス ト さ れてお ら ず、 サポー ト さ れてい ません。 QSYS.lib フ ァ イ ルは多 く の場合、
レ コ ー ド ベー ス ま た はデー タ ベー ス オブ ジ ェ ク ト の た めに用い ら れ ま すので、 TET を
QSYS.lib オブジ ェ ク ト と と も に使用す る と 予期 し ない動作結果を招 く おそれがあ り ます。
TET フ ァ イ ル I/O ス ト リ ームはつねに ス ト リ ームベース であ り 、レ コ ー ド ベース ではあ り
ません。
10.6 文書関数
171
表 10.8 TET_open_document( ) ・ TET_open_document_callback( ) の文書オプ シ ョ ン一覧
オプ シ ョ ン
説明
checkglyphlists
(論理値) true な らば、 TET は、 テキス ト 抽出が始ま る前に、 すべての condition=allfonts の内
蔵グ リ フ マ ッ ピ ング規則を チ ェ ッ ク し ます。 そ う でないな ら 、 グ ローバルなグ リ フ マ ッ ピ ング規
則は適用 さ れません。 このオプ シ ョ ンは処理速度を低下 さ せますが、 デ フ ォル ト で Unicode へマ ッ
プ で き ないグ リ フ名を持つある種の TeX 文書に対 し て有用です。 デ フ ォ ル ト : false
decompose
(キーワー ド かオプ シ ョ ン リ ス ト ) 指定 し た Unicode 分解 タ グ を持つ、 かつ、 指定 し た Unicode 集
合の一部であ るすべてのキ ャ ラ ク タ に適用 さ れる Unicode 分解。 これ らの条件はサブオプ シ ョ ンの
名前 と 値で与え られます。 分解を用いる と 、 等価な Unicode キ ャ ラ ク タ 間の違いを除去するか温存
する こ と がで き ます (105 ページの 7.3 「Unicode 後処理」 を参照)。
デ フ ォ ル ト : 111 ページの 「デ フ ォ ル ト 分解」 を参照 し て く だ さ い。 ただ し 、 normalize オプ シ ョ
ンが none 以外の値を持つ と きは、 すべてのデ フ ォ ル ト 分解は無効化 さ れます。 すなわち、
normalize オプ シ ョ ン を設定する と デ フ ォル ト が decompose=none に設定 さ れます。 ただ し 、 ユー
ザ指定の分解はなお適用する こ と がで き ます。
リ ス ト に換えて、 以下のキーワー ド を与え る こ と も で き ます :
none
何の分解 も適用 さ れません。
default
他の指定 し た分解の前に、 デ フ ォ ル ト 分解 (111 ページの 「デ フ ォル ト 分解」 を参照)
が適用 さ れます。
分解のための以下のサブオプ シ ョ ンが使え ます :
canonical ・ circle ・ compat ・ final ・ font ・ fraction ・ initial ・ isolated ・ medial ・ narrow ・ nobreak ・
small ・ square ・ sub ・ super ・ vertical ・ wide
こ れら の各サブオプ シ ョ ンは、 分解の ド メ イ ン を、 すなわち、 分解が適用 さ れる Unicode キ ャ ラ ク
タ の集合を指定する文字列またはキーワー ド を受け付けます。 文字列は、 ド メ イ ンの Unicode 集合
を指定 し ます。 これを用いる と 、 指定 し た分解 タ グ を持つキ ャ ラ ク タ の部分集合に分解を制限す
る こ と がで き ます。 こ の ド メ イ ンの外のキ ャ ラ ク タ は変更 さ れません。
Unicode 集合の文字列に換え て、 以下のキーワー ド を与え る こ と も で き ます :
_all
全 Unicode キ ャ ラ ク タ の集合。 すなわち、 分解は、 指定 し た分解 タ グ を持つすべての
キ ャ ラ ク タ に適用 さ れます。
_none
空集合。 すなわち、 分解はま っ た く 適用 さ れません。
encodinghint (文字列1) 標準規則ではマ ッ プ で きず、 定義済内部グ リ フ マ ッ ピ ング規則に よ っ てのみマ ッ プ で
き るグ リ フ名に対する Unicode マ ッ ピ ング を決定する ために用い られる エ ン コ ーデ ィ ングの名前。
キーワー ド none を用いる と 、 すべての定義済規則を無効化する こ と がで き ます。 デ フ ォル ト :
winansi
172
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 10.8 TET_open_document( ) ・ TET_open_document_callback( ) の文書オプ シ ョ ン一覧
オプ シ ョ ン
説明
fold
(キーワー ド 、 ま たは リ ス ト の リ ス ト 。 それぞれの内側の リ ス ト の 1 番目の要素は Unicode 集合ま
たはキーワー ド 、 2 番目の要素は Unichar ま たはキーワー ド ) Unicode 集合 と し て指定 し た字形統
合 ド メ イ ン内のすべてのキ ャ ラ ク タ に対 し 、 字形統合 (等価マ ッ ピ ング) を適用 し ます。 この字
形統合は、 lineseparator または wordseparator オプ シ ョ ン で追加 し た区切 り キ ャ ラ ク タ を除 く す
べてのテキス ト に対 し て適用 さ れます (105 ページの 7.3 「Unicode 後処理」 を参照)。 デ フ ォ ル
ト : 107 ページの表 7.3 を参照。
リ ス ト に換えて、 以下のキーワー ド を与え る こ と も で き ます :
none
字形統合は一切適用 さ れません。
サブ リ ス ト に換え て、 以下のキーワー ド を与え る こ と も で き ます :
default
他の指定 し た字形統合の前に、 デ フ ォ ル ト 字形統合が適用 さ れます。
各 リ ス ト の 1 番目の要素は、 字形統合の ド メ イ ン を、 すなわち その字形統合が適用 さ れる Unicode
キ ャ ラ ク タ の集合を指定 し ます。 文字列は、 ド メ イ ンの Unicode 集合を指定 し ます。 1 個のキ ャ ラ
ク タ が、 fold オプ シ ョ ン内で指定 し ている複数の集合に含まれている場合には、 最初に一致 し た
集合の定義が他のすべてに優先 し ます。 問題を避ける ため、 重な ら ない集合を用いる こ と を推奨
し ます。
Unicode 集合に換えて、 以下のキーワー ド を与え る こ と も で き ます :
_dehyphenation
字形統合は、 改行位置でハイ フ ン区切 り さ れた単語内で見つか っ たハイ フ ンキ ャ ラ ク タ
に適用 さ れます。 こ れ らのキ ャ ラ ク タ は、 TET_get_char_info( ) が返す attributes メ ンバ
内 と 、 TETML 内の @dehyphenation 属性で フ ラ グが立ち ます。
各 リ ス ト の 2 番目の要素は、 字形統合の タ ーゲ ッ ト キ ャ ラ ク タ またはア ク シ ョ ン を内容 と し て持
ち ます。 こ れは以下の種類のいずれかで指定 し ます :
(Unichar) その ド メ イ ン内のすべてのキ ャ ラ ク タ を、 指定 し た Unicode キ ャ ラ ク タ へ置き換え ま
す。
remove
ド メ イ ン内のすべてのキ ャ ラ ク タ が除去 さ れます。
preserve ド メ イ ン内のキ ャ ラ ク タ は変更 さ れません。
unknownchar
ド メ イ ン内のすべてのキ ャ ラ ク タ を、 unknownchar オプ シ ョ ン で指定 し たキ ャ ラ ク タ へ
置き換え ます。
glyphmapping (オプ シ ョ ン リ ス ト の リ ス ト ) オプ シ ョ ン リ ス ト の リ ス ト 。 こ こ で各オプ シ ョ ン リ ス ト は、 標準 メ
ソ ッ ド で き ちん と マ ッ プ で き ない 1 個ない し 複数のフ ォ ン ト / エ ン コ ーデ ィ ングの組み合わせに
対するグ リ フ マ ッ ピ ング方式を記述 し ます。 こ のマ ッ ピ ングは、 設定 さ れた順に用い ら れます。
最後のオプ シ ョ ン リ ス ト がフ ォ ン ト 名ワ イル ド カ ー ド 「*」 を含んでいる場合には、 それ以前の
マ ッ ピ ングは用い られな く な り ます。 各規則は、 表 10.9 に従 っ たオプ シ ョ ン リ ス ト を内容 と し て
持ち ます。 特定のフ ォ ン ト 名にマ ッ チするすべてのグ リ フ マ ッ ピ ン グが こ のフ ォ ン ト に適用 さ れ
ます (デ フ ォル ト : 定義済内蔵グ リ フ規則群が適用 さ れます)。
なお、 グ リ フ マ ッ ピ ング規則は、 UPR フ ァ イル内の外部 リ ソ ース と し て指定する こ と も で き ます
(69 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
lineseparator
(Unichar。 granularity=zone ・ page の場合のみ) 行ど う し の間に挿入 さ せたいキ ャ ラ ク タ 2。 デ
フ ォ ル ト : U+000A
normalize
(キーワー ド ) テキス ト 出力を、 Unicode 正規化形の 1 つへ正規化 し ます :
none
いかな る正規化 も適用 し ません。
nfc
正規化形 C (NFC) : 正準分解の後に正準合成
nfd
正規化形 D (NFD) : 正準分解
nfkc
正規化形 KC (NFKC) : 互換分解の後に正準合成
nfkd
正規化形 KD (NFKD) : 互換分解
Unicode 正規化形には正準分解 と 互換分解がかかわっ て き ますので、 オプ シ ョ ン decompose と
normalize の組み合わせは注意深 く 行 う 必要があ り ます。 normalize オプ シ ョ ン を none 以外の値
に設定する と 、 分解のデ フ ォ ル ト は decompose=none に設定 さ れます。 normalize オプ シ ョ ンは
decompose オプ シ ョ ンの後に処理 さ れます。
10.6 文書関数
173
表 10.8 TET_open_document( ) ・ TET_open_document_callback( ) の文書オプ シ ョ ン一覧
オプ シ ョ ン
説明
inmemory
(論理値。 TET_open_document( ) のみ) true の場合、 TET は フ ァ イル全体を メ モ リ 内へ読み込み、
それを そ こ で処理 し ます。 こ れは、 シ ス テムに よ っ ては驚異的なパ フ ォ ーマ ン ス向上につながる
こ と があ り ますが ( と く に MVS)、 そのかわ り メ モ リ 使用量も 増え ます。 false の場合、 文書の
個々の部分が必要に応 じ てデ ィ ス クから 読み込まれます。 デ フ ォル ト : false
password
(文字列) 暗号化 さ れた文書に対するユーザパスワー ド ・ マ ス タ パスワー ド ・ 添付パスワー ド のい
ずれか。 その文書の権限設定がテキス ト コ ピーを許 し ている場合には、 ユーザパスワー ド で充分
ですが、 そ う で ない場合はマ ス タ パスワー ド を与え る必要があ り ます。
文書の暗号化ス テー タ ス を取得する方法 と 、 ユーザまたはマス タ パスワー ド を知 ら な く て も適用
で き る pCOS 操作については、 pCOS パス リ フ ァ レ ン ス を参照 し て く だ さ い。
shrug オプ シ ョ ン を用いる と 、 保護 さ れた文書か ら一定の条件下で内容抽出を可能にする こ と がで
き ます (67 ページの 5.1 「暗号化 PDF から内容を抽出」 を参照)。
repair
(キーワー ド ) 破損 PDF 文書の扱い方を指定 し ます。 文書の修復は、 通常のパース よ り も時間がか
か り ますが、 ある種の破損 PDF が処理で き る よ う にな る可能性があ り ます。 ただ し 文書によ っ て
は、 修復で き ないほど破損 し ている場合 も あ り ます (デ フ ォ ル ト : auto) :
force
文書に問題があ っ て も な く て も、 無条件に文書の修復を試みます。
auto
PDF を開 く 際に問題が検出 さ れた と き にのみ文書を修復 し ます。
none
文書の修復の試みは一切行われません。 PDF 内に問題がある と きは、 関数呼び出 し は失
敗 し ます。
requiredmode
(キーワー ド ) 文書を開 く 際に受け入れられる最小 pCOS モー ド (最小 : minimum/ 制限 :
restricted/ フル : full)。 結果の pCOS モー ド (pCOS パス リ フ ァ レ ン ス参照) が、 求めたモー
ド よ り も低 く な る場合は呼び出 し は失敗 し ます。 呼び出 し が成功 し た と きは、 結果の pCOS モー
ド が最低で も こ のオプ シ ョ ン で指定 し た ものである こ と が保証 さ れます。 ただ し 、 それよ り 高 く
な る場合も あ り ます。 た と えば、 暗号化 さ れていない文書に対 し て requiredmode=minimum を指定
する と 、 結果はフルモー ド にな り ます。 デ フ ォ ル ト : full
shrug
(論理値) true の場合、 シ ュ ラ ッ グ機能が有効にな り 、 保護 さ れた文書から 一定の条件下で内容抽
出が可能にな り ます (67 ページの 5.1 「暗号化 PDF から内容を抽出」 を参照)。 shrug オプ シ ョ ン
を用いる場合には、 その PDF 文書作成者の権利を尊重 し て く だ さ い。 デ フ ォル ト : false
tetml
(オプ シ ョ ン リ ス ト ) TETML 出力が開始 さ れ、 そ し て TET_process_page( ) でページ ご と に作成で き
ます。 以下のサブオプ シ ョ ンが使え ます :
elements (論理値の リ ス ト ) 出力内に特定の TETML 要素が含ませるかど う かを指定 し ます (デ
フ ォル ト : すべて true) :
docinfo
/TET/Document/DocInfo 要素
docxmp /TET/Document/Metadata 要素
options
要素 /TET/Document/Options と /TET/Document/Pages/Page/Options
encodingname
(キーワー ド ) 生成 さ れる TETML のテキス ト 宣言の XML エ ン コ ーデ ィ ン グ宣言内で用
いたい名前。 出力はつねに UTF-8 で生成 さ れます (デ フ ォ ル ト : UTF-8) :
_none
エ ン コ ーデ ィ ン グ宣言は作成 さ れません。 出力は同様に UTF-8 形式にな り ま
す。
UTF-8
宣言 encoding="UTF-8" が作成 さ れます。
こ れ以外のエ ン コ ーデ ィ ング名は、 エ ン コ ーデ ィ ング宣言内に リ テ ラ ルに用い ら れま
す。 適切な エ ン コ ーデ ィ ング名を与え る と と も に、 TET が TETML 出力を完成 さ せた後
に、 生成 さ れた TETML (UTF-8 です) を、 指定 し たエ ン コ ーデ ィ ングへ変換する こ と
は、 ク ラ イ ア ン ト 側の役割です。
filename (文字列) TETML フ ァ イルの名前。 filename を与えなかっ た場合には、 出力は メ モ リ 内
に生成 さ れ、 TET_get_xml_data( ) で取得する こ と がで き ます。 関数呼び出 し が失敗 し た
(すなわち、 PDF 入力文書を う ま く 開 く こ と がで き なかっ た) 場合には、 TETML 出力は
生成 さ れません。
174
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 10.8 TET_open_document( ) ・ TET_open_document_callback( ) の文書オプ シ ョ ン一覧
オプ シ ョ ン
説明
unknownchar
(Unichar) PDF 文書内の情報が整合 し ない、 または存在 し ないために、 Unicode へマ ッ プ で き ない
キ ャ ラ ク タ に対する置き換え と し て用いたいキ ャ ラ ク タ 。 U+0000 にする と 、 未知キ ャ ラ ク タ は除
去 さ れます。 デ フ ォル ト : U+FFFD (置換キ ャ ラ ク タ )
関連するオプ シ ョ ン : 未知の (PUA) キ ャ ラ ク タ を も、 指定 し た unknownchar へ置き換えたい と き
は、 fold={{[:Private_Use:] unknownchar}} を用います。 それら を除去するには
fold={{[:Private_Use:] remove}} を用います。
usehostfonts (論理値) true の場合、 埋め こ まれていないが Unicode マ ッ ピ ング を決定する ために必要な フ ォ ン
ト のデー タ は、 Mac ま たは Windows ホス ト オペ レーテ ィ ングシ ス テム上で検索 さ れます。 デ フ ォ
ル ト : true
wordseparator (Unichar。 granularity=line ・ page の場合のみ) 単語ど う し の間に挿入 さ せたいキ ャ ラ ク タ 2。 デ
フ ォ ル ト : U+0020
1. 表 10.9 の脚注 2 を参照
2. 区切 り キ ャ ラ ク タ を無効化する には U+0000 を用います。
表 10.9 TET_open_document( ) ・ TET_open_document_callback( ) の glyphmapping オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
codelist
(文字列) フ ォ ン ト に適用 さ せたい コ ー ド リ ス ト リ ソ ースの名前。 こ れは、 埋め こ まれた
ToUnicode CMap ま たはエ ン コ ーデ ィ ング項目よ り も優先 さ れます。
fontname
(名前文字列) 規則に対 し て選択 さ れる フ ォ ン ト (群) の名前の一部分ない し 全体。 部分集合接頭
辞を与えている と きは、 指定 し た部分集合だけが選択 さ れます。 部分集合接頭辞を一切与えてい
ない と きは、 名前 (部分集合接頭辞な し の) がマ ッ チするすべての フ ォ ン ト が選択 さ れます。 限
ら れたワ イル ド カ ー ド 1 が使え ます。 デ フ ォル ト : *
fonttype
(キーワー ド の リ ス ト ) グ リ フ マ ッ ピ ングは、 指定 し た種類のフ ォ ン ト に対 し てのみ適用 さ れま
す : * (あ ら ゆる種類のフ ォ ン ト を意味 し ます) ・ Type1 ・ MMType1 ・ TrueType ・ CIDFontType2 ・
CIDFontType0 ・ Type3。 デ フ ォ ル ト : *
forceencoding
(文字列2 1 個か 2 個の リ ス ト 。 名前 2 個があ る と きは、 1 番目は winansi ・ macroman ・ Custom のい
ずれかでなければな り ません)
8 ビ ッ ト エ ン コ ーデ ィ ングのフ ォ ン ト : 1 番目のエ ン コ ーデ ィ ング を、 2 番目の名前で指定 し たエ
ン コ ーデ ィ ング リ ソ ースへ置き換え ます。 項目が 1 個 し か与え られていない と きは、 指定 さ れた
エ ン コ ーデ ィ ング を用いて MacRoman ・ WinAnsi ・ MacExpert エ ン コ ーデ ィ ングのすべてのイ ン ス タ
ン スが置き換え られます。 こ のオプ シ ョ ンがフ ォ ン ト にマ ッ チ し た場合には、 その同 じ フ ォ ン ト
に対 し ては他のグ リ フ マ ッ ピ ングは一切適用 さ れません。
CID フ ォ ン ト : 値 1 個 unicode にのみ対応 し ています。 こ れは CID 値を Unicode 値 と し て解釈 し ま
す。
forcettsymbol- (キーワー ド または文字列 2) 埋め込まれた、 実際にはテキス ト フ ォ ン ト である擬似 TrueType 記号
encoding
フ ォ ン ト に対する Unicode マ ッ ピ ン グ を決定する ために使われる エ ン コ ーデ ィ ン グの名前か、 ま た
は以下のキーワー ド の 1 つ (デ フ ォ ル ト : auto) :
auto
フ ォ ン ト の内蔵エ ン コ ーデ ィ ング (後述) が、 記号範囲 U+F0000 ~ U+F0FF 内の Uni-
builtin
code キ ャ ラ ク タ を少な く と も 1 個含んでいる場合には、 encodinghint オプ シ ョ ン で指
定 し たエ ン コ ーデ ィ ン グ を用いて擬似記号キ ャ ラ ク タ が本当のテキス ト キ ャ ラ ク タ へ
マ ッ プ さ れます。 そ う で ない場合には、 encodinghint は使われず、 キ ャ ラ ク タ は
builtin キーワー ド に従っ て マ ッ プ さ れます。
フ ォ ン ト の post テーブル内のグ リ フ 名の Unicode マ ッ ピ ングから 得られる、 フ ォ ン ト
の内蔵エ ン コ ーデ ィ ン グ を用います。
有名な TrueType フ ォ ン ト Wingdings* と Webdings* はつねに記号 フ ォ ン ト と し て扱われます。
10.6 文書関数
175
表 10.9 TET_open_document( ) ・ TET_open_document_callback( ) の glyphmapping オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
globalglyphlist (論理値) true の場合は、 指定 し たグ リ フ リ ス ト は TET オブ ジ ェ ク ト の終了ま で メ モ リ 内に保持
さ れますので、 複数の文書に対 し て適用する こ と も で き ます。 デ フ ォル ト : false
glyphlist
(文字列) 適用 し たいグ リ フ リ ス ト リ ソ ースの名前
glyphrule
(オプ シ ョ ン リ ス ト ) 数値グ リ フ名に対する マ ッ ピ ング規則 (定義済規則に加え て)。 こ のオプ
シ ョ ン リ ス ト は以下のサブオプ シ ョ ン を内容 と し て持つ必要があ り ます :
prefix
(文字列。 空で も可) 規則が適用 さ れるグ リ フ名の接頭辞。
base
(キーワー ド ) グ リ フ名の解釈を指定 し ます :
ascii
シ ングルバイ ト グ リ フ 名はおのおの リ テ ラ ル ASCII キ ャ ラ ク タ と し て解釈 さ
れます (例 : 1 は U+0031 へマ ッ プ さ れます)。
auto
グ リ フ名が 10 進 と 16 進のど ち らの値を表すのかを自動的に決定 し ます。 結
果が一意で ない場合には、 10 進 と 見な さ れます。
dec
グ リ フ名は コ ー ド の 10 進表現 と し て解釈 さ れます。
hex
グ リ フ名は コ ー ド の 16 進表現 と し て解釈 さ れます。
encoding (文字列) こ の規則に対 し て用い られる エ ン コ ーデ ィ ング リ ソ ースの名前。 キーワー ド
none を指定する と 、 規則は無効にな り ます。
ignoretounicodecmap
(論理値) true の場合には、 フ ォ ン ト に対する ToUnicode CMap は無視 さ れます。 デ フ ォ ル ト :
false
override
(論理値。 glyphlist または glyphrule オプ シ ョ ン と と も に用いてのみ意味を持ち ます) true の場
合には、 グ リ フ マ ッ ピ ング規則は、 標準 (内蔵) グ リ フのマ ッ ピ ングよ り 前に適用 さ れます (す
なわち、 新 し いマ ッ ピ ングが内蔵のものよ り 優先 さ れます)。 そ う でない場合はその逆です。 デ
フ ォル ト : true
remove
(論理値)true の場合、抽出されたテキストから、指定したフォント名(複数可)および/または
フォント種別(複数可)を用いているテキストはすべて除去されます。
tounicodecmap
(文字列) フ ォ ン ト に適用 さ せたい ToUnicode CMap リ ソ ースの名前。 これは、 埋め込まれた
ToUnicode CMap ま たはエ ン コ ーデ ィ ン グ項目よ り も 優先 さ れます。
1. 限 ら れたワ イル ド カ ー ド : 単独キ ャ ラ ク タ 「*」 は全 フ ォ ン ト を意味 し ます。 接頭辞の後に 「*」 を付け る と ( 「MSTT*」 な
ど)、 指定 し た接頭辞で始ま るすべての フ ォ ン ト を意味 し ます。
2. 右記の定義済エ ン コ ーデ ィ ン グ名は、 追加設定な し で使え ま す : winansi ・ macroman ・ macroman_apple ・ macroman_euro ・
ebcdic ・ ebcdic_37 ・ iso8859-X ・ cpXXXX ・ U+XXXX。 カ ス タ ムエ ン コ ーデ ィ ン グは リ ソ ース と し て定義で き ます。
C++ int open_document_callback(void *opaque, size_t filesize,
size_t (*readproc)(void *opaque, void *buffer, size_t size),
int (*seekproc)(void *opaque, long offset),
wstring optlist)
C int TET_open_document_callback(TET *tet, void *opaque, size_t filesize,
size_t (*readproc)(void *opaque, void *buffer, size_t size),
int (*seekproc)(void *opaque, long offset),
const char *optlist)
内容抽出 し たい PDF 文書を、 カ ス タ ムデー タ ソ ースから 開き ます。
opaque 入力 PDF 文書に関連づけた何 ら かのユーザデー タ へのポ イ ン タ 。 こ のポ イ ン タ
は、 コ ールバ ッ ク 関数群の 1 番目の引数 と し て渡 さ れ、 いか よ う にで も 使 う こ と がで き ま
す。 TET は こ の不透明ポ イ ン タ をいかな る 形において も 使用 し ません。
filesize
176
PDF 文書全体のサ イ ズ をバ イ ト 単位で。
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
readproc size バ イ ト を buffer で指 し 示 さ れた メ モ リ へ複製す る C コ ールバ ッ ク 関数。文
書の終わ り に到達 し た場合には、求め ら れた よ り も 少ないデー タ を複製す る こ と がで き ま
す。 こ の関数は、 複製 し たバ イ ト 数を返す必要があ り ます。
seekproc 文書内のカ レ ン ト 読み取 り 位置を設定す る C コ ールバ ッ ク 関数。 offset は文書
の先頭か ら の位置を表 し ます (0 を最初のバ イ ト と し て) 。 こ の関数は、 成功 し た と き に
は 0 を、 そ う でなか っ た と き には -1 を返す必要があ り ます。
optlist
表 10.8 に従っ て文書オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。
戻り値 TET_open_document( ) 参照。
詳細 TET_open_document( ) 参照。
バインディング
こ の関数は、 C ・ C++ 言語バ イ ンデ ィ ン グでのみ利用可能です。
C++ void close_document(int doc)
C# Java void close_document(int doc)
Perl PHP close_document(long doc)
VB RB Sub close_document(doc As Long)
C void TET_close_document(TET *tet, int doc)
文書ハン ド ル と 、 その文書に関連づけ られたすべての内部 リ ソ ース を解放 し ます。
doc
TET_open_document*( ) で得 ら れた有効な文書ハン ド ル。
詳細 文書を閉 じ る と 、 その開いてい る ページ群 も すべて自動的に閉 じ ら れ ます。 TET_delete( )
を呼び出す と 、 開いてい る 文書 と ページはすべて自動的に閉 じ ら れます。 と はいえ、 文書
が必要な く な っ た時点で明示的に閉 じ る のが良いプ ロ グ ラ ミ ン グ習慣です。閉 じ ら れた文
書ハン ド ルは、 その後はいかな る 関数呼び出 し において も 使用 し てはいけ ません。
10.6 文書関数
177
10.7 ページ関数
C++ int open_page(int doc, int pagenumber, wstring optlist)
C# Java int open_page(int doc, int pagenumber, String optlist)
Perl PHP long open_page(long pagenumber, string optlist)
VB RB Function open_page(doc As Long, pagenumber As Long, optlist As String) As Long
C int TET_open_page(TET *tet, int doc, int pagenumber, const char *optlist)
内容抽出 し たいページ を開き ます。
doc
TET_open_document*( ) で得 ら れた有効な文書ハン ド ル。
pagenumber 開 き たいページの物理的番号。 最初のページ をページ番号 1 と し ます。 総
ページ数は TET_pcos_get_number( ) と pCOS パ ス length:pages で取得で き ます。
optlist 表 10.10 に従っ てページオプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。 右記のオ
プシ ョ ンが使え ます : clippingarea ・ contentanalysis ・ docstyle ・ excludebox ・
fontsizerange ・ granularity ・ ideographic ・ ignoreinvisibletext ・ imageanalysis ・
includebox ・ layoutanalysis ・ layouteffort ・ skipengines ・ structureanalysis ・ topdown。
戻り値 ページのハン ド ル。 エ ラ ーの場合には -1。 -1 が返 さ れた場合には、 TET_get_errmsg( ) を
呼び出 し てエ ラ ーの詳細を知 る こ と を推奨 し ます。
詳細 1 個の文書内で任意の数のページ を同時に開いてお く こ と がで き ます。 同 じ ページ を異な
る オプシ ョ ンで複数回開 く こ と も で き ます。 し か し 、 1 つのページ を処理 し てい る 途中に
オプシ ョ ン を変え る こ と はで き ません。
ページ内に レ イ ヤー定義 (オプシ ョ ナルな内容グループ) があ っ て も 考慮 さ れません。
レ イ ヤーが可視に さ れてい る か ど う かにかかわ ら ず、ページ上のすべての レ イ ヤー上のす
べてのテ キ ス ト が抽出 さ れます。
178
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 10.10 TET_open_page( ) ・ TET_process_page( ) のページオプ シ ョ ン一覧
オプ シ ョ ン
説明
clippingarea
(キーワー ド 。 includebox を指定 し ている と こ れは無視 さ れます) テキス ト が抽出 さ れる領域を指
定 し ます (デ フ ォル ト : cropbox) :
mediabox MediaBox を用います ( こ れは必ず存在 し ます)
cropbox CropBox を用います (Acrobat で表示 さ れる領域です)。 なければ MediaBox を用います
bleedbox BleedBox を用います。 なければ CropBox を用います
trimbox TrimBox を用います。 なければ CropBox を用います
artbox
ArtBox を用います。 なければ CropBox を用います
unlimited 位置にかかわら ずすべてのテキス ト を考慮 し ます。
contentanalysis
(オプ シ ョ ン リ ス ト 。 granularity=glyph の場合には不可) 表 10.11 に従っ た、 高レ ベル内容分析
と テキス ト 処理のためのサブオプ シ ョ ン群の リ ス ト 。
docstyle
(キーワー ド ) レ イ アウ ト 検出エ ン ジ ンが さ ま ざ ま なパラ メ タ を選択する ために用いる ヒ ン ト 。 こ
れ らのパ ラ メ タ は、 文書が以下の分類の 1 つに属する状況において レ イ アウ ト 分析を最適化 し ま
す : 文書が これ らの分類の 1 つにあてはま る こ と がわか っ ている場合には、 こ のオプ シ ョ ンに適
切な値を与えればレ イ アウ ト 検出結果は非常に向上 し ます。 こ のオプ シ ョ ンは高度な レ イ アウ ト
認識を有効に し ます (デ フ ォ ル ト : none) :
book
典型的な本
business ビ ジネス文書
fancy
複雑な レ イ アウ ト によ る装飾的なページ
forms
構造化 さ れた フ ォ ーム
generic
特に特徴を指定 し ない最も一般的な文書分類です。
magazines 雑誌記事
none
特定の文書ス タ イルがわかっ てお ら ず、 高度な レ イ アウ ト 認識は無効に さ れます。
papers
新聞
science
科学記事
searchengine
ア プ リ ケーシ ョ ンは検索エ ン ジ ン イ ンデ ッ ク ス生成機能やそれに類似のア プ リ ケーシ ョ
ン であ り 、 ページの単語一覧を な るべ く 速 く 取得する こ と が主た る関心。 表組 ・ ページ
構造認識は無効化 さ れます。
spacegrid 視覚レ イ アウ ト がスペースキ ャ ラ ク タ 群を用いて生成 さ れる、 リ ス ト 指向のレポー ト
( メ イ ン フ レームシ ス テムで生成 さ れる こ と が多い)。 こ の種の文書に対 し ては、 影付き
検出や洗練 さ れた単語境界検出 と い っ た多 く の ヒ ュ ー リ ス テ ィ ッ クは必要ないので、 こ
のオプ シ ョ ンに よ っ て テキス ト 抽出を高速化で き ます。
excludebox
(矩形の リ ス ト ) 指定 し た矩形を合わせた領域を、 テキス ト 抽出から除外 し ます。 デ フ ォル ト : 空
fontsizerange
(float 2 個の リ ス ト ) テキス ト の最小 ・ 最大文字サイ ズを指定 し た 2 個の数値。 こ の区間を外れた
サイ ズのテキス ト は無視 さ れます。 最大値にキーワー ド unlimited を指定する と 、 上限な し と い
う 意味にな り ます。 デ フ ォル ト : { 0 unlimited }
granularity
(キーワー ド ) TET_get_text( ) が返すテキス ト 断片の粒度。 glyph 以外のすべてのモー ド で単語検出
機能が有効にな り ます。 詳 し く は 92 ページの 「テキス ト の粒度」 を参照 し て く だ さ い (デ フ ォル
ト : word) :
glyph
各断片はそれぞれ 1 個のグ リ フ を マ ッ プ し た結果を内容 と し て持ち ますが、 それが複数
のキ ャ ラ ク タ にな る場合も あ り ます (合字の場合な ど)。
word
各断片はそれぞれ、 単語検出機能に よ っ て決定 さ れた 1 個の単語を内容 と し て持ち ま
す。
line
各断片はそれぞれテキス ト 1 行を、 ない し はそれにで き る だけ似た も のを内容 と し て持
ち ます。 連続する 2 個の単語の間には単語区切 り キ ャ ラ ク タ が挿入 さ れます。
page
各断片はそれぞれ 1 個のページ を内容 と し て持ち ます。 単語 ・ 行 ・ 区域区切 り キ ャ ラ ク
タ が適宜挿入 さ れます。
10.7 ページ関数
179
表 10.10 TET_open_page( ) ・ TET_process_page( ) のページオプ シ ョ ン一覧
オプ シ ョ ン
説明
ideographic
(キーワー ド ) 表意文字キ ャ ラ ク タ 群に対する単語境界検出を制御 し ます。 こ のオプ シ ョ ンは互換
上の理由から デ フ ォ ル ト は split ですが、 keep に設定する こ と を推奨 し ます (デ フ ォル ト :
split)。
keep
表意文字キ ャ ラ ク タ は一般に単語境界を構成 し ません。 ただ し 句読点、 および表意文字
キ ャ ラ ク タ と 非表意文字の間の切 り 替わ り は、 単語境界を構成 し ます。
granularity=word の場合には、 表意文字読点 U+3001 と 表意文字句点 U+3002 も単語境
界を構成 し ます。 granularity=page の場合には、 行末に改行は挿入 さ れません。
split
表意文字キ ャ ラ ク タ はつねに単語境界を構成 し ます。
ignoreinvisibletext
(論理値) true の場合には、 表現モー ド 3 (不可視) のテキス ト は無視 さ れます。 デ フ ォル ト :
false (不可視テキス ト は、 スキ ャ ン さ れたページ と その OCR テキス ト を内容 と し て持つ画像 +
テキス ト PDF で主に使用 さ れているから です)
imageanalysis
(オプ シ ョ ン リ ス ト ) 表 10.13 に従 っ た、 高レ ベル画像処理を制御する ためのサブオプ シ ョ ン群の
リスト。
includebox
(矩形の リ ス ト ) テキス ト 抽出を、 指定 し た矩形を合わせた領域に限 り ます。 デ フ ォ ル ト : 切 り 抜
き領域全体
layoutanalysis
(オプ シ ョ ン リ ス ト 。 granularity=glyph の場合には不可) 表 10.12 に従っ た、 レ イ アウ ト 検出機
能を制御する ためのサブオプ シ ョ ン群の リ ス ト 。
layouteffort
(キーワー ド ) レ イ アウ ト 認識の品質 / パフ ォ ーマ ン スの ト レー ド オ フ を制御 し ます。 レ イ アウ ト
認識は、 努力を増せば向上で き ますが、 こ れに よ っ て操作は遅 く な るおそれがあ り ます。 このレ
イ アウ ト 認識努力を、 キーワー ド none ・ low ・ medium ・ high ・ extra で制御で き ます。 デ フ ォル
ト : low
layouthint
(オプ シ ョ ン リ ス ト ) 特定のページ レ イ アウ ト 要素の存在について レ イ アウ ト 認識エ ン ジ ンに通知
し ます :
subsummary
(キーワー ド ) サブサマ リ (傍注) の存在について、 指定によ っ てはその位置 と と も に
エ ン ジ ンに知ら せます。 使え るキーワー ド (デ フ ォル ト : none) :
auto
サブサマ リ 検出な し 。
left
ページの左脇にサブサマ リ 検出を試みます。
none
自動的にサブサマ リ 検出を試みます。
right
ページの右脇にサブサマ リ 検出を試みます。
header
(論理値) true の場合、 エ ン ジ ンはページヘ ッ ダの検出を試みます (デ フ ォル ト :
false)。
footer
(論理値) true の場合、 エ ン ジ ンはページ フ ッ タ の検出を試みます (デ フ ォル ト :
false)。
180
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 10.10 TET_open_page( ) ・ TET_process_page( ) のページオプ シ ョ ン一覧
オプ シ ョ ン
説明
skipengines
(キーワー ド の リ ス ト ) ページ内容に対 し て利用可能なパーサのい く つかを スキ ッ プ し ます。 ス
キ ッ プ さ れたエ ン ジ ンは このページに対 し て何のデー タ も返 し ません。 必要で ないエ ン ジ ン を ス
キ ッ プする と 、 こ のエ ン ジ ンが出すデー タ を必要 と し ないア プ リ ケーシ ョ ンにおいてパ フ ォ ーマ
ン スが向上 し ます (デ フ ォル ト : すべてのエ ン ジ ンが有効) :
text
(キーワー ド ) テキス ト 抽出エ ン ジ ン を スキ ッ プ し ます。
image
(キーワー ド ) 画像抽出エ ン ジ ン を スキ ッ プ し ます。
structureanalysis
(オプ シ ョ ン リ ス ト 。 granularity=glyph の場合には不可) 表 10.14 に従っ た、 ページ構造分析を
制御する ためのサブオプ シ ョ ン群の リ ス ト 。
topdown
(オプ シ ョ ン リ ス ト ) 可視ページの左上隅に原点を持つ、 y 座標が下方増加する座標系を指定 し ま
す。 そ う で ないな ら、 左下隅に原点を持つデ フ ォ ル ト 座標系が用い られます。 下向き座標を有効
にする と 、 Acrobat で表示 さ れる座標系 と 同 じ にする こ と がで き ます。 使え るサブオプ シ ョ ン :
input
(論理値) true の場合には、 以下の項目に対 し て座標が有効にな り ます (デ フ ォ ル ト :
false) :
ページオプ シ ョ ン includebox ・ excludebox
output
(論理値) true の場合には、 以下の項目に対 し て座標が有効にな り ます (デ フ ォ ル ト :
false) :
TET_char_info : y ・ alpha ・ beta
TET_image_info : y ・ alpha ・ beta
TETML : Glyph/@y ・ Glyph/@alpha ・ Glyph/@beta ・ Box/@lly ・ Box/@ury ・ PlacedImage/
@y ・ PlacedImage/@alpha ・ PlacedImage/@beta
表 10.11 TET_open_page( ) ・ TET_process_page( ) の contentanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
bidi
(キーワー ド 。 granularity=glyph の場合には無視 さ れます。 右書き キ ャ ラ ク タ がページ上に存在
し ている場合にのみ効力を持ち ます) 断片内の右書き ・ 左書き テキス ト を並べ替え る反転双方向
アルゴ リ ズムを制御 し ます (デ フ ォ ル ト : logical) :
visual
断片内の右書き ・ 左書き キ ャ ラ ク タ を視覚順に保ち ます。 すなわち、 反転双方向アルゴ
リ ズムを適用 し ません。
logical
反転双方向アルゴ リ ズムを適用 し て、 断片内のキ ャ ラ ク タ を論理順で も た ら し ます。
bidilevel
(キーワー ド ) 反転双方向アルゴ リ ズムに対するページのベース レ ベル (すなわち テキス ト 進行の
主要向き) を指定 し ます (デ フ ォル ト : auto) :
auto
テキス ト 進行の主要向き を、 内容に基づいて ヒ ュ ー リ ス テ ィ ッ ク に決定 し ます。
ltr
テキス ト 進行の主要向き と し て左書き を前提 し ます (欧文文書な ど)
rtl
テキス ト 進行の主要向き と し て右書き を前提 し ます (ヘブ ラ イ文字 ・ ア ラ ビ ア文字文書
な ど)
dehyphenate (論理値) true の場合には、 ハイ フ ン区切 り さ れた単語が特定 さ れ、 ハイ フ ン を挟むテキス ト 断片
ど う し が連結 さ れます。 ハイ フ ン自体は keephyphens オプ シ ョ ンに従 っ て扱われます。 デ フ ォル
ト : true
dropcapsize
(float) 大き なグ リ フが ド ロ ッ プキ ャ ッ プ と し て認識 さ れる最小サイ ズ。 ド ロ ッ プキ ャ ッ プは、 区
域の先頭の大き なキ ャ ラ ク タ で、 数行にわた っ てぶら 下がっ ている ものです。 それらは、 その区
域の残 り と 連結 さ れ、 その区域内の最初の単語の一部を成 し ます。 デ フ ォ ル ト : 35
dropcapratio (float) ド ロ ッ プキ ャ ッ プ と 隣接テキス ト の文字サイ ズの最小比率。 大き なキ ャ ラ ク タ は、 そのサ
イ ズが dropcapsize を超え てお り 、 かつ、 その文字サイ ズ比率が dropcapratio を超え ている場合
に ド ロ ッ プキ ャ ッ プ と し て認識 さ れます。 言い換えれば、 こ れは ド ロ ッ プキ ャ ッ プがわた る テキ
ス ト 行数です。 デ フ ォ ル ト : 4 ( ド ロ ッ プキ ャ ッ プは 3 行にわた る ものが非常に多いですが、 行間
の分も考慮に入れる必要があ り ます)
10.7 ページ関数
181
表 10.11 TET_open_page( ) ・ TET_process_page( ) の contentanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
includeboxorder
(整数) 複数の包含枠を与えている と き (オプ シ ョ ン includebox 参照)、 こ のオプ シ ョ ンは、 枠の
順序が単語検出機能に対 し どのよ う な効力を持つかを制御 し ます (デ フ ォ ル ト : 0) :
0
ページ内容を分析する際に、 包含枠順序は無視 し ます。 結果は、 あたかも 包含枠群の外
のテキス ト がすべて削除 さ れたの と 同 じ にな り ます。 こ れは、 ほ し く ないテキス ト
(ヘ ッ ダ ・ フ ッ タ な ど) を除去 し つつ、 単語検出機能には何の影響も与え ないよ う にす
る ために有用です。
1
包含枠順序を、 単語 と 区域を生成する際には考慮に入れますが、 区域順序を決定する際
には考慮 し ません。 1 個の単語が複数の枠に属する こ と は決 し てあ り ません。 で き た区
域群は、 論理順に並べ替わ り ます。 枠が重な り あ っ ている場合には、 そのテキス ト は リ
ス ト 内で最も先に現れた枠に属 し ます。 それ以外では、 オプ シ ョ ン リ ス ト 内における包
含枠の順序は考慮 さ れません。 こ の設定は、 テキス ト を フ ォ ームか ら抽出する時や、 テ
キス ト を表組か ら抽出する時や、 複雑な レ イ アウ ト において包含枠が重な り あ っ ている
場合に有用です。
2
包含枠順序を、 すべての操作について考慮 し ます。 各包含枠の内容は他の枠 と は独立に
扱われ、 で き たテキス ト は包含枠の順序に従っ て連結 さ れます。 こ れは、 フ ォ ームから
テキス ト を特定の順序で抽出 し たい時や、 雑誌レ イ アウ ト 内の記事段組を定義済順序で
抽出 し たい時に有用です。 こ う し た場合には、 包含枠を適切な順序で指定する ために、
そのページ レ イ アウ ト に関する事前の知識が必要です。
keephyphenglyphs
(論理値) true かつ dehyphenate=true の場合には、 ハイ フ ン除去 さ れた単語の各部分の間のハイ
フ ング リ フは、 TET_get_char_info( ) が返すグ リ フの リ ス ト 内 と TETML 内の Glyph 要素で温存 さ
れます。 これは、 ページ上のテキス ト を正確に置き換えたいな ど、 ハイ フ ンの位置について詳 し
い情報を必要 と する ア プ リ ケーシ ョ ンにおいて有用です。 こ れは fold={{_dehyphenation remove}
と は異な る こ と に留意 し て く だ さ い。 後者は、 get_text( ) が返す論理テキス ト から ハイ フ ン を除
去する だけであ り 、 グ リ フ に対 し ては効力を持ち ません。 デ フ ォル ト : false
linespacing
(キーワー ド ) 段落内のテキス ト 行ど う し の間の典型的な縦間隔を指定 し ます : small ・ medium ・
large のいずれかです (デ フ ォ ル ト : medium)
maxwords
(整数かキーワー ド ) ページ上の単語の数が、 指定 し た数以下の と きは (キーワー ド unlimited を
指定する と 上限な し にな り ます)、 ページ上で検出 さ れた区域群は適切に連結 さ れ並べ替え さ れま
す。 ページ上の単語の数が、 指定 し た数を超えている と きは、 区域は一切作成 さ れず、 単語群は
ページ内容の読み順で抽出 さ れます。 後者の場合には処理はよ り 速 く な り ますが、 抽出 さ れる単
語群の順序は最適ではな く な るおそれがあ り ます。 新聞のよ う な、 多 く の単語を含む大き なペー
ジに対 し ては、 このオプ シ ョ ン を unlimited に設定する こ と を推奨 し ます。 デ フ ォ ル ト : 5000
merge
(整数) ス ト リ ッ プ と 区域の連結を制御 し ます (デ フ ォル ト : 2) :
0
ス ト リ ッ プ作成後の連結な し 。 こ れはかな り 処理速度を向上 さ せますが、 最適未満の出
力を生成するおそれがあるほか、 影によ っ ては正 し く 検出 さ れないおそれがあ り ます。
1
単純な、 ス ト リ ッ プ を区域へ入れ込む連結 : ス ト リ ッ プは、 それが区域に重な っ てお
り 、 それでいて、 次のス ト リ ッ プ以外のス ト リ ッ プ と 重な り 合っ ていない場合に (影な
し の場合における区域の重な り 合い を避ける ため)、 こ の区域内へ連結 さ れます。
2
順序破 り な テキス ト のための高度な区域連結 : merge=1 に加え て、 複数の重な り 合 う 区
域は、 両区域のテキス ト 内容が重な り 合わないな らば、 結合 さ れて 1 個の区域にな り ま
す。
numericentities
(キーワー ド ) 数値 ・ 分数 ・ 時刻のよ う な数値実体に対する単語境界検出を制御 し ます (デ フ ォ ル
ト : keep) :
split
その実体を、 punctuationbreaks サブオプ シ ョ ンに従 っ て分割 し ます。
keep
その実体を、 単語ま る ご と と し て温存 し ます。
182
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 10.11 TET_open_page( ) ・ TET_process_page( ) の contentanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
shadowdetect
(論理値) true の場合には、 影付きや偽ボール ド テキス ト を作 り 出 し ている、 重な り 合 う テキス ト
断片群の冗長な イ ン ス タ ン スは検出 さ れ除去 さ れます。 デ フ ォ ル ト : true
punctuation- (論理値。 granularity=word の場合のみ) true の場合には、 文字のそばに配置 さ れている約物
breaks
キ ャ ラ ク タ は単語境界 と し て扱われ、 そ う で ない場合にはそれは隣接する単語内へ含め られます。
た と えば、 このオプ シ ョ ンは URL と メ ールア ド レ スの扱いに影響を与え ます。 デ フ ォ ル ト : true
superscript
(整数) 下付き ・ 上付き検出を制御 し ます (デ フ ォ ル ト : 2) :
0
下付き ・ 上付き検出な し
1
単純な下付き ・ 上付き検出
2
下付き ・ 上付き検出のための高度なアルゴ リ ズム
表 10.12 TET_open_page( ) ・ TET_process_page( ) の layoutanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
layoutastable
(論理値) true の場合には、 レ イ アウ ト 認識エ ン ジ ンはページ上の区域群を 1 個ない し 複数の表組
と し て扱います。 連な り が表組 と 見な さ れる ために必要な最小の列数は、 文書のス タ イルに依存
し ます。 false の場合には、 スーパー表組認識は無効化 さ れます (デ フ ォ ル ト : true)。
layoutcolumnhint
(キーワー ド ) このオプ シ ョ ンは、 複雑な レ イ アウ ト における区域読み順検出を向上 さ せる可能性
があ り ます。 使え るキーワー ド (デ フ ォル ト : multicolumn) :
multicolumn
ページは多段組テキス ト を含んでいます。 区域は段組か ら段組へ並べ替え さ れます。
none
ヒ ン ト は何も得 られません。 区域順序はページ内容順序によ っ て決定 さ れます。
singlecolumn
ページは 1 段組テキス ト を含んでいます。 区域は行から 行へ並べ替え さ れます。
layoutdetect (整数) 再帰的レ イ アウ ト 認識の深度を指定 し ます (デ フ ォ ル ト : 1) :
0
レ イ アウ ト 認識な し 。
1
ページ全体に対する レ イ アウ ト 認識。 ほ と んどの文書が こ れで充分です。
2
レ ベル 1 の結果に対する レ イ アウ ト 認識。 こ れは、 さ ま ざ ま な多段組副レ イ アウ ト を持
つレ イ アウ ト や、 ページ上の さ ま ざ ま な箇所に タ イ ト ルがあ る レ イ アウ ト や、 複数段落
表組に対 し て必要です。
3
レ ベル 2 の結果に対する レ イ アウ ト 認識。 こ れは非常に複雑な レ イ アウ ト に対 し てのみ
必要です。
10.7 ページ関数
183
表 10.12 TET_open_page( ) ・ TET_process_page( ) の layoutanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
layoutrowhint
(オプ シ ョ ン リ ス ト ) レ イ アウ ト 行処理を制御 し ます。 使え る オプ シ ョ ン (デ フ ォル ト : none) :
full
レ イ アウ ト 行処理を有効に し ます。
none
レ イ アウ ト 行処理を無効化 し ます。
separation (キーワー ド ) レ イ アウ ト 行処理を有効に し ますが、 レ イ アウ ト 認識がスーパー表組 と
推測 し た場合には無効化 し ます。 以下のサブオプ シ ョ ンが使え ます :
preservecolumns
区域ど う し の間の視覚関係に基づいて縦の段組を保つ こ と を試みます。 段組
内の区域ど う し が大き く 引き離 さ れている場合 (画像がは さ ま っ ている な ど
し て) には これを推奨 し ます。
thick
隣 り 合 う 区域ど う し を連結 し て、 それを同 じ レ イ アウ ト 行内に配置 し よ う と
試みます。 これによ っ て、 レ イ アウ ト 行の数は少な く な り 、 一つ一つは大き
く な り ます。 段組内の段落ど う し が互いに文字サイ ズよ り も引き離 さ れてい
る雑誌や新聞のよ う な複雑な レ イ アウ ト や、 い く つかの多段組記事が縦に並
んでいる レ イ アウ ト には これを推奨 し ます。
thin
隣 り 合 う 区域ど う し を引き離 し 、 それら を別々のレ イ アウ ト 行に配置 し よ う
と 試みます。 こ れによ っ て、 レ イ アウ ト 行の数は多 く な り 、 一つ一つは小 さ
く な り ます。
例 : layoutanalysis = {layoutrowhint={full separation=thick}}
mergetables
(整数) 表行 1 個だけの表組は、 表組認識中にスキ ッ プ さ れ、 通常の区域 と し て扱われます。 2 個
の連続する区域が表組であ る場合には (表行 1 個だけのであ っ て も )、 それら は結合する こ と も で
き ます (デ フ ォ ル ト : none) :
down
下方へのみ結合 し ます。
none
連結 し ません。
up
上方へのみ結合 し ます。
updown 双方向に結合 し ます。
splithint
(キーワー ド かオプ シ ョ ン リ ス ト ) 2 ページ見開き ス プ レ ッ ド (ない し は さ ら な る ス プ レ ッ ド から
成るページ も ) の特別な扱い を有効に し ます。 ページ を縦または横に、 2 個以上のセ ク シ ョ ンに分
割する こ と がで き ます。 キーワー ド includebox を指定する と 、 分割領域群は includebox オプ
シ ョ ン によ っ て定義 さ れます。 こ れに換え て、 以下のオプ シ ョ ン を与え る こ と も で き ます :
x
(float) x 軸に関する除数。 例 : 0.5 な ら 2 ページ見開き ス プ レ ッ ド 、 0.33 な ら 3 ページ
スプレ ッ ド 。
y
(float) y 軸に関する除数。
standalonefontsize
(float) 巨大グ リ フ に対する最小文字サイ ズ。 巨大グ リ フは 1 グ リ フ ス ト リ ッ プ を形成 し 、 かつ、
他の区域 と は結合 さ れません (デ フ ォル ト : 70)。
supertablecolumns
(整数。 layoutastable=true の場合のみ) 区域の連な り を スーパー表組 と 見なすためのレ イ アウ ト
行内の最小の段組数。 表組が段落群から 作成 さ れる と き、 こ れらの段組は結合 さ れずに、 別々の
区域 と し て認識 さ れます。 こ の結果 と し て、 レ イ アウ ト 認識は これ らの区域の連な り を表組 と し
て特定する こ と がで き ます (デ フ ォ ル ト : 4)。
tabledetect
(整数) 再帰的表組認識の深度を指定 し ます (デ フ ォ ル ト : 1) :
0
表組認識な し 。
1
各区域に対する表組認識。
2
レ ベル 1 で検出 さ れた各表セルに対する表組認識。 こ れは、 入れ子にな っ た表組のため
に、 ま た、 複数行にわた る セルの解決のために必要です。
184
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 10.13 TET_open_page( ) ・ TET_process_page( ) の imageanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
smallimages
(オプ シ ョ ン リ ス ト ) 小画像除去を制御 し ます。 小画像は多 く の場合擬似的な ものであ り 、 本当の
画像ではないので無視する必要があ り ます。 使え るオプ シ ョ ン :
disable
(論理値) true の場合には、 小画像除去は無効化 さ れます。 デ フ ォ ル ト : false
maxarea (float) 小画像 と 見な さ せたい画像の最大面積 (幅×高 さ ) を ピ ク セル単位で。 デ フ ォ
ル ト : 500
maxcount (整数) 小画像の最大許容数。 こ れを超え る数の小画像が見つかっ た と きはそれ ら すべ
てが除去 さ れます。 デ フ ォル ト : 50
merge
(オプ シ ョ ン リ ス ト ) 画像連結を制御 し ます。 こ の処理は、 合わせて 1 個の大画像を形成で き る隣
接画像群を結合 し ます。 これは、 PDF 内に個々のス ト リ ッ プが温存 さ れている マルチス ト リ ッ プ
画像に対 し て、 また、 多数の微小画像に分解 さ れている背景画像に対 し て有用です。 使え る オプ
ション :
disable
(論理値) true の場合には、 画像連結は無効化 さ れます。 デ フ ォ ル ト : false
gap
(float) 連結対象 と 見な さ せたい 2 個の画像の間の間隔をポ イ ン ト 単位で。 デ フ ォル ト :
1.0 (0.0 でないのは、 位置計算における避けがたい誤差のためです)
表 10.14 TET_open_page( ) ・ TET_process_page( ) の structureanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
bullets
(オプ シ ョ ン リ ス ト の リ ス ト 。 list=true の場合のみ) リ ス ト 内で ビ ュ レ ッ ト キ ャ ラ ク タ と し て用
い られる Unicode キ ャ ラ ク タ と フ ォ ン ト 名の組み合わせを指定 し ます。 使え るサブオプ シ ョ ン :
bulletchars
(Unicode 値の リ ス ト ) ビ ュ レ ッ ト キ ャ ラ ク タ のための 1 個ない し 複数の Unicode 値。 こ
のサブオプ シ ョ ン を与え ない場合には、 指定 し た fontname を用いているキ ャ ラ ク タ す
べてがビ ュ レ ッ ト キ ャ ラ ク タ と し て扱われます。
fontname (文字列) ビ ュ レ ッ ト キ ャ ラ ク タ を使 う フ ォ ン ト の名前。 こ のサブオプ シ ョ ン を与えな
い場合には、 bulletchars サブオプ シ ョ ン で指定 し たキ ャ ラ ク タ はつねに ビ ュ レ ッ ト
キ ャ ラ ク タ と し て扱われます。
例:
bullets={{fontname=ZapfDingbats}}
bullets={{bulletchars={U+2022}}
bullets={{fontname=KozGoPro-Medium bulletchars={U+2460 U+2461 U+2462 U+2463 U+2464}}
list
(論理値) リ ス ト 認識を有効に し ます (デ フ ォ ル ト : false)。 false の場合には、 リ ス ト 構造に関
する情報は何も 決定 さ れません。
paragraph
(論理値) 段落認識を有効に し ます (デ フ ォル ト : true)。 false の場合には、 段落構造に関する情
報は何も 決定 さ れません。
table
(論理値) 表組認識を有効に し ます (デ フ ォル ト : true)。 false の場合には、 表組認識エ ン ジ ンは
無効化 さ れます。
10.7 ページ関数
185
C++ void close_page(int page)
C# Java void close_page(int page)
Perl PHP close_page(long page)
VB RB Sub close_page(page As Long)
C void TET_close_page(TET *tet, int page)
ページハン ド ル と 、 関連するすべての リ ソ ース を解放 し ます。
page
TET_open_page( ) で得 ら れた有効なページハン ド ル。
詳細 TET_close_document( ) を呼び出す と 、 その文書の開いてい る ページはすべて自動的に閉 じ
ら れます。 と はいえ、 ページが必要な く な っ た時点で明示的に閉 じ る のが良いプ ロ グ ラ ミ
ン グ習慣です。 閉 じ ら れたページハン ド ルは、 その後はいかな る 関数呼び出 し において も
使用 し てはいけ ません。
186
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.8 テキス ト ・ メ ト リ ク ス抽出関数
C++ wstring get_text(int page)
C# Java String get_text(int page)
Perl PHP string get_text(long page)
VB RB Function get_text(page As Long) As String
C const char *TET_get_text(TET *tet, int page, int *len)
ページの内容か ら、 次のテキス ト 断片を得ます。
page
len
TET_open_page( ) で得 ら れた有効なページハン ド ル。
(C 言 語 バ イ ン デ ィ ン グ の み) 返 さ れ る 文字列 の 長 さ を、 TET_set_option( ) の
outputformat オプシ ョ ンに応 じ て保持す る 変数へのポ イ ン タ :
outputformat=utf8 の場合、 長 さ は Unicode キ ャ ラ ク タ の数 と し て報告 さ れます。 ヌ ル
終端文字列のバ イ ト 数 ( こ れは 8 ビ ッ ト コ ー ド ユニ ッ ト の数に等 し いです) は strlen( ) 関
数で求め ら れます。
outputformat=utf16 の場合、長 さ は 16 ビ ッ ト コ ー ド ユニ ッ ト の数 と し て報告 さ れます。
サ ロ ゲー ト ペアは 2 個の コ ー ド ユニ ッ ト と し て カ ウ ン ト さ れ ます。 文字列のバ イ ト 数は
2*len です。
outputformat=utf32 の場合、 長 さ は 32 ビ ッ ト コ ー ド ユニ ッ ト の数 と し て報告 さ れます
( こ れは Unicode キ ャ ラ ク タ の数に等 し いです)。 文字列のバ イ ト 数は 4*len です。
戻り値 ページ上の、 次のテ キ ス ト 断片を内容 と し て持つ文字列。 こ の断片の長 さ は、 TET_open_
page( ) の granularity オプシ ョ ンに よ っ て決定 さ れます。 granularity=glyph の場合であ っ
て も 、 こ の文字列は複数のキ ャ ラ ク タ を内容 と し て持つ場合があ り ます (99 ページの 7.1
「Unicode の さ ま ざ ま な重要概念」 を参照)。
ページ上のテ キ ス ト がすべて取得 さ れていた場合には、 空文字列か ヌ ルオブジ ェ ク ト
が返 さ れます (後述) 。 こ の場合には、 テ キ ス ト が も う ない理由はページ上のエ ラ ーに よ
る も の な の か、 そ れ と も ペー ジ の末尾に到達 し た か ら な の か を 知 る た め に、 TET_get_
errnum( ) を呼び出すべ き です。
バインディング C 言語バ イ ンデ ィ ン グ : 結果は、 TET_set_option( ) の outputformat オプシ ョ ンに従っ て、
ヌ ル終端 UTF-8 (デフ ォ ル ト ) か UTF-16/UTF-32 のいずれかの文字列で提供 さ れます。
i5/iSeries と zSeries では、 EBCDIC 符号化 さ れた UTF-8 を選択す る こ と も で き 、 かつ こ れ
がデフ ォ ル ト で有効にな っ てい ます。 テ キ ス ト がそれ以上得 ら れない と き は、 NULL ポ イ
ン タ と *len=0 が返 さ れます。
C++ ・ COM : 結果は、 UTF-16 形式 (C++ では wstring) の Unicode 文字列 と し て提供 さ れ
ます。 テ キ ス ト がそれ以上得 ら れない と き は、 空文字列が返 さ れます。
Java ・ .NET ・ Objective-C : 結果は、 Unicode 文字列 と し て提供 さ れます。 テ キ ス ト がそれ
以上得 ら れない と き は、 ヌ ル (Objective-C では nil) オブジ ェ ク ト が返 さ れます。
Perl ・ PHP ・ Python ・ Ruby 言語バ イ ンデ ィ ン グ : 結果は、 TET_set_option( ) の outputformat
オプシ ョ ンに従っ て、 UTF-8 (デフ ォ ル ト ) か UTF-16/UTF-32 のいずれかの文字列で提
供 さ れます。 Python 3 では、 UTF-16/UTF-32 の結果はバ イ ト 列 と し て返 さ れます。 テ キ
ス ト がそれ以上得 ら れない と き は、 ヌ ルオブジ ェ ク ト が返 さ れます。
10.8 テキス ト ・ メ ト リ ク ス抽出関数
187
REALbasic : 結果は Unicode 文字列 と し て提供 さ れます。 テ キ ス ト がそれ以上得 ら れない
と き は、 空文字列が返 さ れます。
RPG 言語バ イ ンデ ィ ン グ : 結果は、 Unicode 文字列 と し て提供 さ れます。 テ キ ス ト がそれ
以上得 ら れない と き は、 NULL が返 さ れます。
C++ const TET_char_info *get_char_info(int page)
C# Java int get_char_info(int page)
Perl PHP object get_char_info(long page)
VB RB Function get_char_info(int page) As Long
C const TET_char_info *TET_get_char_info(TET *tet, int page)
最近のテキス ト 断片内の、 次のグ リ フ に対する詳 し い情報を得ます。
page
TET_open_page( ) で得 ら れた有効なページハン ド ル。
注記 この関数の名前は付け間違いです。ページ上の視覚的なグ リ フ についての情報を報告する
関数であ っ て、 それに対応する Unicode キ ャ ラ ク タ について報告するのではないのですか
ら、 TET_get_glyph_info( ) と い う 名前に し てお く べき で し た。
戻り値 TET_get_text( ) が返 し た最近のテ キ ス ト 断片について、 グ リ フ がそれ以上得 ら れない と き
は、 バ イ ンデ ィ ン グ依存の値が返 さ れます。 詳 し く は後述のバイ ンデ ィ ングの項を参照 し
て く だ さ い。
詳細
こ の関数は、 TET_get_text( ) の後に 1 回ない し 複数回呼び出す こ と がで き ます。 こ れは、
与え ら れたページハン ド ルに関連付け ら れてい る カ レ ン ト テ キ ス ト 断片において、次のグ
リ フへ進み (グ リ フ が も う ない と き は何 も 返 し ません) 、 そ し てそのグ リ フ についての詳
し い情報を提供 し ます。 テ キ ス ト 断片が論理キ ャ ラ ク タ を M 個持ち、 こ れについて こ の
関数への呼び出 し が N 回成功す る (すなわち グ リ フ が N 個あ る 。 N > 0) と す る と 、 N と
M の関係は粒度に依存 し ます :
> granularity=glyph の場合、 各テ キ ス ト 断片はそれぞれただ 1 個のグ リ フ に対応 し ます。
すなわち N=1 です。 1 個のグ リ フは多 く の場合、 1 個のキ ャ ラ ク タ に対応 し ます。 すな
わち M=1 です。 ただ し 、 合字グ リ フ の場合には、 ただ 1 個のグ リ フ に対 し て複数の
キ ャ ラ ク タ が対応 し ます。 すなわち M>1 であ り 、 TET_get_char_info( ) を複数回呼び出
す必要があ り ます。
> glyph 以外の粒度の場合には、 グ リ フ列はキ ャ ラ ク タ 列を生み出 し 、 こ こ で各グ リ フ が
それぞれ生み出すキ ャ ラ ク タ は 0 個 ・ 1 個 ・ 複数のいずれで も あ り え ます。 こ のグ リ フ
列は、 Unicode キ ャ ラ ク タ 列の原料 と な る わけです。 言い換えれば、 N と M の間の関
係は事前にわか り ません。 N と M の間の関係は、 内容分析 (ハ イ フ ン除去処理でハ イ
フ ンが除去 さ れ る な ど) や Unicode 後処理 (字形統合に よ っ て キ ャ ラ ク タ が追加 さ れ
た り 削除 さ れた り す る な ど) に よ っ て影響を受け る 可能性があ り ます。
glyph 以外の粒度の場合には、 こ の関数は、 TET_get_text( ) への最近の呼び出 し が返 し た
テ キ ス ト 断片を構成す る 次のグ リ フへ進みます。 こ れに よ っ て、 単語検出機能が有効な と
き にグ リ フ メ ト リ ッ ク を取得す る こ と がで き 、 ま た、 1 個のテ キ ス ト 断片には複数のキ ャ
ラ ク タ が含まれ る 場合があ り ます。カ レ ン ト テ キ ス ト 断片についてすべてのグ リ フ の詳細
を取得す る には、 こ の関数を、 情報を も う 返 さ な く な る ま で繰 り 返 し 呼び出す必要があ り
ます。
188
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
構造ま たはプ ロ パテ ィ / フ ィ ール ド 内のグ リ フ詳細は、同 じ ページハン ド ルで次に TET_
get_char_info( ) か TET_close_page( ) を呼び出す (先に行な っ たほ う ) ま で有効です。 グ リ
フ情報プ ロ パテ ィ / フ ィ ール ド のセ ッ ト は、TET オブジ ェ ク ト ご と にただ 1 個 し かあ り ま
せんので、 同 じ ページについてであれ、 別のページについてであれ、 別の文書についてで
あれ、 再び TET_get_char_info( ) を呼び出す前に ク ラ イ ア ン ト 側ですべてのグ リ フ情報を
取得 し てお く 必要があ り ます。
バインディング C ・ C++ 言語バ イ ンデ ィ ン グ : TET_get_text( ) が返 し た最近のテ キ ス ト 断片について、 グ リ
フ がそれ以上得 ら れない と き は、 NULL ポ イ ン タ が返 さ れます。 そ う でない と き は、 1 個
のグ リ フ に関す る 情報を内容 と し て持つ TET_char_info 構造へのポ イ ン タ が返 さ れ ます。
こ のデー タ 構造の メ ンバについては表 10.15 で説明 し ます。
COM ・ Java ・ .NET ・ Objective-C 言語バ イ ンデ ィ ン グ : TET_get_text( ) が返 し た最近のテ
キ ス ト 断片について、 グ リ フ がそれ以上得 ら れない と き は、 -1 が返 さ れ ます。 そ う でな
い と き は 1 が返 さ れます。 個々のグ リ フ情報は、 表 10.15 に従っ た TET プ ロ パテ ィ / パブ
リ ッ ク フ ィ ール ド か ら 取得す る こ と がで き ます。 関数が -1 を返 し たに も かかわ ら ずプ ロ
パテ ィ / フ ィ ール ド の値を見た場合には、 いずれ も 値 -1 を と り ます (unknown フ ィ ール
ド は false にな り ます)。
Perl ・ Python 言語バ イ ンデ ィ ン グ : get_text( ) が返 し た最近のテ キ ス ト 断片について、 グ
リ フ がそれ以上得 ら れない と き は、 0 が返 さ れます。 そ う でない と き は、 表 10.15 に挙げ
る キー群を含むハ ッ シ ュ が返 さ れ ま す。 個々の グ リ フ情報は、 こ のハ ッ シ ュ 内の キーに
よ っ て取得す る こ と がで き ます。
PHP 言語バ イ ンデ ィ ン グ : get_text( ) が返 し た最近のテ キ ス ト 断片について、 グ リ フ がそ
れ以上得 ら れない と き は、 空 ( ヌ ル) オブジ ェ ク ト が返 さ れます。 そ う でない と き は、 表
10.15 に挙げ る フ ィ ール ド 群を内容 と し て持つオブジ ェ ク ト が返 さ れます。 個々のグ リ フ
情報は、 こ のオブジ ェ ク ト の メ ンバフ ィ ール ド か ら 取得する こ と がで き ます。 グ リ フ情報
オブジ ェ ク ト 内の整数フ ィ ール ド は、 PHP 言語バ イ ンデ ィ ン グでは long と し て実装 さ れ
てい ます。
REALbasic バ イ ンデ ィ ン グ : get_text( ) が返 し た最近のテ キ ス ト 断片について、 グ リ フ が
それ以上得 ら れない と き は、 nil が返 さ れます。 そ う でない と き は、 表 10.15 に挙げ る メ ン
バ群を内容 と し て持つ TET_char_info オブジ ェ ク ト が返 さ れ ます。 個々のグ リ フ情報は、
こ のオブ ジ ェ ク ト 内の キーに よ っ て取得す る こ と がで き ま す。 attributes フ ィ ール ド は
REALbasicバ イ ンデ ィ ン グでは、REALbasicの イ ン タ フ ェース の問題を回避する ためにattrs
と い う 名前にな っ てい ます。
Ruby バ イ ンデ ィ ン グ : グ リ フ がそれ以上得 ら れない と き は、 nil (ヌ ルオブジ ェ ク ト ) が
返 さ れます。 そ う でない と き は、 TET_char_info オブジ ェ ク ト が返 さ れます。
表 10.15 TET_char_info 構造の メ ンバ (C ・ C++ ・ Ruby) と 、 同等のパブ リ ッ ク フ ィ ール ド (Java ・ PHP ・ ObjectiveC) ・ キー (Perl) ・ プ ロパテ ィ (COM ・ .NET)、 およびその型 と 意味の一覧。 詳 し く は 82 ページの 「グ リ フ メ ト
リ ッ ク」 を参照。
プロパテ ィ /
フ ィ ール ド 名 説明
uv
(整数) カ レ ン ト グ リ フ に対する UTF-32 Unicode 値。 glyph 以外の粒度の場合、 これは、 最終テキ
ス ト 断片 と はま っ た く 無関係な擬似または中間値を と る こ と があ り ます。 granularity=glyph の場
合、 グ リ フ に対する Unicode 値列は論理テキス ト に等 し いですが、 それ以外の粒度の場合には、 そ
れは さ ま ざ ま な処理ス テ ッ プによ っ て変更 さ れている可能性があ り ます。
10.8 テキス ト ・ メ ト リ ク ス抽出関数
189
表 10.15 TET_char_info 構造の メ ンバ (C ・ C++ ・ Ruby) と 、 同等のパブ リ ッ ク フ ィ ール ド (Java ・ PHP ・ ObjectiveC) ・ キー (Perl) ・ プ ロパテ ィ (COM ・ .NET)、 およびその型 と 意味の一覧。 詳 し く は 82 ページの 「グ リ フ メ ト
リ ッ ク」 を参照。
プロパテ ィ /
フ ィ ール ド 名 説明
type
(整数) キ ャ ラ ク タ の種別。 以下の種別は、 ページ上のグ リ フ に対応する本当のキ ャ ラ ク タ を記述
し ます。 これ以外のすべてのプ ロパテ ィ / フ ィ ール ド の値は、 対応するグ ラ フ に よ っ て決定 さ れ
ます :
0
ち ょ う ど 1 個のグ リ フ に対応する通常のキ ャ ラ ク タ
1
キ ャ ラ ク タ 列 (合字な ど) の先頭
以下の種別は、 ページ上のグ リ フ には対応 し ない擬似キ ャ ラ ク タ を記述 し ます。 x ・ y フ ィ ール ド
は、 最近の本当のキ ャ ラ ク タ の終了点を表 し 、 width フ ィ ール ド は 0 にな り 、 こ れ以外の uv を除
く すべてのフ ィ ール ド は、 最近の本当のキ ャ ラ ク タ に対応する値を と り ます :
10
キ ャ ラ ク タ 列 (合字な ど) のつづ き
11
(非推奨。 使われていません)
12
挿入 さ れた単語 ・ 行 ・ 区域区切 り キ ャ ラ ク タ
attributes1
(整数) グ リ フの属性を ビ ッ ト で表 し た もの。 組み合わせる こ と も で き ます :
ビ ッ ト 0 視覚的または意味的な下付き
ビ ッ ト 1 視覚的または意味的な上付き
ビ ッ ト 2 ド ロ ッ プキ ャ ッ プキ ャ ラ ク タ (段落先頭の大き いキ ャ ラ ク タ )
ビ ッ ト 3 こ のグ リ フの、 グ リ フ または単語ベースの影重複は除去済
ビ ッ ト 4 グ リ フは、 ハイ フ ン区切 り 箇所直前のキ ャ ラ ク タ を表す
ビ ッ ト 5 contentanalysis={keephyphenglyphs=true} が指定 さ れた場合以外除去 さ れたハイ フ ン
区切 り アーテ ィ フ ァ ク ト (すなわちハイ フ ンキ ャ ラ ク タ )
ビ ッ ト 6 グ リ フは、 ハイ フ ン区切 り 箇所直後のキ ャ ラ ク タ を表す
unknown
(論理値。 C ・ C++ ・ Perl では整数) 通常は false (0) ですが、 元のグ リ フ が Unicode へマ ッ プ で き
ずに、 unknownchar と し て指定 さ れたキ ャ ラ ク タ へ置き換え られた場合には true ( 1 ) にな り ま
す。
x, y
(double) グ リ フの参照点の位置。 こ の参照点は、 横書き ではグ リ フ 枠の左下隅であ り 、 縦書き で
は上端中央の点です。 擬似キ ャ ラ ク タ については この x ・ y 座標は、 最近のキ ャ ラ ク タ の終了点の
座標にな り ます。
width
(double) 対応するグ リ フの幅 (横書き で も縦書き で も )。 擬似キ ャ ラ ク タ については こ の幅は 0 に
な り ます。
alpha
(double) イ ン ラ イ ン テキス ト 進行の向き を度単位で反時計回 り に測 っ た も の。 横書きの場合には
こ れはテキス ト のベース ラ イ ンの向き であ り 、 縦書きの場合には こ れは標準 -90°向き に対する角
度です。 この角度は範囲 -180°< alpha ≦ +180°内にな り ます。 標準的な横書き テキス ト で も 、
縦書きの標準的テキス ト で も、 こ の角度は 0°にな り ます。
beta
(double) テキス ト 斜形化角度を度単位で (反時計回 り )、 alpha の垂線に対 し て測っ た もの。 こ の
角度は、 正立テキス ト については 0°にな り 、 斜体にな っ た (斜形化 さ れた) テキス ト については
負にな り ます。 この角度は範囲 -180°< beta ≦ +180°にな り ますが、 ただ し ± 90°以外の値を と
り ます。 abs(beta) > 90°な ら、 そのテキス ト はベース ラ イ ン で反転 さ れています。
fontid
(整数) fonts[ ] 擬似オブ ジ ェ ク ト 内における フ ォ ン ト の番号 (pCOS パス リ フ ァ レ ン ス参照)。
fontid が負にな る こ と はあ り ません。
fontsize
(double) 文字のサイ ズ (つねに正)。 こ の値 と 、 グ リ フの実際の高 さ と の比は固定ではな く 、 フ ォ
ン ト デザイ ン によ っ て変動する可能性があ り ます。 多 く のフ ォ ン ト では、 文字サイ ズは、 すべて
のアセ ン ダ (ア ク セ ン ト 付き キ ャ ラ ク タ も含め) と デ ィ セ ン ダ を包含する よ う に選ばれています。
190
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 10.15 TET_char_info 構造の メ ンバ (C ・ C++ ・ Ruby) と 、 同等のパブ リ ッ ク フ ィ ール ド (Java ・ PHP ・ ObjectiveC) ・ キー (Perl) ・ プ ロパテ ィ (COM ・ .NET)、 およびその型 と 意味の一覧。 詳 し く は 82 ページの 「グ リ フ メ ト
リ ッ ク」 を参照。
プロパテ ィ /
フ ィ ール ド 名 説明
textrendering
(整数) テキス ト 表現モー ド :
0
テキス ト を塗る
1
テキス ト (輪郭) を描線
2
テキス ト を塗っ て描線
3
不可視テキス ト ( し ば し ば OCR の結果に対 し て用い られる)
4
テキス ト を塗っ て、 それを ク リ ッ ピ ングパスに追加
5
テキス ト を描線 し 、 それを ク リ ッ ピ ングパスに追加
6
テキス ト を塗っ て描線 し 、 それを ク リ ッ ピ ングパスに追加
7
テキス ト を ク リ ッ ピ ン グパスに追加
1. REALbasic バイ ンデ ィ ン グでは この フ ィ ール ド は attrs と い う 名前です。
10.8 テキス ト ・ メ ト リ ク ス抽出関数
191
10.9 画像抽出関数
C++ const TET_image_info *get_image_info(int page)
C# Java int get_image_info(int page)
Perl PHP object image_info get_image_info(long page)
VB RB Function get_image_info(int page) As Long
C const TET_image_info *TET_get_image_info(TET *tet, int page)
ページ上の、 次の画像に関する情報を取得 し ます (ただ し ピ ク セルデー タ 本体は取得 し ま
せん)。
page
TET_open_page( ) で得 ら れた有効なページハン ド ル。
戻り値 画像がそれ以上得 ら れない と き は、 バ イ ンデ ィ ン グ依存の値が返 さ れます。 そ う でない と
き は、 画像の詳細がバ イ ンデ ィ ン グ依存の形で利用で き ま す。 詳 し く は、 後述のバ イ ン
デ ィ ングの項を参照 し て く だ さ い。
詳細
こ の関数は、 与え ら れたページハン ド ルに関連付け ら れてい る 次の画像へ進み (画像が も
う ない と き は 0 か NULL を返 し ます)、 こ の画像についての詳 し い情報を提供 し ます。 こ
の関数は、 画像連結機構に よ っ て生成 さ れた擬似画像を も 返 し ます。 し か し 、 擬似画像を
生成す る ために用い ら れた消費済画像は返 さ れません。
構造ま たはプ ロ パテ ィ / フ ィ ール ド 内の画像詳細は、 同 じ ページハン ド ルで次に TET_
get_image_info( ) か TET_close_page( ) を呼び出す (先に行な っ たほ う ) ま で有効です。 画
像情報プ ロ パテ ィ / フ ィ ール ド のセ ッ ト は、TET オブジ ェ ク ト ご と にただ 1 個 し かあ り ま
せんので、 同 じ ページについてであれ、 別のページについてであれ、 別の文書についてで
あれ、再び TET_get_image_info( ) を呼び出す前に ク ラ イ ア ン ト 側ですべての画像情報を取
得 し てお く 必要があ り ます。
バインディング C ・ C++ 言語バ イ ンデ ィ ン グ : ページ上で画像がそれ以上得 ら れない と き は、 NULL ポ イ
ン タ が返 さ れます。 そ う でない と き は、 画像に関す る 情報を内容 と し て持つ TET_image_
info 構造へのポ イ ン タ が返 さ れます。 こ のデー タ 構造の メ ンバについては表 10.16 で説明
し ます。
COM ・ Java ・ .NET ・ Objective-C 言語バ イ ンデ ィ ン グ : ページ上で画像がそれ以上得 ら れ
ない と き は、 -1 が返 さ れます。 そ う でない と き は 1 が返 さ れます。 個々の画像情報は、 表
10.16 に従っ た TET プ ロ パテ ィ / フ ィ ール ド か ら 取得す る こ と がで き ます。 関数が -1 を
返 し たに も かかわ ら ずプ ロ パテ ィ / フ ィ ール ド の値を見た場合には、 いずれ も 値 -1 を と
り ます。
Perl ・ Python 言語バ イ ンデ ィ ン グ : ページ上で画像がそれ以上得 ら れない と き は、 0 が返
さ れます。そ う でない と き は、表 10.16 に挙げ る キー群を含むハ ッ シ ュ が返 さ れます。個々
の画像情報は、 こ のハ ッ シ ュ 内のキーに よ っ て取得する こ と がで き ます。
PHP 言語バ イ ンデ ィ ン グ : ページ上で画像がそれ以上得 ら れない と き は、 空 (ヌ ル) オブ
ジ ェ ク ト が返 さ れます。 そ う でない と き は、 型 TET_image_info のオブジ ェ ク ト が返 さ れ
ます。個々の画像情報は、表 10.16 に従っ てその フ ィ ール ド か ら 取得す る こ と がで き ます。
画像情報オブジ ェ ク ト 内の整数フ ィ ール ド は、 PHP 言語バ イ ンデ ィ ン グでは long と し て
実装 さ れてい ます。
192
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
REALbasic バ イ ンデ ィ ン グ : ページ上で画像がそれ以上得 ら れない と き は、 nil が返 さ れま
す。 そ う でない と き は、 表 10.16 に挙げ る メ ンバ群を含む TET_image_info オブジ ェ ク ト が
返 さ れます。 個々の画像情報は、 こ のオブジ ェ ク ト 内の メ ンバに よ っ て取得す る こ と がで
き ます。
Ruby バ イ ンデ ィ ン グ : 画像がそれ以上得 ら れない と き は、 nil ( ヌ ルオブジ ェ ク ト ) が返
さ れます。 そ う でない と き は、 TET_image_info オブジ ェ ク ト が返 さ れます。
表 10.16 TET_image_info 構造の メ ンバ (C ・ C++ ・ Ruby) と 、 同等のパブ リ ッ ク フ ィ ール ド (Java ・ PHP ・
Objective-C) ・ キー (Perl) ・ プ ロパテ ィ (COM ・ .NET)、 およびその型 と 意味の一覧。 詳 し く は 121 ページの 8.1
「画像抽出の基本」 を参照。
プロパテ ィ /
フ ィ ール ド 名 説明
x, y
(double) 画像の参照点の位置。 参照点は画像の左下隅です。
width,
height
(double) ページ上の画像の幅 と 高 さ をポ イ ン ト 単位で、 画像の辺に沿 っ て測っ た もの。
alpha
(double) ピ ク セル行の向き。 こ の角度は範囲 -180°< alpha ≦ +180°内にな り ます。 正立画像に
ついては alpha は 0°にな り ます。
beta
(double) ピ ク セル列の向き を、 alpha の垂線に対 し て測っ た もの。 この角度は範囲 -180°< beta
≦ +180°にな り ますが、 ただ し ± 90°以外の値を と り ます。 正立画像については beta は
-90°< beta < +90°にな り ます。 abs(beta) > 90°な ら 、 その画像はベース ラ イ ン で反転 さ れてい
ます。
imageid
(整数) pCOS 擬似オブ ジ ェ ク ト images[ ] 内における画像の番号。 こ の擬似オブ ジ ェ ク ト 内の項
目群を通 じ て、 詳細な画像プ ロパテ ィ を取得する こ と がで き ます (pCOS パス リ フ ァ レ ン ス参照)。
C++ int write_image_file(int doc, int imageid, wstring optlist)
C# Java int write_image_file(int doc, int imageid, String optlist)
Perl PHP long write_image_file(long doc, long imageid, string optlist)
VB RB Function write_image_file(doc As Long, imageid As Long, optlist As String) As Long
C int TET_write_image_file(TET *tet, int doc, int imageid, const char *optlist)
画像デー タ をデ ィ ス クへ書き出 し ます。
doc
TET_open_document*( ) で得 ら れた有効な文書ハン ド ル。
imageid 画像の pCOD ID。 こ の ID は、 TET_get_image_info( ) を呼び出 し て成功 し た後に
imageid フ ィ ール ド か ら 、 あ る いは、 images 擬似オブジ ェ ク ト 内のすべての項目を なめ る
( こ の配列内には length:images 項目があ り ます) こ と に よ っ て取得する こ と がで き ます。
optlist 表 10.17 に従っ て画像関連オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。 右記のオ
プシ ョ ンが使え ます : compression ・ filename ・ keepxmp ・ typeonly。
戻り値 エ ラ ー時には -1、 そ う でないな ら 0 よ り 大 き な値。 -1 が返 さ れた場合には、 TET_get_
errmsg( ) を呼び出 し てエ ラ ーの詳細を知 る こ と を推奨 し ます。エ ラ ーの場合には何の画像
出力 も 生成 さ れません。 まれにあ る 非対応の形式の画像の場合 も 、 エ ラ ー と し て報告 さ れ
ます。 戻 り 値が -1 以外の場合には、 その戻 り 値が示すフ ァ イ ル形式でその画像を抽出で
き る こ と を示 し ます :
> -1: エ ラ ー発生。 何の画像 も 抽出 さ れません
10.9 画像抽出関数
193
> 10 : 画像は TIFF (.tif) と し て抽出 さ れた
> 20 : 画像は JPEG (.jpg) と し て抽出 さ れた
> 30 : 画像は JPEG 2000 (.jpx) と し て抽出 さ れた
詳細
こ の関数は、 指定 し た pCOS ID を持つ画像に対す る ピ ク セルデー タ を、 い く つかの画像
形式の 1 つへ変換 し 、 その結果をデ ィ ス ク フ ァ イ ルへ書 き 出 し ます。 typeonly オプシ ョ ン
を与え た場合は、 画像の種別だけが返 さ れ、 画像フ ァ イ ルは生成 さ れません。
バインディング C ・ C++ : 戻 り 値のためのマ ク ロ が tetlib.h 内で得 ら れます。
表 10.17 TET_write_image_file( ) ・ TET_get_image_data( ) のオプ シ ョ ン一覧
オプ シ ョ ン
説明
compression
(キーワー ド ) ピ ク セルデー タ を圧縮する ためのアルゴ リ ズム (デ フ ォ ル ト : auto) :
auto
適切な圧縮アルゴ リ ズムを自動的に選択 し ます。
none
(TIFF 画像の場合のみ意味を持ち ます) 可能な らば一切圧縮な し で ピ ク セルデー タ を書
き出 し ます。
filename1
(文字列。 typeonly も与え ていないかぎ り 必須) デ ィ ス ク 上の画像フ ァ イルの名前。 こ の
filename に、 画像フ ァ イル形式を示す接尾辞が追加 さ れます。
TETML 内の Image/@id attribute 属性にマ ッ チする ため、 下記のフ ァ イル名パ タ ーン を推奨 し ま
す:
I<imageid>
こ こ で imageid は、 imageid 引数の 10 進表現です。
keepxmp
(論理値) true の場合、 かつ、 その画像が PDF 内で関連付け ら れた XMP メ タ デー タ を持 っ ている
場合には、 抽出 さ れる TIFF ・ JPEG 画像内にその メ タ デー タ が埋め込まれます。 デ フ ォ ル ト : true
typeonly1
(論理値) 与えたオプ シ ョ ンに従っ て画像種別が決定 さ れますが、 画像 フ ァ イルは書き出 さ れませ
ん。 TET_get_image_data( ) 自体は画像種別を返 さ ないので、 これは、 それが返 し た画像の種別を決
定する ために有用です。 デ フ ォル ト : false
1. TET_write_image_file( ) のみ
C++ const char *get_image_data(int doc, size_t *length, int imageid, wstring optlist)
C# Java final byte[ ] get_image_data(int doc, int imageid, String optlist)
Perl PHP string get_image_data(long doc, long imageid, string optlist)
VB RB Function get_image_data(doc As Long, imageid As Long, optlist As String)
C const char * TET_get_image_data(TET *tet, int doc, size_t *length, int imageid, const char *optlist)
画像デー タ を メ モ リ か ら抽出 し ます。
doc
TET_open_document*( ) で得 ら れた有効な文書ハン ド ル。
length (C ・ C++ 言語バ イ ンデ ィ ン グのみ) 返 さ れ る デー タ の長 さ がバ イ ト 単位で格納 さ
れ る メ モ リ 位置への C ス タ イ ルポ イ ン タ 。
imageid 画像の pCOS ID。 こ の ID は、 TET_get_image_info( ) を呼び出 し て成功 し た後に
imageid フ ィ ール ド か ら 、 あ る いは、 images pCOS 配列内のすべての項目を なめ る ( こ の
配列内には length:images 項目があ り ます) こ と に よ っ て取得す る こ と がで き ます。
optlist 表 10.17 に従っ て画像関連オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。 右記のオ
プシ ョ ンが使え ます : compression ・ keepxmp。
194
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
戻り値 指定 し たオプシ ョ ン群に従っ て画像を表現 し たデー タ 。 エ ラ ーの場合には (画像が抽出で
き ない場合 も 含め)、 C ・ C++ では NULL ポ イ ン タ が返 さ れ、 それ以外の言語バ イ ンデ ィ ン
グでは空デー タ が返 さ れます。 エ ラ ーが発生 し た場合には、 TET_get_errmsg( ) を呼び出 し
てエ ラ ーの詳細を知 る こ と を推奨 し ます。
詳細
こ の関数は、 指定 し た pCOS ID を持つ画像に対す る ピ ク セルデー タ を、 い く つかの画像
形式の 1 つへ変換 し 、 そのデー タ を メ モ リ 内で利用可能に し ます。
バインディング COM : 多 く の ク ラ イ ア ン ト プ ロ グ ラ ム では、 Variant 型を用いて画像デー タ を保持 し ます。
C ・ C++ 言語バ イ ンデ ィ ン グ : 返 さ れたデー タ バ ッ フ ァ は、 次に こ の関数を呼び出すま で
使え ます。
REALbasic : 結果は、 エン コ ーデ ィ ン グ -1 (バ イ ナ リ デー タ ) を持つ REALbasic 文字列 と
し て提供 さ れます。 テ キ ス ト がそれ以上得 ら れない と き は、 空文字列が返 さ れます。
10.9 画像抽出関数
195
10.10 TET マー ク ア ッ プ言語 (TETML) 関数
C++ int process_page(int doc, int pagenumber, wstring optlist)
C# Java int process_page(int doc, int pagenumber, String optlist)
Perl PHP long process_page(long doc, long pagenumber, string optlist)
VB RB Function process_page(doc As Long, pagenumber As Long, optlist As String) As Int
C int TET_process_page(TET *tet, int doc, int pagenumber, const char *optlist)
ページ を処理 し て TETML 出力を生成 し ます。
doc
TET_open_document*( ) で得 ら れた有効な文書ハン ド ル。
pagenumber 処理 し たいページの物理的番号。 最初のページ をページ番号 1 と し ます。
総ペー ジ 数 は、 TET_pcos_get_number( ) と pCOS パ ス length:pages で 取得 で き ま す。
trailer=true の場合、 こ の pagenumber 引数は 0 にする こ と も で き ます。
optlist 以下のグループ内のオプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト :
> 表 10.10 に従っ た一般的なページ関連オプシ ョ ン( こ れ ら は pagenumber=0 の場合には
無視 さ れます) : clippingarea ・ contentanalysis ・ excludebox ・ fontsizerange ・ granularity ・
ignoreinvisibletext ・ imageanalysis ・ includebox ・ layoutanalysis ・ skipengines
> 表 10.18 に従っ た処理詳細を指定す る オプシ ョ ン : tetml
表 10.18 TET_process_page( ) の追加オプ シ ョ ン
オプ シ ョ ン
説明
tetml
(オプ シ ョ ン リ ス ト ) TETML の詳細を制御 し ます。 以下のオプ シ ョ ンが使え ます :
elements (オプ シ ョ ン リ ス ト ) オプ シ ョ ナルな TETML 要素を指定 し ます :
line
(granularity=word の場合のみ) true の場合、 TETML 出力は、 Para レ ベル と
Word レ ベルの間に Line 要素を含みます。 デ フ ォ ル ト : false
glyphdetails
(オプ シ ョ ン リ ス ト 。 granularity=glyph ・ word の場合のみ) 各 Glyph 要素に対 し て、
どのグ リ フ属性が報告 さ れるかを指定 し ます (すべてのサブオプ シ ョ ンのデ フ ォ ル ト :
false) :
all
(論理値) すべての属性サブオプ シ ョ ン を有効に し ます
dehyphenation
(論理値) 属性 dehyphenation を出力する こ と に よ っ て、 ハイ フ ン区切 り さ
れた単語を示 し ます。
dropcap (論理値) 属性 dropcap を出力する こ と に よ っ て、 単語の先頭の大き なキ ャ
ラ ク タ を示 し ます。
geometry (論理値) 属性 x ・ y ・ width ・ alpha ・ beta を出力 し ます。
font
(論理値) 属性 font ・ fontsize ・ textrendering ・ unknown を出力 し ます。
sub
(論理値) 属性 sub を出力する こ と によ っ て、 下付き を示 し ます。
sup
(論理値) 属性 sup を出力する こ と によ っ て、 上付き を示 し ます。
trailer
(論理値) true の場合には、 文書 ト レー ラ デー タ が、 すなわち最終ページの後のデー タ
が出力 さ れます ( これ以前に出力 さ れたページ固有デー タ に こ れを連結する必要があ り
ます)。 このオプ シ ョ ンは、 ト レー ラ デー タ を出力する ために、 こ の関数を最後に呼び
出す際に必要です。 pagenumber=0 の場合には、 ト レー ラ デー タ のみが (ページ固有
デー タ な し で) 出力 さ れます。 trailer=true を与えた後は、 その同 じ 文書に対 し ては
も う TET_process_page( ) を呼び出 し てはいけません。 デ フ ォル ト : false
196
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
戻り値 エ ラ ー時には -1、そ う でないな ら 1。ただ し TETML モー ド では、問題は TETML の Exception
要素内で報告 さ れますので、 こ の関数はつねに成功 し ます。
詳細
こ の関数はページ を開 き 、 TET_open_document*( ) に与えた形式関連オプシ ョ ン群に従っ
て出力を生成 し て、 ページ を閉 じ ます。 生成 さ れたデー タ は、 TET_get_xml_data( ) で取得
す る こ と がで き ます。
こ の関数は、 対応す る TET_open_document*( ) への呼び出 し でオプシ ョ ン tetml を与え
た場合にのみ呼び出す必要があ り ます。 ヘ ッ ダデー タ は、 すなわち、 先頭ページの前の文
書固有デー タ は、 TET_open_document*( ) に よ っ て、 先頭ページデー タ の前に生成 さ れま
す。 こ れは、 TET_process_page( ) を初めて呼び出す前に TET_get_xml_data( ) を呼び出す こ
と に よ っ て別個に取得す る こ と も で き ます し 、ページ関連デー タ と 組み合わせて取得す る
こ と も で き ます。
ト レー ラ デー タ 、 すなわち、 最終ページの後の文書固有デー タ は、 文書に対 し て こ の
関数を最後に呼び出す際に trailer サブオプシ ョ ン で要求す る 必要があ り ます。 ト レー ラ
デー タ は、 最終ペー ジ の 後 に 別個 の 呼び出 し を 行 な っ て 生成す る こ と も で き ま す し
(pagenumber=0)、最終ページ と 一緒に生成す る こ と も で き ます (pagenumber は 0 以外)。
ページ群は任意の順序で抽出す る こ と がで き 、 ま た、 文書のページ群の任意の部分集合を
抽出す る こ と がで き ます。
ト レー ラ を取得せずに TET_close_document( ) を呼び出す と エ ラ ーにな り ます。 ト レー
ラ を取得 し た後に TET_process_page( ) を呼び出 し て も エ ラ ーにな り ます。
C++ const char *get_xml_data(int doc, size_t *length, wstring optlist)
C# Java final byte[ ] get_xml_data(int doc, String optlist)
Perl PHP string get_xml_data(long doc, string optlist)
VB RB Function get_xml_data(doc As Long, optlist As String)
C const char * TET_get_xml_data(TET *tet, int doc, size_t *length, const char *optlist)
TETML デー タ を メ モ リ か ら取得 し ます。
doc
TET_open_document*( ) で得 ら れた有効な文書ハン ド ル。
length (C ・ C++ 言語バ イ ンデ ィ ン グのみ) 返 さ れ る 文字列の長 さ をバ イ ト 単位で保持す
る 変数へのポ イ ン タ 。 length は終端ヌ ルバ イ ト を勘定 し ません。
optlist
(現在、 使え る オプシ ョ ンはあ り ません。)
戻り値 指定 し たオプシ ョ ン群に従っ た、 次のデー タ 断片を内容 と し て持つバ イ ト 配列。 バ ッ フ ァ
が空の場合には、 空文字列が返 さ れます (C では NULL ポ イ ン タ かつ *len=0)。
詳細
こ の関数は、 TET_open_document*( ) と 、 1 回ない し 複数回の TET_process_page( ) への呼び
出 し に よ っ て生成 さ れた TETML デー タ を取得 し ます。 TETML デー タ は、 outputformat
オプシ ョ ンにかかわ ら ず、 つねに UTF-8 で符号化 さ れてい ます。 内部バ ッ フ ァ は こ の呼
び出 し に よ っ て ク リ ア さ れ ま す。 TET_process_page( ) を 呼び出す た びに TET_get_xml_
data( ) を呼び出す必要はあ り ません。 ク ラ イ ア ン ト 側では、 1 個ない し 複数のページに対
す る 、 ない し 文書全体に対す る デー タ をバ ッ フ ァ 内に蓄積 し てお く こ と が可能です。
TETML モー ド では、 TET_close_document( ) の前に こ の関数を少な く と も 1 回呼び出す
必要があ り ます。 でない と デー タ は利用で き な く な っ て し ま い ます。 TET_get_xml_data( )
を ち ょ う ど 1 回だけ呼び出す場合には (その よ う なただ 1 回呼び出 し は、 TET_process_
10.10 TET マー ク ア ッ プ言語 (TETML) 関数
197
page( ) への最後の呼び出 し と TET_close_document( ) と の間に行 う 必要があ り ます)、 バ ッ
フ ァ は文書全体に対す る 整形式 TETML 文書を内容 と し て持っ てい る こ と が保証 さ れ ま
す。 こ の関数は、 TET_open_document*( ) の tetml オプシ ョ ンに filename サブオプシ ョ ン
を与え た場合には呼び出 し てはいけ ません。
バインディング C ・ C++ 言語バ イ ンデ ィ ン グ : 結果は、 ヌ ル終端 UTF-8 と し て提供 さ れます。 i5/iSeries ・
zSeries では、EBCDIC 符号化 さ れた UTF-8 が返 さ れます。返 さ れたデー タ バ ッ フ ァ は、次
に TET_get_xml_data( ) を呼び出す時ま で使え ます。
Java ・ .NET バ イ ンデ ィ ン グ : 結果は、 UTF-8 デー タ を内容 と し て持つバ イ ト 配列 と し て
提供 さ れます。
COM:多 く の ク ラ イ ア ン ト プ ロ グ ラ ムは、Variant 型を用いて UTF-8 デー タ を保持 し ます。
REALbasic : 結果は、 エン コ ーデ ィ ン グ UTF-8 の REALBasic String と し て返 さ れます。
PHP 言語バ イ ンデ ィ ン グ : 結果は、 UTF-8 文字列 と し て提供 さ れます。
Python : 結果は、 8 ビ ッ ト 文字列 と し て返 さ れます (Python 3 : bytes)。
RPG 言語バ イ ンデ ィ ン グ : 結果は、 ヌ ル終端 EBCDIC UTF-8 と し て返 さ れます。
198
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
10.11 pCOS 関数
PDF か ら オブジ ェ ク ト デー タ を取得す る ための完全な pCOS 文法が使え ます。詳 し い説明
は、 別の文書 と し て あ る pCOS パ ス リ フ ァ レ ン ス を参照 し て く だ さ い。
C++ double pcos_get_number(int doc, wstring path)
C# Java double pcos_get_number(int doc, String path)
Perl PHP float pcos_get_number(int doc, string path)
VB RB Function pcos_get_number(doc as Long, path As String) As Double
C double TET_pcos_get_number(TET *tet, int doc, const char *path, ...)
数値型か論理型の pCOS パスの値を得ます。
Get the value of a pCOS path with type number or boolean.
doc
TET_open_document*( ) で得 ら れた有効な文書ハン ド ル。
path
数値ま たは論理値オブジ ェ ク ト への完全 pCOS パ ス。
追加引数 (C 言語バ イ ンデ ィ ン グのみ) 任意の数の追加引数を、 key 引数がそれに対応
す る プ レース ホルダ を含んでい る 場合には (文字列には %s、 整数には %d。 %% と す る と
パーセ ン ト 記号 1 個)、 与え る こ と がで き ます。 こ れ ら の引数を利用すれば、 可変の数値
や文字列値を含む複雑なパ ス を明示的に組み立て る 手間が省け ます。プ レース ホルダの数
と 型が、 与え る 追加引数 と 一致す る よ う にす る のは、 ク ラ イ ア ン ト 側の役割です。
戻り値 pCOS パ ス に よ っ て特定 さ れたオブジ ェ ク ト の数値。 論理値の場合は、 それが true な ら ば
1 が返 さ れ、 そ う でないな ら 0 が返 さ れます。
C++ wstring pcos_get_string(int doc, wstring path)
C# Java String pcos_get_string(int doc, String path)
Perl PHP string pcos_get_string(int doc, string path)
VB RB Function pcos_get_string(doc as Long, path As String) As String
C const char *TET_pcos_get_string(TET *tet, int doc, const char *path, ...)
名前型 ・ 文字列型 ・ 論理型のいずれかの pCOS パスの値を得ます。
doc
path
TET_open_document*( ) で得 ら れた有効な文書ハン ド ル。
文字列 ・ 名前 ・ 論理値のいずれかのオブジ ェ ク ト への完全 pCOS パ ス。
追加引数 (C 言語バ イ ンデ ィ ン グのみ) 任意の数の追加引数を、 key 引数がそれに対応
す る プ レース ホルダ を含んでい る 場合には (文字列には %s、 整数には %d。 %% と す る と
パーセ ン ト 記号 1 個)、 与え る こ と がで き ます。 こ れ ら の引数を利用すれば、 可変の数値
や文字列値を含む複雑なパ ス を明示的に組み立て る 手間が省け ます。プ レース ホルダの数
と 型が、 与え る 追加引数 と 一致す る よ う にす る のは、 ク ラ イ ア ン ト 側の役割です。
戻り値 pCOS パ ス に よ っ て特定 さ れたオブジ ェ ク ト の値を持つ文字列。 論理値の場合は、 文字列
true か false が返 さ れます。
詳細
こ の関数は、 pCOS が フルモー ド で動作 し てお ら ず、 かつオブジ ェ ク ト が文字列型の場合
には、 例外を発生 さ せます (pCOS パ ス リ フ ァ レ ン ス参照)。 例外 と し て、 オブジ ェ ク ト /
10.11 pCOS 関数
199
Info/* (文書情報キー群) は制限 pCOS モー ド で も nocopy=false か plainmetadata=true な
ら ば取得す る こ と がで き 、 ま た、 bookmarks[...]/Title と pages[...]/Annots/Contents は制限
pCOS モー ド で も nocopy=false な ら ば取得で き ます。
こ の関数は、PDF 文書か ら 取得す る 文字列がテ キ ス ト 文字列であ る と 前提 し てい ます。
バ イ ナ リ デー タ を内容 と し て持つ文字列オブジ ェ ク ト は、 こ れに換えて、 デー タ にいかな
る 変更を も 加え ない TET_pcos_get_stream( ) で取得する べ き です。
バインディング C 言語バ イ ンデ ィ ン グ:文字列は、BOM な し の UTF-8 形式(zSeries・i5/iSeries では EBCDICUTF-8) で返 さ れます。 返 さ れ る 文字列は、 最大 10 項目を持つ リ ン グバ ッ フ ァ 内に格納
さ れます。 10 個を超え る 文字列が取得 さ れた と き には、 バ ッ フ ァ は再利用 さ れますので、
10 個を超え る 文字列を同時に利用 し たい場合には、 ク ラ イ ア ン ト 側でその文字列を複製
し てお く 必要があ り ます。 た と えば、 printf( ) 文の引数では こ の関数を最大 10 回ま で呼び
出す こ と がで き ます。 同時に 10 個を超え る 文字列が使用 さ れないな ら ば、 その戻 り 文字
列は互いに独立であ る こ と が保証 さ れてい る か ら です。
C++ 言語バ イ ンデ ィ ン グ : 文字列は、 C++ ラ ッ パのデフ ォ ル ト の wstring 設定では wstring
と し て返 さ れます。zSeries・i5/iSeries の string 互換モー ド では、結果は BOM な し EBCDICUTF-8 で返 さ れます。
Java ・ .NET バ イ ンデ ィ ン グ : 結果は、 Unicode 文字列 と し て提供 さ れます。 テ キ ス ト がそ
れ以上得 ら れない と き は、 ヌ ルオブジ ェ ク ト が返 さ れます。
Perl ・ PHP ・ Python 言語バ イ ンデ ィ ン グ : 結果は、 UTF-8 文字列 と し て提供 さ れます。 テ
キ ス ト がそれ以上得 ら れない と き は、 ヌ ルオブジ ェ ク ト が返 さ れます。
RPG 言語バ イ ンデ ィ ン グ : 結果は、 EBCDIC-UTF-8 文字列 と し て提供 さ れます。
C++ const unsigned char *pcos_get_stream(int doc, int *length, string optlist, wstring path)
C# Java final byte[ ] pcos_get_stream(int doc, String optlist, String path)
Perl PHP string pcos_get_stream(int doc, string optlist, string path)
VB RB Function pcos_get_stream(doc as Long, optlist As String, path As String)
C const unsigned char *TET_pcos_get_stream(TET *tet, int doc, int *length, const char *optlist,
const char *path, ...)
stream 型 ・ fstream 型 ・ 文字列型のいずれかの pCOS パスの値を得ます。
doc
TET_open_document*( ) で得 ら れた有効な文書ハン ド ル。
length (C ・ C++ 言語バ イ ンデ ィ ン グのみ) 返 さ れ る ス ト リ ームデー タ の長 さ をバ イ ト 単
位で受け取 る 変数へのポ イ ン タ 。
optlist
path
表 10.19 に従っ て ス ト リ ーム取得オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。
ス ト リ ーム ま たは文字列オブジ ェ ク ト への完全 pCOS パス。
追加引数 (C 言語バ イ ンデ ィ ン グのみ) 任意の数の追加引数を、 key 引数がそれに対応
す る プ レース ホルダ を含んでい る 場合には (文字列には %s、 整数には %d。 %% と す る と
パーセ ン ト 記号 1 個)、 与え る こ と がで き ます。 こ れ ら の引数を利用すれば、 可変の数値
や文字列値を含む複雑なパ ス を明示的に組み立て る 手間が省け ます。プ レース ホルダの数
と 型が、 与え る 追加引数 と 一致す る よ う にする のは、 ク ラ イ ア ン ト 側の役割です。
200
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
戻り値
ス ト リ ーム ま たは文字列の中に含まれた非暗号化デー タ 。 ス ト リ ーム ま たは文字列が空の
場合、 あ る いは、 暗号化 さ れていない文書の中の暗号化 さ れた添付の内容が ク エ リ さ れて
その添付パ ス ワ ー ド が与え ら れていない場合には、 返 さ れ る デー タ は空にな り ます (C ・
C++ では NULL)。
オブジ ェ ク ト が stream 型の場合には、 keepfilter=true でないかぎ り 、 すべての フ ィ ル
タ が ス ト リ ーム内容か ら 除去 さ れます (すなわち、生デー タ 本体が返 さ れます)。オブジ ェ
ク ト が fstream 型か文字列型の場合には、 PDF フ ァ イ ル内で見つか っ た と お り のデー タ が
その ま ま届け ら れますが、ただ し 例外 と し て ASCII85・ASCIIHex フ ィ ル タ は除去 さ れます。
デー タ の解凍 と ASCII フ ィ ル タ の除去に加え て、 convert オプシ ョ ンに従っ てテ キ ス ト
変換が適用 さ れ る 場合 も あ り ます。
詳細
こ の関数は、 pCOS が フルモー ド で動作 し ていない と き には例外を発生 さ せます (pCOS
パ ス リ フ ァ レ ン ス参照)。 例外 と し て、 オブジ ェ ク ト /Root/Metadata は制限 pCOS モー ド
で も nocopy=false か plainmetadata=true な ら ば取得す る こ と がで き ます。 パ ス が stream
型 ・ fstream 型 ・ 文字列型のいずれかのオブジ ェ ク ト を指 し 示 し ていない場合に も 、 例外
が発生 し ます。
こ の関数は、 その名前に も かかわ ら ず、 文字列型のオブジ ェ ク ト を取得す る ために使
う こ と も で き ます。 オブジ ェ ク ト を テ キ ス ト 文字列 と し て扱 う TET_pcos_get_string( ) と
違っ て、 こ の関数は、 返 さ れたデー タ に対 し ていかな る 変更を も 加え ません。 バ イ ナ リ 文
字列デー タ は PDF 内でめっ たに用い ら れませんので、 自動的には き ちん と 検出で き ませ
ん。 文字列オブジ ェ ク ト をバ イ ナ リ デー タ と し て取得する か、 それ と も テ キ ス ト と し て取
得す る のか を決め る のは、 し たがっ てユーザ側の役割です。
バインディング COM : 多 く の ク ラ イ ア ン ト プ ロ グ ラ ムは、 Variant 型を用いて ス ト リ ーム内容を保持 し ま
す。 COM に よ る JavaScript は、 返 さ れたバ リ ア ン ト 配列の長 さ を取得す る こ と を許 し ま
せん ( し か し こ れは他の言語 と COM では動作 し ます)。
C ・ C++ 言語バ イ ンデ ィ ン グ : 返 さ れたデー タ バ ッ フ ァ は、 次に こ の関数を呼び出すま で
使え ます。
Python : 結果は、 8 ビ ッ ト 文字列 と し て返 さ れます (Python 3 : bytes)。
注記 こ の関数を利用する と 、PDF に埋め込まれている フ ォ ン ト デー タ を取得する こ と がで き ま
す。 ユーザは、 フ ォ ン ト は各フ ォ ン ト ベン ダの使用許諾の対象であ り 、 それぞれの知的所
有権保有者の明示的許諾な し では再利用 し てはな ら ない と い う 事実に留意 し て く だ さ い。
お使いの フ ォ ン ト ベ ン ダに連絡 し て、 関連する ラ イ セ ン ス契約を協議 し て く だ さ い。
表 10.19 TET_pcos_get_stream( ) のオプ シ ョ ン一覧
オプ シ ョ ン
説明
convert
(キーワー ド 。 非対応フ ィ ル タ で圧縮 さ れている ス ト リ ームに対 し ては無視 さ れます) 文字列ま た
はス ト リ ーム内容が変換 さ れるかど う かを制御 し ます (デ フ ォ ル ト : none) :
none
内容をバイ ナ リ デー タ と し て扱い、 何の変換も行いません。
unicode 内容を テキス ト デー タ と し て (すなわち、 TET_pcos_get_string( ) におけるの と 全 く 同 じ
に) 扱い、 Unicode へ正規化 し ます。 非 Unicode 対応言語バイ ンデ ィ ングでは、 こ れは、
デー タ は BOM な し UTF-8 形式へ変換 さ れる こ と を意味 し ます。
こ のオプ シ ョ ンは、 め っ たに用い ら れない PDF 内のデー タ 型 「テキス ト ス ト リ ーム」
(た と えば こ れは JavaScript のために用い ら れる場合があ り ますが、 JavaScript のほ と
んどはス ト リ ームオブ ジ ェ ク ト でな く 文字列オブ ジ ェ ク ト 内に入っ ています) のために
必要です。
10.11 pCOS 関数
201
表 10.19 TET_pcos_get_stream( ) のオプ シ ョ ン一覧
オプ シ ョ ン
説明
keepfilter
(論理値。 画像デー タ ス ト リ ームに対 し てのみ推奨 さ れます。 非対応フ ィ ル タ で圧縮 さ れている ス
ト リ ームに対 し ては無視 さ れます) true の場合には、 ス ト リ ームデー タ は、 その画像の
filterinfo 擬似オブ ジ ェ ク ト 内で指定 さ れている フ ィ ル タ で圧縮 さ れます (pCOS パス リ フ ァ レ
ン ス参照)。 false の場合には、 ス ト リ ームデー タ は解凍 さ れます。 デ フ ォ ル ト : すべての非対応
フ ィ ル タ に対 し て true、 それ以外には false
202
10 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
A TETラ イ ブ ラ リ ク イ ッ ク リ フ ァ レ ンス
以下の表に、 すべての TET API 関数の概観を示 し ます。 頭に (C) が付いてい る も のは、 関
数のC プ ロ ト タ イ プであ り 、Java言語バ イ ンデ ィ ン グでは利用で き ない こ と を意味 し ます。
セ ッ ト ア ッ プ関数
関数プ ロ ト タ イ プ
(C) TET *TET_new(void)
ページ
161
void delete( )
161
PVF 関数
関数プ ロ ト タ イ プ
void create_pvf(String filename, byte[] data, String optlist)
ページ
162
int delete_pvf(String filename)
163
int info_pvf(String filename, String keyword)
163
Unicode 変換関数
関数プ ロ ト タ イ プ
String convert_to_unicode(String inputformat, byte[ ] input, String optlist)
ページ
165
例外処理関数
関数プ ロ ト タ イ プ
String get_apiname( )
ページ
167
String get_errmsg( )
167
int get_errnum( )
167
文書関数
関数プ ロ ト タ イ プ
int open_document(String filename, String optlist)
ページ
171
(C) int TET_open_document_callback(TET *tet, void *opaque, size_t filesize, size_t (*readproc)(void
*opaque, void *buffer, size_t size), int (*seekproc)(void *opaque, long offset), const char *optlist)
176
void close_document(int doc)
177
ページ関数
関数プ ロ ト タ イ プ
int open_page(int doc, int pagenumber, String optlist)
void close_page(int page)
ページ
178
186
A TET ラ イ ブ ラ リ ク イ ッ ク リ フ ァ レ ン ス
203
テキス ト ・ メ ト リ ッ ク 抽出関数
関数プ ロ ト タ イ プ
String get_text(int page)
int get_char_info(int page)
ページ
187
188
画像抽出関数
関数プ ロ ト タ イ プ
int get_image_info(int page)
ページ
192
int write_image_file(int doc, int imageid, String optlist)
193
final byte[ ] get_image_data(int doc, int imageid, String optlist)
194
TET マー ク ア ッ プ言語 (TETML) 関数
関数プ ロ ト タ イ プ
int process_page(int doc, int pagenumber, String optlist)
final byte[ ] get_xml_data(int doc, String optlist)
ページ
196
197
オ プ シ ョ ン処理
関数プ ロ ト タ イ プ
void set_option(String optlist)
ページ
158
pCOS 関数
関数プ ロ ト タ イ プ
double pcos_get_number(int doc, String path)
204
ページ
199
String pcos_get_string(int doc, String path)
199
final byte[ ] pcos_get_stream(int doc, String optlist, String path)
200
A 章 : TET ラ イ ブ ラ リ ク イ ッ ク リ フ ァ レ ン ス
B 更新履歴
本マニ ュ アルの更新履歴
日付
変更点
2012 年 4 月 04 日
> TET 4.1p1 に合わせて更新
2012 年 2 月 20 日
> TET 4.1 に合わせて更新
2010 年 9 月 22 日
> TET 4.0p2 に合わせて更新
2010 年 7 月 27 日
> TET 4.0 に合わせて更新
2009 年 2 月 01 日
> TET 3.0 に合わせて更新
2008 年 1 月 16 日
> TET 2.3 に合わせてマニ ュ アル更新
2007 年 1 月 23 日
> TET 2.0 に合わせた小幅追補
2005 年 12 月 14 日
> TET 2.1.0 に合わせて追加 ・ 修正。 PHP ・ RPG 言語バイ ンデ ィ ングに関する記
述を追加
2005 年 6 月 20 日
> TET 2.0.0 に合わせてマニ ュ アルを拡張 ・ 再構成
2003 年 10 月 14 日
> TET 1.1 に合わせてマニ ュ アル更新
2002 年 11 月 23 日
> TET 1.0.2 に合わせて TET_open_doc_callback( ) の説明 と ページサイ ズ決定の
2002 年 4 月 4 日
> TET 1 に合わせて第 1 版
コ ー ド サン プルを追加
B 更新履歴
205
索引
A
L
API リ フ ァ レ ン ス 151
Lucene 検索エ ン ジ ン 53
B
M
BMP 100
BOM (Byte Order Mark) 100
MediaWiki 65
C
C++ と .NET 38
C++ バイ ンデ ィ ング 32
CLI 32
codelist 117
COM バイ ンデ ィ ング 35
CSV 形式 148
C バイ ンデ ィ ング 29
D
Dispose( ) 161
F
float ・ 整数値
オプ シ ョ ン リ ス ト 内の 156
FontReporter Plugin 13, 116
G
glyphlist 119
glyphrule 120
granularity 92
H
HTML コ ンバー タ (XSLT サン プル) 148
I
IFilter
Microsoft 製品用 60
J
J2EE ア プ リ ケーシ ョ ンサーバ 36
Javadoc 37
Java バイ ンデ ィ ン グ 36
N
.NET バイ ンデ ィ ング 38
O
Objective-C バイ ンデ ィ ング 39
Oracle Text 57
P
pCOS
API 関数 199
ク ッ ク ブ ッ ク 17
PDF のバージ ョ ン 13
Perl バイ ンデ ィ ング 41
PHP バイ ンデ ィ ング 42
PUA 100
Python バイ ンデ ィ ング 44
R
REALbasic バイ ンデ ィ ング 45
resourcefile パラ メ タ 72
RPG バイ ンデ ィ ング 48
Ruby バイ ンデ ィ ング 46
S
searchpath 70
Solr 検索サーバ 56
T
tet.upr 72
TET_CATCH( ) 167
TET_close_document( ) 177
TET_close_page( ) 186
TET_convert_to_unicode( ) 165
TET_create_pvf() 162
TET_delete( ) 161
TET_delete_pvf() 163
TET_EXIT_TRY( ) 30, 167
TET_get_apiname() 167
索引
207
TET_get_char_info( ) 188
TET_get_errmsg( ) 167
TET_get_errnum( ) 167
TET_get_image_data( ) 194
TET_get_image_info( ) 192
TET_get_text( ) 187
TET_get_xml_data( ) 197
TET_info_pvf() 163
TET_new( ) 161
TET_open_document( ) 171
TET_open_document_callback( ) 176
TET_open_page( ) 178
TET_pcos_get_number( ) 199
TET_pcos_get_stream( ) 200
TET_pcos_get_string( ) 199
TET_RETHROW( ) 167
TET_set_option( ) 158
TET_TRY( ) 167
TET_write_image_file( ) 193
TETML 131
スキーマ 139
TETRESOURCEFILE 環境変数 71
TET コ ネ ク タ
Lucene 用 53
MediaWiki 用 65
Microsoft 製品用 60
Oracle 用 57
Solr 用 56
TIKA 用 63
TET コ マ ン ド ラ イ ン ツール 19
TET の機能 13
TET ク ッ ク ブ ッ ク 17
TET プ ラ グ イ ン
Adobe Acrobat 用 51
TeX 文書 76
TIKA ツールキ ッ ト 63
ToUnicode CMap 118
U
Unichar 値
オプ シ ョ ン リ ス ト 内の 154
Unicode
BOM 100
後処理 105
オプ シ ョ ン リ ス ト 内の 154
概念 99
正規化 112
符号化形式 100
符号化スキーム 100
分解 108
前処理 102
前処理 ・ 後処理 102
Unicode 字形統合 105
UPR フ ァ イル形式 69
UTF-32 114
208
索引
UTF 形式 100
X
XMP メ タ デー タ 78
XSLT サン プル 148
画像の 122
XSD スキーマ
TETML の 139
XSLT 143
サン プル 146, 16
x ハイ ト 85
あ
ア セ ン ダ 85
後処理 102
ア ラ ビ ア文字 90
暗号化文書 67
入れ子のオプ シ ョ ン リ ス ト 152
イ ン ス ト ール
TET の 7
イ ン チ 81
オプ シ ョ ン リ ス ト 151
オプ シ ョ ン リ ス ト 文法 151
か
回転済みグ リ フ 88
影付き除去 94
画像
XMP メ タ デー タ 122
色再現性 129
解像度 127
視覚情報 127
小画像除去 124
抽出 121
デ ィ ス ク または メ モ リ へ抽出 121
配置画像 125
非対応の種別 129
文書内の画像数 124
ページベースの抽出ループ 126
リ ソ ース 125
リ ソ ースベースの抽出ループ 126
連結 123
キーワー ド
オプ シ ョ ン リ ス ト 内の 155
基本多言語面 100
キ ャ ッ プハイ ト 85
キ ャ ラ ク タ と グ リ フ 99
キ ャ ラ ク タ 列 101
擬似太字除去 94
矩形
オプ シ ョ ン リ ス ト 内の 157
組文字 101
グ リ フ 99
グ リ フ規則 120
グ リ フ メ ト リ ッ ク 82
グ リ フ リ ス ト 119
権限パスワー ド 67
コ マ ン ド ラ イ ン ツール 19
コ ン コ ーダ ン ス (XSLT サン プル) 146
合字 101
互換分解 109
さ
サーブ レ ッ ト 36
最適化
速度の 73
索引 (XSLT サン プル) 148
作成例
XSLT 146
サロゲー ト 100
座標系 81
シーケ ン ス 101
し お り 79
視覚情報
画像の 127
終了点
グ リ フ と 単語の 85
シ ュ ラ ッ グ機能 67
小画像除去 124
所有者パスワー ド 67
私用領域 100
字形統合 105
数値
オプ シ ョ ン リ ス ト 内の 155
スキーマ 139
正規化 112
正準分解 108
双方向テキス ト 90
速度を最適化 73
た
縦書き 87
単位 81
単語境界検出 93
単語検出機能 93
注釈 79
テキス ト 抽出ス テー タ ス 67
テキス ト フ ィ ル タ リ ン グ 102
添付パスワー ド 67
デ ィ セ ン ダ 85
な
内容分析 92
生テキス ト 抽出 (XSLT サン プル) 149
日中韓 (日本語 ・ 中国語 ・ 韓国語) 14, 87
互換形 88
設定 7
単語境界 87
は
配置画像 125
ハイ フ ン除去 94
ハイ ラ イ ト 85
パスワー ド 67
パ ッ ケージ 80
表意文字テキス ト
単語境界 87
評価版 8
表組検出 98
表組抽出 (XSLT サン プル) 148
フ ァ イル検索 70
フ ァ イル添付 80
フ ォ ーム フ ィ ール ド 79
フ ォ ン ト 統計 (XSLT サン プル) 147
フ ォ ン ト の使用箇所を検索 (XSLT サン プル)
147
フ ォ ン ト フ ィ ル タ リ ン グ (XSLT サン プル) 146
分解 108
文書情報項目 77
文書ス タ イル 96
文書領域 77
文法
オプ シ ョ ン リ ス ト の 151
ヘブ ラ イ文字 90
ページベースの画像抽出ループ 126
ポ イ ン ト 81
ポー ト フ ォ リ オ 80
ま
前処理 102
マス タ パスワー ド 67
マ ッ プ不能グ リ フ 115
ミ ニサン プル 16
ミ リ メ ー ト ル 81
文字列
オプ シ ョ ン リ ス ト 内の 154
や
ユーザパスワー ド 67
ら
ラ イ セ ン スキー 9
リ ガチ ャ 101
リスト値
オプ シ ョ ン リ ス ト 内の 152
索引
209
リ ソ ース カ テ ゴ リ 69
リ ソ ースの コ ン フ ィ ギ ュ レーシ ョ ン 69
リ ソ ースベースの画像抽出ループ 126
粒度 92
領域
テキス ト 抽出の 81
例
テキス ト 抽出ス テー タ ス 67
例外処理 27
C の場合 29
レ スポン ス フ ァ イル 22
ログ記録 169
論理値
オプ シ ョ ン リ ス ト 内の 155
210
索引
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
疑問がおあ り の際は、 PDF メ ー リ ング リ ス ト と 、
tech.groups.yahoo.com/group/pdflib のアー カ イ ブ を チ ェ ッ ク し て く だ さ い
ラ イ セ ン スに関するお問い合わせ
[email protected]
サポー ト
[email protected] (お使いのラ イ セ ン ス番号をお書き く だ さ い)