PDF 内部構造 テキスト 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(フォントプログラムの埋め込み)
(  /DescendantFonts :/FontDescriptor : /CharSet)
 
243行: 243行:
 
</syntaxhighlight2>
 
</syntaxhighlight2>
  
 という具合にリソースの定義部で、/Fontフォントが定義され、その中で/DescendantFonts。そしてさらにその中で/FontDescriptorについての定義がされる。コメントの%KozMinは、Macのフォントの小塚明朝の場合はこんな感じの記述という例で、完全に動作するとは保証できないのであしからず。この3段論法みたいなフォント情報はひとつにまとめて書くことが出来る。まとめて記述するには、以下のような感じ。
+
 という具合にリソースの定義部で、/Fontフォントが定義され、その中で/DescendantFonts。そしてさらにその中で/FontDescriptorについての定義がされる。コメントの%KozMinは、Macのフォントの小塚明朝の場合はこんな感じの記述という例で、完全に動作するとは保証できないのであしからず。この3段論法みたいなフォント情報はひとつにまとめて書くことが出来る。まとめて記述するには、以下のような感じ。Adobe Acrobat Readerには小塚明朝が表示できる様に組み込まれていてWindowsでも使えるはずですが、自分は上手くやれませんでした。なんかもうちょっとコツがあるのかも知れない。ちな、この小塚フォントをWindowsの汎用フォントフォルダに移動して普通に使って文書に埋め込んだりして配布して使うのは規約違反らしいです。Acrobatで見るためだけに使いなさいと言う事らしい。
  
 
<syntaxhighlight2 lang="text">
 
<syntaxhighlight2 lang="text">
299行: 299行:
 
</syntaxhighlight2>
 
</syntaxhighlight2>
  
 三つを一つに纏めれましたが、この三つは意味が違うので注意が必要です。/F1という名前のフォントはType0という扱いをします。という意味合いで、このファイルでの扱いを、決めるための定義なのでこのPDFファイルのための独自情報です。ここでType0になっているのは、複数のフォントを、まとめれるという特徴があるのでよく使われるフォントタイプです。その中にある/DescendantFontsにはこういうフォントを組み合わせて使いますという具合です。Descendantは日本語で子孫という意味です。実際に利用するフォントの構造を指定しています。MSゴシックがTrueTypeのCIDフォントだということを意味しています。
+
 三つを一つに纏めれましたが、この三つは意味が違うので注意が必要です。/F1という名前のフォントはType0という扱いをします。という意味合いで、このファイルでの扱いを、決めるための定義なのでこのPDFファイルのための独自情報です。ここでType0になっているのは、複数のフォントを、まとめれるという特徴があるのでよく使われるフォントタイプです。その中にある/DescendantFontsにはこういうフォントを組み合わせて使いますという具合です。Descendantは日本語で子孫という意味です。実際に利用するフォントの構造を指定しています。MSゴシックがTrueTypeのCIDキー付きフォントだということを意味しています。実際はOpen Typeの構造に準拠していますが、TrueTypeとしても動作する様になっている形式です。OpenTypeは使えないと言うアプリケーションは多いWindowsの世界では良く取られる対処法です。
  
  
 そして、/FontDescriptorはストリームで対応する文字コードについてのフォント情報が無かったときはどのフォントは情報に従うのかという意味を持っています。Descriptorとは説明する者という意味です。
+
 そして、/FontDescriptorはストリームで対応する文字コードについてのフォント情報が無かったとき、この例ではType0フォントのMSゴシックが無い場合、どのフォントの情報に従うのかという意味を持っています。そしてどの様なフォントなのかを説明しなければなりません。Descriptorとは説明する者という意味です。
  
 
==== '''日本語PDFフォント情報のオペレータ個別の意味''' ====
 
==== '''日本語PDFフォント情報のオペレータ個別の意味''' ====
886行: 886行:
 
 1グリフ毎の横幅のデフォルト値。全グリフに適用される整数値。規定値は0
 
 1グリフ毎の横幅のデフォルト値。全グリフに適用される整数値。規定値は0
 
 font内部の指定値に左右されますが、等幅半角文字なら1024emあるいは、1000、等幅全角文字なら2048emあるいは2000emとなっているものが多いでしょう。なので最大の2048を適用しておいて、それでは、他の文字が具合が悪いので、半角文字の一文字毎に次の/Wを使って指定することになります。範囲指定できるので、それほど大変ではありません。
 
 font内部の指定値に左右されますが、等幅半角文字なら1024emあるいは、1000、等幅全角文字なら2048emあるいは2000emとなっているものが多いでしょう。なので最大の2048を適用しておいて、それでは、他の文字が具合が悪いので、半角文字の一文字毎に次の/Wを使って指定することになります。範囲指定できるので、それほど大変ではありません。
 
+
 
 /DW 2048
+
/DW 2048
  
 
====== ''' /DescendantFonts :/W''' ======
 
====== ''' /DescendantFonts :/W''' ======
957行: 957行:
  
 
====== ''' /DescendantFonts :/Subtype''' ======
 
====== ''' /DescendantFonts :/Subtype''' ======
 ここでは実際に使うフォントファイルの形式を指定します。このCIDFont辞書のエントリでは/CIDFontTye0か/CIDFontTye0のどちらかを指定します。TrueType系なら/CIDFontType2。OpenType系なら/Subtype /CIDFontType0と指定します。間違えても細かいことをしない限りか?現段階の大雑把な操作ではあまり問題はおこらないようです。
+
 ここでは実際に使うフォントファイルの形式を指定します。このCIDFont辞書のエントリでは/CIDFontTye0か/CIDFontTye0のどちらかを指定します。TrueType系なら/CIDFontType2。OpenType系なら/Subtype /CIDFontType0と指定します。間違えても細かいことをしない限りか?現段階の大雑把な操作ではあまり問題はおこらないようです。いやOpen TypeのようでTrueTypeとして動くようなフォントが多いWindowsのおかげか、
  
 
====== ''' /DescendantFonts :/FontDescriptor''' ======
 
====== ''' /DescendantFonts :/FontDescriptor''' ======
1,064行: 1,064行:
 
  </tr>
 
  </tr>
 
</table>
 
</table>
 +
 +
 +
CharSetで指定する各文字名の正式な名称は PDFリファレンスの最後の付録のあたりに記述があります。
  
 
 
 
 
1,106行: 1,109行:
  
  
 2と6と19が複合した場合は 100 0000 0000 0010 0010 = 10進数で262178となります。したがって
+
 2と6と19が複合した場合は 100 <span></span> 0000 <span></span>0000 <span></span> 0010 <span></span> 0010 = 10進数で262178となります。したがって
  
 
  /flags 262178
 
  /flags 262178
1,121行: 1,124行:
  
  
 というようなフォント名はサブセット化されているフォント名の代表です。その中に含まれている文字を文字列で指定することでサブセット化されていて、どの文字が含まれているかを指定するものになっています。各文字名の正式な名称は PDFリファレンスの最後の付録のあたりに記述があります。
+
 というようなフォント名はサブセット化されているフォント名の代表です。その中に含まれている文字を文字列で指定することでサブセット化されていて、どの文字が含まれているかを指定するものになっています。
 +
 
 +
 
  
 
====== ''' /DescendantFonts :/CIDSystemInfo''' ======
 
====== ''' /DescendantFonts :/CIDSystemInfo''' ======
1,148行: 1,153行:
  
 
 途中経過としては以下のようなスクリプトだ。インターネットに出回っているType3のPDFはうまくFontの定義は出来ているみたい。でもマネしてもダメだな。もう少し理解しないと駄目だな。
 
 途中経過としては以下のようなスクリプトだ。インターネットに出回っているType3のPDFはうまくFontの定義は出来ているみたい。でもマネしてもダメだな。もう少し理解しないと駄目だな。
 +
 +
 +
 ページの処理中にエラーが発生しました。文書を読み取り中に問題が発生しました(18)となるType3指定例。解決編までは、しばし待たれよ。それっていつだよ。だな。
  
 
<Syntaxhighlight2 lang="text">
 
<Syntaxhighlight2 lang="text">
1,166行: 1,174行:
 
 
  
 +
 +
stream
 +
 +
%/Type3Font 10.0 Tf
 +
%(abababab) Tj T*
 +
 +
endstream
 
 
  
endobj
+
  
 
16 0 obj  
 
16 0 obj  
1,181行: 1,196行:
 
   /FontBBox [0 0 750 750]
 
   /FontBBox [0 0 750 750]
 
   /FontMatrix [0.001 0 0 0.001 0 0]  
 
   /FontMatrix [0.001 0 0 0.001 0 0]  
   /FirstChar 0
+
   /FirstChar 97
   /LastChar 1
+
   /LastChar 98
 
   /Widths [1000 1000]  
 
   /Widths [1000 1000]  
 
   /Encoding 17 0 R  
 
   /Encoding 17 0 R  
1,192行: 1,207行:
 
<<  
 
<<  
 
   /Type /Encoding  
 
   /Type /Encoding  
   /Differences [0 /square /triangle]  
+
   /Differences [97 /square /triangle]  
 
>>  
 
>>  
 
endobj  
 
endobj  
1,209行: 1,224行:
 
stream  
 
stream  
 
   1000 0 0 0 750 750 d1  
 
   1000 0 0 0 750 750 d1  
%  48 48 2000 2000 re  
+
  0 0 750 750 re
f  
+
  f
 
endstream  
 
endstream  
 
endobj  
 
endobj  
1,220行: 1,235行:
 
stream  
 
stream  
 
   1000 0 0 0 750 750 d1  
 
   1000 0 0 0 750 750 d1  
%  48 48 m  
+
  0 0 m  
%  976 2000 l  
+
  375 750 l  
%  2000 48 l  
+
  750 0 l  
f  
+
  f  
 
endstream  
 
endstream  
 
endobj  
 
endobj  
1,233行: 1,248行:
 
 
 
</Syntaxhighlight2>
 
</Syntaxhighlight2>
 +
 上の方にある行
 +
 +
%/Type3Font 16 0 R %Type3
 +
 +
 のコメントを外すとエラーでコメント化したままなら問題ないです。惜しいところまで来ている。凡ミスしてるんだろうなぁ。わからん。落ち着け俺。うまくいっているインターネット上から入手したType3フォントを使っているPDFあるんだから、うまくいくはず。
 +
 
==== '''フォントプログラムの埋め込み''' ====
 
==== '''フォントプログラムの埋め込み''' ====
 
 ここまでフォントの原理を理解することに焦点を合わせて、プログラムを埋め込まない使い方をしましたが、埋め込まない日本語PDFはISOの意に沿わない形式と言えるそうです。なので埋め込まないといけないのですが、フォントファイルから埋め込みフォントの記述方法については詳しく述べられた文献がみつからないため、続編記事には時間がかかりそうです。
 
 ここまでフォントの原理を理解することに焦点を合わせて、プログラムを埋め込まない使い方をしましたが、埋め込まない日本語PDFはISOの意に沿わない形式と言えるそうです。なので埋め込まないといけないのですが、フォントファイルから埋め込みフォントの記述方法については詳しく述べられた文献がみつからないため、続編記事には時間がかかりそうです。
  
  
 なんやかんやで今まで、色々なわからないことを潰してきましたので、なんとかしていくでしょう。2022年8月上旬現在。
+
 なんやかんやで今まで、色々なわからないことを潰してきましたので、なんとかしていくでしょう。
 +
2022年8月上旬現在。
  
 
+
 やってみたんですけど。Wordとかで埋め込まれたフォントストリームをバイナリ―エディタで切り出して、元と同じファイル名の拡張子を付けると、抽出された文字だけのサブセットフォントになっています。バイナリーエディタで編集するときは stream 0x0a…0x0a endstream という具合に改行コード 0a があると思うので、0aも切り取ります。フォントファイルのバイナリーは…の部分そのものということ。
 やってみたんですけど。Wordとかで埋め込まれたフォントストリームをバイナリ―エディタで切り出して、元と同じファイル名の拡張子を付けると、抽出された文字だけのサブセットフォントになっています。バイナリーエディタで編集するときは stream 0x0a…0x0a endstream という具合に改行コード 0a があると思うので、0aも切り取ります。
+
  
  
1,246行: 1,267行:
  
  
 素人はフォントファイルを編集するFontForgeでいじったものを張り付けて埋め込むという作業でもしてないさいって感じになるのかな。
+
 素人はフォントファイルを編集するFontForgeとかの先人達が築き上げた立派なフォントエディタでいじったものを張り付けて埋め込むという作業でもしてないさいって感じになるのかな。フォントファイルの構造解析しないとだめだな。また勉強だ。意外と根本の原理がわかっていないでコンピュータつかってるんだなぁって思わされる。フォントひとつすら理解できていないだもんな。恥ずかしい限り。
 
+
 
 +
 
 +
再び、2022年8月上旬現在。あまり時間かからず確かめれてる。
 +
 
 
 
 
 
  
 
[[PDF 内部構造#説明|PDF 内部構造]]に戻る。
 
[[PDF 内部構造#説明|PDF 内部構造]]に戻る。

2022年8月10日 (水) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス