1月 23
PHPでPDFを扱うためのライブラリにTCPDFがあります。
TCPDFでOTFフォントを使用すると、AcrobatReaderでは正常に読めても、Illustratorで正常に読めず、テキストがラスタライズされて少々気持ちの悪い事態に遭遇することとなります。
Illutratorで開くことを想定しているなら、TCPDFで扱うフォントには少々の工夫が必要なので、ここに残しておきます。
まず、TCPDFで扱うフォントはTTFフォントで統一します。フォント名が同じであればTTFで作成したPDFでも、OTFフォントがインストールされた環境のIllustratorでも問題なく読むことが出来ます。
OTFフォントをTTFフォントに変換するにはFontForgeを使用します。
インストール方法を検索すると、Windowsのcygwin環境下でのインストール方法が沢山ヒットしますが、個人的にはうまくいかなかったので、LinuxのCentOS5を使用しました。アプリケーションはGUIでx11環境が必要なので、デスクトップ版を用意しましょう。
パッケージはhttp://sourceforge.net/projects/fontforge/files/fontforge-executables/から「fontforge-20090923-1.i386.rpm」をダウンロードします。少々古いものですが、特に問題ありません。ダウンロードが終わると、ファイルをダブルクリックするだけでインストールが始まり、あっさりと完了します。
アプリケーションはGUIなのですが、メニューには登録されませんのでファイルを直接起動するか、ターミナルから起動する必要があります。ターミナルで「fontforge」と入力して起動すると、読み込むファイルを要求されるのでTTFフォントに変換したいOTFフォントを選択します。
選択したOTFファイルの内容によってはCIDマップファイルが必要と言われるかもしれません。CIDマップファイルはhttp://fontforge.sourceforge.net/cidmaps.tgzにありますので、ダウンロードして展開したファイルを「/usr/share/fontforge/」にコピーします。
しばらくして読み込みが完了すると文字コード表が表示されるので、メニューより「CID>単一化」を選択してファイルを統合します。
そしてメニューより「ファイル>フォントを保存」を選択して、保存形式を「TrueType」に設定し、保存ファイル名を入力して保存すれば完了です。
これで変換作業は完了です。作成されたTTFファイルを開いて正常に読み込むことができれば成功です。
フォントファイルをTCPDFで扱える状態にする方法は、ライブラリ内のtcpdf/fonts/utils/README.TXTにある通りで問題ありません。むしろ他に方法がありません。
「$ ttf2ufm -a -F myfont.ttf」
「$ php -q makefont.php myfont.ttf myfont.ufm」
これで作成されたファイルをfontsディレクトリにコピーし、TCPDFよりPDFを作成すればAcrobatReaderでもIllustratorでも問題なく開くことが出来るPDFファイルの完成です。
いまいち文章が推敲されていないのでまとめます。
TCPDFはPDF作成ライブラリですごい
TCPDFのPDFはOTFフォントを使うとIllustratorでは読めない(ラスタライズされる)ことがある
TCPDFのPDFをIllustratorで読む可能性があるならOTFフォントをTTFフォントに変換しておく
OTFフォントをTTFフォントに変換するにはFontForgeを利用する
CIDマップがないとOTFファイルを展開できない(ことがあるかもしれない)
7月 16
ActoinScriptをいじり始めて半年ぐらいになりますが、まだまだ記法に馴染めません。
特にイベントをいちいち追加しなければならないところなどもどかしく、ボタンなんてクリックするためにあるんだからクリックイベントのメソッドぐらい用意して置けよなんて思うわけです。
btn.addEventListener( MouseEvent.CLICK, btn_onClick );
function btn_onClick( e:MouseEvent ):void{
trace( e.target.name );
}
一般的なマニュアルではこうなっていますが、いちいち関数名を考える身にもなってくれと、どの道、このイベント以外からは参照しない処理だと、いちいち分けないといけない意味がわからないのです。
つまりこういうこと。
btn.addEventListener(
MouseEvent.CLICK,
function( e:MouseEvent ):void{ trace( e.target.name ); }
);
関数名の重複を怖がる必要はなくなりました。
JavaScriptが頭にあると、スクリプトは外部ファイルに置くべきという理屈から、いちいち関数を用意していたと思うのですが、パブリッシュが前提のActionScriptでは不要の作業。
よく考えればどうってこと無いのですが、解説サイトによっては「関数名の重複を避けるためにパッケージ化」しますなどと、むだな手間を掛けているのを見るとうんざり。
無名関数をもっと使いこなしたほうがいい気がします。
それに、処理速度とか、オブジェクト指向だとかそっちのけで、Perl使いとしてはこっちのほうが見やすいのです。
でめたしでめたし。
7月 10
結論から言うと失敗作というか、最小値と最大とのみを考慮して作られた式です。
はっきりいって使い物になりませんが、フリーソフトではつかっちゃっているようです。
動作確認用に作ったものなので、細かいエラーチェックは抜きです。
#===============================================================================
# RGB => CMYK(cmyが同じ値の場合kに割り振る)
#-------------------------------------------------------------------------------
sub rgb2cmyk {
my $rgb = shift;
$rgb =~ /^#?(..)(..)(..)$/;
my %color = (
'r' => hex( $1 ),
'g' => hex( $2 ),
'b' => hex( $3 ),
);
$color{'c'} = 1 - ( $color{'r'} / 255 );
$color{'m'} = 1 - ( $color{'g'} / 255 );
$color{'y'} = 1 - ( $color{'b'} / 255 );
$color{'k'} = 0;
if(
$color{'c'} == $color{'m'}
|| $color{'m'} == $color{'k'}
){
$color{'k'} = $color{'c'};
$color{'c'} = $color{'m'} = $color{'y'} = 0;
}
return %color;
}
結局、色を絞って変換テーブルを自作することになりましたけどね。
6月 15
細かい構文は別の機会に。
EPSファイルを作るには、ImageMagickで画像をEPS化したものを、PerlのPostScript::Simpleでデータ毎埋め込んでいましたが、1つのデータでは特に問題がなくても、面付けまで自動的にやろうと思った場合、ファイルサイズがとんでもないことになってしまいます。
そこで、画像のEPSファイルをリンクで指定できれば面付けしてもファイルサイズはぜんぜん問題になりません。
そこで、いろいろ調べて見つけたものを試してみました。
しかし、GSViewでは問題なく表示されても、イラストレータで開けません。
いろいろ試してみると、ファイルパスの指定方法に問題があるとわかりました。厳密にいうと、イラストレータのファイルパスの扱いに問題があるのですが。
リンク先の画像EPSを特定の場所におこうとした場合、ドライブを含む、若しくはドライブ以下の絶対パスが必要です。
そのパスを指定したくない場合は、ドライブの直下に置けばいいことがわかりました。
つまり・・・
Cドライブの直下に置けば、
%%BeginDocument: image.eps
(image.eps) run
%%EndDocument
となります。
仮にC:/eps/に置くとすれば、
%%BeginDocument: image.eps
(C://image.eps) run
%%EndDocument
となります。
ファイルパスを指定するのは面倒なので、ドライブを1つつぶしてその直下に置いたほうが断然楽でしょう。
4月 04
イラストレータといっても、手持ちのは古いままで7でのお話です。
EPSで保存すると、プレビューとサムネールを保存するかどうかの確認がありますが、これはいったいどのように格納されているかを調べてみました。
調べるといっても、サムネイルもプレビューも含まないで保存したEPSファイルと、サムネイルまたはプレビューを含んだEPSファイルを比較しただけです。
保存したファイル名と保存日時のデータは無視して、それ以外を比較します。
まず、サムネイルを含んだEPSファイルを比較しました。
違っていたのは、以下のとおりです。
46行目にある
%AI7_Thumbnail: 128 128 8
から
%%EndData
これが、サムネイルデータのようです。
バイナリが16進で格納されているようです。
どの画像形式かはわかりませんが、おそらくTIFFではないでしょうか。
次に、プレビューを含んだEPSファイルを比較しました。
違っていたのは、以下のとおりです。
1行目の先頭にバイナリデータが含まれています。
その後に通常のEPSデータが始まります。
%!PS-Adobe-3.0 EPSF-3.0
そして34行目に、
プレビューを含まないEPSファイルでは
%AI3_DocumentPreview: Header
となっているところが、
プレビューを含むEPSファイルでは
%AI3_DocumentPreview: PC_ColorTIFF
となっいます。
そして一番最後にまたバイナリデータが含まれています。
通常のEPSデータの末尾である
%%EOF
の後に、バイナリデータが追加されています。
他のイラストレータのバージョンでは、また違うかもしれません。
比較に使用したファイルをおいておきます。
サムネイルもプレビューも含まないEPSファイル
サムネイルを含むEPSファイル
プレビューを含むEPSファイル
12月 14
ImageMagickでEPSを背景なしのpngにする方法があったけど、やり方をすっかり忘れてしまったので、GostScriptにお願いすることに。
・イラストレータで見た大きさと同じ画像に変換するには「-r72」のおまじない
・背景を透明にするには「-sDEVICE=pngalpha」のおまじない
を唱えよう
gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pngalpha -dEPSCrop -r72 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=output.png input.eps
Windowsの場合はgsではなくgswin32cになります。
Recent Comments