...

A TET - TechStyle

by user

on
Category: Documents
48

views

Report

Comments

Transcript

A TET - TechStyle
ABC
Text Extraction Toolkit (TET)
Version 4.0
PDF 文書か ら テ キ ス ト ・ 画像 ・ メ タ デー タ
を抽出す る ための ツールキ ッ ト
Copyright © 1997-2010 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
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++ バイ ンデ ィ ング 31
3.4 COM バイ ンデ ィ ン グ 33
3.5 Java バイ ンデ ィ ング 34
3.6 .NET バイ ンデ ィ ン グ 36
3.7 Perl バイ ンデ ィ ング 37
3.8 PHP バイ ンデ ィ ング 38
3.9 Python バイ ンデ ィ ング 40
3.10 REALbasic バイ ンデ ィ ング 41
3.11 RPG バイ ンデ ィ ン グ 42
目次
3
4 TET コ ネ ク タ
45
Adobe Acrobat 用無償 TET Plugin 45
4.1
4.2 Lucene 検索エ ン ジ ン用 TET コ ネ ク タ 47
4.3 Solr 検索サーバ用 TET コ ネ ク タ 50
4.4 Oracle 用 TET コ ネ ク タ 51
4.5 Microsoft 製品用 TET PDF IFilter 54
4.6 MediaWiki 用 TET コ ネ ク タ 57
5 設定
59
5.1 暗号化 PDF か ら内容を抽出 59
5.2 リ ソ ース設定 と フ ァ イル検索 61
5.3 代表的シナ リ オのための推奨方策 65
6 テキス ト 抽出
69
PDF の さ ま ざ ま な文書領域 69
6.1
6.2 ページ と テキス ト の視覚情報 73
6.3 日本語 ・ 中国語 ・ 韓国語テキス ト 79
6.3.1 日中韓エン コ ーデ ィ ン グ ・ CMap 79
6.3.2 縦書 き 79
6.3.3 日中韓分解 : narrow ・ wide ・ vertical 等 80
6.4 双方向ア ラ ビ ア文字 ・ ヘブ ラ イ文字テキス ト 81
6.4.1 双方向の一般的性質 81
6.4.2 ア ラ ビ ア文字テ キ ス ト を後処理 81
6.5 内容分析 83
6.6 レ イ アウ ト 分析 87
7 高度な Unicode 処理
91
7.1 Unicode の さ ま ざ ま な重要概念 91
7.2 Unicode 前処理 ( フ ィ ル タ リ ング) 94
7.2.1 すべての粒度のための フ ィ ル タ 94
7.2.2 粒度 word ない し それ以上のための フ ィ ル タ 94
7.3 Unicode 後処理 96
7.3.1 Unicode 字形統合 96
7.3.2 Unicode 分解 99
7.3.3 Unicode 正規化 103
7.4 追加キ ャ ラ ク タ と サロゲー ト 105
4
目次
7.5 グ リ フ に対する Unicode マ ッ ピ ング 106
8 画像抽出
113
8.1 画像抽出の基本 113
8.2 画像の連結 と フ ィ ル タ リ ング 115
8.3 配置画像 と 画像 リ ソ ース 117
8.4 ページベース と リ ソ ースベースの画像ループ 118
8.5 配置画像の視覚情報 119
8.6 制約 と 注意 121
9 TET マー ク ア ッ プ言語 (TETML)
123
9.1 TETML を生成 123
9.2 TETML の詳細を制御 127
9.3 TETML の さ ま ざ ま な要素 と TETML スキーマ 131
9.4 TETML を XSLT で変換 134
9.5 さ ま ざ ま な XSLT サン プル 137
10 pCOS イ ン タ フ ェ ース
141
11 TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
11.1
143
オプ シ ョ ン リ ス ト 143
11.2 オプ シ ョ ン リ ス ト 文法 143
11.3 基本型 146
11.4 図形型 149
11.5 一般関数 150
11.5.1 オプシ ョ ン処理 150
11.5.2 セ ッ ト ア ッ プ 152
11.5.3 PDFlib 仮想フ ァ イ ルシ ス テ ム (PVF) 152
11.5.4 Unicode 変換関数 154
11.5.5 例外処理 157
11.5.6 ロ グ記録 158
11.6 文書関数 160
11.7 ページ関数 167
11.8 テキス ト ・ メ ト リ ク ス抽出関数 175
11.9 画像抽出関数 179
目次
5
11.10 TET マー ク ア ッ プ言語 (TETML) 関数 183
11.11 pCOS 関数 186
A TET ラ イ ブ ラ リ ク イ ッ ク リ フ ァ レ ン ス
B 更新履歴
索引
6
目次
193
191
189
0 TET の第一歩
0.1 ソ フ ト ウ ェ ア を イ ン ス ト ール
TET は、 Windows シ ス テ ム群に対 し ては MSI イ ン ス ト ー ラ の形で頒布 さ れ、 それ以外のす
べての対応オペレーテ ィ ン グ シ ス テ ムに対 し ては圧縮アーカ イ ブの形で頒布 さ れます。す
べての TET パ ッ ケージの中には TET コ マ ン ド ラ イ ン ツール と TET ラ イ ブ ラ リ / コ ン ポー
ネ ン ト 、 お よ びサポー ト フ ァ イ ル群 ・ 説明書 ・ 使用例群が含まれます。 TET を イ ン ス ト ー
ルま たは解凍 し た後は、 以下の手順を推奨 し ます。
> TET コ マ ン ド ラ イ ン ツールのユーザーはその実行形式を ただちに利用可能です。 指定
可能なオプシ ョ ンは 19 ページの 2.1 「 コ マ ン ド ラ イ ン オプシ ョ ン」 で解説 し ますが、
TET コ マ ン ド ラ イ ン ツールを オプシ ョ ン な し で実行 し た と き に も 表示 さ れます。
> TET ラ イ ブ ラ リ / コ ン ポーネ ン ト のユーザーは27ページの3章「TET ラ イ ブ ラ リ の言語バ
イ ンデ ィ ン グ」 の中の、 使いたい開発環境に対応す る 節を読み、 イ ン ス ト ール さ れた
使用例を眺め る と よ いで し ょ う 。 Windows の場合、 TET プ ロ グ ラ ミ ン グ例は ス タ ー ト
メ ニ ュ ーか ら 開 く こ と がで き ます。
商用 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 eServer i5/iSeries 上 で は、 デ ィ レ ク ト リ
resource/glyphlst 内のグ リ フ リ ス ト が TET か ら 利用可能であ る 必要があ り ます。 こ れ ら の
テーブルは、TET が標準デ ィ レ ク ト リ 内に イ ン ス ト ール さ れた場合は自動的に利用可能に
設定 さ れます。
評価版の制約事項 TET の コ マ ン ド ラ イ ン ツール と ラ イ ブ ラ リ は商用 ラ イ セ ン ス がな く
て も 完全機能の評価版 と し て使 う こ と がで き ます。非 ラ イ セ ン ス版はいずれ も すべての機
能に対応 し てい ますが、 最大 10 ページ ・ 1 MB 容量ま での PDF 文書だけ を処理で き る よ
0.1 ソ フ ト ウ ェ ア を イ ン ス ト ール
7
う にな っ てい ます。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.0 ...あなたのライセンスキー ...
ラ イ セ ン ス フ ァ イ ルは、 複数の PDFlib GmbH 製品に対す る ラ イ セ ン ス キーを、 別々の行
に内容 と し て持つ こ と が可能です。 ま た、 複数のプ ラ ッ ト フ ォ ーム に対す る ラ イ セ ン ス
キーを内容 と し て持つ こ と も で き ますので、一つの ラ イ セ ン ス キーを複数プ ラ ッ ト フ ォー
ムで共用す る こ と が可能です。 ラ イ セ ン ス フ ァ イ ルは以下の方法で設定で き ます :
> licensekeys.txt と い う フ ァ イ ルが、 すべてのデフ ォ ル ト デ ィ レ ク ト リ 内で検索 さ れます
(10 ページの 「Unix シ ス テ ム上の ラ イ セ ン ス ・ リ ソ ース フ ァ イ ルのデフ ォ ル ト デ ィ レ
ク ト リ 」 参照)。
> set_option( )API 関数で licensefile オプシ ョ ン を指定する こ と も で き ます :
tet.set_option("licensefile", "/path/to/licensekeys.txt");
> 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"
IBM eServer iSeries では、 ラ イ セ ン ス フ ァ イ ルは下記の よ う に指定で き ます ( こ の コ マ
ン ド は、ス タ ー ト ア ッ ププ ロ グ ラ ム QSTRUP 内で指定する こ と がで き 、すべての PDFlib
GmbH 製品に対 し て効力を持ち ます) :
ADDENVVAR ENVVAR(PDFLIBLICENSEFILE) VALUE(<... パス ...>) LEVEL(*SYS)
0.2 TET ラ イ セ ン スキーを適用
9
レ ジ ス ト リ 内に ラ イ セ ン スキー Windows では、 ラ イ セ ン ス フ ァ イ ルの名前を下記の レ
ジ ス ト リ キーに記入す る こ と も で き ます :
HKLM\SOFTWARE\PDFlib\PDFLIBLICENSEFILE
あ る いは、 ラ イ セ ン ス キーを直接下記の レ ジ ス ト リ キーに記入する こ と も で き ます :
HKLM\SOFTWARE\PDFlib\TET4\license
HKLM\SOFTWARE\PDFlib\TET4\4.0\license
MSI イ ン ス ト ー ラ は、 イ ン ス ト ール時に与え ら れた ラ イ セ ン ス キーを、 こ れ ら の項目の末
尾に書 き 込みます。
注記 64 ビ ッ ト Windows シ ス テム上で手作業で レ ジ ス ト リ を操作する際には注意が必要です。通
常、64 ビ ッ ト PDFlib バイ ナ リ は Windows レ ジ ス ト リ の 64 ビ ッ ト ビ ュ ー と と も に動作する
のに対 し て、64 ビ ッ ト シ ス テム上で走る 32 ビ ッ ト PDFlib バイ ナ リ はレ ジス ト リ の 32 ビ ッ
ト ビ ュ ー と と も に動作 し ます。 32 ビ ッ ト 製品に対する レ ジ ス ト リ キーを手作業で追加す
る必要がある場合には、必ず、regedit ツールの 32 ビ ッ ト バージ ョ ン を使用 し て く だ さ い。
これは 「ス タ ー ト 」 → 「 フ ァ イル名を指定 し て実行 ...」 ダ イ ア ログから下記のよ う に呼び
出す こ と がで き ます :
%systemroot%\syswow64\regedit
Unix シ ス テム上の ラ イ セ ン ス ・ リ ソ ース フ ァ イルのデ フ ォ ル ト デ ィ レ ク ト リ U n i x ・
Linux・ Mac OS X シ ス テ ム上では、パ スやデ ィ レ ク ト リ 名を一切指定 し ていない場合で も 、
デフ ォ ル ト で ラ イ セ ン ス ・ リ ソ ース フ ァ イ ルがい く つかのデ ィ レ ク ト リ で検索 さ れ ます。
UPR フ ァ イ ルを検索 し て読み取 る 前に、 下記のデ ィ レ ク ト リ が検索 さ れ ます ( こ の順序
で) :
<rootpath>/PDFlib/TET/4.0
<rootpath>/PDFlib/TET
<rootpath>/PDFlib
こ こ で <rootpath> は、 まず /usr/local で置 き 換え ら れ、 ついで HOME デ ィ レ ク ト リ で置
き 換え ら れます。 こ の機能を利用す る と 、 環境変数や ラ ン タ イ ムオプシ ョ ン を一切指定 し
な く て も ラ イ セ ン ス フ ァ イ ルを扱 う こ と がで き ます。
TET コ マ ン ド ラ イ ン ツ ールに対す る オ プ シ ョ ン内で ラ イ セ ン スキー を設定 TET コ マ ン
ド ラ イ ン ツールを使用す る 場合には、 ラ イ セ ン ス フ ァ イ ルま たは ラ イ セ ン ス キー自体の名
前を内容 と し て持つオプシ ョ ン を与え る こ と も で き ます :
tet --tetopt "license ...あなたのライセンスキー ..." ...さらなるオプション群...
TET API 呼び出 し で ラ イ セ ン スキー を設定 TET API を使用す る 場合は、 ス ク リ プ ト や
プ ロ グ ラ ムに以下の よ う な API 呼び出 し を加え て、実行時に ラ イ セ ン ス キーを設定 さ せ る
こ と も で き ます :
> COM/VBScript の場合 :
oTET.set_option "license=... あなたのライセンスキー ..."
> C の場合 :
TET_set_option(tet, "license=... あなたのライセンスキー ...");
10
0 章 : TET の第一歩
> C++ ・ .NET/C# ・ Java の場合 :
tet.set_option("license=... あなたのライセンスキー ...");
> Perl ・ PHP 5 の場合 :
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 オブジ ェ
ク ト を生成 さ せた直後 (C++ ・ COM ・ .NET ・ Java ・ PHP の場合) と い う こ と にな り ます。
i5/iSeries ・ zSeries 上での複数シ ス テム ラ イ セ ン ス フ ァ イル i5/iSeries ・ zSeries に対す
る ラ イ セ ン ス キーはシ ス テ ム固有ですので、 複数のシ ス テ ム で共用す る こ と はで き ま せ
ん。 リ ソ ース共有を実現 し て、 複数のシ ス テ ム で共用で き る 一つの ラ イ セ ン ス フ ァ イ ルを
扱 う ためには、 下記の ラ イ セ ン ス キー書式を用いて、 複数のシ ス テ ム固有キーを一つの
フ ァ イ ル内に保持す る こ と がで き ます :
PDFlib license file 2.0
# Licensing information for PDFlib GmbH products
TET
4.0
...あなたのライセンスキー ...
TET
4.0
...あなたのライセンスキー ...
...マシン1に対するシリアル番号...
...マシン2に対するシリアル番号...
1 行目のバージ ョ ン番号が変わ っ てい る こ と と 、 複数の ラ イ セ ン ス キーが存在 し てい る こ
と に留意 し て く だ さ い。 ラ イ セ ン ス キーの後にはそれぞれ、16 進 8 桁のシ リ アル番号 (i5/
iSeries の場合) か、 16 進 4 桁の CPU ID (zSeries の場合) が続 き ます。
さ ま ざ ま な ラ イ セ ン シ ン グオ プ シ ョ ン 一つない し 複数のサーバ上で PDFlib を使用 し た
り 、 TET を あ なた自身の製品 と と も に再頒布 し た り す る ための、 さ ま ざ ま な ラ イ セ ン シ ン
グオプシ ョ ンが利用可能です。 ま た当社では、 サポー ト 契約や ソ ース コ ー ド 契約 も 提供 し
てい ます。 ラ イ セ ン シ ン グの詳細や購入注文フ ォームは、 TET デ ィ ス ト リ ビ ュ ーシ ョ ン内
にあ り ます。 商用 PDFlib ラ イ セ ン ス の取得にご興味があ る 場合、 ま たはご質問があ る 場
合は、 ご連絡 く だ さ い :
PDFlib GmbH, Licensing Department
Franziska-Bilek-Weg 9, 80339 München, Germany
www.pdflib.com
電話 +49 • 89 • 452 33 84-0
FAX +49 • 89 • 452 33 84-99
ラ イ セ ン ス に関す る お問い合わせ : [email protected]
PDFlib ラ イ セ ン ス保持者向けサポー ト : [email protected]
0.2 TET ラ イ セ ン スキーを適用
11
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 拡張レベル 3 (ISO 32000 を含む) を受け入
れ可能です。 こ れは Acrobat 1 ∼ 9 に対応 し ます。 ま た、 暗号化 さ れた文書 も 受け入れ可
能です。
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 メ タ デー タ や イ ン タ ラ ク テ ィ ブ
要素 ( し お り テ キ ス ト やフ ォーム フ ィ ール ド の内容な ど) 、 その他あ ら ゆ る 情報を、 簡単
な取得 イ ン タ フ ェース で取得す る こ と がで き ます。
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 用の無償拡張です
(詳 し く は 45 ページの 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 では、 ミ ニサン プルはデ フ ォル ト で 「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 の新機能 と 大幅改善機能を以下に示 し ます :
> パフ ォーマ ン ス向上 : さ ま ざ ま な種別の文書で よ り 速 く な り ま し た。
> 数十万ページの超大文書で も よ り 速 く 、 よ り メ モ リ 消費が少な く な り ま し た。
> ア ラ ビ ア文字 ・ ヘブ ラ イ 文字等の右書 き ・ 双方向テ キ ス ト を抽出 (81 ページの 6.4 「双
方向ア ラ ビ ア文字 ・ ヘブ ラ イ 文字テ キ ス ト 」 を参照)。
> 正規化・字形統合・分解に よ る Unicode 後処理(96 ページの 7.3「Unicode 後処理」を参照)。
> 影付 き 除去 ・ 単語境界検出 ・ ハ イ フ ン除去の改善。
> 上付 き ・ 下付 き 検出の改善。
> 非準拠 PDF 文書に対す る 回避策の導入に よ る 堅牢性の向上。
> 破損 PDF か ら う ま く テ キ ス ト を抽出す る ための修復モー ド の改善。
1.4 TET 4.0 の新 し い点
17
> XML 出力 (TETML) 内の情報の増加。 131 ページの 9.3 「TETML の さ ま ざ ま な要素 と
TETML ス キーマ」 を参照。 ハ イ フ ン除去 ・ ド ロ ッ プキ ャ ッ プ ・ 影付き ・ 上付 き / 下付
き 。 下向 き 座標系 ・ PDF/A-2 ・ PDF/E ・ フ ォ ン ト サブセ ッ ト 。
> C++ ・ Perl 言語バ イ ンデ ィ ン グの改善。
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 オプ シ ョ ン を用いれば、 143 ページの 11 章
「TET ラ イ ブ ラ リ API リ フ ァ レ ン ス」 のオプシ ョ ン一覧表に従っ た さ ま ざ ま なオプシ ョ ン
を ラ イ ブ ラ リ に与え る こ と が可能です。表 2.1 にすべての TET コ マ ン ド ラ イ ン オプシ ョ ン
を挙げます ( こ の一覧は、 こ の TET プ ロ グ ラ ム を オプシ ョ ン な し で走 ら せた と き に も 表
示 さ れます)。
注記 日中韓テキス ト を抽出するには、 7 ページの 0.1 「ソ フ ト ウ ェ ア を イ ン ス ト ール」 に従っ
て TET 同梱の CMap フ ァ イル群の置き場所を設定する必要があ り ます。
表 2.1 TET コ マ ン ド ラ イ ンオプ シ ョ ン一覧
オプ シ ョ ン
引数
機能
--
オプ シ ョ ンの リ ス ト を終了 さ せます。 こ れは、 フ ァ イル名が - キ ャ ラ ク タ で
始ま っ ている と き に有用です。
@filename1
オプ シ ョ ン群を持つレ スポン ス フ ァ イルを指定 し ます。 文法の説明は 22
ページの 「レ スポン ス フ ァ イル」 を参照 し て く だ さ い。 レ スポン ス フ ァ イル
は、 -- オプ シ ョ ンの前、 かつ最初の フ ァ イル名の前でのみ認識 さ れます。 レ
スポン ス フ ァ イルを用いて他のオプ シ ョ ンの引数を置き換え る こ と はで き
ず、 オプ シ ョ ンに引数を補完する ためにのみ用いる こ と がで き ます。
--docopt
< オプ シ ョ ン リ
スト >
open_document( ) に対する追加のオプ シ ョ ン リ ス ト (161 ページの表 11.6 参
照)。 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( ) に対する追加のオプ シ ョ ン リ ス ト (181 ページの表 11.15
を参照)
--lastpage
-l
<integer> ¦ last
テキス ト 抽出を終了するページの番号。 キーワー ド last で末尾ページ を指
定、 last-1 で末尾ページの前のページ、 等々。 デ フ ォ ル ト : last
--outfile
-o
< フ ァ イル名 >
(複数の入力 フ ァ イル名を与えている と きは不可) テキス ト 出力または TETML 出力のフ ァ イル名。 入力フ ァ イルを一個だけ与えている と きのみ、 フ ァ
イル名 「-」 を用いて標準出力を指定可能。 デ フ ォル ト : 入力フ ァ イル名の
.pdf ・ .PDF を .txt (テキス ト 出力時) か .tetml (TETML 出力時) に置き換え
た名前。
--pageopt
< オプ シ ョ ン リ
スト >
テキス ト 出力生成な ら open_page( ) に、 TETML 出力生成な ら process_page( )
に与え ら れる追加のオプ シ ョ ン リ ス ト 。 使え る オプ シ ョ ンについては 168
ページの表 11.8 と 183 ページの表 11.16 を参照。 テキス ト 出力の場合、 オプ
シ ョ ン granularity はつねに page に設定 さ れます。
--password,
-p
< パスワー ド >
暗号化文書に対するユーザパスワー ド かマス タ ーパスワー ド 。 場合に よ っ て
は、 シ ュ ラ ッ グ機能を利用する と 、 パス を与えずに暗号化文書を イ ンデ ッ ク
スする こ と がで き ます (59 ページの 5.1 「暗号化 PDF から内容を抽出」 を参
照)。
--searchpath1 < パス >...
-s
フ ァ イル (CMap 等) を検索する 1 つない し 複数のデ ィ レ ク ト リ の名前。 デ
フ ォ ル ト : イ ン ス ト ール環境に依存
--targetdir
-t
< ディ レク ト リ
名>
生成 さ れる テキス ト ・ TETML ・ 画像フ ァ イルの出力デ ィ レ ク ト リ 。 存在 し て
いるデ ィ レ ク ト リ であ る必要があ り ます。 デ フ ォ ル ト : . (すなわち カ レ ン ト
作業デ ィ レ ク ト リ )
--tetml
-m
glyph ¦ word ¦
wordplus ¦ line ¦
page
(--text と の組み合わせ不可) テキス ト ・ 画像情報を含む TET 3 スキーマに
従 っ た TETML 出力を生成 し ます。 TETML はつねに UTF-8 で生成 さ れます。
与え る引数で、 い く つかの種類の一つを選びます (127 ページの 9.2 「TETML
の詳細を制御」 を参照) :
glyph
グ リ フ位置情報 と フ ォ ン ト 情報を持 っ たグ リ フ ベースの TETML
word
単語枠を持 っ た単語ベースの TETML
wordplus 単語枠 と すべてのグ リ フ 情報を持っ た単語ベースの TETML
ine
行ベースの TETML (テキス ト のみ)
page
ページベースの TETML (テキス ト のみ)
20
2 章 : TET コ マ ン ド ラ イ ン ツール
表 2.1 TET コ マ ン ド ラ イ ンオプ シ ョ ン一覧
オプ シ ョ ン
引数
機能
--tetopt
< オプ シ ョ ン リ
スト >
set_option( ) に対する追加のオプ シ ョ ン リ ス ト (150 ページの表 11.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 のいずれかの形式で符号
化す る こ と がで き 、 対応す る BOM で始ま る 必要があ り ます。 BOM が見つか ら ない と き
22
2 章 : TET コ マ ン ド ラ イ ン ツール
は、 レ ス ポ ン ス フ ァ イ ルの内容は、 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 文書を開 こ う と し た (ただ し 、59 ページの 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 の 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 ブ ロ ッ ク の両方の中で用い ら れてい る 変数については特別な注意
を払 う 必要があ り ます。 コ ンパ イ ラ は、 制御がブ ロ ッ ク か ら ブ ロ ッ ク へ移 る こ と は知
ら ないので、 その よ う な場合、 不適切な コ ー ド を生成す る 可能性があ り ます (レ ジ ス
タ 変数最適化等)。
幸い、 こ の種の問題を避け る 簡単な規則があ り ます。 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);
3.2 C バイ ンデ ィ ング
29
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) と 解釈 さ れます。
オ プ シ ョ ン リ ス ト に対す る 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_utf16_to_utf8( ) ユーテ ィ リ テ ィ 関数を用い る と 、 UTF-16 文字列を UTF-8 文字列に変
換する こ と がで き ます。 Unicode 値を持つオプ シ ョ ン リ ス ト を作 り たい と き に便利です。
30
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
3.3 C++ バ イ ン デ ィ ン グ
tetlib.h C ヘ ッ ダ フ ァ イ ルに加え て、 C++ 用のオブジ ェ ク ト 指向 ラ ッ パ も 提供 さ れてお り 、
TET の ク ラ イ ア ン ト か ら 利用す る こ と がで き ます。 こ の ラ ッ パはヘ ッ ダ フ ァ イ ル tetlib.h
を必要 と し ます。 こ のヘ ッ ダ フ ァ イ ルは tetlib.h を イ ン ク ルー ド し ます。 tet.hpp はテ ンプ
レー ト ベース の実装を内容 と し て持ち ますので、 対応す る tet.cpp モジ ュ ールは必要あ り
ません。 C++ オブジ ェ ク ト ラ ッ パを使 う こ と は、 API 関数 と 、 すべての TET 関数名の TET_
接頭辞 と に よ る 関数的ア プ ロ ーチ を、 よ り オブジ ェ ク ト 志向な ア プ ロ ーチへ置 き 換え ま
す。
C++ の文字列処理 TET 4.0 は、 新 し い Unicode 対応の C++ バ イ ンデ ィ ン グ を導入 し ま し
た。 新 し いテ ンプ レー ト ベース のアプ ロ ーチで、 文字列処理に関 し て以下の使用パ タ ーン
が使え ます :
> 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
文字列を内容 と し て持つ と 見な さ れます。 ソ ース コ ー ド 内の リ テ ラ ル文字列は、 ワ イ ド 文
字であ る こ と を示すために先頭に L をつけ る 必要があ り ます。 リ テ ラ ル内で Unicode キ ャ
ラ ク タ は \u ・ \U 文法で作成で き ます。 こ の文法は標準 ISO C++ に含まれてい る のですが、
コ ン パ イ ラ に よ っ て は こ れに対応 し て い な い も のが あ り ま す。 そ の場合には リ テ ラ ル
Unicode キ ャ ラ ク タ は 16 進キ ャ ラ ク タ で作成す る 必要があ り ます。
ア プ リ ケーシ ョ ン を新 し い C++ バ イ ン デ ィ ン グに合わせて変更 TET 3.0 ま で の バ ー
ジ ョ ンに対 し て開発 さ れた既存の C++ アプ リ ケーシ ョ ンは、以下の よ う に し て TET 4.0 に
合わせて変更す る こ と がで き ます :
> TET C++ ク ラ スは pdflib 名前空間内に入 り ま し たので、ク ラ ス名を修飾す る 必要があ り
ます。 いちいち pdflib::TET を書 く こ と を避け る ため、 ク ラ イ ア ン ト アプ リ ケーシ ョ ン
は TET メ ソ ッ ド を使 う 前に下記を追加す る べ き です :
using namespace pdflib;
> アプ リ ケーシ ョ ンの文字列処理を wstring へ切 り 替え ます。 こ れは外部情報源か ら の
デー タ について も 当ては ま り ます。 し か し 、 ソ ー ス コ ー ド 内の文字列 リ テ ラ ル (オプ
シ ョ ン リ ス ト も ) は、 L 接頭辞を頭につけ る 必要があ り ます。 た と えば
const wstring pageoptlist = L"granularity=page";
3.3 C++ バイ ンデ ィ ング
31
> 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 関数の名前を取得す る ための メ ソ ッ ド を公開 し てい ます。
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;
}
32
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
3.4 COM バ イ ン デ ィ ン グ
TET の COM エデ ィ シ ョ ン を イ ン ス ト ール TET は COM コ ン ポーネ ン ト に対応 し たすべ
ての環境で利用す る こ と がで き ます。 TET の イ ン ス ト ール方法は簡単で単純です。 以下の
点に留意 し て下 さ い :
> NTFS パーテ ィ シ ョ ンに イ ン ス ト ールする 場合は、すべての TET ユーザーに、その イ ン
ス ト ールデ ィ レ ク ト リ の読み取 り 権限 と 、...\TET 4.0 32-bit\bind\COM\bin\tet_com.dll の
実行権限を持たせ る 必要があ り ます。
> イ ン ス ト ー ラ はシ ス テ ム レ ジ ス ト リ に対 し て書 き 込み権限 を 持た な ければな り ま せ
ん。 Administrators グループか Power Users グループの権限であれば通常充分で し ょ う 。
例外処理 TET の COM コ ン ポーネ ン ト に対す る 例外処理は COM の規則に従っ て行われ
ます。 すなわち、 TET の例外が起 き る と 、 COM の例外が発生 し 、 そのエ ラ ーの説明テ キ
ス ト と と も に伝達 さ れます。 こ の COM の例外は、 その ク ラ イ ア ン ト 環境が対応 し てい る
任意の COM のエ ラ ー処理方式で捕捉 ・ 処理す る こ と がで き ます。
TET の COM エデ ィ シ ョ ン を .NET で使 う TET の .NET エデ ィ シ ョ ン (36 ページの 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 バイ ンデ ィ ング
33
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)
34
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 メ ソ ッ ド の短縮 さ れた説明のみを含んでい ま す。 詳 し く は、 143
ページの 11 章 「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 バイ ンデ ィ ング
35
3.6 .NET バ イ ン デ ィ ン グ
TET の .NET エデ ィ シ ョ ンはそれ ら すべての .NET 概念に対応 し てい ます。 専門用語でい
えば、 TET.NET エデ ィ シ ョ ンは .NET Framework の制御下で走 る C++ ク ラ ス (非マネージ
TET コ ア ラ イ ブ ラ リ のためのマネージ ラ ッ パを備えた) です。 それは ス ト ロ ン グ名を持つ
静的アセ ン ブ リ と し てパ ッ ケージ さ れてい ます。 こ の TET アセ ン ブ リ (TET_dotnet.dll)
は、 ラ イ ブ ラ リ 本体 と メ タ 情報を持ち ます。
注記 TET.NET は、 .NET Framework 2.0 以上を必要 と し ます。
TET の .NET エデ ィ シ ョ ン を イ ン ス ト ール TET を、提供 さ れてい る Windows MSI イ ン ス
ト ー ラ で イ ン ス ト ール し ます。TET.NET MSI イ ン ス ト ー ラ は、TET アセ ンブ リ と 補足デー
タ フ ァ イ ル ・ サ ン プル を対話的にマ シ ン に イ ン ス ト ール し ま す。 こ の イ ン ス ト ー ラ は ま
た、 Visual Studio .NET の 「参照の追加」 ダ イ ア ロ グボ ッ ク ス の .NET タ ブで TET を簡単
に参照で き る よ う 登録 も 行い ます。
TET.NET を ASP.NET 用に イ ン ス ト ール TET.NET を自分の ASP.NET ス ク リ プ ト 内で使
う ためには、 TET.NET アセ ンブ リ を ASP で利用可能にす る 必要があ り ます。 こ れは、 自
分の IIS イ ン ス ト レーシ ョ ンの bin サブデ ィ レ ク ト リ (ない と き は自分で手作業で作成す
る 必要があ り ます) に、ま たは自分の Web アプ リ ケーシ ョ ンの bin デ ィ レ ク ト リ に TETlib_
dotnet.dll を置 く こ と に よ っ て実現で き ます。 た と えば
C:\Inetpub\wwwroot\bin\TET_dotnet.dll
C:\Inetpub\wwwroot\WebApplicationX\bin\TET_dotnet.dll
または
ASP.NET 特有の留意点 外部フ ァ イ ルを使 う 際には、ASP の MapPath 機能を用いて、ロ ー
カルデ ィ ス ク 上のパ ス名を、ASP.NET ス ク リ プ ト 内で使え る パ ス名へマ ッ プす る 必要があ
り ます。 TET と と も に提供 さ れてい る ASP.NET の作成例群を参照 し て く だ さ い。 MapPath
に詳 し く ない場合は ASP.NET の文書 も 参照 し て く だ さ い。 ASP.NET ス ク リ プ ト 内で絶対
パ ス名を使わないで下 さ い。 それは MapPath な し には動作 し ません。
自分の ASP.NET ス ク リ プ ト があ る デ ィ レ ク ト リ は、 実行権限を持つ必要があ り ます。
ま た、 PDF 生成に イ ン コ ア方式を用いてい る のでないかぎ り は、 書 き 込み権限 も 必要です
(提供 さ れてい る ASP 作成例群は イ ン コ ア PDF 生成を用いてい ます)。
ASP.NET 2.0 以上の信頼 レ ベル ASP.NET 2.0 は、 Web アプ リ ケーシ ョ ンに対す る さ ま ざ
ま な信頼レベルでの許容操作に関す る い く つかの制限を導入 し ま し た。 TET.NET は非マ
ネージ コ ー ド を含んでい ますので、 Full 信頼レベルを必要 と し ます。 TET.NET アプ リ ケー
シ ョ ンは こ れ以外の High 信頼や Medium 信頼 と いっ た信頼レベルでは ASP.NET 2.0 アプ リ
ケーシ ョ ンで展開で き ません。
エ ラ ー処理 TET.NET は .NET の例外に対応 し てお り 、実行時に問題が起 き る と 例外を発
生 さ せ、 詳細なエ ラ ー メ ッ セージ を伝達 し ます。 こ う し た例外を捕捉 し て適切にそれに対
処す る こ と は ク ラ イ ア ン ト 側の領分です。 それを し ない場合には .NET Framework がその
例外を捕捉 し 、 多 く の場合アプ リ ケーシ ョ ン を中断 さ せます。
例外関連情報の伝達のために TET は独自の例外 ク ラ ス TET_dotnet.TETException を定義
し てい ます。 こ の ク ラ ス は メ ンバ get_errnum ・ get_errmsg ・ get_apiname を持ち ます。
36
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
3.7 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.7 Perl バイ ンデ ィ ング
37
3.8 PHP バ イ ン デ ィ ン グ
TET の PHP エデ ィ シ ョ ン を イ ン ス ト ール TET は、 PHP に動的に結合で き る C ラ イ ブ
ラ リ と し て実装 さ れてい ます。 TET は、 PHP のい く つかのバージ ョ ンに対応 し てい ます。
使っ てい る PHP のバージ ョ ンに応 じ て、 適切な TET ラ イ ブ ラ リ を、 ア ンパ ッ ク し た TET
アーカ イ ブか ら 選ぶ必要があ り ます。
TET を PHP で利用す る 際の さ ま ざ ま な考慮点やオプシ ョ ンについては、 た と えば PHP
用の ロ ーダブル TET モジ ュ ールを用い る べ き か ど う か と いっ た疑問 も 含めて、PDFlib ウ ェ
ブサ イ ト か ら 入手で き る 文書 PDFlib-in-PHP-HowTo を参照 し て く だ さ い。 こ の文書では主
に PDFlib の PHP での利用について論 じ てい ますが、 その内容は、 TET の PHP での利用に
ついて も あ ては ま る も のです。
PHP の設定を行っ て、 外部の TET ラ イ ブ ラ リ について PHP に知 ら せ る 必要があ り ま
す。 次の 2 通 り の方法があ り ます :
> 以下の行の う ちのいずれか を php.ini に追加す る :
extension=libtet_php.dll
; Windows の場合
extension=libtet_php.so
; Unix・Mac OS X の場合
extension=libtet_php.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("libtet_php.dll");
# Windows の場合
dl("libtet_php.so");
# Unix・Mac OS X の場合
dl("libtet_php.sl");
# HP-UX の場合
PHP の フ ァ イル名処理 非限定の フ ァ イ ル名 (パ ス要素のない も の) と 相対フ ァ イ ル名
は、 PHP の Unix バージ ョ ン と Windows バージ ョ ン と で扱いが異な り ます :
> Unix シ ス テ ムの PHP では、パ ス要素のない フ ァ イ ルは、ス ク リ プ ト が読み込まれたデ ィ
レ ク ト リ の中で検索 さ れます。
> Windows の PHP では、パ ス要素のない フ ァ イ ルは、PHP DLL が読み込まれデ ィ レ ク ト リ
の中でのみ検索 さ れます。
例外処理 PHP 5 は構造化 さ れた例外処理に対応 し てい る ので、 TET の例外は PHP の例
外 と し て発生 し ます。 通常の try/catch 技法を用いて、 TET の例外を扱 う こ と がで き ます :
try {
38
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.8 PHP バイ ンデ ィ ング
39
3.9 Python バ イ ン デ ィ ン グ
TET の Python エデ ィ シ ョ ン を イ ン ス ト ール 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例外をキャッチしました!'
40
3 章 : TET ラ イ ブ ラ リ の言語バイ ンデ ィ ング
3.10 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.10 REALbasic バイ ンデ ィ ング
41
3.11 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)
42
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.11 RPG バイ ンデ ィ ング
43
44
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 7 ∼ 9 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
45
ツール よ り も 強力で、 多 く の便利なユーザー イ ン タ フ ェ ース機能 も 提供 し てい ますので、
Acrobat 内蔵の コ ピー ・ 検索機能のかわ り と し て有用です。 テ キ ス ト を抽出 し よ う と し た
と き に、 Acrobat な ら ただのゴ ミ し か返 さ ない よ う な場合で も 、 PDFlib TET な ら 多 く の文
書を う ま く 処理す る こ と がで き ます。 TET Plugin は以下の機能を提供 し てい ます :
> PDF 文書内のテ キ ス ト を、 シ ス テ ムの ク リ ッ プボー ド かデ ィ ス ク フ ァ イ ルへプ レーン
テ キ ス ト と し て複製。 改良 さ れた ク リ ッ プボー ド 制御に よ り 、 コ ピー / 貼 り 付けの利
用が実現 し てい ます。
> PDF を TETML に変換 し て、 それを ク リ ッ プボー ド かデ ィ ス ク フ ァ イ ルに入れます。
> XMP 文書 メ タ デー タ を ク リ ッ プボー ド かデ ィ ス ク フ ァ イ ルへ複製。
> 文書内の単語を検索。
> ページ上の検索文字列をすべて同時にハ イ ラ イ ト 。
> 文書内の画像を、 TIFF ・ JPEG ・ JPEG 2000 のいずれかの フ ァ イ ル と し て抽出。
> 画像の色空間 ・ 位置情報を表示。
> 必要に応 じ て テ キ ス ト ・ 画像抽出を調整す る ための詳細な設定が利用可能です。 設定
セ ッ ト は保存 し て再読込す る こ と も 可能です。
Acrobat の コ ピ ー機能に ま さ っ てい る点 TET Plugin は、 Acrobat 内蔵の コ ピー機能に対
し てい く つか ま さ っ てい る 点があ り ます :
> 出力を、 さ ま ざ ま な アプ リ ケーシ ョ ンの要請に合わせて カ ス タ マ イ ズす る こ と がで き
ます。
> Acrobat がゴ ミ だけ を ク リ ッ プボー ド へ複製す る 場合に も 、TET は多 く の場合において
テ キ ス ト を正 し く 解釈す る こ と がで き ます。
> 未知のグ リ フ (正 し い Unicode マ ッ ピ ン グが確立で き ない も の) は赤色でハ イ ラ イ ト さ
れ、 ユーザーが選んだキ ャ ラ ク タ ( ク エ ス チ ョ ン マー ク 等) で置 き 換え可能です。
> TET は文書を Acrobat よ り ずっ と 速 く 処理 し ます。
> 書 き 出す画像群を対話的に選ぶ こ と も で き ます し 、 ページ内ま たは文書内のすべての
画像を抽出す る こ と も で き ます。
> 微小な画像素片を結合 し て、 利用可能な画像に し ます。
46
4 章 : TET コ ネ ク タ
4.2 Lucene 検索エ ン ジ ン用 TET コ ネ ク タ
Lucene はオープン ソ ース の検索エン ジ ンです。 Lucene は元来 Java プ ロ ジ ェ ク ト ですが、
C バージ ョ ン も 利用可能で、 .NET 用バージ ョ ン も 開発中です。 Lucene について詳 し く は
lucene.apache.org を参照 し て く だ さ い。
注記 暗号化文書は、 特定の条件下では shrug オプ シ ョ ン で イ ンデ ッ ク スで き ます (詳 し く は、
59 ページの 5.1 「暗号化 PDF か ら内容を抽出」 を参照)。 こ れは Connector フ ァ イル群の
中で用意 さ れますが、 このオプ シ ョ ン を手作業で有効にする必要があ り ます。
要件 と イ ン ス ト ール TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、Lucene Java で PDF イ ンデ ク シ ン
グ を可能にす る ために利用で き る TET コ ネ ク タ を含んでい ます。 以下、 こ の Lucene Java
用 コ ネ ク タ について詳 し く 説明 し ます。 以下の要件が満た さ れてい る こ と が前提です :
> JDK 1.4 以上。
> Ant ビル ド ツールが動作す る よ う イ ン ス ト ール さ れてい る 。
> Lucene コ ア JAR フ ァ イ ルを持つLuceneデ ィ ス ト リ ビ ュ ーシ ョ ン。TET と と も に配布 さ れ
る Ant ビル ド フ ァ イ ルはフ ァ イ ル lucene-core-2.4.0.jar を前提 し てい ます。 こ の フ ァ イ
ルは Lucene 2.4.0 デ ィ ス ト リ ビ ュ ーシ ョ ンに含まれてい ます。
> Unix ・ Linux ・ Mac ・ Windows いずれか用の TET 配布パ ッ ケージが イ ン ス ト ール さ れてい
る。
Lucene 用 TET コ ネ ク タ を実装す る には、 コ マ ン ド プ ロ ンプ ト で以下の操作を行い ます :
> デ ィ レ ク ト リ <TET イ ン ス ト ールデ ィ レ ク ト リ >/connectors/lucene へ cd。
> フ ァ イ ル lucene-core-2.4.0.jar を こ のデ ィ レ ク ト リ へ複製。
> グ ロ ーバルな、あ る いは文書関連・ページ関連の TET オプシ ョ ン を TetReader.java に追
加す る こ と に よ っ て設定を カ ス タ マ イ ズす る こ と も で き ます。 た と えば、 グ ロ ーバル
なオプシ ョ ン リ ス ト を用いて、 リ ソ ー スへの正 し い検索パ ス を与え る こ と が可能です
(日中韓 CMap がデフ ォ ル ト イ ン ス ト ール と 異な る デ ィ レ ク ト リ に イ ン ス ト ール さ れて
い る 場合等に)。
PdfDocument.java モジ ュ ールは、 デ ィ ス ク フ ァ イ ルか メ モ リ バ ッ フ ァ (Web ク ロ ー ラ
に よ っ て与え ら れた等)に格納 さ れてい る PDF 文書を処理す る 方法を演示 し てい ます。
> コ マ ン ド 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
[java] adding ../data/FontReporter.pdf
[java] adding ../data/TET-PDF-IFilter-datasheet.pdf
4.2 Lucene 検索エ ン ジ ン用 TET コ ネ ク タ
47
[java] adding ../data/PDFlib-datasheet.pdf
[java] 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 フ ァ イ ル
でサンプルを実行す る こ と がで き ます :
ant -Dlucene.jar=/tmp/lucene-core-2.4.0.jar index
48
4 章 : TET コ ネ ク タ
TET と Lucene を デモ Web ア プ リ ケーシ ョ ン で テ ス ト Lucene デモ Web アプ リ ケーシ ョ
ンは、Tomcat や GlassFish をは じ め と す る 任意の Java サーブ レ ッ ト コ ン テナ上に展開す る
こ と がで き ます。 必要な操作は、 Lucene に付いて来 る HTML 文書で説明 さ れてい ます。
オン ラ イ ンで lucene.apache.org/java/2_4_0/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 コ ネ ク タ
49
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 コ マ ン ド ラ イ ン
ツールで生成で き ます (123 ページの 9.1 「TETML を生成」 を参照)。
注記 暗号化文書は、 特定の条件下では shrug オプ シ ョ ン で イ ンデ ッ ク スで き ます (詳 し く は、
59 ページの 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>
...
50
4 章 : TET コ ネ ク タ
4.4 Oracle 用 TET コ ネ ク タ
Oracle 用 TET コ ネ ク タ は、 TET を Oracle デー タ ベース に結合 し て、 PDF 文書を Oracle
Text で イ ンデ ッ ク ス し ク エ リ で き る よ う に し ます。 PDF 文書は、 デー タ ベース内のその
パ ス名を通 じ て参照す る こ と も で き ます し 、デー タ ベース内に BLOB と し て直接格納す る
こ と も で き ます。
注記 暗号化文書は、 特定の条件下では shrug オプ シ ョ ン で イ ンデ ッ ク スで き ます (詳 し く は、
59 ページの 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 変数内で与え る こ と も で き ます
(オプシ ョ ン リ ス ト について詳 し く は、143 ページの 11 章 「TET ラ イ ブ ラ リ API リ フ ァ
レ ン ス」 を参照)。 こ れは特に TET ラ イ セ ン ス キーを与え る ために有用です。 例 :
TETOPT="license=aaaaaaa-bbbbbb-cccccc-dddddd-eeeeee"
TET ラ イ セ ン ス キーを与え る ための他の選択肢については 9 ページの 0.2「TET ラ イ セ
ン ス キーを適用」 を参照 し て く だ さ い。
Oracle ユーザーに権限 を付与 以下の例はいずれ も 、 Oracle ユーザーが イ ンデ ッ ク ス を
作成 し ク エ リ す る 適切な権限を持っ てい る こ と を前提 と し てい ま す。 以下の コ マ ン ド 群
4.4 Oracle 用 TET コ ネ ク タ
51
は、 ユーザー 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 を作成 し ます :
52
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 コ ネ ク タ
53
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
> 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 用の無償ア ド オン
と し て も 利用可能です。
54
4 章 : TET コ ネ ク タ
> Windows Indexing Service
TET PDF IFilter は、デス ク ト ッ プオペレーテ ィ ン グ シ ス テ ム上での非商用利用については
無償ですので、 気軽にテ ス ト や評価を行 う こ と がで き ます。
受け入れ可能な PDF 入力 TET PDF IFilter は、あ ら ゆ る 種類の PDF 入力に対応 し てい ま
す:
> Acrobat 9 ま でのすべての PDF バージ ョ ン (ISO 32000-1 も 含め)
> 文書を開 く パス ワー ド を必要 と し ない暗号化 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
55
> ユーザー定義 XMP プ ロ パテ ィ 群を検索で き ます。例:企業独自の分類プ ロ パテ ィ 、PDF/
A 拡張ス キーマ。
TET PDF IFilter は、 メ タ デー タ を全文テ キ ス ト イ ンデ ッ ク ス内に統合す る こ と も で き ま
す。 結果 と し て、 メ タ デー タ 対応を持たない全文テ キ ス ト 検索エン ジ ン (SQL Server 等)
であ っ て も 、 メ タ デー タ の検索が可能にな り ます。
56
4 章 : TET コ ネ ク タ
4.6 MediaWiki 用 TET コ ネ ク タ
MediaWiki は無償の ウ ィ キ ソ フ ト ウ ェ アであ り 、 Wikipedia をは じ め と す る 多 く の コ ミ ュ ニ
テ ィ Web サ イ ト を動作 さ せ る ために利用 さ れてい ます。 MediaWiki に関す る 詳 し い情報は
下記にあ り ます :
www.mediawiki.org/wiki/MediaWiki
注記 暗号化文書は、 特定の条件下では shrug オプ シ ョ ン で イ ンデ ッ ク スで き ます (詳 し く は、
59 ページの 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 バ イ ンデ ィ ン グ を、38 ページの 3.8 「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.6 MediaWiki 用 TET コ ネ ク タ
57
図 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 は メ タ デー タ ベース の検索に対応 し てい ません
ので、 文書情報項目を直接検索す る こ と はで き ず、 全文テ キ ス ト の一部 と し てのみ情報項
目を検索で き ます。
58
4 章 : TET コ ネ ク タ
5 設定
5.1 暗号化 PDF か ら 内容 を抽出
PDF 文書では、 以下の暗号化手段を用い る こ と がで き ます :
> 文書を開 く ためにユーザーパス ワー ド が必要な よ う にす る こ と がで き ます。
> ページ内容を抽出す る こ と な ど、 特定の操作を権限設定で許可 し た り 禁止 し た り す る
こ と がで き ます。
> 権限設定やど ち ら かのパ ス ワ ー ド を変更す る ためにマ ス タ ーパ ス ワ ー ド が必要な よ う
にする こ と がで き ます。
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, "pcosmode") == 2 ||
((int) tet.pcos_get_number(doc, "pcosmode") == 1 &&
(int) tet.pcos_get_number(doc, "encrypt/nocopy") == 0))
{
/* 内容抽出は許されている */
}
暗号化文書 を処理す る必要 PDF 権限設定は、 文書作成者がその内容の作成者 と し ての
権利を強制す る こ と を支援 し 、 PDF 文書の利用者は、 テ キ ス ト ・ 画像内容を抽出す る 際に
はその文書作成者の権利を尊重す る 必要があ り ます。 デフ ォ ル ト では、 TET は制限モー ド
で動作 し 、 その よ う な暗号化文書か ら いかな る 内容を も 抽出する こ と を拒否 し ます。 し か
し 、内容抽出はあ ら ゆ る 場合においてただちに作成者の権利の侵害を構成す る わけではあ
り ません。 内容抽出が許容可能な状況 と し て以下の よ う な場合が挙げ ら れます :
> 少量の内容を引用目的で抽出す る 場合 (「フ ェ アユース」)。
> 組織に出入 り す る 文書の中に特定のキー ワ ー ド がないか を調べたい (文書ス ク リ ーニ
ン グ) か も し れません。 それを超え る 内容の再利用は行い ません。
> 文書作成者自身がマ ス タ ーパス ワー ド を紛失 し たか も し れません。
> 検索エ ン ジ ン が暗号化文書を イ ンデ ッ ク スす る 場合。 その文書内容を ユーザーに直接
利用可能には し ません (元の PDF への リ ン ク を示す こ と に よ っ て間接的にのみ利用可
能 と し ます)。
最後の例が と り わけ重要です : 利用者が暗号化 PDF の内容抽出を許 さ れていない場合で
あ っ て も 、 企業内検索や Web ベース検索でその文書を見つけ出す こ と は可能であ る べ き
です。 抽出 し たテ キ ス ト を利用者に直接利用可能 と せず、 文書を見つけ出せ る よ う 検索エ
ン ジ ンの イ ンデ ッ ク ス に供す る ためにのみ用い る な ら ば、内容を抽出す る こ と は許容 さ れ
5.1 暗号化 PDF から 内容を抽出
59
う る で し ょ う 。 利用者は元の暗号化 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
{
/* 内容をユーザーに渡してもよい */
}
60
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
オプ シ ョ ン リ ス ト
164 ページの表 11.7 に従 っ てグ リ フ マ ッ ピ ング方式を記述 し たオプ
シ ョ ン リ ス ト 。 こ の リ ソ ースは 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 リ ソ ース設定 と フ ァ イル検索
61
> フ ァ イ ル内に記述 さ れ る すべての リ ソ ース カ テ ゴ リ を列挙 し たセ ク シ ョ ン。 各行に リ
ソ ース カ テ ゴ リ を 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.0\SearchPath
HKLM\SOFTWARE\PDFlib\TET4\SearchPath
HKLM\SOFTWARE\PDFlib\SearchPath
こ れ ら の レ ジ ス ト リ 項目は複数のパ ス を セ ミ コ ロ ン 「;」 で区切っ て持つ こ と がで き ます。
Windows イ ン ス ト ー ラ は こ の SearchPath レ ジ ス ト リ 項目を以下のデ ィ レ ク ト リ 名で初期化
62
5 章 : 設定
し ます(TET を カ ス タ ムのデ ィ レ ク ト リ に イ ン ス ト ール し た場合は こ れ と 同様のデ ィ レ ク
ト リ 名) :
C:\Program Files\PDFlib\TET 4.0 32bit\resource
C:\Program Files\PDFlib\TET 4.0 32bit\resource\cmap
IBM iSeries の場合、 searchpath リ ソ ース カ テ ゴ リ は以下の値で初期化 さ れます :
/PDFlib/TET/4.0/resource/icc
/PDFlib/TET/4.0/resource/fonts
/PDFlib/TET/4.0/resource/cmap
/PDFlib/TET/4.0
/PDFlib/TET
/PDFlib
MVS では、 こ の searchpath 機能には対応 し てい ません。
UPR リ ソ ース フ ァ イルを検索 リ ソ ー ス フ ァ イ ル を 用い る 必要が あ る 場合に は、 set_
option( ) を呼び出 し てそれを指定す る こ と も で き ます し (後述) 、 ま たは UPR リ ソ ース
フ ァ イ ルで指定す る こ と も で き ます。 TET は こ の フ ァ イ ルを、 初めての リ ソ ース が要求 さ
れた時点で自動的に読み込みます。 具体的には以下の よ う に処理 さ れます :
> TETRESOURCEFILE 環境変数が定義 さ れてい る 場合、TET はその値を、読み込むべき UPR
フ ァ イ ルの名前 と し て採用 し ます。 その フ ァ イ ルが読み込めなか っ た と き は例外が発
生 し ます。
> TETRESOURCEFILE 環境変数が定義 さ れていない場合、TET は以下の名前の フ ァ イ ルを開
こ う と し ます :
upr (MVS の場合。データセットが期待される )
/tet/4.0/tet.upr (iSeries の場合 )
tet.upr (Windows・Unix、その他すべてのシステムの場合 )
こ の フ ァ イ ルが読み込めなか っ た と き に例外は発生 し ません。
> Windows の場合、 TET は さ ら に以下の レ ジ ス ト リ 項目を も 読 も う と し ます :
HKLM\SOFTWARE\PDFlib\TET\4.0\resourcefile
そ し て こ のキー (TET の イ ン ス ト ー ラ は こ のキーを作成 し て値 < イ ン ス ト ールデ ィ レ
ク ト リ >/tet.upr を与え ますが、 それ以外の手段で作成す る こ と も で き ます) の値を、
読み込むべ き リ ソ ー ス フ ァ イ ルの名前 と し て採用 し ます。 こ の フ ァ イ ルが読み込めな
か っ た と き は例外が発生 し ます。
> ク ラ イ ア ン ト 側で実行時に TET に強制 し て リ ソ ース フ ァ イ ルを読み込ませ る には、 次
の よ う に resourcefile オプシ ョ ン を明示的に設定 し ます :
set_option("resourcefile=/ パス / です /tet.upr");
こ の呼び出 し は何回で も 繰 り 返す こ と がで き ます。 リ ソ ース項目が蓄積 さ れます。
リ ソ ース を実行時に設定 設定のために UPR フ ァ イ ルを用い る だけでな く 、set_option( )
を用いて個々の リ ソ ース を直接設定す る こ と も 可能です。 こ の関数は、 リ ソ ース カ テ ゴ リ
名 と 、 対応する リ ソ ース名 ・ 値の対 (複数可) と を、 UPR リ ソ ース フ ァ イ ル内のそのカ テ
ゴ リ のセ ク シ ョ ンに書 く の と 同 じ 形で受け入れます。 た と えば :
set_option("glyphlist={myglyphnames=/usr/local/glyphnames.gl}");
5.2 リ ソ ース設定 と フ ァ イル検索
63
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 個のバ ッ ク ス ラ ッ シ ュ を表 し ます。
> 行末のバ ッ ク ス ラ ッ シ ュ は行末キ ャ ラ ク タ を キ ャ ン セル し ます。
64
5 章 : 設定
5.3 代表的シ ナ リ オのための推奨方策
TET には さ ま ざ ま なオプシ ョ ンがあ り 、 それ ら を活用する こ と で、 操作の さ ま ざ ま な面を
制御す る こ と が可能です。 こ の項では、 TET の典型的な応用シナ リ オについて、 い く つか
の推奨方策を示 し ます。 以下でふれ る 関数やオプシ ョ ンについて詳 し く は、 143 ページの
11 章 「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 代表的シナ リ オのための推奨方策
65
検索エ ン ジ ンや イ ン デ ク サ を書 く イ ンデ ク サは通常、 テ キ ス ト のページ上におけ る 位
置には関心を持っ てい ません (検索 さ れた用語をハ イ ラ イ ト 表示 さ せたい場合を除 き ) 。
多 く の場合、 イ ンデ ク サは 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 はページ上の段組みど う し の関係を正 し く 決め
る こ と がで き ない場合が あ り ま す。 こ の よ う な場合には、 処理時間を かけ る こ と に よ っ
て、 抽出 さ れ る テ キ ス ト を向上 さ せ る こ と が可能です。 こ の目的に適 し たオプシ ョ ンは、
87 ページの 6.6 「レ イ ア ウ ト 分析」 に ま と めて あ り ます。 関連す る オプシ ョ ンについて詳
し く は、 171 ページの表 11.10 を参照 し て く だ さ い。
法律文書 法律文書を扱 う 際には通常、Unicode マ ッ ピ ン グの誤 り は一切許容 さ れません。
それに よ っ て文書の内容や解釈が変わっ て し ま う 危険があ る ためです。多 く の場合テ キ ス
ト の位置は必要ではな く 、 テ キ ス ト は単語ご と に抽出 さ れ る 必要があ り ます。 推奨方策 :
> open_page( ) で granularity=word オプシ ョ ン を用い ます。
> 開 く た め に パ ス ワ ー ド を 必 要 と す る 文 書 を 処 理 す る 必 要 が あ る と き は、 open_
document( ) で password オプシ ョ ン を用いて正 し い文書パ ス ワー ド を指定 し ます。 あ
る いは、 内容抽出が権限設定で許可 さ れていない と き は、 その文書か ら テ キ ス ト を抽
出す る 合法的立場に自分があ る な ら ば、 shrug オプシ ョ ン を用い ます (60 ページの 「暗
号化文書に対す る 「シ ュ ラ ッ グ」 機能」 を参照)。
66
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 代表的シナ リ オのための推奨方策
67
カ ス タ ムエ ン コ ーデ ィ ン グの ロ ゴ を持つ企業 フ ォ ン ト 多 く の場合、 カ ス タ ム の ロ ゴ を
含んだ企業フ ォ ン ト は、 その ロ ゴに対す る Unicode マ ッ ピ ン グ情報を持っ ていないか、 あ
る いは持っ ていて も 誤っ てい ます。 こ の よ う な フ ォ ン ト が含んだ PDF 文書が大量にあ る
場合には、 正 し い Unicode 値でカ ス タ ムのマ ッ ピ ン グ テーブルを作成す る こ と を推奨 し ま
す。
まず、 その フ ォ ン ト を含んだ PDF に対する フ ォ ン ト レ ポー ト を生成 さ せ (107 ページ
の 「PDFlib FontReporter Plugin で PDF 文書を分析」 を参照)、 マ ッ プが誤っ てい る グ リ フ
を その フ ォ ン ト レ ポー ト 内で見つけ ます。その フ ォ ン ト の種類で利用で き る 設定テーブル
を選び、 それを用いて、 足 り ない Unicode マ ッ ピ ン グ を与え る こ と がで き ます。 ロ ゴ タ イ
プ フ ォ ン ト に対す る コ ー ド リ ス ト の詳 し い作成例は、 108 ページの 「 コ ー ド リ ス ト リ ソ ー
ス はあ ら ゆ る 種類の フ ォ ン ト に利用可能」 を参照。
TeX 文書 TeX 文書に よ っ て生成 さ れた PDF 文書は、 数値グ リ フ名や Type 3 フ ォ ン ト を
は じ め と す る 、他の製品がテ キ ス ト を う ま く 抽出で き ない原因 と な る 機能を含んでい る こ
と が よ く あ り ます。 TET は、 こ の よ う な文書を扱 う ための多 く の ヒ ュ ー リ ス テ ィ ッ ク と 回
避策を含んでい ます。 し か し あ る 種の TeX 文書は、 処理時間を よ り 多 く 要す る 、 デフ ォ
ル ト では無効にな っ てい る 回避策でのみ処理する こ と が可能です。下記の文書オプシ ョ ン
を用いれば、 こ う し た文書のための、 CPU 消費の よ り 多い フ ォ ン ト 処理を有効にす る こ
と がで き ます :
checkglyphlists=true
68
5 章 : 設定
6 テキス ト 抽出
6.1 PDF の さ ま ざ ま な文書領域
PDF 文書は、 ページ内容だけではな く 、 それ以外の多 く の場所にテ キ ス ト を含んでい る 可
能性があ り ます。 たいていのアプ リ ケーシ ョ ンはページ内容のみを扱い ますが、 他の文書
領域が必要な状況 も 多 く あ り ます。
ページ内容は、 最 も 活躍す る 関数 get_text( ) と get_image( ) で取得す る こ と がで き 、 一
方、他の文書領域か ら テ キ ス ト を取得す る には内蔵の pCOS イ ン タ フ ェース が主要な役割
を務め ます。
こ の節では以下、 TET ラ イ ブ ラ リ と TETML での領域検索について情報を提供 し ます。
あわせて、 こ れ ら の文書領域を Acrobat 8/9 で検索する 方法 も ま と め ます。 こ れは Acrobat
で検索 ヒ ッ ト を見つけ る ために重要です。
ページ上のテキス ト ページ内容は PDF 内の主要なテ キ ス ト です。 ページ上のテ キ ス ト
はフ ォ ン ト で視覚表現 さ れ、PDF 内で利用可能な多様なエン コ ーデ ィ ン グ技法の一つを用
いて符号化 さ れてい ます。
> Acrobat 8/9 での表示方法 : ページ内容はつねに表示 さ れてい ます。
> Acrobat 8/9 で一個の PDF を検索す る 方法:「編集」→「検索」。Acrobat がグ リ フ を Unicode
値へ正 し く マ ッ プで き ない文書内のテ キ ス ト を、TET は処理で き る 可能性があ り ます。
こ の よ う な状況では、 TET をベース に し た TET Plugin を利用す る こ と がで き ます (45
ページの 4.1 「Adobe Acrobat 用無償 TET Plugin」 を参照)。 TET Plugin は、 その自前の
検索ダ イ ア ロ グ を 「Plug-Ins」 → 「PDFlib TET Plugin...」 → 「TET Find」 で提供 し ます。 た
だ し こ れは、 完全な検索機能を提供す る よ う には意図 さ れてい ません。
> Acrobat 8/9 で複数の PDF を検索す る 方法 : 「Acrobat の検索パネルを開 く 」 を選択 し た
のち、 「検索する場所を指定 し て く だ さ い。 」 の中で 「以下の場所にあるすべての PDF
文書」 を選択 し 、 PDF 文書群が入っ てい る フ ォ ルダへブ ラ ウ ズ。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : extractor ミ ニサンプル
> TETML 要素 : /TET/Document/Pages/Page
定義済み文書情報項目 定義済みの文書情報項目はキー / 値対です。
> Acrobat 8/9 での表示方法 : 「 フ ァ イル」 → 「プ ロパテ ィ ...」
> Acrobat 8/9 で一個の PDF を検索す る 方法 : な し
> Acrobat 8/9 で複数の PDF を検索す る 方法 : 「編集」 → 「検索」 → 「高度な検索オプ シ ョ
ン を使用」 を ク リ ッ ク 。 「検索する場所 : 」 プルダ ウ ンで PDF 文書群の フ ォ ルダ を選
択 し 、 プルダ ウ ン メ ニ ュ ー 「その他の条件」 で 「作成日」 「更新日」 「作成者」 「 タ イ ト
ル」 「サブ タ イ ト ル」 「キーワー ド 」 のいずれか を選択。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : dumper ミ ニサンプル
> TETML 要素 : /TET/Document/DocInfo
カ ス タ ム文書情報項目 標準項目に加え て、 カ ス タ ム文書情報項目を定義す る こ と も で
き ます。
> Acrobat 8/9 での表示方法 : 「 フ ァ イル」 → 「プ ロパテ ィ ...」 → 「カ ス タ ム」 (無償の
Acrobat Reader では利用で き ません)
> Acrobat 8/9 での検索方法 : な し
6.1 PDF の さ ま ざ ま な文書領域
69
図 6.1
Acrobat の高度な
検索ダ イ ア ロ グ
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : dumper ミ ニサンプル
> TETML 要素 : /TET/Document/DocInfo/Custom
文書 レ ベルの XMP メ タ デー タ XMP メ タ デー タ は、拡張 さ れた メ タ デー タ を内容 と し て
持つ XML ス ト リ ームか ら 成 り ます。
> Acrobat 8/9 での表示方法 : 「フ ァ イル」 → 「プ ロパテ ィ ...」 → 「その他の メ タ デー タ ...」
(無償の Acrobat Reader では利用で き ません)
> Acrobat 8/9 で一個の PDF を検索す る 方法 : な し
> Acrobat 8/9 で複数の PDF を検索す る 方法 : 「編集」 → 「検索」 → 「高度な検索オプ シ ョ
ン を使用」 を ク リ ッ ク 。 「検索する場所 : 」 プルダ ウ ンで PDF 文書群の フ ォ ルダ を選
択 し 、 プルダ ウ ン メ ニ ュ ー 「その他の条件」 で 「XMP メ タ デー タ 」 を 選択 (無償の
Acrobat Reader では利用で き ません)。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : dumper ミ ニサンプル
> TETML 要素 : /TET/Document/Metadata
70
6 章 : テキス ト 抽出
画像 レ ベルの XMP メ タ デー タ XMP メ タ デー タ は、 画像 ・ ページ ・ フ ォ ン ト と いっ た文
書構成要素に も 付け る こ と が可能です。 し か し 、 XMP が通常見つか る のは画像レベルに
おいてのみです (文書レベルに加え て)。
> Acrobat 8/9 での表示方法 : 「ツール」 → 「高度な編集」 → 「TouchUp オブ ジ ェ ク ト ツー
ル」 →画像を選択→右 ク リ ッ ク→ 「 メ タ デー タ を表示 ...」 (無償の Acrobat Reader では
利用で き ません)
> Acrobat 8/9 での検索方法 : な し
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : pCOS ク ッ ク ブ ッ ク の ト ピ ッ ク image_metadata
> TETML 要素 : /TET/Document/Pages/Resources/Images/Image/Metadata
フ ォ ーム フ ィ ール ド 内のテキス ト フ ォ ーム フ ィ ール ド はページにかぶ さ っ て表示 さ れ
ます。 し か し 、 技術的には こ れはページ内容の一部分ではな く 、 別個のデー タ 構造に よ っ
て表現 さ れます。
> Acrobat 8 での表示方法 : 「表示」 → 「ナビゲーシ ョ ンパネル」 → 「フ ィ ール ド 」
> Acrobat 9 での表示方法 : 「 フ ォ ーム」 → 「フ ィ ール ド を追加または編集 ...」
> Acrobat 8/9 での検索方法 : な し
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : pCOS ク ッ ク ブ ッ ク の ト ピ ッ ク fields
> TETML 要素 : な し
注釈内のテキス ト フ ォ ーム フ ィ ール ド と 同様、 注釈 ( ノ ー ト ・ テ キ ス ト 注釈等) は別
個のデー タ 構造に よ っ て表現 さ れます。注釈の興味対象 と な る テ キ ス ト 内容はその種類に
よ っ て異な り ます。た と えば、Web リ ン ク の場合はその興味対象 と な る 部分は URL で し ょ
う し 、 それ以外の種類の注釈では印字 さ れ る テ キ ス ト 内容が意味を持つで し ょ う 。
> Acrobat 8/9 での表示方法 : 「表示」 → 「ナビゲーシ ョ ンパネル」 → 「注釈」
> Acrobat 8/9 で一個の PDF を検索す る 方法 : 「編集」 → 「検索」 →ボ ッ ク ス 「注釈を含め
る」 をチ ェ ッ ク 、 ま たは注釈の リ ス ト ツールバーで 「検索」 ボ タ ン を ク リ ッ ク
> Acrobat 8/9 で複数の PDF を検索す る 方法 : 「編集」 → 「検索」 → 「高度な検索オプ シ ョ
ン を使用」 を ク リ ッ ク 。 「検索する場所 : 」 プルダ ウ ンで PDF 文書群の フ ォ ルダ を選
択 し 、 プルダ ウ ン メ ニ ュ ー 「その他の条件」 で 「注釈」 を選択。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : pCOS ク ッ ク ブ ッ ク の ト ピ ッ ク annotations
> TETML 要素 : な し
し お り 内のテキス ト し お り は直接にはページ と 結びついてい ま せんが、 特定のページ
へ飛ぶア ク シ ョ ン を内容 と し て持つ場合があ り ます。 し お り は階層構造を形成す る よ う に
入れ子にす る こ と も 可能です。
> Acrobat 8/9 での表示方法 : 「表示」 → 「ナビゲーシ ョ ンパネル」 → 「 し お り 」
> Acrobat 8/9 で一個の PDF を検索す る 方法 : 「編集」 → 「検索」 →ボ ッ ク ス 「 し お り を含
める」 をチ ェ ッ ク
> Acrobat 8/9 で複数の PDF を検索す る 方法 : 「編集」 → 「検索」 → 「高度な検索オプ シ ョ
ン を使用」 を ク リ ッ ク 。 「検索する場所 : 」 プルダ ウ ンで PDF 文書群の フ ォ ルダ を選
択 し 、 プルダ ウ ン メ ニ ュ ー 「その他の条件」 で 「 し お り 」 を選択 (無償の Acrobat Reader
では利用で き ません)
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : pCOS ク ッ ク ブ ッ ク の ト ピ ッ ク bookmarks
> TETML 要素 : な し
フ ァ イル添付 PDF 文書はフ ァ イ ル添付を含む こ と も で き (文書レベルかページ レベル
で)、 その フ ァ イ ル添付自体が PDF 文書であ る こ と も 可能です。
6.1 PDF の さ ま ざ ま な文書領域
71
> Acrobat 8/9 での表示方法 : 「表示」 → 「ナビゲーシ ョ ンパネル」 → 「添付フ ァ イル」
> Acrobat 8/9 での検索方法 : 「編集」 → 「検索」 →ボ ッ ク ス 「添付フ ァ イルを含める」 を
チ ェ ッ ク (無償の Acrobat Reader では利用で き ません)。 入れ子にな っ た添付は再帰的
に検索 さ れません。
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : get_attachments ミ ニサンプル
> TETML 要素 : /TET/Document/Attachments/Attachment/Document
PDF パ ッ ケージ ・ ポー ト フ ォ リ オ Acrobat 8 (PDF 1.7) では、 PDF パ ッ ケージ と い う 概
念が導入 さ れま し た。 こ れはフ ァ イ ル添付に追加のプ ロ パテ ィ を与え た も のです。Acrobat
9 (PDF 1.7 拡張レベル 3) では こ の概念を拡張 し て、 PDF ポー ト フ ォ リ オが導入 さ れてい
ます。
> Acrobat 8/9 での表示方法:Acrobat は、PDF パ ッ ケージ専用のユーザー イ ン タ フ ェース
で、 パ ッ ケージ / ポー ト フ ォ リ オの表紙 と 中身の PDF 文書群を表現 し ます。
> Acrobat 8/9 で一個の PDF パ ッ ケージ を検索する 方法 : 「編集」 → 「検索」 → 「検索する
場所 : 」 プルダ ウ ン で 「PDF パ ッ ケージ全体」 を選択
> Acrobat 8/9 で複数の PDF パ ッ ケージ を検索する 方法 : な し
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : get_attachments ミ ニサンプル
> TETML 要素 : /TET/Document/Attachments/Attachment/Document
PDF プ ロパテ ィ こ の領域は明示的にテ キ ス ト を含んではお ら ず、 PDF/X ・ PDF/A 状態、
タ グ付 き PDF 状態 と いっ た、 PDF 文書の さ ま ざ ま な固有プ ロ パテ ィ を集めた コ ン テナ と
し て用い ら れます。
> Acrobat 8 での表示方法 : Acrobat 8 は規格準拠情報を直接表示 し ませんが、 「フ ァ イル」
→ 「プ ロパテ ィ ...」 → 「カ ス タ ム」 ま たは 「フ ァ イ ル」 → 「プ ロパテ ィ ...」 → 「その
他の メ タ デー タ ...」 で関連す る 項目を見つけ る こ と がで き ます (無償の Acrobat Reader
では利用で き ません)。 あ る いは、 各種 ISO 規格用の無償の PDFlib カ ス タ ム XMP パネ
ルを利用 し て、 PDF/A-1 ・ PDF/X-4 ・ PDF/X-5 ・ PDF/E-1 規格に対す る 準拠情報を明
示的に表示す る こ と も で き ます。
> Acrobat 9 : 「表示」 → 「ナビゲーシ ョ ンパネル」 → 「規格」 (規格準拠 PDF にでのみ現
れます)
> Acrobat 8/9 での検索方法 : な し
> TET ラ イ ブ ラ リ 用サンプル コ ー ド : dumper ミ ニサンプル
> TETML 要素 ・ 属性 : /TET/Document/@pdfa ・ /TET/Document/@pdfe ・ /TET/Document/
@pdfx
72
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 9 では 「表示」 → 「カ ー ソ ル座標」 を、 Acrobat
7/8 では 「表示」 → 「ナビゲーシ ョ ン タ ブ」 → 「情報」 を用い ます。
> 座標は、Acrobat で現在選択 さ れてい る 単位で表示 さ れます。Acrobat 7/8/9 で表示単位
を ポ イ ン ト に変更す る (TET で用い ら れてい る の と 同様に) には、 次の よ う に操作 し
ます : 「編集」 → 「環境設定」 (→ 「一般 ...」) → 「単位 と ガ イ ド 」 → 「単位」 へ行 き 、
「ポ イ ン ト 」 を選択。
こ の表示 さ れてい る 座標はページの左上隅を原点 と し てお り 、 左下隅を原点に持つ PDF ・
TET のデフ ォ ル ト 座標系 と は異な る こ と に留意 し て く だ さ い。 Acrobat の座標系 と 揃 う 下
向 き 座標系を選ぶための方法については前項を参照 し て く だ さ い。
テキス ト 抽出の領域 デフ ォ ル ト では TET は、 目に見え る ページ領域のテ キ ス ト をすべ
て抽出 し ます。 open_page( ) の clippingarea オプシ ョ ン (168 ページの表 11.8 を参照) を
用い る と 、 こ れを任意の PDF ページ枠項目 (TrimBox 等) へ変更す る こ と がで き ます。
キーワー ド unlimited を用い る と 、 いかな る ページ枠に も かかわ り な く すべてのテ キ ス ト
を抽出す る こ と がで き ます。 デフ ォ ル ト 値 cropbox は、 Acrobat で目に見え る 領域内のテ
キ ス ト を抽出す る よ う TET に指示 し ます。
テ キ ス ト 抽出の領域は も っ と 細か く 、任意の数の矩形領域を open_page( )のincludebox・
excludebox オプシ ョ ン で与え る こ と に よ っ て指定す る こ と も で き ます。 こ れは部分的な
ページ内容 (選んだ段組等) を抽出 し た り 、 あ る いは必要ない部分 (余白 ・ ヘ ッ ダ ・ フ ッ
6.2 ページ と テキス ト の視覚情報
73
図 6.2
Acrobat の座標表示を設定。 カ ー ソル座標を表示するには 「表示」 → 「カ ー ソ ル座標」 を用います。
タ 等) を除いた り す る ために有用です。 最終的な切 り 抜き 領域は、 includebox オプシ ョ ン
で指定 さ れたすべての矩形の和を算出 し 、 そ こ か ら excludebox オプシ ョ ンで指定 さ れた
すべての矩形の和を除外す る こ と に よ っ て構築 さ れます。 キ ャ ラ ク タ は、 その参照点が切
り 抜 き 領域の中にあ る と き 、 その切 り 抜 き 領域内に あ る と 判定 さ れ ま す。 こ れはすなわ
ち、キ ャ ラ ク タ の一部が切 り 抜 き 領域の外に出ていて も それがその切 り 抜 き 領域内にあ る
と 判定 さ れ る 場合があ り 、 ま たその逆の場合 も あ る こ と を意味 し ます。
グリ フ メ ト リ ッ ク
get_char_info( ) を用い る と 、任意のグ リ フ に対 し て返 さ れた キ ャ ラ ク
タ 群の フ ォ ン ト 情報や メ ト リ ッ ク 情報を取得する こ と がで き ます。出力内の各キ ャ ラ ク タ
に対 し て、 それぞれ以下の値が得 ら れます (図 6.3 と 177 ページの表 11.13 を参照) :
> uv フ ィ ール ド は、情報取得対象のキ ャ ラ ク タ (カ レ ン ト キ ャ ラ ク タ )の UTF-32 Unicode
値を持ち ます。 こ の フ ィ ール ド はつねに UTF-32 を持ち ます。 ネ イ テ ィ ブな Unicode 文
字列内で UTF-16 文字列 し か扱え ない言語バ イ ンデ ィ ン グにおいて も 同様です。 こ の
uv フ ィ ール ド を利用す る と 、BMP 領域外のキ ャ ラ ク タ を アプ リ ケーシ ョ ンで取 り 扱い
たい と き に、 サ ロ ゲー ト ペア を解釈す る 必要な し に取 り 扱え る よ う にな り ます。 サ ロ
ゲー ト ペアは 2 個の別々のキ ャ ラ ク タ と し て報告 さ れ る ので、 1 つ目の値の uv フ ィ ー
ル ド が実際の Unicode 値 (U+FFFF を超え る ) を持ち、 2 つ目の値の uv フ ィ ール ド は
無形キ ャ ラ ク タ と し て扱われて uv 値 0 を持ち ます。
> type フ ィ ール ド は、 そのキ ャ ラ ク タ の種別を表 し ます。 有形キ ャ ラ ク タ と 無形キ ャ ラ
ク タ の 2 種類があ り ます。 有形キ ャ ラ ク タ に分類 さ れ る も の と し ては、 通常のキ ャ ラ
74
6 章 : テキス ト 抽出
width
(x, y)
beta
e
tsiz
fon
e
elin
bas
(x, y)
fontsize
th
wid
alpha
図 6.3
横書き と 縦書き におけるグ リ フ メ ト リ ッ ク
ク タ (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) 両フ ィ ール ド は、 そのグ リ フ の参照点の位置を指 し ます。 こ の参照点は横書 き で
はグ リ フ矩形の左下隅にな り 、 縦書 き では上端中央にな り ます (79 ページの 6.3.1 「日
中韓エン コ ーデ ィ ン グ ・ CMap」 参照)。 無形キ ャ ラ ク タ については、 ページ上に対応す
る グ リ フ がないので、 点 (x, y) は も っ と も 最近の有形キ ャ ラ ク タ の終了点を指 し ます。
y の値は topdown ページオプシ ョ ンに依存 し ます。
> width フ ィ ール ド は、 そのグ リ フ に対応す る フ ォ ン ト メ ト リ ッ ク と 文字間隔 ・ 水平倍率
等のテ キ ス ト 出力パ ラ メ タ 群 と に従っ た グ リ フ の幅を表 し ます。 こ う し たパ ラ メ タ が
次のグ リ フ の位置を制御す る ので、 隣 り 合 う 2 つのグ リ フ の参照点間の間隔は width
と は異な る 場合があ り ます。 ゼ ロ 幅キ ャ ラ ク タ の場合 width はゼ ロ にな る こ と があ り
ます。 逆に斜体テ キ ス ト 等、 実際のア ウ ト ラ イ ンの幅がそのグ リ フ の width 値 よ り 広
く な る 場合 も あ り ます。
無形キ ャ ラ ク タ の場合 width は 0 にな り ます。
6.2 ページ と テキス ト の視覚情報
75
ascender
capheight
font size
baseline
descender
図 6.4 フ ォ ン ト 固有 メ ト リ ッ ク
> 角度 alpha は、 行内のテ キ ス ト の進行方向を与え ます。 こ れは、 標準方向か ら の偏移で
表 さ れます。 こ の標準方向は横書 き では 0° にな り 、 縦書き では -90° にな り ます (縦書
き について詳 し く は後述)。 よ っ て角度 alpha は、 通常の横書 き テ キ ス ト と 通常の縦書
き テ キ ス ト に対 し ては と も に 0° にな り ます。 alpha ・ beta の値は topdown ページオプ
シ ョ ンに依存 し ます。
> 角度 beta は、 斜体 (擬似 イ タ リ ッ ク ) テ キ ス ト 等の、 テ キ ス ト にかかっ た傾斜を表 し
ます。 こ の角度は alpha に対す る 垂線か ら 測 ら れます。 通常の正立 し た テ キ ス ト に対
し ては 0° にな り ます (横書 き で も 縦書 き で も )。 beta の絶対値が 90° を超え る 場合、 そ
のテ キ ス ト はベース ラ イ ン を軸に反転 し て裏返っ てい る こ と にな り ます。
> fontid フ ィ ール ド は、そのグ リ フ に対 し て用い ら れてい る フ ォ ン ト の pCOS ID を持ち ま
す。 こ の ID を用い る と 、 フ ォ ン ト 名 ・ 埋め込み状況 ・ 記述方向 (横書 き か縦書 き か)
と いっ た詳 し い フ ォ ン ト 情報を取得す る こ と がで き ます。 pCOS リ フ ァ レ ン ス に、 こ う
し た フ ォ ン ト 情報取得のためのサンプル コ ー ド があ り ます。
> fontsize フ ィ ール ド は、 テ キ ス ト のサ イ ズ を ポ イ ン ト 単位で表 し ます。 こ れは正規化 さ
れ る ので、 つねに正の値にな り ます。
> textrendering フ ィ ール ド は、 描線 ・ 塗 り ・ 不可視等、 グ リ フ の レ ン ダ リ ン グの種類を
表 し ます。 こ れは PDF ページ記述について定義 さ れてい る テ キ ス ト レ ン ダ リ ン グモー
ド の数値を反映 し ます (177 ページの表 11.13 を参照)。 不可視のテ キ ス ト はデフ ォ ル
ト では抽出 さ れますが、 open_page( ) で ignoreinvisibletext オプシ ョ ン を用いればそ う
でな く す る こ と も で き ます。
フ ォ ン ト 固有 メ ト リ ッ ク TET は、 PostScript と PDF が用いてい る グ リ フ ・ フ ォ ン ト メ
ト リ ッ ク シ ス テ ム を用いてい ます。 こ こ で簡単に説明 し ま し ょ う 。
文字サ イ ズには通常、 キ ャ ラ ク タ の各部が重な り 合わないために必要な、 隣 り 合 う 行
ど う し の最小限の間隔が選ばれます。 文字サ イ ズは一般に、 フ ォ ン ト 内の個々のキ ャ ラ ク
タ よ り も 大 き く な り ます。 なぜな ら 、 文字サ イ ズはアセ ン ダ と デ ィ セ ン ダにわた る う え、
さ ら に行間の追加のア キが加わ る 場合 も あ る か ら です。
キ ャ ッ プハイ ト は、 多 く の欧文フ ォ ン ト の T や H の よ う な大文字の高 さ です。 x ハイ
ト は、 多 く の欧文フ ォ ン ト の x の よ う な小文字の高 さ です。 アセ ン ダは、 多 く の欧文フ ォ
ン ト の f や d の よ う な小文字の高 さ です。 デ ィ セ ン ダは、 多 く の欧文フ ォ ン ト の j や p の
よ う な小文字のベース ラ イ ンか ら 下端ま での間隔です。 デ ィ セ ン ダは通常、 負の値です。
76
6 章 : テキス ト 抽出
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 です (73 ページの
「下向 き 座標系」 参照)。 高 さ の値は文字サ イ ズ と フ ォ ン ト の幾何情報に依存 し ます。 下記
は、 広 く 用い ら れてい る 多 く の フ ォ ン ト について、 使え る 値を与え ます (アセ ン ダ値の取
得については 76 ページの 「フ ォ ン ト 固有 メ ト リ ッ ク 」 を参照) :
高さ = 文字サイズ * アセンダ / 1000
多 く のグ ラ フ ィ ッ ク 開発環境において、 グ リ フ変換は以下の よ う に表す こ と がで き ます :
translate(x,y);
rotate(alpha);
skew(0, -beta);
6.2 ページ と テキス ト の視覚情報
77
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 です (73 ページの
「下向 き 座標系」 参照)。
78
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 等、 多数のエン コ ーデ ィ ン
グです。
注記 日中韓テキス ト を抽出するには、 TET に同梱の CMap フ ァ イル群の場所を、 7 ページの 0.1
「ソ フ ト ウ ェ ア を イ ン ス ト ール」 に従 っ て設定する必要があ り ます。
日中韓フ ォ ン ト の名前で、 ロ ケール依存のエン コ ーデ ィ ン グで書かれてい る も の も (ShiftJIS エン コ ーデ ィ ン グの日本語フ ォ ン ト 名等)、 Unicode に正規化 さ れます。 単語検出機能
は、 日中韓のすべての表意キ ャ ラ ク タ を独立の単語 と 見な し ますが、 ただ し カ タ カナは単
語境界 と 見な し ません (連続す る カ タ カナは ま と めて 1 個の単語 と し て扱い ます)。
6.3.2 縦書 き
TET は横書き に も 縦書 き に も 対応 し てお り 、それぞれについて適切な メ ト リ ッ ク 計算をす
べて行い ます。 縦書 き のテ キ ス ト を扱 う 際には以下の こ と に留意 し て下 さ い。
> グ リ フ の参照点は縦書 き の場合にはグ リ フ矩形の上端中央にあ り ます。 テ キ ス ト の位
置は下へ向か っ て進み ます。 その進行幅はフ ォ ン ト サ イ ズ と 文字間隔に よ っ て決定 さ
れ、 グ リ フ幅には依存 し ません (図 6.3 参照)。
> 角度 alpha は通常の縦書 き テ キ ス ト については 0° です。いいかえれば、縦書 き の フ ォ ン
ト で alpha=0° な ら ば下へ、 すなわち -90° の方向に向かっ て進む と い う こ と です。
> 上述の違いのため、ク ラ イ ア ン ト コ ー ド 側では下記の pCOS コ ー ド を用いて記述方向を
考慮に入れ る 必要があ り ます (テ キ ス ト が縦に並んでい る か ら と い っ て、 それが実際
には縦書 き の フ ォ ン ト を用いてい る と は限 ら ない こ と に留意 し て下 さ い) :
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}
6.3 日本語 ・ 中国語 ・ 韓国語テキス ト
79
6.3.3 日中韓分解 : narrow ・ wide ・ vertical 等
Unicode と 多 く の レ ガシエン コ ーデ ィ ン グでは、 全角 と 半角のキ ャ ラ ク タ と い う 概念が使
え ます (ダブルバ イ ト ・ シ ン グルバ イ ト キ ャ ラ ク タ と 呼ばれ る 時 も あ り ます) 。 デフ ォ ル
ト では TET は、 全角 ・ 半角キ ャ ラ ク タ を それぞれ対応す る 標準幅のキ ャ ラ ク タ へ置 き 換
え る Unicode 分解 wide ・ narrow を行い ます。
元の全角 ・ 半角キ ャ ラ ク タ を温存す る には、 decompose 文書オプシ ョ ン を用いてそれ
ぞれの分解を無効化 し ます :
decompose={wide=_none narrow=_none}
同様に、 small ・ square ・ vertical 分解 も 日中韓キ ャ ラ ク タ に対 し て効力を持ち ます。 こ れ
ら の分解は (wide と narrow も 含めて) デフ ォ ル ト ではすべて有効にな っ てい ますので、
キ ャ ラ ク タ はそれぞれ対応す る 標準的キ ャ ラ ク タ へ変換 さ れます。元のキ ャ ラ ク タ を温存
す る には、 それぞれの分解を無効化 し ます。 下記の文書オプシ ョ ンはすべての分解を無効
化 し ます :
decompose={none}
表 6.1 に、 日中韓分解を例 と と も に示 し ます。 分解について詳 し く は、 99 ページの 7.3.2
「Unicode 分解」 を参照 し て く だ さ い。
表 6.1 日中韓互換分解の例 (decompose オプ シ ョ ンのサブオプ シ ョ ン)
分解名
narrow
small
square
80
説明
対象 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
6 章 : テキス ト 抽出
分解が有効の と き
(デ フ ォ ル ト )
分解が無効の と き
ዏ
ᩀ
U+30F2
U+FF66
ᤸ
U+002C
U+FE50
ኊ ዊ
ᑐ
U+30AD U+30ED
U+3314
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 オプシ ョ ン を用いて表示形を温存す る こ と も で き ます (99
ページの 7.3.2 「Unicode 分解」 を参照)。
PDF 文書では各表示形は、 単独形の Unicode キ ャ ラ ク タ へマ ッ プ さ れてい る こ と も あ
れば、 表示形の う ちの一つ (た と えばその文書の ToUnicode CMap 内の) へマ ッ プ さ れて
6.4 双方向ア ラ ビ ア文字 ・ ヘブ ラ イ文字テキス ト
81
い る こ と も あ る ため、 た と え分解が無効化 さ れていて も 、 出力が表示形を含む こ と を 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 オプシ ョ ン を
用いて タ ト ウ ィ ールキ ャ ラ ク タ を温存す る こ と も で き ます (96 ページの 7.3.1 「Unicode 字
形統合」 を参照)。
表 6.3 タ ト ウ ィ ールキ ャ ラ ク タ U+0640 を fold オプ シ ョ ン で処理
説明 と オプ シ ョ ン リ ス ト
ア ラ ビ ア文字の タ ト ウ ィ ールキ ャ ラ ク タ を除去 : fold オプ シ ョ
ン な し (デ フ ォ ル ト ) または fold={{[U+0640] remove}} または
fold={default}
ア ラ ビ ア文字の タ ト ウ ィ ールキ ャ ラ ク タ (デ フ ォ ル ト では除
去 さ れる) を温存 : fold={{[U+0640] preserve}}
82
6 章 : テキス ト 抽出
字形統合前
ҿ
U+0640
字形統合後
なし
ҿ
ҿ
U+0640
U+0640
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 と 設定す る と 、 単語検出機能に よ っ て認識 さ れた単語群を ま と めて行
を再構成 し ます。 ハ イ フ ン除去が有効の と き (デフ ォ ル ト ) は、 行末でハ イ フ ン で分
割 さ れた単語は再結合 さ れ、 そのハ イ フ ン除去 さ れた完全な単語はその行に繰 り 込ま
れます。
6.5 内容分析
83
> 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 参照)。
図 6.5
デ フ ォ ル ト 設定 punctuationbreaks=true で
は URL は各部に分解 さ れますが (上)、
punctuationbreaks=false では各部はひ と ま
と ま り のま ま保持 さ れます (下)。
84
6 章 : テキス ト 抽出
ハ イ フ ン除去 行末でハ イ フ ン 区
切 り さ れ た 単語 と い う も のは通
常、 抽出 し た テ キ ス ト を 論理 レ ベ
ルで処理 し た い ア プ リ ケーシ ョ ン
に と っ て は好 ま し く あ り ま せん。
そのため TET はハ イ フ ン除去、 す
なわちハ イ フ ン区切 り さ れた単語
の各部分の再結合 を 行い ま す。 よ
り 正確にい う と 、 行末の単語の末
尾にハ イ フ ン キ ャ ラ ク タ が あ り 、
かつその次の行の最初の単語の先
頭が小文字な ら ば、 ハ イ フ ン は除
去 さ れ、 単語の前半部は次行後半
部 と 結合 さ れ ま す。 ただ し 同 じ 区域内に少な く と も あ と 1 行存在す る 場合に限 り ま す。
ダーシ キ ャ ラ ク タ (ハ イ フ ンではない) は変更 さ れない ま ま温存 さ れます。 ハ イ フ ン区切
り さ れた単語の各部分に変更が加え ら れ る こ と はな く 、ただハ イ フ ンが除去 さ れ る だけで
す。ハ イ フ ン除去を無効にす る には、open_page( ) で下記のオプシ ョ ン リ ス ト を用い ます:
contentanalysis={dehyphenate=false}
注記 区域の末尾でハイ フ ン区切 り さ れた単語は認識 さ れませんので、ハイ フ ン除去はそれに対
し ては一切行われません (すなわち そのハイ フ ンはテキス ト の中に残 り ます)。
影付 き ・ 擬似太字テキス ト 除去 PDF 文書は と き に、 ページの意味内容には貢献 し ない、
ただあ る 種の視覚効果を生み出すためだけの冗長テ キ ス ト を含んでい ます。影付 き テ キ ス
ト 効果を生み出すにはたいてい、テ キ ス ト 本体を少 し ずつ位置をず ら し なが ら 複数複製 し
て重ね る と い う 方法が採 ら れます。 こ の各層のテ キ ス ト に不透明な色をつければ、 下層の
テ キ ス ト はほ と ん ど隠れ、見え る 部分が影付 き 効果を生み出す よ う に見かけ上見え る ので
す。
同様に、 ワ ープ
ロ ソ フ ト はと きに
擬似太字テ キ ス ト
生成機能に対応 し
て い ま す。 ボール
ド フ ォ ン ト が入手不可能な と き に も テ キ ス ト を見かけ上太字に見せかけ る ため、そのテ キ
ス ト はページ上に同 じ 色で何度 も 配置 さ れます。その際にほんの少 し 位置をず ら し ていけ
ば、 太字テ キ ス ト であ る かの よ う に見せ ら れ る わけです。
擬似影付 き や擬似太字テ キ ス ト 、 ない し 同様の擬似視覚効果は、 テ キ ス ト を抽出 し て
再利用 し よ う と す る 際に困っ た問題をひ き 起 こ し ます。ただ視覚効果のためだけの冗長テ
キ ス ト 内容が、ページ内容 と し ては不要であ る に も かかわ ら ず一緒に処理 さ れて し ま う た
めです。
単語検出機能が有効に さ れてい る 場合、 デフ ォ ル ト では TET は こ う し た冗長な擬似視
覚効果を認識 し て除去 し ます。 影付 き 除去を無効にする には、 open_page( ) で下記のオプ
シ ョ ン リ ス ト を用い ます :
contentanalysis={shadowdetect=false}
ア ク セ ン ト 付 き キ ャ ラ ク タ 多 く の言語で、 ア ク セ ン ト な ど の分音記号が、 別の キ ャ ラ
ク タ のそばに配置 さ れて複合キ ャ ラ ク タ を形成 し ます。TeX をは じ め と す る い く つかの組
版プ ロ グ ラ ムでは、 2 つのキ ャ ラ ク タ (字母キ ャ ラ ク タ と ア ク セ ン ト ) を別々に出力 し て
6.5 内容分析
85
1 個の複合キ ャ ラ ク タ を生成 し ます。 た と えば、 ä キ ャ ラ ク タ を生成す る ために、 まず文
字 a がページ上に配置 さ れ、ついで分音符キ ャ ラ ク タ ¨ がその上に配置 さ れます。TET は
こ の状況を検出 し 、 2 個のキ ャ ラ ク タ を再結合 し て正 し い複合キ ャ ラ ク タ を形成 し ます。
86
6 章 : テキス ト 抽出
6.6 レ イ ア ウ ト 分析
TET は、 最 も 可能性の高いテ キ ス ト 抽出順序を決定する ために、 ページ上のテ キ ス ト の レ
イ ア ウ ト を分析 し ます。 こ の自動処理は、 い く つかのオプシ ョ ン で支援す る こ と も 可能で
す。 処理す る 文書の性質について事前の知識があ る 場合には、 適切なオプシ ョ ン を与え る
こ と に よ っ てテ キ ス ト 抽出結果を向上 さ せ る こ と がで き ます。
各種文書ス タ イル さ ま ざ ま な レ イ ア ウ ト や ス タ イ ルの文書を処理す る ために、 い く つ
かの内部パ ラ メ タ が利用可能です。 た と えば、 新聞のページは大量のテ キ ス ト が多段組に
な っ てい る こ と が多 く 、 事業報告書は余白に注釈が し ば し ば現れ る 、 な ど です。 TET は、
い く つかの種類の文書に対す る 定義済み設定を含んでい ます。 こ れ ら の設定は、 下記の よ
う に open_page( ) でオプシ ョ ン リ ス ト を用いて有効にす る こ と がで き ます :
docstyle=papers
docstyle オプシ ョ ン では以下の種類が利用可能です (表 6.4 にい く つか典型的な文書ス タ
イ ルの例を挙げます) :
> book : 通常のページに よ る 典型的な書籍レ イ ア ウ ト
> business : ビ ジネ ス文書
> fancy : 複雑な、 ま た と き に イ レ ギ ュ ラ ーな レ イ ア ウ ト を持つ、 意匠を凝 ら し たページ
> forms : 構造化 さ れた フ ォーム
> generic : と く に分類のない最 も 一般的な文書
> magazines : 雑誌の記事。 多 く は 3 段組ない し それ以上で、 画像やグ ラ フ ィ ッ ク がち り
ばめ ら れてい る
> papers : 多段組 ・ 大紙面 ・ 小活字の新聞
> science : 科学記事。 多 く は 2 段組ない し それ以上で、 画像 ・ 式 ・ 表組な ど がち り ばめ ら
れてい る
> searchengine : こ の分類は、 入力文書の特定の種類を指す も のではな く 、 TET を検索エ
ン ジ ンのための イ ンデ ク サの典型的要請に最適化 し ます。生テ キ ス ト のみを発出 し 、処
理を高速化す る ために、 い く つかの レ イ ア ウ ト 検出機能が無効化 さ れます。 た と えば、
表組 ・ ページ構造認識が無効化 さ れます。
> spacegrid: こ の分類は、 メ イ ン フ レーム シ ス テ ム で よ く 生成 さ れ る リ ス ト 指向の レ ポー
ト を対象 と し てい ます。 こ の種の文書の特徴は、 視覚レ イ ア ウ ト が、 テ キ ス ト の明示
的な位置合わせではな く 、 空白キ ャ ラ ク タ に よ っ て作 り 出 さ れてい る こ と です。 こ の
種の文書を処理す る 際には、 い く つかの処理 ス テ ッ プ (影付 き 検出な ど) を ス キ ッ プ
し う る ので、 テ キ ス ト 抽出が高速化 さ れえ ます。
最 も 適切な文書ス タ イ ルを選ぶ こ と に よ っ て、 処理を速め、 テ キ ス ト 抽出結果を向上 さ せ
ら れ る 可能性があ り ます。
複雑な レ イ ア ウ ト 文書の種類に よ っ ては、 非常に凝っ たページ レ イ ア ウ ト を用い る も
のがあ り ます。 た と えば雑誌や定期刊行物では、 TET はページ上の段組間の関係を正 し く
決定す る こ と がで き ない場合があ り ます。 こ の よ う な状況では、 処理時間を長 く かけ る こ
と に よ り 、 抽出 さ れ る テ キ ス ト を 改善す る こ と が可能です。 こ れは structureanalysis ・
layoutanalysis ページオプシ ョ ンで制御で き ます。 例 :
structureanalysis={list=true bullets={{fontname=ZapfDingbats}}}
layoutanalysis = {layoutrowhint={full separation=preservecolumns}}
layoutdetect=2
layouteffort=high
6.6 レ イ アウ ト 分析
87
表 6.4 い ろ い ろ な文書ス タ イル
docstyle=book
docstyle=business
docstyle=fancy
docstyle=magazines
docstyle=papers
docstyle=science
docstyle=spacegrid
88
6 章 : テキス ト 抽出
表組検出 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>
6.6 レ イ アウ ト 分析
89
90
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 の さ ま ざ ま な重要概念
91
> 基本多言語面 (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
92
符号化形式
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 文書オプシ ョ
ンに も 依存 し ます (96 ページの 7.3 「Unicode 後処理」 を参照)。
適切な ら ば、 TET は組文字を構成キ ャ ラ ク タ 列に分割 し ま す。 こ のキ ャ ラ ク タ 列は、
get_text( ) が返すテ キ ス ト に組み込まれます。 各キ ャ ラ ク タ ご と に、 その元 と な っ た グ リ
フ (群) に関す る 情報は get_char_info( ) で得 る こ と がで き ますが、 その際、 そのキ ャ ラ
ク タ がキ ャ ラ ク タ 列内の先頭なのかそれ と も 後続なのか と い う 情報 も 一緒に得 ら れ る よ
う にな っ てい ま す。 位置情報はキ ャ ラ ク タ 列内の先頭キ ャ ラ ク タ に対 し てのみ返 さ れ ま
す。 キ ャ ラ ク タ 列内の後続キ ャ ラ ク タ は固有の位置情報 ・ 幅情報 と い う も のを一切持た な
いので、 先頭キ ャ ラ ク タ と 併せて処理す る 必要があ り ます。
対応グ リ フ を持た ないキ ャ ラ ク タ ページ上のグ リ フは、 そのすべてが 1 つない し 複数
の Unicode キ ャ ラ ク タ にマ ッ プ さ れますが、 逆に TET が出力す る キ ャ ラ ク タ は、 そのす
べてが実在のグ リ フ にマ ッ プ さ れてい る と は限 り ません。対応す る グ リ フ を持つキ ャ ラ ク
タ を有形キ ャ ラ ク タ (real character) と 呼び、 持た ない も の を無形キ ャ ラ ク タ (artificial
character) と 呼びます。 こ の よ う な、 直接対応す る グ リ フ がないのに出力 さ れ る 無形キ ャ
ラ ク タ は、 い く つかの種類に分類で き ます。
> 組文字 (上述) は複数の Unicode キ ャ ラ ク タ の列にマ ッ プ さ れますが、 こ の と き 列内の
先頭キ ャ ラ ク タ は実在のグ リ フ に対応 し ますが、 残 り のキ ャ ラ ク タ は対応グ リ フ を持
ち ません。
> lineseparator/wordseparator オプシ ョ ンで挿入 さ れ る 区切 り キ ャ ラ ク タ は、 対応グ リ フ
を持たない無形キ ャ ラ ク タ です。
7.1 Unicode の さ ま ざ ま な重要概念
93
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 メ ンバ
に よ っ て識別す る こ と も で き ます し (177 ページの表 11.13 を参照)、 あ る いは TETML 内
の Glyph/@textrendering 属性に よ っ て識別す る こ と も で き ます。
不可視テ キ ス ト を無視 し たい と き は下記のページオプシ ョ ン を用い ます :
ignoreinvisibletext=true
7.2.2 粒度 word ない し それ以上のための フ ィ ル タ
以下の フ ィ ル タ は granularity=word ・ line ・ page に対 し てのみ有効です。
ハ イ フ ン除去 ハ イ フ ン除去は、 ハ イ フ ン を削除 し て、 ハ イ フ ンで分割 さ れていた単語の
各部分を結合 さ せます。
単語 を 複数行に分割す る た め に用い ら れ て い る ハ イ フ ン は、 TET_char_info 構造の
attributes メ ンバに よ っ て識別す る こ と も で き ます し (177 ページの表 11.13 を参照)、 あ
る いは TETML 内の Glyph/@hyphenation 属性に よ っ て識別す る こ と も で き ます。
ハ イ フ ン除去は下記のページオプシ ョ ンに よ っ て無効化す る こ と がで き ます :
contentanalysis={dehyphenate=false}
ハ イ フ ン報告 ハ イ フ ン除去が有効にな っ てい る と き 、 生成 さ れ る グ リ フ リ ス ト 内、すな
わち get_char_info( ) が返すグ リ フ の リ ス ト 内で、 あ る いは TETML 内の Glyph 要素群で、
ハ イ フ ネーシ ョ ン さ れた単語の各部の間のハ イ フ ン キ ャ ラ ク タ が報告 さ れ る か ど う か を
選ぶ こ と がで き ます。 デフ ォ ル ト ではハ イ フ ンは除去 さ れます。
94
7 章 : 高度な Unicode 処理
し か し 、 応用に よ っ ては、 ページ上のハ イ フ ンの正確な位置を知 る 必要があ る 場合が
あ り ます。 た と えば、 TET ク ッ ク ブ ッ ク の highlight_search_terms ・ search_and_replace_text
ト ピ ッ ク では、元の単語の上に注釈ま たは置換テ キ ス ト をかぶせ る 際にハ イ フ ン グ リ フ を
考慮に入れてい ます。 こ の よ う な状況の場合には、 下記のページオプシ ョ ン を用いれば、
ハ イ フ ン除去処理に よ っ て検知 さ れたすべてのハ イ フ ン を含め る よ う TET に指示す る こ
と がで き ます :
contentanalysis={keephyphenglyphs=true}
ハ イ フ ンは、get_char_info( ) が返す TET_char_info 構造内の attributes メ ンバの TET_ATTR_
DEHYPHENATION_ARTIFACT フ ラ グ に よ っ て識別す る こ と も で き ま す し (177 ページの表
11.13 を参照)、 あ る いは、 TETML 内で Glyph/@dehyphenation 属性の値 artifact で識別す
る こ と も で き ます。
影付 き除去 影付 き や擬似太字 と い っ た視覚効果のためだけの冗長テ キ ス ト は削除 さ れ
ます。
影付 き ・ 擬似太字テ キ ス ト は、 TET_char_info 構造の attributes メ ンバに よ っ て識別す
る こ と も で き ます し (177 ページの表 11.13 を参照)、あ る いは TETML 内で Glyph/@shadow
属性に よ っ て識別す る こ と も で き ます。
影付 き 除去は下記のページオプシ ョ ンで無効化で き ます :
contentanalysis={shadowdetect=false}
マ ッ プ な し グ リ フ Unicode へマ ッ プで き ないグ リ フは、 私用領域内のキ ャ ラ ク タ へ置 き
換え ら れます (106 ページの 「マ ッ プ不能グ リ フ」 の項を参照) 。 場合に よ っ ては、 使え
る Unicode 値を グ リ フ に割 り 当て る ために必要な充分な情報を PDF 文書が含んでいない
(あ る い は情報 が あ っ て も 整合 し て い な い) こ と が あ り ま す。 こ の よ う な 場合 に は、
unknownchar 文書オプシ ョ ンで指定 さ れた キ ャ ラ ク タ が割 り 当て ら れます。
すべての PUA キ ャ ラ ク タ は、 デフ ォ ル ト では Unicode 未知キ ャ ラ ク タ U+FFFD へ置 き
換え ら れ ま す。 こ の動作は、 fold 文書オプシ ョ ン で変え る こ と も で き ま す。 下記のオプ
シ ョ ン リ ス ト は、 すべての未知の キ ャ ラ ク タ を、 すな わち PUA キ ャ ラ ク タ と 、 有用な
Unicode 値を決定で き なか っ た キ ャ ラ ク タ と を、 除去 し ます :
fold={{[:Private_Use:] remove} {[U+FFFD] remove} default}
マ ッ プな し グ リ フ (すなわち、 ページ上では見え てい る が、 TET で抽出で き ないキ ャ ラ ク
タ ) は、 TET_char_info 構造の unknown メ ンバに よ っ て識別す る こ と も で き ます し 、 あ る
いは、 TETML 内で Glyph/@unknown 属性で識別する こ と も で き ます。
7.2 Unicode 前処理 (フ ィ ル タ リ ング)
95
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 キ ャ ラ ク タ か
96
7 章 : 高度な Unicode 処理
ら 選択 さ れた部分集合に対 し て字形統合を適用す る こ と も で き ます。 こ れを Unicode 集合
と いい ます。 その文法は、 146 ページの 「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 に よ っ て内部的に識別 さ れていま
すので (固定の Unicode プ ロパテ ィ を持つのではな く )、 こ の字形統合の ド
メ イ ン を指定するにはキーワー ド _dehyphenation を用います :
U+002D
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}}
ҿ
ҿ
U+0640
U+0640
ಯ
U+201C
U+002D
U+0022
7.3 Unicode 後処理
97
デ フ ォ ル ト 字形統合 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 オプ シ ョ ン で変え る こ と も で き ま
す) へマ ッ プ : fold={{[:Private_Use:] unknownchar}}
᪽
U+E001
U+FFFD
ハイ フ ン除去 さ れた単語の中のすべてのハイ フ ン を除去 :
fold={{_dehyphenation remove}}
U+002D
ア ラ ビ ア モ ジの タ ト ウ ォ ールキ ャ ラ ク タ をすべて除去 :
fold={{[U+0640] remove}}
U+0640
ҿ
すべての制御キ ャ ラ ク タ と 、 Unicode で割 り 当て られていないすべてのキ ャ
b
ラ ク タ と を除去 (TETML 出力を生成する際には、 こ れら の字形統合は、 他の U+000C U+03A2
すべての字形統合の後つねに行われます) :
fold={{[:Control:] remove} {[:Unassigned:] remove}}
98
7 章 : 高度な Unicode 処理
出力
なし
なし
なし
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. デ フ ォ ル ト では こ の分解は、 特定のキ ャ ラ ク タ 群を温存する ために、 すべてのキ ャ ラ ク タ に対 し ては適用 さ れませ
ん。 詳 し く は、 98 ページの 「デ フ ォ ル ト 字形統合」 を参照 し て く だ さ い。
1. www.unicode.org/Public/5.2.0/charts/ を参照。
7.3 Unicode 後処理
99
互換分解 互換等価な キ ャ ラ ク タ ど う し は、 同一の抽象キ ャ ラ ク タ を表 し ますが、 その体
裁や動作は互いに異な っ てい る 可能性があ り ます。 例 と し ては、 ア ラ ビ ア文字キ ャ ラ ク タ
の単独形 (
ҷ 等) と 位置依存表示形 ( ᦒ ・ ᦔ ・ ᦓ 等) が挙げ ら れます。 互換等
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}
100
7 章 : 高度な Unicode 処理
表 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. デ フ ォ ル ト では こ の分解は、 特定のキ ャ ラ ク タ 群を温存する ために、 すべてのキ ャ ラ ク タ に対 し ては適用 さ れませ
ん。 詳 し く は、 98 ページの 「デ フ ォ ル ト 字形統合」 を参照 し て く だ さ い。
7.3 Unicode 後処理
101
デ フ ォ ル ト 分解 デフ ォ ル ト では、 fraction 以外のすべての分解が有効にな っ てい ます。
多 く のデフ ォ ル ト 分解は _all ド メ イ ンに対 し て (すなわちすべてのキ ャ ラ ク タ に対 し て)
適用 さ れますが、 い く つかは、 表 7.6 に従っ た、 よ り 小 さ なデフ ォ ル ト ド メ イ ンに対 し て
適用 さ れます。 分解を扱 う 正攻法は正規化に よ る こ と です (103 ページの 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
分数はデ フ ォ ル ト では分解 さ れません。 分解する と 整数部 と 分数部が合わ さ っ て不適切な
数字列にな るおそれがあ るから です。 た と えば、 ク ラ イ ア ン ト ア プ リ ケーシ ョ ンがキ ャ ラ
ク タ列

sub
super
(数値 9.5 を表す) を
U+0039 U+00BD
೑
と 勘違い し て、 数値
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
その他のすべての分解は、 デ フ ォ ル ト ですべてのキ ャ ラ ク タ に対 し て有効にな っ ています。
102
7 章 : 高度な Unicode 処理
7.3.3 Unicode 正規化
Unicode規格では、正準等価 と 互換等価の概念に基づ き ( こ れ ら は99ページの 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 正規形 : さ ま ざ ま な例
正規化前
NFC
†
†
U+00C4
U+00C4
$
ɰ
U+0041 U+0308
ɰ
$
U+0308 U+0041
NFD
$
†
$
$
U+0308 U+0041
ɰ
ᚏ
ᚏ
U+FB01
U+FB01
ೖ
ೖ
U+0033 U+2075
ഺ
‡
U+212B
U+00C5
ɰ
$
ೖ
ɲ
റ
റ
റ
U+2122
U+2122
൘
൘
൘
U+2163
U+2163
U+2163
$
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+030A
U+2122
$
U+00C4
ɰ
ɰ
U+0041 U+0308
U+0066 U+0069
U+0033 U+2075
$
$
U+00C4
†
U+0308 U+0041
ᚏ
NFKD
†
U+0041 U+0308
U+FB01
U+0033 U+2075
ɰ
U+0041 U+0308
U+00C4
ɰ
NFKC
9
U+0049 U+0056
7
0
U+0054 U+004D
,
9
U+0049 U+0056
7.3 Unicode 後処理
103
表 7.7 Unicode 正規形 : さ ま ざ ま な例
正規化前
ᚿ
U+FB48
104
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
7 章 : 高度な Unicode 処理
㦗
U+0031 U+0030 U+6708
㦗
U+0031 U+0030 U+6708
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 値を内容 と し て持ち ます。
7.4 追加キ ャ ラ ク タ と サロゲー ト
105
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 オプシ ョ ン を用い る と (160 ページの 11.6 「文書関
数」 を参照)、 グ リ フ に対す る Unicode マ ッ ピ ン グ を何通 り かの方式で制御す る こ と がで
き ます。 利用可能な方式の概要を以下に列挙 し ます (組み合わせて利用す る こ と も 可能)。
こ う し た制御は、 フ ォ ン ト ご と に適用す る こ と も で き ま す し 、 1 つの文書内のすべての
フ ォ ン ト に対 し て グ ロ ーバルに適用す る こ と も で き ます :
> forceencoding サブオプシ ョ ン を用い る と 、 PDF におけ る 定義済みのエン コ ーデ ィ ン グ
WinAnsiEncoding ・ MacRomanEncoding が用い ら れ る たびに、 すべて別のエン コ ーデ ィ
ン グで処理 さ せ る こ と がで き ます。
> codelist ・ tounicodecmap サブオプシ ョ ン を用い る と 、 Unicode 値の リ ス ト を シ ンプルテ
キ ス ト 形式 (codelist リ ソ ース) で与え る こ と がで き ます。
106
7 章 : 高度な Unicode 処理
> glyphlist サブオプシ ョ ン を用い る と 、非標準グ リ フ名を Unicode 値にマ ッ プ し た リ ス ト
を与え る こ と がで き ます。
> glyphrule サブオプシ ョ ン を用い る と 、グ リ フ名の数値か ら Unicode 値を アルゴ リ ズ ム的
に導 き 出すための規則を定義す る こ と がで き ます。 encodinghint オプシ ョ ン を用い る
と 、 内部規則を制御す る こ と がで き ます。
> 定義済みのエ ン コ ーデ ィ ン グはすでに何ダース も あ り ますが、 それに加え て カ ス タ ム
のエン コ ーデ ィ ン グ を定義す る こ と も 可能で、 こ れは encodinghint オプシ ョ ンで、 ま
たは glyphrule オプシ ョ ンの encoding サブオプシ ョ ンで利用する こ と がで き ます。
> PDF が充分な情報を与えずフ ォ ン ト が PDF に埋め込まれて も いない と き に外部の フ ォ
ン ト か ら Unicode マ ッ ピ ン グ情報が得 ら れ る よ う 設定 し てお く こ と も 可能です。
PDFlib FontReporter Plugin 1 で 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 か ら 無償ダウ ン ロー ド 可能です。
7.5 グ リ フ に対する Unicode マ ッ ピ ング
107
図 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 の範囲内の値でなければな り
ません。
108
7 章 : 高度な Unicode 処理
図 7.3
あ る ロ ゴ タ イ プのフ ォ ン ト に対する フ ォ ン ト レポー ト を見た と こ ろ、 こ のフ ォ ン ト は誤っ た Unicode
マ ッ ピ ン グ を持 っ ている こ と がわか っ た。 こ れはカ ス タ ムの コ ー ド リ ス ト で正す こ と が可能。
> その後につづけてその行には、その コ ー ド に対す る Unicode コ ー ド 点を 7 つま で書 く こ
と がで き ます。 値は 10 進か (前に x か 0x をつけて) 16 進記法で与え る こ と がで き ま
す。 UTF-32 に対応 し てい ますので、 サ ロ ゲー ト ペア も 使え ます。
コ ー ド リ ス ト はフ ァ イ ル名の拡張子 と し て .cl を用い る き ま り にな っ てい ます。 コ ー ド リ
ス ト は codelist リ ソ ース を用いて設定を行 う こ と がで き ます。 コ ー ド リ ス ト リ ソ ース が何
も 明示的に指定 さ れていない場合、 TET は <mycodelist>.gl ( こ こ で <mycodelist> は リ ソ ー
ス名) と い う 名前の フ ァ イ ルを searchpath ヒ エ ラ ルキーの中で探 し ます (詳 し く は、 61
ページの 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 よ り も 形式が簡単なため、 好ん
で用い ら れます。
7.5 グ リ フ に対する Unicode マ ッ ピ ング
109
CMap では、 フ ァ イ ル名に拡張子をつけない き ま り にな っ てい ます。 ToUnicode CMap
は cmap リ ソ ース を用いて設定を行 う こ と がで き ます (61 ページの 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 に対応 し てい ますので、 サ ロ ゲー ト ペア も 使え ます。
> グ リ フ名の中に印字不能キ ャ ラ ク タ を入れたい場合はテ キ ス ト フ ァ イ ル用のエ ス ケー
プシーケ ン ス を用い ます (61 ページの 5.2 「 リ ソ ース設定 と フ ァ イ ル検索」 を参照)。
グ リ フ リ ス ト はフ ァ イ ル名の拡張子 と し て .gl を用い る き ま り にな っ てい ます。 グ リ フ リ
ス ト は glyphlist リ ソ ース を用いて設定を行 う こ と がで き ます。グ リ フ リ ス ト リ ソ ース が何
も 明示的に指定 さ れていない場合、 TET は <myglyphlist>.gl ( こ こ で <myglyphlist> は リ
ソ ース名) と い う 名前の フ ァ イ ルを searchpath ヒ エ ラ ルキーの中で探 し ます (詳 し く は、
61 ページの 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 を参照
110
7 章 : 高度な Unicode 処理
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}");
外部フ ォ ン ト フ ァ イ ルの設定については、 詳 し く は、 61 ページの 5.2 「 リ ソ ー ス設定 と
フ ァ イ ル検索」 を参照 し て く だ さ い。
7.5 グ リ フ に対する Unicode マ ッ ピ ング
111
112
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 関数は、 画像デー タ を メ モ リ 内で受け渡 し ます。 こ れは、 画像
デー タ を他の処理構成要素へ、 デ ィ ス ク フ ァ イ ルを扱 う 必要な し に受け渡 し たい と き
に便利です。
詳細は、 自分の画像抽出上の要請に依存 し ます (118 ページの 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 画像抽出の基本
113
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 イ ン タ フ ェース を用いて画像 メ タ デー タ を直接抽出す る 方法を示 し てい ます。
114
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 画像の連結 と フ ィ ル タ リ ング
115
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}}
116
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 メ ンバ
と 、 TETML 内の PlacedImage/@image 属性は、
背後の画像 リ ソ ース を特定するにすぎ ません
はい : get_image_info( ) が
返す imageid メ ンバ と 、
TETML 内の Image/@id 属
性
TET コ マ ン ド ラ イ ン ツール < フ ァ イル名 >_p< ページ番号 >_< 画像番号 >.
における フ ァ イル命名規則 [tif|jpg|jpx]
< フ ァ イル名 >_I< 画像 ID>.
[tif|jpg|jpx]
8.3 配置画像 と 画像 リ ソ ース
117
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( ) を呼
び出せば、 前者な ら 画像デー タ をデ ィ ス ク フ ァ イ ルへ書 き 出す こ と がで き 、 後者な ら ピ ク
セルデー タ を メ モ リ 内で受け渡す こ と がで き ます。
118
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 配置画像の視覚情報
119
double yDpi = 72 * height / tet.height;
...
}
回転 さ れた り 斜形化 さ れた り し てい る 画像については、 dpi 値は無意味か も し れない こ と
に留意 し て く だ さ い。 画像の dpi 計算の た めの完全な コ ー ド は、 TET ク ッ ク ブ ッ ク の
determine_image_resolution ト ピ ッ ク 内にあ り ます。
120
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 制約 と 注意
121
122
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 を参照) で符号化 さ れてお り 、 以下の情報を含んで
い ます ( こ れ ら の項目のい く つかはオプシ ョ ナルです) :
> 一般文書情報 ・ メ タ デー タ
> 各ページのテ キ ス ト 内容 (単語ま たは段落。 行を含め る こ と も 可能)
> グ リ フ の フ ォ ン ト と 位置情報 (フ ォ ン ト 名 ・ サ イ ズ ・ 座標)
> グ リ フ の レ イ ア ウ ト 属性 (下 / 上付 き ・ ド ロ ッ プキ ャ ッ プ ・ 影付 き )
> ハ イ フ ネーシ ョ ン属性
> 構造情報。 例 : 表組
> ページ上の配置画像に関す る 情報
> リ ソ ース情報、 すなわち フ ォ ン ト ・ 色空間 ・ 画像
9.1 TETML を生成
123
> PDF 処理中に例外が発生 し た場合はエ ラ ー メ ッ セージ
TETML 内では、 さ ま ざ ま な要素 と 属性がオプシ ョ ナルです。 詳 し く は、 127 ページの 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.0">
<Creation platform="Linux-x86_64" tetVersion="4.0" date="2010-06-16T19:16:58+02:00" />
<Document filename="../data/FontReporter.pdf" pageCount="9" filesize="128109"
linearized="true" pdfVersion="1.6">
<DocInfo>
<Author>PDFlib GmbH</Author>
<CreationDate>2008-07-08T15:05:39+00:00</CreationDate>
<Creator>FrameMaker 7.0</Creator>
<ModDate>2008-09-30T23:15:19+02:00</ModDate>
<Producer>Acrobat Distiller 7.0.5 (Windows)</Producer>
<Subject>PDFlib FontReporter</Subject>
<Title>PDFlib FontReporter 1.3 Manual</Title>
</DocInfo>
<Metadata>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.1-c041 52.342996, 2008/
05/07-20:48:00
">
<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>PDFlib</Text>
<Box llx="111.48" lly="636.33" urx="161.14" ury="654.33"/>
</Word>
<Word>
<Text>GmbH</Text>
<Box llx="165.06" lly="636.33" urx="214.84" ury="654.33"/>
</Word>
<Word>
<Text>Munchen</Text>
<Box llx="218.75" lly="636.33" urx="292.23" ury="654.33"/>
</Word>
...ページ内容が続く...
</Para>
124
9 章 : TET マー ク ア ッ プ言語 (TETML)
</Content>
</Page>
<Resources>
<Fonts>
<Font id="F0" name="Gen_TheSans-Plain" fullname="MLNGEG+Gen_TheSans-Plain" type="Type 1
CFF" embedded="true"/>
<Font id="F1" name="TheSansExtraBold-Plain" fullname="MLNGEH+TheSansExtraBold-Plain"
type="Type 1 CFF" embedded="true"/>
<Font id="F2" name="TheSans-Plain" fullname="MLNGGI+TheSans-Plain" type="Type 1 CFF"
embedded="true"/>
...さまざまなフォントが続く...
</Fonts>
<ColorSpaces>
<ColorSpace id="CS0" name="DeviceGray" components="1"/>
<ColorSpace id="CS1" name="DeviceRGB" components="3"/>
<ColorSpace id="CS2" name="DeviceCMYK" components="4"/>
<ColorSpace id="CS3" name="Indexed" components="1" base="CS1"/>
</ColorSpaces>
</Resources>
</Pages>
</Document>
</TET>
選択す る TETML モー ド に応 じ て、 さ ら な る 詳細を TETML 内で表す こ と も で き ま す。
TETML モー ド について詳 し く は、 128 ページの 「テ キ ス ト モー ド を選択」 で説明 し ます。
上記サンプルにグ リ フ詳細が加わっ た 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>
</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>
9.1 TETML を生成
125
<Glyph
<Glyph
<Glyph
<Glyph
</Box>
</Word>
126
font="F1"
font="F1"
font="F1"
font="F1"
size="18"
size="18"
size="18"
size="18"
x="254.92"
x="262.44"
x="272.66"
x="282.00"
9 章 : TET マー ク ア ッ プ言語 (TETML)
y="636.33"
y="636.33"
y="636.33"
y="636.33"
width="7.52">c</Glyph>
width="10.22">h</Glyph>
width="9.34">e</Glyph>
width="10.22">n</Glyph>
9.2 TETML の詳細 を制御
さ ま ざ ま な TETML テキス ト モー ド TETML は、 さ ま ざ ま な テ キ ス ト モー ド で生成す る
こ と がで き ます。 各モー ド は、 含むフ ォ ン ト ・ 位置情報の量が異な り 、 ま た、 テ キ ス ト を
よ り 大 き な単位 (粒度) に ま と め る や り 方が異な っ てい ます。 テ キ ス ト モー ド は、 各ペー
ジに対 し て個別に指定す る こ と が可能です。し か し 多 く の場合、TETML フ ァ イ ルは全ペー
ジに対す る デー タ を同一のモー ド で含みます。 以下のテ キ ス ト モー ド が利用可能です :
> glyph モー ド は、 各グ リ フ のテ キ ス ト ・ フ ォ ン ト ・ 座標を含み、 単語グループ化や構造
情報を一切含ま ない低レベルな種類です。 こ れはページ上の元のテ キ ス ト 情報を表 し
てい ますので、 デバ ッ グや分析の用途を想定 し てい ます。
> word モー ド では、 テ キ ス ト は単語ご と に ま と め ら れ、 各単語の座標を持つ Box 要素が
加わ り ます。 フ ォ ン ト 情報は一切得 ら れ ません。 こ のモー ド は、 単語ベース で動作す
る アプ リ ケーシ ョ ン に適 し てい ます。 約物キ ャ ラ ク タ はデフ ォ ル ト では独立 し た単語
と し て扱われますが、 こ の動作はページオプシ ョ ンで変え る こ と も で き ます (84 ペー
ジの 「単語境界検出」 を参照)。 テ キ ス ト の行を 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 の詳細を制御
127
テキス ト モー ド を選択 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 出力を
直接制御す る さ ま ざ ま なオプシ ョ ン の効力を ま と め ま す。 他のすべての文書オプシ ョ ン
は、 処理の詳細を制御す る ために用い る こ と がで き ま す。 文書オプ シ ョ ン の完全な説明
は、 161 ページの表 11.6 にあ り ます。
文書関連 の オ プ シ ョ ン は、 --docopt コ マ ン ド ラ イ ン オ プ シ ョ ン に、 ま た は open_
document( ) 関数に与え る 必要があ り ます。
tetml オプシ ョ ンは、 TETML の一般的な諸側面を制御 し ます。 い く つかの TETML 要
素は、 必要なければ、 elements サブオプシ ョ ン を用いてな く す こ と も で き ます。 下記の文
書オプシ ョ ン リ ス ト は、 生成 さ れ る TETML 出力内に文書レベルの XML メ タ デー タ がな
い よ う に し てい ます :
tetml={ elements={nodocxmp} }
128
9 章 : TET マー ク ア ッ プ言語 (TETML)
engines オプシ ョ ンは、 テ キ ス ト ・ 画像抽出エン ジ ン を有効化ま たは無効化 し ます。 下記
のオプシ ョ ン リ ス ト は、 テ キ ス ト 内容を処理 し ますが、 画像処理は無効化 し てい ます :
engines={noimage}
TETML を生成す る 際に与え ら れたすべての文書オプシ ョ ンは、 下記の文書オプシ ョ ンで
無効化 さ れないかぎ り 、 /TET/Document/Options 要素内に記録 さ れます :
tetml={ elements={nooptions} }
TETML 出力 を制御す る ためのページ オ プ シ ョ ン ペー ジ オ プ シ ョ ン の完全 な 説明は表
11.8 にあ り ます。 ページ関連のオプシ ョ ンは、 --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 の詳細を制御
129
例外処理 PDF 解析中にエ ラ ーが発生 し た場合、 TET は一般には、 可能な ら ばその問題
を 修復 ま た は無視 し よ う と し 、 可能で な い な ら 例外 を 発生 さ せ ま す。 し か し 、 TET で
TETML 出力を生成 し てい る 際には、 PDF 解析上の問題は通常、 TETML 内の Exception 要
素 と し て報告 さ れます :
<Exception errnum="4506">Object 'objects[49]/Subtype' does not exist</Exception>
TETML 出力を処理 し てい る 際に、期待 し た要素でな く Exception 要素が現れた場合をいか
に処理す る かは、 アプ リ ケーシ ョ ン側で手はずを整え る 必要があ り ます。
TETML 出力フ ァ イ ルの生成を妨げ る 問題の場合は (出力フ ァ イ ルへの書 き 込み権限が
ないな ど)、 例外が発生 し 、 有効な TETML 出力は生成 さ れません。
130
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.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 座標で記述 し ます。 1 個の単語が複数の Box 要素を含む場合 も あ り ます。 た と えばハ
イ フ ン区切 り さ れた単語が複数のテキス ト 行にわた っ ている場合や、 単語の先頭が大き な
キ ャ ラ ク タ にな っ ている場合な ど です。
属性 : llx ・ lly1 ・ urx ・ ury1 ・ ulx ・ uly1 ・ lrx ・ lry1
Cell
1 個の表セルの内容を記述 し ます。
属性 : colSpan
ColorSpace
PDF 色空間を記述 し ます。
属性 : alternate ・ base ・ components ・ id ・ name
ColorSpaces
ColorSpace 要素群の コ ン テナ
Content
ページ内容を階層構造 と し て記述 し ます。
属性 : 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 に
対する新 し い値群) ・ pdfe (TET 4.0) ・ pdfx ・ tagged
Encryption
さ ま ざ ま なセキ ュ リ テ ィ 設定を記述 し ます。
属性 : keylength ・ algorithm ・ description ・ masterpassword ・ userpassword ・ noprint ・
nomodify ・ nocopy ・ noannots ・ noassemble ・ noforms ・ noaccessible ・ nohiresprint ・
plainmetadata
9.3 TETML の さ ま ざ ま な要素 と TETML スキーマ
131
表 9.3 TETML 要素 ・ 属性一覧
TETML 要素
説明 と 属性
Exception
TET が発生 さ せた例外に関連する エ ラ ー メ ッ セージ ・ 番号を内容 と し て持ち ます。 PDF
デー タ 構造が正 し く ないために入力か ら充分な情報を抽出で き ない場合には、 こ の
Exception 要素が他の要素を置き換え る こ と があ り ます。
属性 : errnum
Font
フ ォ ン ト リ ソ ース を記述 し ます。 必須の name 属性は正準フ ォ ン ト 名を内容 と し て持ち、
オプ シ ョ ナルな fullname 属性はサブ セ ッ ト 接頭辞を含む フ ォ ン ト 名を持ち ます。
属性 : embedded ・ fullname (TET 4.0) ・ id ・ type ・ name ・ vertical
Fonts
Font 要素群の コ ン テナ
Glyph
1 個のグ リ フ に対する フ ォ ン ト ・ 位置情報の詳細を記述 し ます。 こ の要素は、 こ のグ リ フ
が生み出す Unicode キ ャ ラ ク タ を内容 と し て持ち ます。 こ れは、 た と えば合字の場合な ど、
複数のキ ャ ラ ク タ にな る こ と も あ り ます。 単語に対する 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.0 は 4.0 を生成 し ます。 TET 3 は 3 を生成 し ま し た。 こ れは区別のた
めに利用で き ます)
Text
単語な どの要素のテキス ト 内容
Word
1 個の単語
1. 垂直座標 と 角度はすべて、 topdown ページオ プ シ ョ ン に従 っ て、 左下隅か左上隅のいずれかか ら の相対位置で表 さ れます。
132
9 章 : TET マー ク ア ッ プ言語 (TETML)
133
9 章 : TET マー ク ア ッ プ言語 (TETML)
図 9.1
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 文書は、 123 ページの 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 参照) は下記の よ う に使え ます :
134
9 章 : TET マー ク ア ッ プ言語 (TETML)
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/downloads/details.aspx?familyid=2FB55371-C94E-4373-B0E9-DB4816552E41
こ のプ ロ グ ラ ムは下記の よ う に動作 さ せます :
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 サーバ上で動作 さ せたい と き も 多 く あ り ます。 い く つ
かの重要なシナ リ オ :
9.4 TETML を XSLT で変換
135
> 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"
...
136
9 章 : TET マー ク ア ッ プ言語 (TETML)
9.5 さ ま ざ ま な XSLT サ ン プル
TET デ ィ ス ト リ ビ ュ ーシ ョ ンは、 XSLT を TETML に適用 し た場合の強力 さ を演示す る
XSLT ス タ イ ルシー ト をい く つか含んでい ます。 こ れ ら は、 TETML アプ リ ケーシ ョ ンの出
発点 と し て活用す る こ と も で き ます。 こ の節では、 こ の XSLT サンプル群の概要を紹介す
る と と も に、 サンプル出力を掲載 し ます。 134 ページの 9.4 「TETML を XSLT で変換」 で、
XSLT ス タ イ ルシー ト を動作 さ せ る ための多 く のオプシ ョ ン を説明 し てい ます。 こ の ス タ
イ ルシー ト 群の機能 と 内部動作に関 し て詳 し く は、 XSLT コ ー ド の コ メ ン ト に記 し て あ り
ます。 こ の ス タ イ ルシー ト サンプル群のい く つかの一般的側面 :
> 多 く の XSLT サンプルはパ ラ メ タ に対応 し てお り 、こ れを用いて さ ま ざ ま な処理詳細を
制御する こ と がで き ます。 こ れ ら のパ ラ メ タ は、 XSLT コ ー ド 内で設定す る こ と も で き
ます し 、 環境 (ant な ど) か ら 上書 き す る こ と も で き ます。
> 多 く の XSLT サンプルでは、 特定のテ キ ス ト モー ド (た と えば word モー ド 。 詳 し く は、
127 ページの 「 さ ま ざ ま な 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 入力を受け付け ます。 こ れは文書内の、 特定の フ ォ ン ト を用いた、 かつ指定 さ
れた値 よ り 大 き なサ イ ズの単語の一覧を作 り ます。 こ れは、 特定の フ ォ ン ト / サ イ ズの組
み合わせを検出 し た り 、 品質管理のために有用で し ょ う 。 同 じ コ ン セプ ト を用いて、 大 き
な文字サ イ ズ を用いた テ キ ス ト 部分に基づいた目次を生成す る こ と も で き ます。
9.5 さ ま ざ ま な XSLT サン プル
137
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
138
9 章 : TET マー ク ア ッ プ言語 (TETML)
索引 を生成
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) 生成 さ れた画像
フ ァ イ ル名を用いて画像フ ァ イ ルへ リ ン ク さ れてい ます。
9.5 さ ま ざ ま な XSLT サン プル
139
生テキス ト を TETML か ら 抽出 textonly.xsl ス タ イ ルシー ト は、 任意のモー ド の TETML
入力を受け付け ます。 こ れは、 すべての Text 要素を取得 し つつ、 他のすべての要素を無
視す る こ と に よ り 、 生テ キ ス ト 内容を抽出 し ます。 文書内の PDF 添付 (PDF パ ッ ケージ ・
ポー ト フ ォ リ オを含め) は再帰的に処理 さ れます。
140
9 章 : TET マー ク ア ッ プ言語 (TETML)
10 pCOS イ ン タ フ ェ ース
pCOS (PDFlib Comprehensive Object Syntax) イ ン タ フ ェース は、 PDF 文書のページ内容記
述以外のすべてのセ ク シ ョ ン、 すなわちページサ イ ズ ・ メ タ デー タ ・ イ ン タ ラ ク テ ィ ブ要
素等か ら 任意の情報を取得で き る 簡単でエ レ ガ ン ト な機能を提供 し ま す。 pCOS イ ン タ
フ ェース の利用例 と 、 pCOS パス文法の説明は、 別文書であ る pCOS リ フ ァ レ ン ス に含ま
れてい ます。 さ ら な る 作成例が pCOS ク ッ ク ブ ッ ク にあ り ます :
www.pdflib.com/pcos-cookbook/
141
142
10 章 : pCOS イ ン タ フ ェ ース
11 TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
11.1 オ プ シ ョ ン リ ス ト
オプシ ョ ン リ ス ト は、 さ ま ざ ま な API 関数呼び出 し を制御す る ための、 強力で、 それでい
て簡単な方式です。 多 く の API メ ソ ッ ド では、 オプシ ョ ン リ ス ト が使え る よ う にな っ てい
ますので、 関数に膨大な引数を与え る 必要があ り ません。 略 し て optlist と も いい ます。 こ
れは、 任意の数のオプシ ョ ン を内容 と し て持つ こ と ので き る 文字列です。 オプシ ョ ン リ ス
ト は、 さ ま ざ ま なデー タ 型や、 リ ス ト の よ う な複合デー タ に対応 し てい ます。 多 く の言語
バ イ ンデ ィ ン グでは、 オプシ ョ ン リ ス ト は、 必要な キーワー ド と 値を連結 し てい く こ と に
よ っ て、 簡単に構築す る こ と がで き ます。
バインディング C 言語バ イ ンデ ィ ン グ : sprintf( ) 関数を用いてオプシ ョ ン リ ス ト を構築す る と よ いで し ょ
う。
バインディング .NET 言語バ イ ンデ ィ ン グ : C# プ ロ グ ラ マーは、 AppendFormat( ) StringBuilder メ ソ ッ ド は
整形項目を表すのに中括弧 { } を用いて、 それが引数の文字列表現へ置 き 換え ら れ る こ と
に留意す る 必要があ り ます。 一方 Append( ) メ ソ ッ ド では、 中括弧キ ャ ラ ク タ にいかな る
特別な意味を も 持たせてい ません。オプシ ョ ン リ ス ト 文法は中括弧キ ャ ラ ク タ を利用 し て
い ますので、AppendFormat( ) と Append( ) の ど ち ら の メ ソ ッ ド を使 う か を選ぶ と き には注
意が必要です。
11.2 オ プ シ ョ ン リ ス ト 文法
正式な オ プ シ ョ ン リ ス ト 文法定義 オプシ ョ ン リ ス ト は、 以下の規則に従っ て構築す る
必要があ り ます :
> オプシ ョ ン リ ス ト 内のすべての要素 (キー と 値) は、 1 個ない し 複数の右記区切 り キ ャ
ラ ク タ に よ っ て区切 る 必要があ り ます : スペース ・ タ ブ ・ キ ャ リ ッ ジ リ タ ーン ・ ニ ュ ー
ラ イ ン ・ 等号 「=」。
> 一番外側の囲み中括弧は、 要素には含まれません。 { } と 書けば空要素を意味 し ます。
> 一番外側の中括弧の中の区切 り キ ャ ラ ク タ は、要素を分割す る 効力を も はや持たず、要
素の一部分 と な り ます。 ですので、 区切 り キ ャ ラ ク タ を含む要素は、 中括弧で囲む必
要があ り ます。
> 先頭ま たは末尾に中括弧を持つ要素は、 中括弧で囲む必要があ り ます。
> 要素が片方だけの中括弧を含む場合には、 その中括弧は直前にバ ッ ク ス ラ ッ シ ュ キ ャ
ラ ク タ を 付け て保護す る 必要が あ り ま す。 要素の閉 じ 中括弧の直前のバ ッ ク ス ラ ッ
シ ュ も 、 直前にバ ッ ク ス ラ ッ シ ュ キ ャ ラ ク タ を付け る 必要があ り ます。
> オプシ ョ ン リ ス ト はバ イ ナ リ ゼ ロ 値を含んではいけ ません。
オプシ ョ ン リ ス ト は、 こ の PDFlib リ フ ァ レ ン ス内の仕様に従い、 リ ス ト 値を持つ こ と が
あ り え ます。 リ ス ト 値は 1 個ない し 複数の要素 ( こ れ自体 も ま た リ ス ト であ る 場合 も あ り
ます) を内容 と し て持ち ます。 それ ら は上述の規則に従っ て区切 ら れますが、 等号は区切
り キ ャ ラ ク タ と し て も はや見な さ れない と い う 点が唯一異な り ます。
単純オ プ シ ョ ン リ ス ト 多 く の場合、 オプシ ョ ン リ ス ト は 1 個ない し 複数のキー / 値対
を内容 と し て持ち ます。 キー と 値は、 ま た複数のキー / 値対 も 同様に、 1 個ない し 複数の
11.1 オプ シ ョ ン リ ス ト
143
空白キ ャ ラ ク タ (スペース ・ タ ブ ・ キ ャ リ ッ ジ リ タ ーン ・ ニ ュ ー ラ イ ン) で区切 る 必要が
あ り ます。 あ る いは、 キーは等号 「=」 で値 と 区切 る こ と も で き ます :
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 個を内容 と し て持つ
オプシ ョ ン リ ス ト の リ ス ト です :
144
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
glyphmapping { {fontname=CMSY* glyphlist=tarski} {fontname=ZEH* glyphlist=zeh}}
オプシ ョ ン リ ス ト 1 個を内容 と し て持つ リ ス ト において、 そのオプシ ョ ン リ ス ト の中の
fontname 値が スペース を含んでい る ので、 さ ら に中括弧で囲む必要があ り ます :
glyphmapping={ {fontname={Globe Logos One} codelist=GlobeLogosOne} }
キー ワー ド 2 個を内容 と し て持つ リ ス ト :
fonttypes={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\\}
誤り!
正しい!
11.2 オプ シ ョ ン リ ス ト 文法
145
11.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 プ ロ パテ ィ 集合群の リ ス ト を内容 と し て持ち ます。
146
11 章 : 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]。 それ以
外の場所では、 「^」 は特別な意味を持ち ません。
表 11.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
オプシ ョ ンに よ っ ては、 数値 と キー ワー ド のいずれかの値を と る も の も あ り ます。
数値
オプシ ョ ン リ ス ト は、 い く つかの数値型に対応 し てい ます。
11.3 基本型
147
表 11.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
148
=
=
=
=
-123.45
-123,45
-1.2345E2
-1.2345e+2
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
11.4 図形型
矩形 矩形は、 矩形の左下隅 と 右上隅の x ・ y 座標を指定す る float 値 4 個の リ ス ト です。
座標を解釈す る ための座標系 (デフ ォ ル ト ま たはユーザー座標系) はオプシ ョ ンに よ っ て
異な り ますので、 都度説明 し て あ り ます。 例 :
includebox = {{0 0 500 100} {0 500 500 600}}
11.4 図形型
149
11.5 一般関数
11.5.1 オ プ シ ョ ン処理
C++ void set_option(string 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 表 11.2 に従っ て グ ロ ーバルオプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。1 つのオ
プシ ョ ンが複数回与え ら れた と き は、最後に出現 し た も のがそれ以前の も のを上書 き し ま
す。 1 個のオプシ ョ ンに複数の値を与え る ためには (searchpath な ど)、 こ のオプシ ョ ン
の リ ス ト 引数内ですべての値を与え て く だ さ い。
右記のオプシ ョ ンが使え ます : asciifile ・ cmap ・ codelist ・ encoding ・
filenamehandling ・ fontoutline ・ glyphlist ・ license ・ licensefile ・ logging ・ userlog ・
outputformat ・ resourcefile ・ searchpath
詳細 表 11.2 でその旨記 さ れてい る オプシ ョ ンについては、 こ の関数を複数回呼び出 し て値を
蓄積 さ せ る こ と も で き ます。 その旨記 し ていないオプシ ョ ンでは、 新 し い値が古い値を上
書 き し ます。
表 11.2 TET_set_option( ) のグ ローバルオプ シ ョ ン一覧
オプ シ ョ ン
説明
asciifile
(論理値。 i5/iSeries ・ zSeries 上でのみ対応) ASCII エ ン コ ーデ ィ ングのテキス ト フ ァ イル (UPR 設
定フ ァ イル ・ グ リ フ リ ス ト ・ コ ー ド リ ス ト な ど) を受け付けます。 デ フ ォ ル ト : i5/iSeries では
true、 zSeries では false
cmap1 , 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 CMap リ ソ ース 1 個の名前 と 値を内容 と し て
持ち ます (61 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
codelist1, 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 コ ー ド リ ス ト リ ソ ース 1 個の名前 と 値を内容
と し て持ち ます (61 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
encoding1, 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 エ ン コ ーデ ィ ング リ ソ ース 1 個の名前 と 値を
内容 と し て持ち ます (61 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
filenamehandling
(キーワー ド 。 Windows では必須ではあ り ません) フ ァ イル名の タ ーゲ ッ ト エ ン コ ーデ ィ ング (デ
フ ォル ト : Mac OS X では unicode、 それ以外では legacy) :
ascii
7 ビ ッ ト ASCII
basicebcdic コ ー ド ページ 1047 に従っ た、 ただ し Unicode 値 <= U+007E のみの基本 EBCDIC
basicebcdic_37
コ ー ド ページ 0037 に従っ た、 ただ し Unicode 値 <= U+007E のみの基本 EBCDIC
honorlang 環境変数 LANG を解釈 し 、 それが utf8 ・ UTF-8 ・ cpXXXX ・ CPXXXX ・ iso8859-x ・ ISO8859-x のいずれかを指定 し ている な ら フ ァ イル名へ適用。
legacy
auto エ ン コ ーデ ィ ング (すなわち カ レ ン ト シ ス テムエ ン コ ーデ ィ ング) を用いて フ ァ
イル名を解釈 し 、 honorlang パラ メ タ が設定 さ れている な ら LANG 変数を解釈。
unicode (EBCDIC-) UTF-8 形式の Unicode エ ン コ ーデ ィ ング
すべての有効な エ ン コ ーデ ィ ング名
TET が認識する任意の (内蔵ま たはユーザー定義の) エ ン コ ーデ ィ ング
150
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 11.2 TET_set_option( ) のグローバルオプ シ ョ ン一覧
オプ シ ョ ン
1, 2
説明
fontoutline
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 FontOutline リ ソ ース 1 個の名前 と 値を内容 と
し て持ち ます (61 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
glyphlist1, 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 グ リ フ リ ス ト リ ソ ース 1 個の名前 と 値を内容
と し て持ち ます (61 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
hostfont1, 2
(名前文字列の リ ス ト ) 文字列対の リ ス ト 。 各対は、 埋め こ まれていない フ ォ ン ト に対 し て用いた
いホス ト フ ォ ン ト の PDF フ ォ ン ト 名 と UTF-8 符号化 さ れた名前を内容 と し て持ち ます。
license
(文字列) ラ イ セ ン スキーを設定 し ます。 これは、 open_document*( ) を初めて呼び出すよ り 前に設
定する必要があ り ます。
licensefile
(文字列) ラ イ セ ン スキー (群) を内容 と し て持つ フ ァ イルの名前を設定 し ます。 こ のラ イ セ ン ス
フ ァ イルは、 TET_open_document*( ) を初めて呼び出すよ り 前に 1 回だけ設定する こ と がで き ます。
あ るいは、 ラ イ セ ン ス フ ァ イルの名前は、 PDFLIBLICENSEFILE と い う 環境変数で、 または
(Windows では) レ ジ ス ト リ を通 じ て与え る こ と も で き ます。
logging1
(オプ シ ョ ン リ ス ト 。 非サポー ト ) 表 11.5 に従 っ て ログ記録出力を指定する オプ シ ョ ン リ ス ト 。 あ
るいは、 ログ記録オプ シ ョ ン群は、 TETLOGGING と い う 環境変数で、 ま たは Windows ではレ ジ ス
ト リ を通 じ て与え る こ と も で き ます。 空のオプ シ ョ ン リ ス ト にする と 、 前回の呼び出 し で設定 し
たオプ シ ョ ン群によ っ て ログ記録が有効にな り ます。 環境変数が設定 さ れている場合には、 ロ グ
記録は、 TET_new( ) への最初の呼び出 し の直後から 開始 さ れます。
userlog
(名前文字列。 非サポー ト ) ログ記録が有効に さ れている場合に ログ フ ァ イルへ書き込まれる任意
の文字列。
outputformat
(キーワー ド 。 C ・ RPG 言語バイ ンデ ィ ングのみ) TET_get_text( ) が返すテキス ト の形式を指定 し
ます (デ フ ォル ト : USS または MVS 付き zSeries では ebcdicutf8、 それ以外のすべての
シ ス テムでは utf8)。
utf8
文字列は、 ヌル終端 UTF-8 形式で返 さ れます (ASCII ベース ・ EBCDIC ベースのいずれ
のシ ス テムで も )。
ebcdicutf8 (EBCDIC ベースのシ ス テムでのみ利用可能) 文字列は、 ヌル終端 EBCDIC 符号化 UTF8 形式で返 さ れます。 i5/iSeries では コ ー ド ページ 37 が、 zSeries では コ ー ド ページ
1047 が用い られます。
utf16
文字列は、 そのマ シ ンのネ イ テ ィ ブバイ ト 順序の UTF-16 形式で返 さ れます (ネ イ テ ィ
ブバイ ト 順序は、 Intel x86 アーキテ ク チ ャ では リ ト ルエ ンデ ィ ア ン、 Sparc ・ PowerPC
シ ス テムではビ ッ グエ ンデ ィ ア ン)。
resourcefile
(名前文字列) UPR リ ソ ース フ ァ イルの相対ま たは絶対 フ ァ イル名。 こ の リ ソ ース フ ァ イルはただ
ちに読み込まれます。 既存の リ ソ ースは温存 さ れ、 その値は再設定 さ れた場合には新 し い もので
上書き さ れます。 明示的な リ ソ ースオプ シ ョ ンは、 リ ソ ース フ ァ イル内の項目の後に評価 さ れま
す。
リ ソ ース フ ァ イル名は、 環境変数 TETRESOURCEFILE で、 または Windows のレ ジ ス ト リ キーで与
え る こ と も で き ます (61 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。 デ フ ォ ル ト :
tet.upr (MVS では upr)
searchpath1
(名前文字列の リ ス ト ) 読み込みたい フ ァ イル群を含むデ ィ レ ク ト リ の相対または絶対パス名
(群)。 こ の検索パスは複数回設定する こ と も で き、 その場合には項目は蓄積 さ れ、 設定 し た順に
使用 さ れます (61 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。 空文字列にする と 、 既
存のすべての検索パス項目が削除 さ れます。 Windows では、 検索パスはレ ジ ス ト リ 項目を通 じ て設
定する こ と も で き ます。 デ フ ォル ト : 空
1. 複数回呼び出す と オプ シ ョ ン値を蓄積で き ます。
2. UPR 文法 と は異な り 、 名前 と 値の間の等号 「=」 は必須ではな く 、 許容 も さ れません。
11.5 一般関数
151
11.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( ) を呼
び出すべ き です。
11.5.3 PDFlib 仮想 フ ァ イ ルシ ス テム (PVF)
C++ void create_pvf(string filename, const void *data, size_t size, string 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
152
(C・C++ のみ) こ のデー タ を内容 と し て持つ メ モ リ ブ ロ ッ ク の長 さ をバ イ ト 単位で。
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
optlist
表 11.3 に従っ たオプシ ョ ン リ ス ト 。 右記のオプシ ョ ンが使え ます : copy
詳細 仮想フ ァ イ ル名は、 入力フ ァ イ ル名を と る 任意の API 関数に対 し て与え る こ と がで き ま
す。 こ う し た関数のなかには、 そのデー タ が も う 必要な く な る ま でその仮想 フ ァ イ ルに
ロ ッ ク を かけ る も の も あ り ま す。 仮想 フ ァ イ ルは、 TET_delete_pvf( ) に よ っ て明示的に、
あ る いは TET_delete( ) で自動的に削除 さ れ る ま で、 メ モ リ 内に保持 さ れます。
各 TET オブジ ェ ク ト は、 それぞれ自分自身の PVF フ ァ イ ルのセ ッ ト を保持 し ます。 仮
想フ ァ イ ルを、 異な る TET オブジ ェ ク ト 間で共有す る こ と はで き ません。 複数ス レ ッ ド
で個別の TET オブジ ェ ク ト を操作 し てい る 場合、 PVF の使用を同期す る 必要はあ り ませ
ん。 filename で、 すでにあ る 仮想フ ァ イ ル と 同 じ 名前を指定す る と 例外が発生 し ます。 こ
の関数では、filename がすでに通常のデ ィ ス ク フ ァ イ ルで使われてい る か ど う かはチ ェ ッ
ク し ません。
copy オプシ ョ ン を与え ていないかぎ り 、 与え たデー タ を、 それに対応する TET_delete_
pvf( ) への呼び出 し が成功す る 前に、 呼び出 し 側で変更 し た り 解放 (削除) し た り し ては
いけ ません。 こ の決ま り に従わない と ク ラ ッ シ ュ す る おそれが高いです。
表 11.3 TET_create_pvf( ) のオプ シ ョ ン一覧
オプ シ ョ ン
説明
copy
(論理値) TET は、 与え られたデー タ の内部 コ ピーを ただ ちに作成 し ます。 こ の場合、 与えたデー
タ を、 こ の呼び出 し の直後に呼び出 し 側で廃棄 し て も かまいません。 こ の copy オプ シ ョ ンは、
COM ・ .NET ・ Java バイ ンデ ィ ン グでは自動的にに設定 さ れます (それ以外のバイ ンデ ィ ングでの
デ フ ォル ト : false)。 それ以外のバイ ンデ ィ ングでは、 copy オプ シ ョ ン を与えないかぎ り デー タ は
複製 さ れません。
C++ int delete_pvf(string 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 オプシ ョ ン を与え ていた場合には、 フ ァ イ ル
11.5 一般関数
153
の管理デー タ 構造 と フ ァ イ ル内容本体 (デー タ ) の両方が解放 さ れますが、 そ う でなかっ
た場合には、 内容は解放 さ れません。 後者の場合には ク ラ イ ア ン ト 側で内容を解放す る こ
と が期待 さ れてい ます。
11.5.4 Unicode 変換関数
Unicode 変換関数は、 Unicode 文字列変換に有用で し ょ う 。 こ れ ら は、 その よ う な変換機
能を提供 し ていない環境で作業す る ユーザーの利便のために提供 さ れてい ます。
バインディング Unicode 変換関数は、Unicode 対応言語バ イ ンデ ィ ン グ (C++ を除 く ) では利用で き ません。
C バ イ ンデ ィ ン グ : こ の項の関数が返す文字列は、 最大 10 項目を持つ リ ン グバ ッ フ ァ 内
に格納 さ れ ます。 10 個を超え る 文字列が変換 さ れた と き には、 バ ッ フ ァ は再利用 さ れ ま
すので、 10 個を超え る 文字列を同時に利用 し たい場合には、 ク ラ イ ア ン ト 側でその文字
列を複製 し てお く 必要があ り ます。 た と えば、 printf( ) 文の引数では こ の関数を最大 10 回
ま で呼び出す こ と がで き ます。 同時に 10 個を超え る 文字列が使用 さ れないな ら ば、 その
戻 り 文字列は互いに独立であ る こ と が保証 さ れてい る か ら です。
C++ string utf8_to_utf16(string utf8string, string ordering)
Perl PHP string utf8_to_utf16(string utf8string, string ordering)
C const char *TET_utf8_to_utf16(TET *tet, const char *utf8string, const char *ordering, int
*size)
文字列を UTF-8 形式か ら UTF-16 へ変換 し ます。
utf8string 変換 し たい文字列。 有効な UTF-8 列 (EBCDIC プ ラ ッ ト フ ォームでは、 こ れ
は EBCDIC で符号化 さ れてい る 必要があ り ます) を内容 と し て持つ必要があ り ます。 バ イ
ト 順序マー ク (BOM) が存在 し てい る 場合、 それは除去 さ れます。
ordering 結果文字列のバ イ ト 順序を指定 し ます :
> utf16 ま たは空文字列 : 変換 さ れた文字列は BOM を持たず、 プ ラ ッ ト フ ォームのネ イ
テ ィ ブバ イ ト 順序で格納 さ れます。
> utf16le:変換 さ れた文字列は リ ト ルエンデ ィ ア ン形式にな り 、先頭にLE BOM(\xFF\xFE)
が付け ら れます。
> utf16be : 変換 さ れた文字列はビ ッ グエンデ ィ ア ン形式にな り 、 先頭に BE
BOM
(\xFE\xFF) が付け ら れます。
size (C 言語バ イ ンデ ィ ン グのみ) 戻 り 文字列の長 さ (バ イ ト 単位で、 ただ し 終端ヌ ル 2
バ イ ト を除 く ) が格納 さ れ る メ モ リ 位置へのポ イ ン タ 。
戻り値 変換 さ れた UTF-16 文字列。 C では、 こ れは ヌ ル 2 バ イ ト で終端 さ れます。
C++ string utf16_to_utf8(string utf16string)
Perl PHP string utf16_to_utf8(string utf16string)
C const char *TET_utf16_to_utf8(TET *tet, const char *utf16string, int len, int *size)
文字列を UTF-16 形式か ら UTF-8 へ変換 し ます。
utf16string 変換 し たい文字列。 文字列内のバ イ ト 順序マー ク (BOM) は解釈 さ れ ます。
それがない場合には、 プ ラ ッ ト フ ォームのネ イ テ ィ ブバ イ ト 順序 と 見な さ れます。
154
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
len
(C 言語バ イ ンデ ィ ン グのみ) utf16string の長 さ をバ イ ト 単位で。
size (C 言語バ イ ンデ ィ ン グのみ) 戻 り 文字列の長 さ (バ イ ト 単位で) が格納 さ れ る メ モ
リ 位置への C ス タ イ ルポ イ ン タ 。 こ のポ イ ン タ が NULL の場合、 それは無視 さ れます。
戻り値 変換 さ れた UTF-8 文字列。生成 さ れ る UTF-8 文字列は、先頭に UTF-8 BOM(\xEF\xBB\xBF)
が付 き ます。EBCDIC プ ラ ッ ト フ ォームでは、変換結果は BOM を含めて最終的に EBCDIC
へ変換 さ れます。
C++ string utf32_to_utf16(string utf32string, string ordering)
Perl PHP string utf32_to_utf16(string utf32string, string ordering)
C const char *TET_utf32_to_utf16(TET *tet, const char *utf32string, int len, const char
*ordering,
int *size)
文字列を UTF-32 形式か ら UTF-16 へ変換 し ます。
utf32string 変換 し たい文字列。 有効な UTF-32 列を内容 と し て持つ必要があ り ます。 バ
イ ト 順序マー ク (BOM) が存在す る 場合、 それは解釈 さ れます。
len
(C 言語バ イ ンデ ィ ン グのみ) utf32string の長 さ をバ イ ト 単位で。
ordering 結果文字列のバ イ ト 順序を指定 し ます :
> utf16 ま たは空文字列 : 変換 さ れた文字列は BOM を持たず、 プ ラ ッ ト フ ォームのネ イ
テ ィ ブバ イ ト 順序で格納 さ れます。
> utf16le : 変換 さ れた文字列は リ ト ルエ ンデ ィ ア ン形式にな り 、 先頭に リ ト ルエ ンデ ィ
ア ン BOM (\xFF\xFE) が付け ら れます。
> utf16be : 変換 さ れた文字列はビ ッ グエンデ ィ ア ン形式にな り 、 先頭に ビ ッ グエ ンデ ィ
ア ン BOM (\xFE\xFF) が付け ら れます。
size (C 言語バ イ ンデ ィ ン グのみ) 戻 り 文字列の長 さ (バ イ ト 単位で) が格納 さ れ る メ モ
リ 位置への C ス タ イ ルポ イ ン タ 。
戻り値 変換 さ れた UTF-16 文字列。
スコープ 任意
C++ string utf8_to_utf32(string utf8string, string ordering)
Perl PHP string utf8_to_utf32(string utf8string, string ordering)
C const char *TET_utf8_to_utf32(TET *tet, const char *utf8string, const char *ordering, int
*size)
文字列を UTF-8 形式か ら UTF-32 へ変換 し ます。
utf8string 変換 し たい文字列。 有効な UTF-8 列 (EBCDIC プ ラ ッ ト フ ォームでは、 こ れ
は EBCDIC で符号化 さ れてい る 必要があ り ます) を内容 と し て持つ必要があ り ます。 バ イ
ト 順序マー ク (BOM) が存在 し てい る 場合、 それは除去 さ れます。
ordering
予約済。 空にす る 必要があ り ます。
size (C 言語バ イ ンデ ィ ン グのみ) 戻 り 文字列の長 さ (バ イ ト 単位で) が格納 さ れ る メ モ
リ 位置への C ス タ イ ルポ イ ン タ 。
11.5 一般関数
155
戻り値 プ ラ ッ ト フ ォームのネ イ テ ィ ブバ イ ト 順序で変換 さ れた UTF-32 文字列。
スコープ 任意
C++ string utf32_to_utf8(string utf32string)
Perl PHP string utf32_to_utf8(string utf32string)
C const char *TET_utf32_to_utf8(TET *tet, const char *utf32string, int len, int *size)
文字列を UTF-32 形式か ら UTF-8 へ変換 し ます。
utf32string 変換 し たい文字列。 有効な UTF-32 列を内容 と し て持つ必要があ り ます。 バ
イ ト 順序マー ク (BOM) が存在す る 場合、 それは解釈 さ れます。
len
(C 言語バ イ ンデ ィ ン グのみ) utf32string の長 さ をバ イ ト 単位で。
size (C 言語バ イ ンデ ィ ン グのみ) 戻 り 文字列の長 さ (バ イ ト 単位で) が格納 さ れ る メ モ
リ 位置への C ス タ イ ルポ イ ン タ 。
戻り値 変換 さ れた UTF-8 文字列。生成 さ れ る UTF-8 文字列は、先頭に UTF-8 BOM(\xEF\xBB\xBF)
が付 き ます。EBCDIC プ ラ ッ ト フ ォームでは、変換結果は BOM を含めて最終的に EBCDIC
へ変換 さ れます。
スコープ 任意
C++ string utf16_to_utf32(string utf16string, string ordering)
Perl PHP string utf16_to_utf32(string utf16string, string ordering)
C const char *TET_utf16_to_utf32(TET *tet, const char *utf16string, int len, const char
*ordering,
int *size)
文字列を UTF-16 形式か ら UTF-32 へ変換 し ます。
utf16string 変換 し たい文字列。 文字列内のバ イ ト 順序マー ク (BOM) は解釈 さ れ ます。
それがない場合には、 プ ラ ッ ト フ ォームのネ イ テ ィ ブバ イ ト 順序 と 見な さ れます。
len
(C 言語バ イ ンデ ィ ン グのみ) utf16string の長 さ をバ イ ト 単位で。
ordering
予約済。 空にす る 必要があ り ます。
size (C 言語バ イ ンデ ィ ン グのみ) 戻 り 文字列の長 さ (バ イ ト 単位で) が格納 さ れ る メ モ
リ 位置への C ス タ イ ルポ イ ン タ 。 こ のポ イ ン タ が NULL の場合、 それは無視 さ れます。
戻り値 プ ラ ッ ト フ ォームのネ イ テ ィ ブバ イ ト 順序で変換 さ れた UTF-32 文字列。
スコープ 任意
156
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
11.5.5 例外処理
C++ string 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++ string 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( ) ブ ロ ッ クか ら
11.5 一般関数
157
抜ける こ と を通知 し ます。 TET_RETHROW( ) を用いる と 、 例外をキ ャ ッ チ し た後に、 よ り
高い レ ベルの関数へそれを再び投げる こ と がで き ます。
詳細 (C 言語バ イ ンデ ィ ン グのみ) 29 ページの 3.2 「C バ イ ンデ ィ ン グ」 を参照。
11.5.6 ロ グ記録
ロ グ記録機能を利用す る と 、 API 呼び出 し 群を追跡す る こ と がで き ます。 その ロ グ フ ァ イ
ルの内容は、 デバ ッ グ目的に有用なほか、 PDFlib GmbH サポー ト か ら 求め ら れ る こ と があ
り ます。 表 11.4 に、 TET_set_option( ) (150 ページの 11.5.1 「オプシ ョ ン処理」 を参照) で
ロ グ記録機能を有効にす る ためのオプシ ョ ン を挙げます。
表 11.4 TET_set_option( ) のログ記録関連キー一覧
キー
説明
logging
表 11.5 に従っ た ログ記録オプ シ ョ ン群を持つオプ シ ョ ン リ ス ト
userlog
ログ フ ァ イルへ複製 さ れる文字列
ロ グ記録オプシ ョ ンは、 以下の方法で与え る こ と がで き ます :
> TET_set_option( ) の logging オプシ ョ ンに対す る オプシ ョ ン リ ス ト と し て。 例 :
tet.set_option("logging", "filename=debug.log remove")
> TETLOGGING と い う 環境変数で。 こ の場合、 ロ グ記録出力は、 API 関数のいずれかを最
初に呼び出 し た時か ら 開始 さ れます。
表 11.5 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
158
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 11.5 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( ) を通 じ て取得で き る メ ッ
セージ テキス ト を残す関数か らの メ ッ セージ と 、 フ ァ イルを開 こ う と し た試みの失敗す
べての原因も ロ グ記録 さ れます。
11.5 一般関数
159
11.6 文書関数
C++ int open_document(string filename, string 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
(名前文字列。 ただ し Unicode フ ァ イ ル名は Windows でのみ対応 し てい ます)
処理 さ せたい 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
表 11.6 に従っ て文書オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。 右記のオプ
シ ョ ンが使え ます : 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 オプシ ョ ン を用い る と 、 保護 さ
れた文書か ら 一定の条件下で内容抽出を可能にする こ と がで き ます (59 ページの 5.1 「暗
号化 PDF か ら 内容を抽出」 を参照)。
i5/iSeries 上での対応フ ァ イ ルシ ス テ ム : TET は、 PC タ イ プの フ ァ イ ルシ ス テ ムでの
みテ ス ト さ れてい ます。 ですので、 入力 ・ 出力フ ァ イ ルは、 IFS (統合フ ァ イ ルシ ス テ ム)
内の PC タ イ プ フ ァ イ ル内になければな り ません。QSYS.lib フ ァ イ ルシ ス テ ム内の入力フ ァ
イ ルはテ ス ト さ れてお ら ず、 サポー ト さ れてい ません。 QSYS.lib フ ァ イ ルは多 く の場合、
レ コ ー ド ベー ス ま た はデー タ ベー ス オブ ジ ェ ク ト の た めに用い ら れ ま すので、 TET を
QSYS.lib オブジ ェ ク ト と と も に使用す る と 予期 し ない動作結果を招 く おそれがあ り ます。
160
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
TET フ ァ イ ル I/O ス ト リ ームはつねに ス ト リ ームベース であ り 、レ コ ー ド ベース ではあ り
ません。
表 11.6 TET_open_document( ) ・ TET_open_document_callback( ) の文書オプ シ ョ ン一覧
オプ シ ョ ン
説明
checkglyphlists
(論理値) true な らば、 TET は、 テキス ト 抽出が始ま る前に、 すべての condition=allfonts の内蔵グ
リ フ マ ッ ピ ング規則を チ ェ ッ ク し ます。 そ う でないな ら、 グ ローバルなグ リ フ マ ッ ピ ン グ規則は
適用 さ れません。 このオプ シ ョ ンは処理速度を低下 さ せますが、 デ フ ォル ト で Unicode へマ ッ プ で
き ないグ リ フ名を持つある種の TeX 文書に対 し て有用です。 デ フ ォ ル ト : false
decompose
(キーワー ド かオプ シ ョ ン リ ス ト ) 指定 し た Unicode 分解 タ グ を持つ、 かつ、 指定 し た Unicode 集
合の一部であ るすべてのキ ャ ラ ク タ に適用 さ れる Unicode 分解。 こ れら の条件はサブオプ シ ョ ンの
名前 と 値で与え られます。 分解を用いる と 、 等価な Unicode キ ャ ラ ク タ 間の違いを除去するか温存
する こ と がで き ます (96 ページの 7.3 「Unicode 後処理」 を参照)。
デ フ ォル ト : 102 ページの 「デ フ ォル ト 分解」 を参照 し て く だ さ い。 ただ し 、 normalize オプ シ ョ
ンが none 以外の値を持つ と きは、 すべてのデ フ ォル ト 分解は無効化 さ れます。 すなわち、
normalize オプ シ ョ ン を設定する と デ フ ォ ル ト が decompose=none に設定 さ れます。 ただ し 、 ユー
ザー指定の分解はなお適用する こ と がで き ます。
リ ス ト に換えて、 以下のキーワー ド を与え る こ と も で き ます :
none
何の分解 も適用 さ れません。
default
他の指定 し た分解の前に、 デ フ ォル ト 分解 (102 ページの 「デ フ ォ ル ト 分解」 を参照)
が適用 さ れます。
分解のための以下のサブオプ シ ョ ンが使え ます :
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
11.6 文書関数
161
表 11.6 TET_open_document( ) ・ TET_open_document_callback( ) の文書オプ シ ョ ン一覧
オプ シ ョ ン
説明
fold
(キーワー ド 、 または リ ス ト の リ ス ト 。 それぞれの内側の リ ス ト の 1 番目の要素は Unicode 集合ま
たはキーワー ド 、 2 番目の要素は Unichar またはキーワー ド ) Unicode 集合 と し て指定 し た字形統
合 ド メ イ ン内のすべてのキ ャ ラ ク タ に対 し 、 字形統合 (等価マ ッ ピ ング) を適用 し ます。 この字
形統合は、 lineseparator または wordseparator オプ シ ョ ン で追加 し た区切 り キ ャ ラ ク タ を除 く すべ
てのテキス ト に対 し て適用 さ れます (96 ページの 7.3 「Unicode 後処理」 を参照)。 デ フ ォル ト : 98
ページの表 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 個ない し 複数のフ ォ ン ト / エ ン コ ーデ ィ ングの組み合わせに
対する グ リ フ マ ッ ピ ング方式を記述 し ます。 こ のマ ッ ピ ングは、 設定 さ れた順に用い られます。
最後のオプ シ ョ ン リ ス ト が フ ォ ン ト 名ワ イル ド カ ー ド 「*」 を含んでいる場合には、 それ以前の
マ ッ ピ ングは用い ら れな く な り ます。 各規則は、 表 11.7 に従 っ たオプ シ ョ ン リ ス ト を内容 と し て
持ち ます。 特定のフ ォ ン ト 名にマ ッ チするすべてのグ リ フ マ ッ ピ ングが こ のフ ォ ン ト に適用 さ れ
ます (デ フ ォ ル ト : 定義済内蔵グ リ フ規則群が適用 さ れます)。
なお、 グ リ フ マ ッ ピ ング規則は、 UPR フ ァ イル内の外部 リ ソ ース と し て指定する こ と も で き ます
(61 ページの 5.2 「 リ ソ ース設定 と フ ァ イル検索」 を参照)。
keeppua
非推奨。 fold={{[:Private_Use:] preserve}} または fold={{[:Private_Use:] unknownchar}} を用いて く だ
さい
lineseparator
(Unichar。 granularity=zone ・ page の場合のみ) 行ど う し の間に挿入 さ せたいキ ャ ラ ク タ 2。 デ フ ォ
ル ト : U+000A
162
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 11.6 TET_open_document( ) ・ TET_open_document_callback( ) の文書オプ シ ョ ン一覧
オプ シ ョ ン
説明
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 オプ シ ョ ンの後に処理 さ れます。
inmemory
(論理値。 TET_open_document( ) のみ) true の場合、 TET はフ ァ イル全体を メ モ リ 内へ読み込み、
それを そ こ で処理 し ます。 こ れは、 シ ス テムに よ っ ては驚異的なパ フ ォ ーマ ン ス向上につながる
こ と があ り ますが ( と く に MVS)、 そのかわ り メ モ リ 使用量も増え ます。 false の場合、 文書の
個々の部分が必要に応 じ てデ ィ ス クから読み込まれます。 デ フ ォル ト : false
password
(文字列) 暗号化 さ れた文書に対するユーザーまたはマ ス タ ーパスワー ド 。 その文書の権限設定が
テキス ト コ ピーを許 し ている場合には、 ユーザーパスワー ド で充分ですが、 そ う でない場合はマ
ス タ ーパスワー ド を与え る必要があ り ます。
文書の暗号化状態を取得する方法 と 、 ユーザーまたはマス タ ーパスワー ド を知ら な く て も適用で
き る pCOS 操作については、 pCOS リ フ ァ レ ン ス を参照 し て く だ さ い。
shrug オプ シ ョ ン を用いる と 、 保護 さ れた文書から一定の条件下で内容抽出を可能にする こ と がで
き ます (59 ページの 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 の場合、 シ ュ ラ ッ グ機能が有効にな り 、 保護 さ れた文書から 一定の条件下で内容抽
出が可能にな り ます (59 ページの 5.1 「暗号化 PDF か ら内容を抽出」 を参照)。 shrug オプ シ ョ ン
を用いる場合には、 その PDF 文書作成者の権利を尊重 し て く だ さ い。 デ フ ォ ル ト : false
11.6 文書関数
163
表 11.6 TET_open_document( ) ・ TET_open_document_callback( ) の文書オプ シ ョ ン一覧
オプ シ ョ ン
説明
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 出力は
生成 さ れません。
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. 表 11.7 の脚注 2 を参照
2. 区切 り キ ャ ラ ク タ を無効化する には U+0000 を用います。
表 11.7 TET_open_document( ) ・ TET_open_document_callback( ) の glyphmapping オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
codelist
(文字列) フ ォ ン ト に適用 さ せたい コ ー ド リ ス ト リ ソ ースの名前。 これは、 埋め こ まれた
ToUnicode CMap ま たはエ ン コ ーデ ィ ン グ項目よ り も 優先 さ れます。
fontname
(名前文字列) 規則に対 し て選択 さ れる フ ォ ン ト (群) の名前の一部分ない し 全体。 部分集合接頭
辞を与え ている と きは、 指定 し た部分集合だけが選択 さ れます。 部分集合接頭辞を一切与えてい
ない と きは、 名前 (部分集合接頭辞な し の) がマ ッ チするすべての フ ォ ン ト が選択 さ れます。 限
られたワ イル ド カ ー ド 1 が使え ます。 デ フ ォ ル ト : *
fonttypes
(キーワー ド の リ ス ト ) グ リ フ マ ッ ピ ングは、 指定 し た種類のフ ォ ン ト に対 し てのみ適用 さ れま
す : * (あ ら ゆる種類の フ ォ ン ト を意味 し ます) ・ Type1 ・ MMType1 ・ TrueType ・ CIDFontType2 ・
CIDFontType0 ・ Type3。 デ フ ォル ト : *
164
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 11.7 TET_open_document( ) ・ TET_open_document_callback( ) の glyphmapping オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
forceencoding
(文字列2 1 個か 2 個の リ ス ト 。 名前 2 個があ る と きは、 1 番目は winansi ・ macroman ・ Custom の
いずれかで なければな り ません) 1 番目のエ ン コ ーデ ィ ング を、 2 番目の名前で指定 し たエ ン コ ー
デ ィ ング リ ソ ースへ置き換え ます。 項目が 1 個 し か与え られていない と きは、 指定 し た エ ン コ ー
デ ィ ング を用いて、 MacRoman ・ WinAnsi ・ MacExpert エ ン コ ーデ ィ ングのすべてのイ ン ス タ ン ス
が置き換え られます。 こ のオプ シ ョ ンが フ ォ ン ト にマ ッ チ し た場合には、 その同 じ フ ォ ン ト に対
し ては他のグ リ フ マ ッ ピ ングは一切適用 さ れません。
forcettsymbol- (キーワー ド または文字列 2) 埋め込まれた、 実際にはテキス ト フ ォ ン ト である擬似 TrueType 記号
encoding
フ ォ ン ト に対する Unicode マ ッ ピ ン グ を決定する ために使われる エ ン コ ーデ ィ ン グの名前か、 ま た
は以下のキーワー ド の 1 つ (デ フ ォ ル ト : auto) :
auto
フ ォ ン ト の内蔵エ ン コ ーデ ィ ング (後述) が、 記号範囲 U+F0000 ∼ U+F0FF 内の Unicode キ ャ ラ ク タ を少な く と も 1 個含んでいる場合には、 encodinghint オプ シ ョ ン で指定
し たエ ン コ ーデ ィ ング を用いて擬似記号キ ャ ラ ク タ が本当のテキス ト キ ャ ラ ク タ へマ ッ
プ さ れます。 そ う で ない場合には、 encodinghint は使われず、 キ ャ ラ ク タ は builtin
キーワー ド に従 っ て マ ッ プ さ れます。
builtin
フ ォ ン ト の post テーブル内のグ リ フ 名の Unicode マ ッ ピ ングから 得られる、 フ ォ ン ト
の内蔵エ ン コ ーデ ィ ン グ を用います。
有名な TrueType フ ォ ン ト Wingdings* と Webdings* はつねに記号 フ ォ ン ト と し て扱われます。
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
tounicodecmap
(文字列) フ ォ ン ト に適用 さ せたい ToUnicode CMap リ ソ ースの名前。 こ れは、 埋め込まれた
ToUnicode CMap ま たはエ ン コ ーデ ィ ング項目よ り も優先 さ れます。
1. 限 ら れたワ イル ド カ ー ド : 単独キ ャ ラ ク タ 「*」 は全 フ ォ ン ト を意味 し ます。 接頭辞の後に 「*」 を付け る と ( 「MSTT*」 な
ど)、 指定 し た接頭辞で始ま るすべての フ ォ ン ト を意味 し ます。
2. 右記の定義済エ ン コ ーデ ィ ン グ名は、 追加設定な し で使え ます : winansi ・ macroman ・ macroman_apple ・ macroman_euro ・
ebcdic ・ ebcdic_37 ・ iso8859-X ・ cpXXXX ・ U+XXXX。 カ ス タ ムエ ン コ ーデ ィ ン グは、 リ ソ ース と し て定義する こ と がで き ます。
11.6 文書関数
165
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),
string 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
PDF 文書全体のサ イ ズ をバ イ ト 単位で。
readproc size バ イ ト を buffer で指 し 示 さ れた メ モ リ へ複製す る C コ ールバ ッ ク 関数。文
書の終わ り に到達 し た場合には、求め ら れた よ り も 少ないデー タ を複製す る こ と がで き ま
す。 こ の関数は、 複製 し たバ イ ト 数を返す必要があ り ます。
seekproc 文書内のカ レ ン ト 読み取 り 位置を設定する C コ ールバ ッ ク 関数。 offset は文書
の先頭か ら の位置を表 し ます (0 を最初のバ イ ト と し て) 。 こ の関数は、 成功 し た と き に
は 0 を、 そ う でなかっ た と き には -1 を返す必要があ り ます。
optlist
表 11.6 に従っ て文書オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。
戻り値 TET_open_document( ) 参照。
詳細 TET_open_document( ) 参照。
バインディング
こ の関数は、 C ・ C++ 言語バ イ ンデ ィ ン グでのみ利用可能です。
C++ void close_document(int doc)
C# Java void close_document(int doc)
Perl PHP TET_close_document(resource tet, 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( )
を呼び出す と 、 開いてい る 文書 と ページはすべて自動的に閉 じ ら れます。 と はいえ、 文書
が必要な く な っ た時点で明示的に閉 じ る のが良いプ ロ グ ラ ミ ン グ習慣です。閉 じ ら れた文
書ハン ド ルは、 その後はいかな る 関数呼び出 し において も 使用 し てはいけ ません。
166
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
11.7 ページ関数
C++ int open_page(int doc, int pagenumber, string 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 表 11.8 に従っ てページオプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。 右記のオプ
シ ョ ンが使え ます : clippingarea ・ contentanalysis ・ docstyle ・ excludebox ・ fontsizerange ・
granularity ・ ignoreinvisibletext ・ imageanalysis ・ includebox ・ layoutanalysis ・
layouteffort ・ skipengines ・ structureanalysis ・ topdown。
戻り値 ページのハン ド ル。 エ ラ ーの場合には -1。 -1 が返 さ れた場合には、 TET_get_errmsg( ) を
呼び出 し てエ ラ ーの詳細を知 る こ と を推奨 し ます。
詳細 1 個の文書内で任意の数のページ を同時に開いてお く こ と がで き ます。 同 じ ページ を異な
る オプシ ョ ンで複数回開 く こ と も で き ます。 し か し 、 1 つのページ を処理 し てい る 途中に
オプシ ョ ン を変え る こ と はで き ません。
ページ内に レ イ ヤー定義 (オプシ ョ ナルな内容グループ) があ っ て も 考慮 さ れません。
レ イ ヤーが可視に さ れてい る か ど う かにかかわ ら ず、ページ上のすべての レ イ ヤー上のす
べてのテ キ ス ト が抽出 さ れます。
11.7 ページ関数
167
表 11.8 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 の場合には不可) 表 11.9 に従っ た、 高レ ベル内容分析 と テ
キス ト 処理のためのサブオプ シ ョ ン群の リ ス ト 。
docstyle
(キーワー ド ) レ イ アウ ト 検出エ ン ジ ンが さ ま ざ ま なパラ メ タ を選択する ために用いる ヒ ン ト 。 こ
れらのパラ メ タ は、 入力文書が以下の分類の 1 つに属する状況において レ イ アウ ト 分析を最適化
し ます :
book
典型的な本
business ビ ジネス文書
fancy
複雑な レ イ アウ ト に よ る装飾的なページ
forms
構造化 さ れた フ ォ ーム
generic
特に特徴を指定 し ない最も一般的な文書分類です。
magazines 雑誌記事
papers
新聞
science
科学記事
searchengine
ア プ リ ケーシ ョ ンは検索エ ン ジ ン な ど であ り 、 ページの単語一覧を な るべ く 速 く 取得す
る こ と が主た る関心。 表組 ・ ページ構造認識は無効化 さ れます。
spacegrid 視覚レ イ アウ ト がスペースキ ャ ラ ク タ 群を用いて生成 さ れる、 リ ス ト 指向のレポー ト
( メ イ ン フ レームシ ス テムで生成 さ れる こ と が多い)。 こ の種の文書に対 し ては、 影付き
検出や洗練 さ れた単語境界検出 と い っ た多 く の ヒ ュ ー リ ス テ ィ ッ ク は必要ないので、 こ
のオプ シ ョ ンに よ っ て テキス ト 抽出を高速化で き ます。
excludebox
(矩形の リ ス ト ) 指定 し た矩形を合わせた領域を、 テキス ト 抽出から除外 し ます。 デ フ ォル ト : 空
fontsizerange
(float 2 個の リ ス ト ) テキス ト の最小 ・ 最大文字サイ ズを指定 し た 2 個の数値。 こ の区間を外れた
サイ ズのテキス ト は無視 さ れます。 最大値にキーワー ド unlimited を指定する と 、 上限な し と い う
意味にな り ます。 デ フ ォル ト : { 0 unlimited }
granularity
(キーワー ド ) TET_get_text( ) が返すテキス ト 断片の粒度。 glyph 以外のすべてのモー ド で単語検出
機能が有効にな り ます。 詳 し く は 83 ページの 「テキス ト の粒度」 を参照 し て く だ さ い (デ フ ォル
ト : word) :
glyph
各断片はそれぞれ 1 個のグ リ フ を マ ッ プ し た結果を内容 と し て持ち ますが、 それが複数
のキ ャ ラ ク タ にな る場合も あ り ます (合字の場合な ど)。
word
各断片はそれぞれ、 単語検出機能に よ っ て決定 さ れた 1 個の単語を内容 と し て持ち ま
す。
line
各断片はそれぞれテキス ト 1 行を、 ない し はそれにで き る だけ似た ものを内容 と し て持
ち ます。 連続する 2 個の単語の間には単語区切 り キ ャ ラ ク タ が挿入 さ れます。
page
各断片はそれぞれ 1 個のページ を内容 と し て持ち ます。 単語 ・ 行 ・ 区域区切 り キ ャ ラ ク
タ が適宜挿入 さ れます。
ignoreinvisibletext
(論理値) true の場合には、 表現モー ド 3 (不可視) のテキス ト は無視 さ れます。 デ フ ォル ト :
false (不可視テキス ト は、 スキ ャ ン さ れたページ と その OCR テキス ト を内容 と し て持つ画像 + テ
キス ト PDF で主に使用 さ れているから です)
imageanalysis
(オプ シ ョ ン リ ス ト ) 表 11.11 に従 っ た、 高レ ベル画像処理を制御する ためのサブオプ シ ョ ン群の
リスト。
168
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 11.8 TET_open_page( ) ・ TET_process_page( ) のページオプ シ ョ ン一覧
オプ シ ョ ン
説明
includebox
(矩形の リ ス ト ) テキス ト 抽出を、 指定 し た矩形を合わせた領域に限 り ます。 デ フ ォ ル ト : 切 り 抜
き領域全体
layoutanalysis
(オプ シ ョ ン リ ス ト 。 granularity=glyph の場合には不可) 表 11.10 に従 っ た、 レ イ アウ ト 検出機能
を制御する ためのサブオプ シ ョ ン群の リ ス ト 。
layouteffort
(キーワー ド ) レ イ アウ ト 認識の品質 / パフ ォ ーマ ン スの ト レー ド オ フ を制御 し ます。 レ イ アウ ト
認識は、 努力を増せば向上で き ますが、 こ れに よ っ て操作は遅 く な るおそれがあ り ます。 このレ
イ アウ ト 認識努力を、 キーワー ド none ・ low ・ medium ・ high ・ extra で制御で き ます。 デ フ ォ ル
ト : low
skipengines
(キーワー ド の リ ス ト ) ページ内容に対 し て利用可能なパーサのい く つかを スキ ッ プ し ます。 ス
キ ッ プ さ れたエ ン ジ ンは このページに対 し て何のデー タ も返 し ません。 必要で ないエ ン ジ ン を ス
キ ッ プする と 、 こ のエ ン ジ ンが出すデー タ を必要 と し ないア プ リ ケーシ ョ ンにおいてパ フ ォ ーマ
ン スが向上 し ます (デ フ ォル ト : すべてのエ ン ジ ンが有効) :
text
(キーワー ド ) テキス ト 抽出エ ン ジ ン を スキ ッ プ し ます。
image
(キーワー ド ) 画像抽出エ ン ジ ン を スキ ッ プ し ます。
structureanalysis
(オプ シ ョ ン リ ス ト 。 granularity=glyph の場合には不可) 表 11.12 に従 っ た、 ページ構造分析を制
御する ためのサブオプ シ ョ ン群の リ ス ト 。
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
表 11.9 TET_open_page( ) ・ TET_process_page( ) の contentanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
bidi
(キーワー ド 。 granularity=glyph の場合には無視 さ れます。 右書きキ ャ ラ ク タ がページ上に存在 し
ている場合にのみ効力を持ち ます) 断片内の右書き ・ 左書き テキス ト を並べ替え る反転双方向ア
ルゴ リ ズムを制御 し ます (デ フ ォル ト : logical) :
visual
断片内の右書き ・ 左書き キ ャ ラ ク タ を視覚順に保ち ます。 すなわち、 反転双方向アルゴ
リ ズムを適用 し ません。
logical
反転双方向アルゴ リ ズムを適用 し て、 断片内のキ ャ ラ ク タ を論理順で も た ら し ます。
bidilevel
(キーワー ド ) 反転双方向アルゴ リ ズムに対するページのベース レ ベル (すなわち テキス ト 進行の
主要向き) を指定 し ます (デ フ ォル ト : auto) :
auto
テキス ト 進行の主要向き を、 内容に基づいて ヒ ュ ー リ ス テ ィ ッ ク に決定 し ます。
ltr
テキス ト 進行の主要向き と し て左書き を前提 し ます (欧文文書な ど)
rtl
テキス ト 進行の主要向き と し て右書き を前提 し ます (ヘブ ラ イ文字 ・ ア ラ ビ ア文字文書
な ど)
dehyphenate (論理値) true の場合には、 ハイ フ ン区切 り さ れた単語が特定 さ れ、 ハイ フ ン を挟むテキス ト 断片
ど う し が連結 さ れます。 ハイ フ ン自体は keephyphens オプ シ ョ ンに従っ て扱われます。 デ フ ォ ル
ト : true
11.7 ページ関数
169
表 11.9 TET_open_page( ) ・ TET_process_page( ) の contentanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
dropcapsize
(float) 大き なグ リ フ が ド ロ ッ プキ ャ ッ プ と し て認識 さ れる最小サイ ズ。 ド ロ ッ プキ ャ ッ プは、 区
域の先頭の大き なキ ャ ラ ク タ で、 数行にわた っ てぶら 下がっ ている ものです。 それらは、 その区
域の残 り と 連結 さ れ、 その区域内の最初の単語の一部を成 し ます。 デ フ ォ ル ト : 35
dropcapratio (float) ド ロ ッ プキ ャ ッ プ と 隣接テキス ト の文字サイ ズの最小比率。 大き なキ ャ ラ ク タ は、 そのサ
イ ズが dropcapsize を超えてお り 、 かつ、 その文字サイ ズ比率が dropcapratio を超えている場合に
ド ロ ッ プキ ャ ッ プ と し て認識 さ れます。 言い換えれば、 これは ド ロ ッ プキ ャ ッ プがわた る テキス
ト 行数です。 デ フ ォ ル ト : 4 ( ド ロ ッ プキ ャ ッ プは 3 行にわた る ものが非常に多いですが、 行間の
分も考慮に入れる必要があ り ます)
includeboxorder
(整数) 複数の包含枠を与えている と き (オプ シ ョ ン includebox 参照)、 こ のオプ シ ョ ンは、 枠の
順序が単語検出機能に対 し どのよ う な効力を持つかを制御 し ます (デ フ ォ ル ト : 0) :
0
ページ内容を分析する際に、 包含枠順序は無視 し ます。 結果は、 あたかも 包含枠群の外
のテキス ト がすべて削除 さ れたの と 同 じ にな り ます。 こ れは、 ほ し く ないテキス ト
(ヘ ッ ダ ・ フ ッ タ な ど) を除去 し つつ、 単語検出機能には何の影響も与え ないよ う にす
る ために有用です。
1
包含枠順序を、 単語 と 区域を生成する際には考慮に入れますが、 区域順序を決定する際
には考慮 し ません。 1 個の単語が複数の枠に属する こ と は決 し てあ り ません。 で き た区
域群は、 論理順に並べ替わ り ます。 枠が重な り あ っ ている場合には、 そのテキス ト は リ
ス ト 内で最も先に現れた枠に属 し ます。 それ以外では、 オプ シ ョ ン リ ス ト 内における包
含枠の順序は考慮 さ れません。 こ の設定は、 テキス ト を フ ォ ームか ら抽出する時や、 テ
キス ト を表組か ら抽出する時や、 複雑な レ イ アウ ト において包含枠が重な り あ っ ている
場合に有用です。
2
包含枠順序を、 すべての操作について考慮 し ます。 各包含枠の内容は他の枠 と は独立に
扱われ、 で き たテキス ト は包含枠の順序に従っ て連結 さ れます。 こ れは、 フ ォ ームから
テキス ト を特定の順序で抽出 し たい時や、 雑誌レ イ アウ ト 内の記事段組を定義済順序で
抽出 し たい時に有用です。 こ う し た場合には、 包含枠を適切な順序で指定する ために、
そのページ レ イ アウ ト に関する事前の知識が必要です。
keep
hyphenglyphs
(論理値) true かつ dehyphenate=true の場合には、 ハイ フ ン除去 さ れた単語の各部分の間のハイ
フ ング リ フは、 get_char_info( ) が返すグ リ フの リ ス ト 内 と TETML 内の Glyph 要素で温存 さ れま
す。 こ れは、 ページ上のテキス ト を正確に置き換えたいな ど、 ハイ フ ンの位置について詳 し い情
報を必要 と する ア プ リ ケーシ ョ ンにおいて有用です。 こ れは fold={{_dehyphenation remove} と は
異な る こ と に留意 し て く だ さ い。 後者は、 get_text( ) が返す論理テキス ト から ハイ フ ン を除去する
だけであ り 、 グ リ フ に対 し ては効力を持ち ません。 デ フ ォル ト : false
lineseparator
非推奨1
linespacing
(キーワー ド ) 段落内のテキス ト 行ど う し の間の典型的な縦間隔を指定 し ます : small ・ medium ・
large のいずれかです (デ フ ォ ル ト : medium)
maxwords
(整数かキーワー ド ) ページ上の単語の数が、 指定 し た数以下の と きは (キーワー ド unlimited を
指定する と 上限な し にな り ます)、 ページ上で検出 さ れた区域群は適切に連結 さ れ並べ替え さ れま
す。 ページ上の単語の数が、 指定 し た数を超えている と きは、 区域は一切作成 さ れず、 単語群は
ページ内容の読み順で抽出 さ れます。 後者の場合には処理はよ り 速 く な り ますが、 抽出 さ れる単
語群の順序は最適ではな く な るおそれがあ り ます。 新聞のよ う な、 多 く の単語を含む大き なペー
ジに対 し ては、 このオプ シ ョ ン を unlimited に設定する こ と を推奨 し ます。 デ フ ォル ト : 5000
170
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 11.9 TET_open_page( ) ・ TET_process_page( ) の contentanalysis オプ シ ョ ンのサブオプ シ ョ ン一覧
オプ シ ョ ン
説明
merge
(整数) ス ト リ ッ プ と 区域の連結を制御 し ます (デ フ ォル ト : 2) :
0
ス ト リ ッ プ作成後の連結な し 。 これはかな り 処理速度を向上 さ せますが、 最適未満の出
力を生成するおそれがあるほか、 影によ っ ては正 し く 検出 さ れないおそれがあ り ます。
1
単純な、 ス ト リ ッ プ を区域へ入れ込む連結 : ス ト リ ッ プは、 それが区域に重な っ てお
り 、 それでいて、 次のス ト リ ッ プ以外のス ト リ ッ プ と 重な り 合 っ ていない場合に (影な
し の場合における区域の重な り 合いを避ける ため)、 こ の区域内へ連結 さ れます。
2
順序破 り な テキス ト のための高度な区域連結 : merge=1 に加えて、 複数の重な り 合 う 区
域は、 両区域のテキス ト 内容が重な り 合わないな らば、 結合 さ れて 1 個の区域にな り ま
す。
numericentities
(キーワー ド ) 数値 ・ 分数 ・ 時刻のよ う な数値実体に対する単語境界検出を制御 し ます (デ フ ォル
ト : keep) :
split
その実体を、 punctuationbreaks サブオプ シ ョ ンに従 っ て分割 し ます。
keep
その実体を、 単語ま る ご と と し て温存 し ます。
shadowdetect
(論理値) true の場合には、 影付きや偽ボール ド テキス ト を作 り 出 し ている、 重な り 合 う テキス ト
断片群の冗長な イ ン ス タ ン スは検出 さ れ除去 さ れます。 デ フ ォ ル ト : true
punctuation
breaks
(論理値。 granularity=word の場合のみ) true の場合には、 文字のそばに配置 さ れている約物キ ャ
ラ ク タ は単語境界 と し て扱われ、 そ う でない場合にはそれは隣接する単語内へ含め られます。 た
と えば、 こ のオプ シ ョ ンは URL と メ ールア ド レ スの扱いに影響を与え ます。 デ フ ォル ト : true
superscript
(整数) 下付き ・ 上付き検出を制御 し ます (デ フ ォ ル ト : 2) :
0
下付き ・ 上付き検出な し
1
単純な下付き ・ 上付き検出
2
下付き ・ 上付き検出のための高度なアルゴ リ ズム
wordseparator 非推奨 1
1. TET_open_document*( ) の、 対応する オ プ シ ョ ン を用いて く だ さ い。
表 11.10 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 の結果に対する レ イ アウ ト 認識。 こ れは非常に複雑な レ イ アウ ト に対 し てのみ
必要です。
11.7 ページ関数
171
表 11.10 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 で検出 さ れた各表セルに対する表組認識。 こ れは、 入れ子にな っ た表組のため
に、 ま た、 複数行にわた る セルの解決のために必要です。
172
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
表 11.11 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 でないのは、 位置計算における避けがたい誤差のためです)
表 11.12 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 の場合には、 表組認識エ ン ジ ンは
無効化 さ れます。
11.7 ページ関数
173
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( ) を呼び出す と 、 その文書の開いてい る ページはすべて自動的に閉 じ
ら れます。 と はいえ、 ページが必要な く な っ た時点で明示的に閉 じ る のが良いプ ロ グ ラ ミ
ン グ習慣です。 閉 じ ら れたページハン ド ルは、 その後はいかな る 関数呼び出 し において も
使用 し てはいけ ません。
174
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
11.8 テキス ト ・ メ ト リ ク ス抽出関数
C++ string 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
TET_open_page( ) で得 ら れた有効なページハン ド ル。
len (C 言語バ イ ンデ ィ ン グのみ) 返 さ れ る 文字列の UTF-16 値群での長 さ (バ イ ト 単位
にあ ら ず!) を保持す る 変数へのポ イ ン タ 。 バ イ ト 数を知 る には、 outputformat=utf16 の
場合は こ の値を 2 倍す る 必要があ り 、 outputformat=utf8 の場合は、 返 さ れた ヌ ル終端文
字列の文字列長を用い る 必要があ り ます。
戻り値 ページ上の、 次のテ キ ス ト 断片を内容 と し て持つ文字列。 こ の断片の長 さ は、 TET_open_
page( ) の granularity オプシ ョ ンに よ っ て決定 さ れます。 granularity=glyph の場合であ っ
て も 、 こ の文字列は複数のキ ャ ラ ク タ を内容 と し て持つ場合があ り ます (91 ページの 7.1
「Unicode の さ ま ざ ま な重要概念」 を参照)。
ページ上のテ キ ス ト がすべて取得 さ れていた場合には、 空文字列か ヌ ルオブジ ェ ク ト
が返 さ れます (後述) 。 こ の場合には、 テ キ ス ト が も う ない理由はページ上のエ ラ ーに よ
る も の な の か、 そ れ と も ペー ジ の末尾に到達 し た か ら な の か を 知 る た め に、 TET_get_
errnum( ) を呼び出すべ き です。
バインディング C 言語バ イ ンデ ィ ン グ : 結果は、 TET_set_option( ) の outputformat オプシ ョ ンに従っ て、
ヌ ル終端 UTF-8 (デフ ォ ル ト ) か UTF-16 のいずれかの文字列で提供 さ れます。 i5/iSeries
と zSeries では、 EBCDIC 符号化 さ れた UTF-8 を選択す る こ と も で き 、 かつ こ れがデフ ォ
ル ト で有効にな っ てい ます。 テ キ ス ト が も う 得 ら れない と き は、 NULL ポ イ ン タ と *len=0
が返 さ れます。
C++ ・ COM : 結果は、 UTF-16 形式の Unicode 文字列 と し て提供 さ れます。 テ キ ス ト が も
う 得 ら れない と き は、 空文字列が返 さ れます。
Java ・ .NET : 結果は、 Unicode 文字列 と し て提供 さ れます。 テ キ ス ト が も う 得 ら れない と
き は、 ヌ ルオブジ ェ ク ト が返 さ れます。
Perl ・ PHP ・ Python 言語バ イ ンデ ィ ン グ : 結果は、 UTF-8 文字列 と し て提供 さ れます。 テ
キ ス ト が も う 得 ら れない と き は、 ヌ ルオブジ ェ ク ト が返 さ れます。
REALbasic L 結果は、 UTF-16 形式の Unicode 文字列 と し て提供 さ れます。 テ キ ス ト が も
う 得 ら れない と き は、 空文字列が返 さ れます。
RPG 言語バ イ ンデ ィ ン グ : 結果は、 Unicode 文字列 と し て提供 さ れます。 テ キ ス ト が も う
得 ら れない と き は、 NULL ポ イ ン タ が返 さ れます。
11.8 テキス ト ・ メ ト リ ク ス抽出関数
175
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 個のテ キ ス ト 断片には複数のキ ャ
ラ ク タ が含まれ る 場合があ り ます。カ レ ン ト テ キ ス ト 断片についてすべてのグ リ フ の詳細
を取得す る には、 こ の関数を、 情報を も う 返 さ な く な る ま で繰 り 返 し 呼び出す必要があ り
ます。
構造ま たはプ ロ パテ ィ / フ ィ ール ド 内のグ リ フ詳細は、同 じ ページハン ド ルで次に TET_
get_char_info( ) か TET_close_page( ) を呼び出す (先に行な っ たほ う ) ま で有効です。 グ リ
フ情報プ ロ パテ ィ / フ ィ ール ド のセ ッ ト は、TET オブジ ェ ク ト ご と にただ 1 個 し かあ り ま
せんので、 同 じ ページについてであれ、 別のページについてであれ、 別の文書についてで
あれ、 再び TET_get_char_info( ) を呼び出す前に ク ラ イ ア ン ト 側ですべてのグ リ フ情報を
取得 し てお く 必要があ り ます。
176
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
バインディング C ・ C++ 言語バ イ ンデ ィ ン グ : TET_get_text( ) が返 し た最近のテ キ ス ト 断片について、 グ リ
フ が も う 得 ら れない と き は、 NULL ポ イ ン タ が返 さ れます。 そ う でない と き は、 1 個のグ
リ フ に関す る 情報を内容 と し て持つ TET_char_info 構造へのポ イ ン タ が返 さ れます。 こ の
デー タ 構造の メ ンバについては表 11.13 で説明 し ます。
COM ・ Java ・ .NET 言語バ イ ンデ ィ ン グ : TET_get_text( ) が返 し た最近のテ キ ス ト 断片につ
いて、 グ リ フ が も う 得 ら れない と き は、 -1 が返 さ れます。 そ う でない と き は 1 が返 さ れ
ます。 個々のグ リ フ情報は、 表 11.13 に従っ た TET プ ロ パテ ィ / パブ リ ッ ク フ ィ ール ド か
ら 取得す る こ と がで き ます。 関数が -1 を返 し たに も かかわ ら ずプ ロ パテ ィ / フ ィ ール ド
の値を見た場合には、いずれ も 値 -1 を と り ます(unknown フ ィ ール ド は false にな り ます)。
Perl ・ Python 言語バ イ ンデ ィ ン グ : get_text( ) が返 し た最近のテ キ ス ト 断片について、 グ
リ フ が も う 得 ら れない と き は、0 が返 さ れます。そ う でない と き は、表 11.13 に挙げ る キー
群を含むハ ッ シ ュ が返 さ れます。 個々のグ リ フ情報は、 こ のハ ッ シ ュ 内のキーに よ っ て取
得す る こ と がで き ます。
REALbasic バ イ ンデ ィ ン グ : get_text( ) が返 し た最近のテ キ ス ト 断片について、 グ リ フ が
も う 得 ら れない と き は、 nil が返 さ れます。 そ う でない と き は、 表 11.13 に挙げ る メ ンバ群
を含む TET_char_info オブジ ェ ク ト が返 さ れます。 個々のグ リ フ情報は、 こ のオブジ ェ ク
ト 内の メ ンバに よ っ て取得す る こ と がで き ます。
PHP 言語バ イ ンデ ィ ン グ : get_text( ) が返 し た最近のテ キ ス ト 断片について、 グ リ フ が も
う 得 ら れない と き は、 空 (ヌ ル) オブジ ェ ク ト が返 さ れます。 そ う でない と き は、 表 11.13
に挙げ る フ ィ ール ド 群を含むオブジ ェ ク ト が返 さ れます。 個々のグ リ フ情報は、 こ のオブ
ジ ェ ク ト の メ ンバフ ィ ール ド か ら 取得す る こ と がで き ます。グ リ フ情報オブジ ェ ク ト 内の
整数フ ィ ール ド は、 PHP 言語バ イ ンデ ィ ン グでは long と し て実装 さ れてい ます。
表 11.13 TET_char_info 構造の メ ンバ (C ・ C++) と 、 同等のパブ リ ッ ク フ ィ ール ド (Java ・ PHP) ・ キー (Perl) ・
プ ロパテ ィ (COM ・ .NET)、 およびその型 と 意味の一覧。 詳 し く は ?Glyph metrics?, page 68 を参照。
プロパテ ィ /
フ ィ ール ド 名 説明
uv
(整数) カ レ ン ト グ リ フ に対する UTF-32 Unicode 値。 glyph 以外の粒度の場合、 こ れは、 最終テキ
ス ト 断片 と はま っ た く 無関係な擬似または中間値を と る こ と があ り ます。 granularity=glyph の場
合、 グ リ フ に対する Unicode 値列は論理テキス ト に等 し いですが、 それ以外の粒度の場合には、 そ
れは さ ま ざ ま な処理ス テ ッ プによ っ て変更 さ れている可能性があ り ます。
type
(整数) キ ャ ラ ク タ の種別。 以下の種別は、 ページ上のグ リ フ に対応する本当のキ ャ ラ ク タ を記述
し ます。 こ れ以外のすべてのプ ロパテ ィ / フ ィ ール ド の値は、 対応するグ ラ フ に よ っ て決定 さ れ
ます :
0
ち ょ う ど 1 個のグ リ フ に対応する通常のキ ャ ラ ク タ
1
キ ャ ラ ク タ 列 (合字な ど) の先頭
以下の種別は、 ページ上のグ リ フ には対応 し ない擬似キ ャ ラ ク タ を記述 し ます。 x ・ y フ ィ ール ド
は、 最近の本当のキ ャ ラ ク タ の終了点を表 し 、 width フ ィ ール ド は 0 にな り 、 こ れ以外の uv を除
く すべてのフ ィ ール ド は、 最近の本当のキ ャ ラ ク タ に対応する値を と り ます :
10
キ ャ ラ ク タ 列 (合字な ど) のつづ き
11
(非推奨。 使われていません)
12
挿入 さ れた単語 ・ 行 ・ 区域区切 り キ ャ ラ ク タ
11.8 テキス ト ・ メ ト リ ク ス抽出関数
177
表 11.13 TET_char_info 構造の メ ンバ (C ・ C++) と 、 同等のパブ リ ッ ク フ ィ ール ド (Java ・ PHP) ・ キー (Perl) ・
プ ロパテ ィ (COM ・ .NET)、 およびその型 と 意味の一覧。 詳 し く は ?Glyph metrics?, page 68 を参照。
プロパテ ィ /
フ ィ ール ド 名 説明
attributes
(整数) グ リ フの属性を ビ ッ ト で表 し た もの。 組み合わせる こ と も で き ます :
ビ ッ ト 0 視覚的または意味的な下付き
ビ ッ ト 1 視覚的または意味的な上付き
ビ ッ ト 2 ド ロ ッ プキ ャ ッ プキ ャ ラ ク タ (段落先頭の大き いキ ャ ラ ク タ )
ビ ッ ト 3 こ のグ リ フの、 グ リ フ または単語ベースの影重複は除去済
ビ ッ ト 4 グ リ フは、 ハイ フ ン区切 り 箇所直前のキ ャ ラ ク タ を表す
ビ ッ ト 5 contentanalysis={keephyphenglyphs=true} が指定 さ れた場合以外除去 さ れたハイ フ ン区
切 り アーテ ィ フ ァ ク ト (すなわちハイ フ ンキ ャ ラ ク タ )
ビ ッ ト 6 グ リ フは、 ハイ フ ン区切 り 箇所直後のキ ャ ラ ク タ を表す
unknown
(論理値。 C ・ C++ では整数) 通常は 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) 文字のサイ ズ (つねに正)。 こ の値 と 、 グ リ フの実際の高 さ と の比は固定ではな く 、 フ ォ
ン ト デザイ ン によ っ て変動する可能性があ り ます。 多 く のフ ォ ン ト では、 文字サイ ズは、 すべて
のアセ ン ダ (ア ク セ ン ト 付き キ ャ ラ ク タ も含め) と デ ィ セ ン ダ を包含する よ う に選ばれています。
textrendering
(整数) テキス ト 表現モー ド :
0
テキス ト を塗る
1
テキス ト (輪郭) を描線
2
テキス ト を塗っ て描線
3
不可視テキス ト ( し ば し ば OCR の結果に対 し て用い ら れる)
4
テキス ト を塗っ て、 それを ク リ ッ ピ ングパスに追加
5
テキス ト を描線 し 、 それを ク リ ッ ピ ングパスに追加
6
テキス ト を塗っ て描線 し 、 それを ク リ ッ ピ ングパスに追加
7
テキス ト を ク リ ッ ピ ングパスに追加
178
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
11.9 画像抽出関数
C++ const TET_image_info *get_image_info(int page)
C# Java int get_image_info(int page)
Perl PHP object image_info TET_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
構造へのポ イ ン タ が返 さ れます。 こ のデー タ 構造の メ ンバについては表 11.14 で説明 し ま
す。
COM ・ Java ・ .NET 言語バ イ ンデ ィ ン グ : ページ上で画像が も う 得 ら れない と き は、 -1 が
返 さ れます。 そ う でない と き は 1 が返 さ れます。 個々の画像情報は、 表 11.14 に従っ た
TET プ ロ パテ ィ / フ ィ ール ド か ら 取得す る こ と がで き ます。 関数が -1 を返 し たに も かか
わ ら ずプ ロ パテ ィ / フ ィ ール ド の値を見た場合には、 いずれ も 値 -1 を と り ます。
Perl ・ Python 言語バ イ ンデ ィ ン グ : ページ上で画像が も う 得 ら れない と き は、 0 が返 さ れ
ます。 そ う でない と き は、 表 11.14 に挙げ る キー群を含むハ ッ シ ュ が返 さ れます。 個々の
画像情報は、 こ のハ ッ シ ュ 内のキーに よ っ て取得す る こ と がで き ます。
REALbasic バ イ ンデ ィ ン グ : ページ上で画像が も う 得 ら れない と き は、 nil が返 さ れます。
そ う でない と き は、表 11.14 に挙げ る メ ンバ群を含む TET_image_info オブジ ェ ク ト が返 さ
れます。 個々の画像情報は、 こ のオブジ ェ ク ト 内の メ ンバに よ っ て取得す る こ と がで き ま
す。
PHP 言語バ イ ンデ ィ ン グ : ページ上で画像が も う 得 ら れない と き は、 空 (ヌ ル) オブジ ェ
ク ト が返 さ れます。 そ う でない と き は、 型 TET_image_info のオブジ ェ ク ト が返 さ れます。
個々の画像情報は、 表 11.14 に従っ てその フ ィ ール ド か ら 取得する こ と がで き ます。 画像
11.9 画像抽出関数
179
情報オブジ ェ ク ト 内の整数フ ィ ール ド は、 PHP 言語バ イ ンデ ィ ン グでは long と し て実装
さ れてい ます。
表 11.14 TET_image_info 構造の メ ンバ (C ・ C++) と 、 同等のパブ リ ッ ク フ ィ ール ド (Java ・ PHP) ・ キー (Perl) ・
プ ロパテ ィ (COM ・ .NET)、 およびその型 と 意味の一覧。 詳 し く は ?Image Extraction Basics?, page 107 を参照。
プロパテ ィ /
フ ィ ール ド 名 説明
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 リ フ ァ レ ン ス参照)。
(Double) Width and height of the image on the page in points, measured along the image's edges
C++ int write_image_file(int doc, int imageid, string 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
表 11.15 に従っ て画像関連オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。 右記のオ
プシ ョ ンが使え ます : compression ・ filename ・ keepxmp ・ typeonly。
戻り値 エ ラ ー時には -1、 そ う でないな ら 0 よ り 大き な値。 -1 が返 さ れた場合には、 TET_get_
errmsg( ) を呼び出 し てエ ラ ーの詳細を知 る こ と を推奨 し ます。エ ラ ーの場合には何の画像
出力 も 生成 さ れません。 まれにあ る 非対応の形式の画像の場合 も 、 エ ラ ー と し て報告 さ れ
ます。 戻 り 値が -1 以外の場合には、 その戻 り 値が示すフ ァ イ ル形式でその画像を抽出で
き る こ と を示 し ます :
> -1: エ ラ ー発生。 何の画像 も 抽出 さ れません
> 10 : 画像は TIFF (.tif) と し て抽出 さ れた
> 20 : 画像は JPEG (.jpg) と し て抽出 さ れた
> 30 : 画像は JPEG 2000 (.jpx) と し て抽出 さ れた
> 40 : 画像は raw ピ ク セルデー タ (.raw) と し て抽出 さ れた
180
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
詳細
こ の関数は、 指定 し た pCOS ID を持つ画像に対す る ピ ク セルデー タ を、 い く つかの画像
形式の 1 つへ変換 し 、 その結果をデ ィ ス ク フ ァ イ ルへ書 き 出 し ます。 typeonly オプシ ョ ン
を与えた場合は、 画像の種別だけが返 さ れ、 画像フ ァ イ ルは生成 さ れません。
バインディング C ・ C++ : 戻 り 値のためのマ ク ロ が tetlib.h 内で得 ら れます。
表 11.15 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, string 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 表 11.15 に従っ て画像関連オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。 右記のオ
プシ ョ ンが使え ます : compression ・ keepxmp。
戻り値 指定 し たオプシ ョ ン群に従っ て画像を表現 し たデー タ 。 エ ラ ーの場合には (画像が抽出で
き ない場合 も 含め)、 C ・ C++ では NULL ポ イ ン タ が返 さ れ、 それ以外の言語バ イ ンデ ィ ン
11.9 画像抽出関数
181
グでは空デー タ が返 さ れます。 エ ラ ーが発生 し た場合には、 TET_get_errmsg( ) を呼び出 し
てエ ラ ーの詳細を知 る こ と を推奨 し ます。
詳細
こ の関数は、 指定 し た pCOS ID を持つ画像に対す る ピ ク セルデー タ を、 い く つかの画像
形式の 1 つへ変換 し 、 そのデー タ を メ モ リ 内で利用可能に し ます。
バインディング COM : 多 く の ク ラ イ ア ン ト プ ロ グ ラ ムでは、 Variant 型を用いて画像デー タ を保持 し ます。
C ・ C++ 言語バ イ ンデ ィ ン グ : 返 さ れたデー タ バ ッ フ ァ は、 次に こ の関数を呼び出すま で
使え ます。
REALbasic : 結果は、 エン コ ーデ ィ ン グ -1 (バ イ ナ リ デー タ ) を持つ REALbasic 文字列 と
し て提供 さ れます。 テ キ ス ト が も う 得 ら れない と き は、 空文字列が返 さ れます。
182
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
11.10 TET マー ク ア ッ プ言語 (TETML) 関数
C++ int process_page(int doc, int pagenumber, string 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 以下のグループ内のオプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト :
> 表11.8 に従っ た一般的なページ関連オプシ ョ ン( こ れ ら は pagenumber=0 の場合には無
視 さ れます) : clippingarea ・ contentanalysis ・ excludebox ・ fontsizerange ・ granularity ・
ignoreinvisibletext ・ imageanalysis ・ includebox ・ layoutanalysis ・ skipengines
> 表 11.16 に従っ た処理詳細を指定す る オプシ ョ ン : tetml
表 11.16 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
11.10 TET マー ク ア ッ プ言語 (TETML) 関数
183
戻り値 エ ラ ー時には -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, string 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)。
詳細
184
こ の関数は、 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_
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
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 と し て返 さ れます。
11.10 TET マー ク ア ッ プ言語 (TETML) 関数
185
11.11 pCOS 関数
PDF か ら オブジ ェ ク ト デー タ を取得す る ための完全な pCOS 文法が使え ます。詳 し い説明
は、 別の文書 と し て あ る pCOS リ フ ァ レ ン ス を参照 し て く だ さ い。
C++ double pcos_get_number(int doc, string 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++ string pcos_get_string(int doc, string 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 が返 さ れます。
詳細
186
こ の関数は、 pCOS が フルモー ド で動作 し てお ら ず、 かつオブジ ェ ク ト が文字列型の場合
には、 例外を発生 さ せます (pCOS リ フ ァ レ ン ス参照)。 例外 と し て、 オブジ ェ ク ト /Info/
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
* (文書情報キー群) は制限 pCOS モー ド で も nocopy=false か plainmetadata=true な ら ば
取得す る こ と がで き 、 ま た、 bookmarks[...]/Title と pages[...]/Annots/Contents は制限 pCOS
モー ド で も nocopy=false な ら ば取得で き ます。
こ の関数は、PDF 文書か ら 取得す る 文字列がテ キ ス ト 文字列であ る と 前提 し てい ます。
バ イ ナ リ デー タ を内容 と し て持つ文字列オブジ ェ ク ト は、 こ れに換え て、 デー タ にいかな
る 変更を も 加え ない TET_pcos_get_stream( ) で取得する べき です。
バインディング C バ イ ンデ ィ ン グ :返 さ れ る 文字列は、最大 10 項目を持つ リ ン グバ ッ フ ァ 内に格納 さ れま
す。 10 個を超え る 文字列が取得 さ れた と き には、 バ ッ フ ァ は再利用 さ れますので、 10 個
を超え る 文字列を同時に利用 し たい場合には、 ク ラ イ ア ン ト 側でその文字列を複製 し てお
く 必要があ り ます。 た と えば、 printf( ) 文の引数では こ の関数を最大 10 回ま で呼び出す こ
と がで き ます。 同時に 10 個を超え る 文字列が使用 さ れないな ら ば、 その戻 り 文字列は互
いに独立であ る こ と が保証 さ れてい る か ら です。
C ・ C++ 言語バ イ ンデ ィ ン グ : 文字列は、 BOM な し UTF-8 形式で返 さ れます。
COM : 結果は、 UTF-16 形式の Unicode 文字列 と し て提供 さ れます。 テ キ ス ト が も う 得 ら
れない と き は、 空文字列が返 さ れます。
Java ・ .NET ・ Python : 結果は、 Unicode 文字列 と し て提供 さ れます。 テ キ ス ト が も う 得 ら
れない と き は、 ヌ ルオブジ ェ ク ト が返 さ れます。
Perl ・ PHP 言語バ イ ンデ ィ ン グ : 結果は、 UTF-8 文字列 と し て提供 さ れます。 テ キ ス ト が
も う 得 ら れない と き は、 ヌ ルオブジ ェ ク ト が返 さ れます。
RPG 言語バ イ ンデ ィ ン グ : 結果は、 UTF-8 文字列 と し て提供 さ れます。
C++ const unsigned char *pcos_get_stream(int doc, int *length, string optlist, string 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
表 11.17 に従っ て ス ト リ ーム取得オプシ ョ ン群を指定 し たオプシ ョ ン リ ス ト 。
ス ト リ ーム ま たは文字列オブジ ェ ク ト への完全 pCOS パ ス。
追加引数 (C 言語バ イ ンデ ィ ン グのみ) 任意の数の追加引数を、 key 引数がそれに対応
す る プ レース ホルダ を含んでい る 場合には (文字列には %s、 整数には %d。 %% と す る と
パーセ ン ト 記号 1 個)、 与え る こ と がで き ます。 こ れ ら の引数を利用すれば、 可変の数値
や文字列値を含む複雑なパ ス を明示的に組み立て る 手間が省け ます。プ レース ホルダの数
と 型が、 与え る 追加引数 と 一致す る よ う にす る のは、 ク ラ イ ア ン ト 側の役割です。
戻り値
ス ト リ ーム ま たは文字列の中に含まれた非暗号化デー タ 。 ス ト リ ーム ま たは文字列が空の
場合には、 返 さ れ る デー タ は空にな り ます (C ・ C++ では NULL)。
11.11 pCOS 関数
187
オブジ ェ ク ト が 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 に埋め込まれてい る フ ォ ン ト デー タ を取得する こ と がで き ま
す。 ユーザーは、 フ ォ ン ト は各 フ ォ ン ト ベン ダの使用許諾の対象であ り 、 それぞれの知的
所有権保有者の明示的許諾な し では再利用 し てはな ら ない と い う 事実に留意 し て く だ さ
い。 お使いの フ ォ ン ト ベン ダに連絡 し て、 関連する ラ イ セ ン ス契約を協議 し て く だ さ い。
表 11.17 TET_pcos_get_stream( ) のオプ シ ョ ン一覧
オプ シ ョ ン
説明
convert
(キーワー ド 。 非対応フ ィ ル タ で圧縮 さ れている ス ト リ ームに対 し ては無視 さ れます) 文字列ま た
はス ト リ ーム内容が変換 さ れるかど う かを制御 し ます (デ フ ォル ト : none) :
none
内容をバイ ナ リ デー タ と し て扱い、 何の変換も 行いません。
unicode 内容を テキス ト デー タ と し て (すなわち、 TET_pcos_get_string( ) におけるの と 全 く 同 じ
に) 扱い、 Unicode へ正規化 し ます。 非 Unicode 対応言語バイ ンデ ィ ングでは、 こ れは、
デー タ は BOM な し UTF-8 形式へ変換 さ れる こ と を意味 し ます。
こ のオプ シ ョ ンは、 め っ たに用い られない PDF 内のデー タ 型 「テキス ト ス ト リ ーム」
(た と えば こ れは JavaScript のために用い られる場合があ り ますが、 JavaScript のほ と
んどはス ト リ ームオブ ジ ェ ク ト でな く 文字列オブ ジ ェ ク ト 内に入っ ています) のために
必要です。
keepfilter
(論理値。 画像デー タ ス ト リ ームに対 し てのみ推奨 さ れます。 非対応フ ィ ル タ で圧縮 さ れている ス
ト リ ームに対 し ては無視 さ れます) true の場合には、 ス ト リ ームデー タ は、 その画像の filterinfo
擬似オブ ジ ェ ク ト 内で指定 さ れている フ ィ ル タ で圧縮 さ れます (pCOS リ フ ァ レ ン ス参照)。 false
の場合には、 ス ト リ ームデー タ は解凍 さ れます。 デ フ ォル ト : すべての非対応フ ィ ル タ に対 し て
true、 それ以外には false
188
11 章 : TET ラ イ ブ ラ リ API リ フ ァ レ ン ス
A TETラ イ ブ ラ リ ク イ ッ ク リ フ ァ レ ンス
以下の表に、 すべての TET API 関数の概観を示 し ます。 頭に (C) が付いてい る も のは、 関
数のC プ ロ ト タ イ プであ り 、Java言語バ イ ンデ ィ ン グでは利用で き ない こ と を意味 し ます。
セ ッ ト ア ッ プ関数
関数プ ロ ト タ イ プ
(C) TET *TET_new(void)
ページ
152
void delete( )
152
PVF 関数
関数プ ロ ト タ イ プ
void create_pvf(String filename, byte[] data, String optlist)
ページ
152
int delete_pvf(String filename)
153
Unicode 変換関数
関数プ ロ ト タ イ プ
ページ
(C) const char *TET_utf8_to_utf16(TET *tet, const char *utf8string, const char *ordering, int *size)
154
(C) const char *TET_utf16_to_utf8(TET *tet, const char *utf16string, int len, int *size)
154
(C) const char *TET_utf32_to_utf16(TET *tet, const char *utf32string, int len, const char *ordering, int *size)
155
(C) const char *TET_utf8_to_utf32(TET *tet, const char *utf8string, const char *ordering, int *size)
155
(C) const char *TET_utf32_to_utf8(TET *tet, const char *utf32string, int len, int *size)
156
(C) const char *TET_utf16_to_utf32(TET *tet, const char *utf16string, int len, const char *ordering, int *size)
156
例外処理関数
関数プ ロ ト タ イ プ
String get_apiname( )
ページ
157
String get_errmsg( )
157
int get_errnum( )
157
文書関数
関数プ ロ ト タ イ プ
int open_document(String filename, String optlist)
ページ
160
(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)
166
void close_document(int doc)
166
A TET ラ イ ブ ラ リ ク イ ッ ク リ フ ァ レ ン ス
189
ページ関数
関数プ ロ ト タ イ プ
int open_page(int doc, int pagenumber, String optlist)
void close_page(int page)
ページ
167
174
テキス ト ・ メ ト リ ッ ク 抽出関数
関数プ ロ ト タ イ プ
String get_text(int page)
int get_char_info(int page)
ページ
175
176
画像抽出関数
関数プ ロ ト タ イ プ
int get_image_info(int page)
ページ
179
int write_image_file(int doc, int imageid, String optlist)
180
final byte[ ] get_image_data(int doc, int imageid, String optlist)
181
TET マー ク ア ッ プ言語 (TETML) 関数
関数プ ロ ト タ イ プ
int process_page(int doc, int pagenumber, String optlist)
final byte[ ] get_xml_data(int doc, String optlist)
ページ
183
184
オ プ シ ョ ン処理
関数プ ロ ト タ イ プ
void set_option(String optlist)
ページ
150
pCOS 関数
関数プ ロ ト タ イ プ
double pcos_get_number(int doc, String path)
190
ページ
186
String pcos_get_string(int doc, String path)
186
final byte[ ] pcos_get_stream(int doc, String optlist, String path)
187
A 章 : TET ラ イ ブ ラ リ ク イ ッ ク リ フ ァ レ ン ス
B 更新履歴
本マニ ュ アルの更新履歴
日付
変更点
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 更新履歴
191
192
B 章 : 更新履歴
索引
A
L
API リ フ ァ レ ン ス 143
Lucene 検索エ ン ジ ン 47
B
M
BMP 92
BOM (Byte Order Mark) 92
MediaWiki 57
C
C++ バイ ンデ ィ ング 31
codelist 108
COM バイ ンデ ィ ング 33
CSV 形式 139
C バイ ンデ ィ ング 29
D
Dispose( ) 152
F
float
オプ シ ョ ン リ ス ト 内の 147
float ・ 整数値
オプ シ ョ ン リ ス ト 内の 148
FontReporter Plugin 13, 107
G
glyphlist 110
glyphrule 111
granularity 83
H
HTML コ ンバー タ (XSLT サン プル) 139
I
IFilter
Microsoft 製品用 54
J
J2EE ア プ リ ケーシ ョ ンサーバ 34
Javadoc 35
Java バイ ンデ ィ ン グ 34
N
.NET バイ ンデ ィ ング 36
O
Oracle Text 51
P
pCOS
API 関数 186
イ ン タ フ ェ ース 141
ク ッ ク ブ ッ ク 17
PDF のバージ ョ ン 13
Perl バイ ンデ ィ ング 37
PHP バイ ンデ ィ ング 38
PUA 92
Python バイ ンデ ィ ング 40
R
REALbasic バイ ンデ ィ ング 41
resourcefile パラ メ タ 63
RPG バイ ンデ ィ ング 42
S
searchpath 62
Solr 検索サーバ 50
T
tet.upr 63
TET_CATCH( ) 157
TET_close_document( ) 166
TET_close_page( ) 174
TET_create_pvf() 152
TET_delete( ) 152
TET_delete_pvf() 153
TET_EXIT_TRY( ) 29, 157
TET_get_apiname() 157
TET_get_char_info( ) 176
TET_get_errmsg( ) 157
索引
193
TET_get_errnum( ) 157
TET_get_image_data( ) 181
TET_get_image_info( ) 179
TET_get_text( ) 175
TET_get_xml_data( ) 184
TET_new( ) 152
TET_open_document( ) 160
TET_open_document_callback( ) 166
TET_open_page( ) 167
TET_pcos_get_number( ) 186
TET_pcos_get_stream( ) 187
TET_pcos_get_string( ) 186
TET_RETHROW( ) 157
TET_set_option( ) 150
TET_TRY( ) 157
TET_utf16_to_utf32() 156
TET_utf16_to_utf8( ) 154
TET_utf32_to_utf16() 155
TET_utf32_to_utf8() 156
TET_utf8_to_utf16( ) 154
TET_utf8_to_utf16() 155
TET_write_image_file( ) 180
TETML 123
TETML スキーマ 131
TETRESOURCEFILE 環境変数 63
TET コ ネ ク タ
Lucene 用 47
MediaWiki 用 57
Microsoft 製品用 54
Oracle 用 51
Solr 用 50
TET コ マ ン ド ラ イ ン ツール 19
TET の機能 13
TET ク ッ ク ブ ッ ク 17
TET プ ラ グ イ ン
Adobe Acrobat 用 45
TeX 文書 68
ToUnicode CMap 109
U
Unichar 値
オプ シ ョ ン リ ス ト 内の 146
Unicode
BOM 92
後処理 96
オプ シ ョ ン リ ス ト 内の 146
概念 91
正規化 103
符号化形式 92
符号化スキーム 92
分解 99
前処理 94
前処理 ・ 後処理 94
Unicode 字形統合 96
UPR フ ァ イル形式 61
194
索引
UTF-32 105
UTF 形式 92
X
XMP メ タ デー タ 70
XSLT サン プル 139
画像の 114
XSD スキーマ
TETML の 131
XSLT 134
サン プル 137, 16
x ハイ ト 76
あ
後処理 94
ア ラ ビ ア文字 81
暗号化文書 59
入れ子のオプ シ ョ ン リ ス ト 144
イ ン ス ト ール
TET の 7
イ ン チ 73
オプ シ ョ ン リ ス ト 143
オプ シ ョ ン リ ス ト 文法 143
か
回転済みグ リ フ 79
影付き除去 85
画像
XMP メ タ デー タ 114
色再現性 121
解像度 119
視覚情報 119
小画像除去 116
抽出 113
デ ィ ス ク または メ モ リ へ抽出 113
配置画像 117
非対応の種別 121
文書内の画像数 116
ページベースの抽出ループ 118
リ ソ ース 117
リ ソ ースベースの抽出ループ 118
連結 115
キーワー ド
オプ シ ョ ン リ ス ト 内の 147
基本多言語面 92
キ ャ ラ ク タ と グ リ フ 91
キ ャ ラ ク タ 列 93
擬似太字除去 85
矩形
オプ シ ョ ン リ ス ト 内の 149
組文字 93
グ リ フ 91
グ リ フ規則 111
グ リ フ メ ト リ ッ ク 74
グ リ フ リ ス ト 110
コ マ ン ド ラ イ ン ツール 19
コ ン コ ーダ ン ス (XSLT サン プル) 137
合字 93
互換分解 100
さ
最適化
速度の 65
索引 (XSLT サン プル) 139
作成例
XSLT 137
座標系 73
シーケ ン ス 93
し お り 71
視覚情報
画像の 119
終了点
グ リ フ と 単語の 77
シ ュ ラ ッ グ機能 59
小画像除去 116
私用領域 92
字形統合 96
数値
オプ シ ョ ン リ ス ト 内の 147
スキーマ 131
正規化 103
正準分解 99
双方向テキス ト 81
速度を最適化 65
た
縦書き 79
単位 73
単語境界検出 84
単語検出機能 84
注釈 71
テキス ト 抽出状態 59
な
内容分析 83
生テキス ト 抽出 (XSLT サン プル) 140
日中韓 (日本語 ・ 中国語 ・ 韓国語) 14
互換形 79
設定 7
日中韓 (日本語 ・ 中国語 ・ 韓国語) テキス ト
79
は
配置画像 117
ハイ フ ン除去 85
評価版 7
表組検出 89
表組抽出 (XSLT サン プル) 139
フ ァ イル検索 62
フ ァ イル添付 71
フ ォ ン ト 統計 (XSLT サン プル) 138
フ ォ ン ト の使用箇所を検索 (XSLT サン プル)
138
フ ォ ン ト フ ィ ル タ リ ン グ (XSLT サン プル) 137
分解 99
文書情報項目 69
文書ス タ イル 87
文書領域 69
文法
オプ シ ョ ン リ ス ト の 143
ヘブ ラ イ文字 81
ページベースの画像抽出ループ 118
ポ イ ン ト 73
ま
前処理 94
マ ッ プ不能グ リ フ 106
ミ リ メ ー ト ル 73
文字列
オプ シ ョ ン リ ス ト 内の 146
ら
ラ イ セ ン スキー 9
リ ガチ ャ 93
リスト値
オプ シ ョ ン リ ス ト 内の 144
リ ソ ース カ テ ゴ リ 61
リ ソ ースの コ ン フ ィ ギ ュ レーシ ョ ン 61
リ ソ ースベースの画像抽出ループ 118
粒度 83
領域
テキス ト 抽出の 73
例
テキス ト 抽出状態 59
例外処理 27
C の場合 29
ロ グ記録 158
論理値
オプ シ ョ ン リ ス ト 内の 147
わ
アセ ン ダ 76
キ ャ ッ プハイ ト 76
サーブ レ ッ ト 34
サロゲー ト 92
テキス ト フ ィ ル タ リ ン グ 94
索引
195
デ ィ セ ン ダ 76
ハイ ラ イ ト 77
パ ッ ケージ 72
フ ォ ーム フ ィ ール ド 71
ポー ト フ ォ リ オ 72
ミ ニサン プル 16
レ スポン ス フ ァ イル 22
196
索引
索引
197
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] (お使いのラ イ セ ン ス番号をお書き く だ さ い)
Fly UP