PDF 内部構造 テキストのソースを表示
新しいページはコチラ
移動:
案内
,
検索
[[PDF 内部構造#説明|PDF 内部構造]]に戻る。 == '''概要''' == PDFの最も重要な機能であるテキスト機能を使ったPDFファイルの作り方について触れていきます。いままでの知識も必要になります。自分で作れるようになると楽しさがアップです。WordみたいなことがPDFだけで出来るようになっていきます。しかも、かなり柔軟に設定もできるので、作りたいと思った文書ファイルが思うがままです。こういうのを理解すると自分でPDFファイルを超柔軟な設定が扱えるようなプログラムを作りたくなってきます。 === '''テキスト状態''' === テキスト状態についての設定をするオペレータを紹介していきます。まずは、以下のようなソースで基本的な文書が作れることを示します。 <syntaxhighlight2 lang="text"> %PDF-1.7 %粤マモ 1 0 obj << /Kids [2 0 R] /Type /Pages /Count 1 >> endobj 2 0 obj << /Rotate 0 /Parent 1 0 R /MediaBox [0 0 1033 1462] /Resources 3 0 R /Type /Page /Contents [4 0 R] >> endobj 3 0 obj << /Font << /F0 << /BaseFont /Times-Italic /Subtype /Type1 /Type /Font >> >> >> endobj 4 0 obj << >> stream %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %ここからが方眼紙作成のグラフィックストリーム。 % .....(省略)..... % %ここまでが方眼紙作成のグラフィックストリーム。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %テキスト文字列部分ストリーム開始 BT %BT(=Begin Text) /F0 36 Tf % F0=Times-Italicで 36 Tfのフォントサイズ 1 0 0 1 100 800 Tm %Tmは現在のテキストマトリクスを移動(平行移動/回転/拡大縮小) 50 TL % TLはテキストレディング垂直(上下)余白 50 ポイントになる。テキストの左下が50ポイント間隔 (Create a PDF file. How the text works.) Tj T* %Tjはオペランドの配列()の中を現在のグリフ設定で描画。 %T*は次の行へ移動 3 Tc % Tcは文字の間隔 (Create a PDF file. How the text works.) Tj T* 10 Tw % Twは単語の間隔 (Create a PDF file. How the text works.) Tj ET % ET(=End Text) %テキスト文字列部分ストリーム終了 endstream endobj 5 0 obj << /Pages 1 0 R /Type /Catalog >> endobj xref 0 6 trailer << /Root 5 0 R /Size 6 >> startxref 0 %%EOF </syntaxhighlight2> このような設定でPDF生成すると以下のようなPDF表示を得ることができます。 [[ファイル:PDF Text Condition.png|400px|thumb|none|テキストの例]] 方眼紙になっているので、文字列が50ポイント置きに配置されていることがわかります。ポイント単位で細かく文字を配置できる気配がします。そしてテキスト状態を変えるオペレータを記述すると最初は文字列の間隔が変わり、次に単語単位の間隔も帰れました。英語の斜体文字のグリフの扱いは複雑なので、どこがどれくらい広がったのか、論理的な説明は難しいので、ここでは、だいたい変化させれるということにとどめておきます。おいおい、検証することにしましょう。 Createの最後のeの文字に注目すると文字間隔を3ポイントにした後の真ん中の行と一番最初の行で比較すると、Createの文字の間は5つで、3 ポイント× 5 つ で15 ポイントです。eの左端が15ポイントくらいずれた場所に配置されている感じなので文字間隔が数値どおり広がっていると考えて問題ないでしょう。それにくわえて単語間となる部分の文字間隔は2つ分と単語間隔1つ分16ポイントくらい移動しているようにも見えます。 <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> <tr style=" background: #778ca3; border-right: solid 1px #778ca3; color: #ffffff;"> <th style="width: 175px;">オペランド</th> <th style="width: 175px;">オペレータ</th> <th>簡単な説明</th> </tr> <tr> <td>文字列</td> <td>Tj</td> <td>オペランド配列で指定されてた文字列の描画をする</td> </tr> <tr style=" background: #eeeeee;"> <td>数値</td> <td>TL</td> <td>垂直文字間隔の設定。規定値は100</td> </tr> <tr> <td>数値</td> <td>T*</td> <td>次の行に移動</td> </tr> <tr style=" background: #eeeeee;"> <td>数値</td> <td>Tc</td> <td>文字間隔のポイント値をオペランドに指定</td> </tr> <tr> <td>数値</td> <td>Tw</td> <td>単語間隔のポイント値をオペランドに指定</td> </tr> <tr style=" background: #eeeeee;"> <td>数値</td> <td>Tf</td> <td>フォントサイズ</td> </tr> <tr> <td>数値</td> <td>Tz</td> <td>水平間隔。指定した値/100の値。規定値が100で1を意味する</td> </tr> <tr style=" background: #eeeeee;"> <td>数値,数値,文字列</td> <td>"</td> <td>オペランドに文字間隔,単語間隔,文字列を一括で指定するオペレータ</td> </tr> <tr> <td>文字列</td> <td>'</td> <td>T* 文字列 Tj という構造の動作を文字列 ' だけで指定できる</td> </tr> <tr style=" background: #eeeeee;"> <td>文字列に数値を含む</td> <td>TJ</td> <td>オペランドに文字間隔と文字列を一括で指定するオペレータ</td> </tr> <tr> <td>数値6個</td> <td>Tm</td> <td>最初の数値はcmで指定する値と同じ意味だが、テキストがグラフィックス座標系を基準とした上に配置される点では同じオペレータではない。</td> </tr> <tr style=" background: #eeeeee;"> <td>数値</td> <td>Tr</td> <td>整数値1指定でモード切替。</td> </tr> <tr> <td>数値</td> <td>Ts</td> <td>ベースラインモードを整数値で切り替え。</td> </tr> </table> === '''日本語を扱う''' === 残念ながら上記のような設定ではテキストで文字列配列の部分に日本語を入力しただけでは日本語は扱えません。簡単ではないってことですね。フォント設定にコツがいります。文字列配列の指定もエスケープシーケンスを意識した設定が必要です。で、実際に手作業で組んでいくのはかなり難しいので、ここでは既に日本語への変換方法を知っているアプリケーションにPDFを作成してもらって、そこから解析していくという、手法をとります。わかってる人たちはスゴイよ。自分は信頼できるアプリケーションとして、Windows10でMicrosoftWordを使います。やっぱね。この組み合わせは安定しているよ。完璧なアプリケーションとは言えないかもしれなけれど、PDFを出力する基本部分くらいなら、100%大丈夫だよね。さすがは世に出てきているだけのことはある。そんな感じです。個別のフォントでどういう設定にするべきかを調べようと思うと、また別のフォント解析アプリを使ったり、作ったりして立ち向かう必要がありますが、そういう基本的なことをWordとWindows10の組み合わせではやってくれます。 ありがたい。で、さっそく出力しました。それだけだと埋め込みフォントっていう、もう一歩先進的なことをやってしまいますので、これを埋め込まないフォントとして扱うように、ちょろっとイカサマ的な操作をします。そうして出来上がるのが以下のような文書です。文書の内容は「美しいMS ゴシックフォントの世界」としました。あんまり長文にすると、わけわからなくなってくるので、16文字ね。 [[PDF 内部構造#説明|PDF 内部構造]]に戻る。
PDF 内部構造 テキスト
に戻る。
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ