文字の回転

概要

  • 使用しているフォントは「小塚明朝 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