Table of Contents
エンコーディングと文字列の原点
概要
- 使用しているフォントは「小塚ゴシック Pro - M」。
- EPS中で「Unicode(UTF8)」で指定する場合は「KozGoPro-Medium-UniJIS-UTF8-H」と記述する。(横書き)
- EPS中で「Unicode(UCS2)」で指定する場合は「KozGoPro-Medium-UniJIS-UCS2-H」と記述する。(横書き)
- EPS中で「Unicode(UTF8)」で指定する場合は「KozGoPro-Medium-UniJIS-UTF8-V」と記述する。(縦書き)
- EPS中で「Unicode(UCS2)」で指定する場合は「KozGoPro-Medium-UniJIS-UCS2-V」と記述する。(縦書き)
ソースコード
# EPS作成
# テキストの配置
# このソースは UTF8N, LF で保存すること
use strict;
use utf8;
use Encode qw/encode decode/;
my $eps_file = 'GA2.eps';
my $mm2point = 72 / 25.4;
# A4サイズ
my $width = sprintf( "%.2f", 210 * $mm2point );
my $height = sprintf( "%.2f", 297 * $mm2point );
my $String = "ギャラクシーエンジェる〜ん Oct 2006";
my $String_ucs2 = &str_to_ucs2( $String );
my $String_utf8 = &str_to_utf8( $String );
my $StringFontSize = 24;
my $x1 = 4 * $StringFontSize;
my $y1 = $height - 4 * $StringFontSize;
my $x2 = $x1;
my $y2 = $height - 6 * $StringFontSize;
my $x3 = $x1;
my $y3 = $height - 8 * $StringFontSize;
my $x4 = 9 * $StringFontSize;
my $y4 = $height - 11 * $StringFontSize;
my $x5 = 13 * $StringFontSize;
my $y5 = $y4;
my $x6 = 17 * $StringFontSize;
my $y6 = $y4;
my $eps = '';
$eps .=<<EOL;
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 $width $height
/putText {
4 dict begin
/str exch def
/encode exch def
/ty exch def
/tx exch def
0 1 1 0 setcmykcolor
tx ty moveto
tx ty 2 0 360 arc
fill
0 0 0 1 setcmykcolor
encode findfont $StringFontSize scalefont setfont
tx ty moveto
str show
end
} def
% 全体枠
0 0 moveto
0 $height lineto
$width $height lineto
$width 0 lineto
closepath
1 setlinewidth
0 0 0 1 setcmykcolor
stroke
% 小塚ゴシック Pro - M
$x1 $y1 /KozGoPro-Medium-UniJIS-UTF8-H <$String_utf8> putText
$x2 $y2 /KozGoPro-Medium-UniJIS-UCS2-H <$String_ucs2> putText
$x3 $y3 /KozGoPro-Medium-UniJIS-UCS2-HW-H <$String_ucs2> putText
$x4 $y4 /KozGoPro-Medium-UniJIS-UTF8-V <$String_utf8> putText
$x5 $y5 /KozGoPro-Medium-UniJIS-UCS2-V <$String_ucs2> putText
$x6 $y6 /KozGoPro-Medium-UniJIS-UCS2-HW-V <$String_ucs2> putText
showpage
EOL
open( OUT, ">:encoding(utf8)", $eps_file ) || die( "can't open '" . $eps_file . "'.\n" );
print OUT $eps;
close( OUT );
exit();
#### Subroutine ####
sub str_to_ucs2
{
my( $sIn ) = @_;
my( $sOut, $len, $i );
$sOut = '';
$len = length( $sIn );
for( $i=0; $i<$len; ++$i ){
$sOut .= sprintf( "%04x ", unpack( "U", substr( $sIn, $i, 1 )));
}
chop( $sOut );
return $sOut;
}
sub str_to_utf8
{
my( $sIn ) = @_;
my( $sOut, $len, $i );
$sOut = '';
$len = length( $sIn );
for( $i=0; $i<$len; ++$i ){
$sOut .= unpack( "H8", substr( $sIn, $i, 1 ) ) . ' ';
}
chop( $sOut );
return $sOut;
}
# EOF