文字の回転
概要
- 使用しているフォントは「小塚明朝 Std - M」。
- EPS中で「Unicode(UCS2)」で指定する場合は「KozMinStd-Medium-UniJIS-UCS2-V」と記述する。(縦書き)
- EPS中で「Shift_JIS」で指定する場合は「KozMinStd-Medium-90ms-RKSJ-V」と記述する。(縦書き)
ソースコード
# EPS作成
# テキストの配置
# このソースは UTF8N, LF で保存すること
use strict;
use utf8;
use Encode qw/encode decode/;
my $eps_file = 'Jugemu_u.eps';
my $mm2point = 72 / 25.4;
# A4サイズ
my $width = sprintf( "%.2f", 210 * $mm2point );
my $height = sprintf( "%.2f", 297 * $mm2point );
my $x0 = sprintf( "%.2f", $width / 2 );
my $y0 = sprintf( "%.2f", $height / 2 );
my $String = "寿限無 寿限無 五劫の擦り切れ 海砂利水魚の 水行末 雲来末 風来末 "
. "食う寝る処に住む処 やぶら小路の藪柑子 パイポパイポ パイポのシューリンガン "
. "シューリンガンのグーリンダイ グーリンダイのポンポコピーのポンポコナーの 長久命の長助";
my $StringFontSize = 32;
my $Pi = 3.141592;
my ( $len, $x, $y, $r, $theta, $i );
my $eps = '';
$eps .=<<EOL;
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 $width $height
/putText {
4 dict begin
/char exch def
/angle exch def
/ty exch def
/tx exch def
gsave
tx ty translate
angle rotate
0 0 moveto
char show
grestore
end
} def
% 全体枠
0 0 moveto
0 $height lineto
$width $height lineto
$width 0 lineto
closepath
1 setlinewidth
0 0 0 1 setcmykcolor
stroke
% 小塚明朝 Std - M (縦書き)
/KozMinStd-Medium-UniJIS-UCS2-V findfont $StringFontSize scalefont setfont
0 0 0 1 setcmykcolor
EOL
$len = length( $String );
$r = $StringFontSize * 8;
$theta = 0;
for( $i=0; $i<$len; ++ $i ){
$x = $x0 + $r * cos( $theta );
$y = $y0 + $r * sin( $theta );
$eps .= sprintf( "%.2f %.2f %.1f <%04x> putText\n",
$x, $y, $theta*180/$Pi, unpack("U",substr($String,$i,1)) );
$theta -= $StringFontSize * 1.05 / $r;
if ( $theta < -2 * $Pi ){
$theta += 2 * $Pi;
}
$r -= $StringFontSize * $StringFontSize * 1.4 / ( 2 * $Pi * $r );
}
$eps .=<<EOL;
showpage
EOL
open( OUT, ">:encoding(utf8)", $eps_file ) || die( "can't open '" . $eps_file . "'.\n" );
print OUT $eps;
close( OUT );
exit();
# EOF
ダウンロード
- ソースコード(UCS2版, Shift_JIS版)と出力されるEPSファイル(UCS2版, Shift_JIS版)
Jugemu.zip - EPSファイルをAcrobat Distiller 6でPDFに変換したもの
Jugemu.pdf