$B%F%-%9%H%U%!%$%k$H$7$F
$B0JA0(B PDFlib $B$r;HMQ$7$?$[$\F1Ey$N$b$N(B($B:#2s$O!V$Y$D$d$/%a%=%C%I!W$H!V%$%a!<%8!W$d!V%m%4!W$N%5%]!<%H$NDI2C(B)$B$r(B
$B!V(B
$B
PDF $B%i%$%V%i%j$H$7$F(B
Haru Free PDF Library II
$B$r;H$o$;$F$$$?$@$-$^$7$?!#(B
$B$"$j$,$H$&$4$6$$$^$9!#(B
Ruby $B$N$?$a$N%5%]!<%H$b$"$j$^$9!#(B
$B$<$R(B PDF $B$rD>@\:n@.$9$k>l9g$K8!F$$7$F$_$F$/$@$5$$!#(B
$B$H$F$b$$$$$G$9!#(B
2007/5/17 $B8=:_(B
$B$GF0:n3NG'$r$7$F$$$^$9!#(B
$B:#8e%5%s%W%k$N(B PDF $B$d
$B9b66%a%=%C%I$JFbMF$N%F%-%9%H%U%!%$%k$r:n@.$7$^$9!#(B
$B:n@.$N$?$a$N%k!<%k$O!"(B
$B"#(B $B;H$$J}(B
$B$G$9!#(B
//$B!W$N>l9g$K$O!"%3%a%s%H!V%$%a!<%8$J$I$r07$($k3HD%%3%^%s%I$"$j!W(B
-S $B%*%W%7%g%s$r;XDj$9$k$3$H$GF~NO%F%-%9%H$G(B SJIS $B$N4A;z%3!<%I$r07$($^$9(B
$B7k2L$H$7$F$N=PNO$O!"(B
$B$G$9!#(B
- $B$G$-$k$@$1Bg$-$J%U%)%s%H$G%Z!<%8$$$C$Q$$$K(B
- $B9T$O%;%s%?%j%s%0$5$l$^$9(B
- PDF $B>e$O(B A4 $B2#%5%$%:(B
- acrobat(Adobe Reader)$B$G%W%l%<%s%F!<%7%g%s$9$k$H$-$K$O%U%k%9%/%j!<%s%b!<%I(B($BI=<(%a%K%e!<$+$i(B)$B$G(B
- $BFI$_>e$25!G=$,M-8z$N>l9g$K;H$($^$9(B $BFI$_>e$2$K$O(B MS Office 2003/XP $B$J$I$,I,MW$G$9(B MS Office 2007 $B$O$@$a$G$7$?(B(T-T)
$Bt5.txt
$B$N>l9g!"=PNO%U%!%$%kL>$O(B
t5.pdf
$B$K$J$j$^$9!#(B
$B%*%W%7%g%s$O!"
| $B%*%W%7%g%s(B | $B@bL@(B |
|---|---|
-p | $B%Z!<%8HV9f$r=PNO(B |
-S | SJIS $B$NF~NO%F%-%9%H$N%5%]!<%H(B |
-g | $BGX7J$K%0%j%C%I$rI=<((B |
-n | $BF~NO$N%F%-%9%H$K30It%U%!%$%k$rMxMQ$9$k%*%W%7%g%s$,$"$C$?>l9g$KL5;k$7$^$9(B(//f, //i, //l) |
-f TrueTypeFontPATH | TrueType $B%U%)%s%H$r;HMQ$7$^$9(B |
-l LogoImagePATH(jpeg,png) | $B%m%4$K%$%a!<%8$r;XDj$9$k$3$H$,2DG=$G$9(B Jpeg $B$H(B PNG $B$r%5%]!<%H$7$F$$$^$9(B |
-a | $B%"%s%A%g%3(B($B.$5$/I=<($7$^$9(B |
TrueType $B%U%)%s%H$r;XDj$9$k$3$H$,2DG=$G$9!#(B
$BK\J8$G;XDj$b2DG=$G$9$,!"K\J8$rJQ99$;$:$KB?$/$N%U%!%$%k$r07$&>l9g$O!"%*%W%7%g%s$r;XDj$/$@$5$$!#(B
TrueType $B%U%)%s%H$K$h$C$F$OF0:n$7$J$$$b$N$b$"$k$h$&$G$9!#(B
$B$^$?!"%l%$%"%&%HE*$K.ttf$B!W$N$_$N$h$&$G$9!#(B
$B%m!<%I$G%(%i!<$,$G$J$$>l9g$G$b(B PDF $B%U%!%$%k$r:n@.$9$kCJ3,$G%(%i!<$K$J$k>l9g$b$"$k$h$&$G$9!#(B
$B$3$3$K=q$$$?%U%)%s%H$K$D$$$F$O!"$"$kDxEY3NG'$7$?$D$b$j$G$9$,!"$b$7$+$9$k$H$&$^$/F0:n$7$J$$$+$b$7$l$^$;$s!#(B
$B$=$N$H$-$O$9$$$^$;$s$G$9!#(B
TrueType $B$N%U%)%s%H$G$9$,!"BQ5W%F%9%HE*$K$?$/$5$s$N%U%)%s%H$r;HMQ$7$F$_$^$7$?!#(B $BF1;~$K$+$J$j$N?t$r;H$&$3$H$,2DG=$G$9!#(B $B;d$N$3$3$N%9%/%j%W%H$G$O!"0l%Z!<%8$K0l%U%)%s%H$K$J$C$F$$$k$N$G$9$,!"$b$C$H<+M3EY$r;}$?$;$F$bBg>fIW$=$&$G$9!#(B $B$?$@$7!"%U%)%s%H$N%?%$%W$K$h$C$F$O%(%i!<$K$J$k>l9g$b$"$j$^$9!#(B $B$9$Y$F$N%U%)%s%H$,;H$($k$o$1$G$O$"$j$^$;$s$N$G!"?7$7$$%U%)%s%H$r;HMQ$9$k>l9g$O3NG'$7$J$,$i?J$a$F$/$@$5$$!#(B
v2 $B$G$N3HD%5!G=$O!"!V(B//$B!W$N%3%a%s%H$KBP$7$F$J$I!W$K$J$j$^$9!#(B
//i $B%$%a!<%8%U%!%$%kL>(B //l $B%m%4%$%a!<%8%U%!%$%kL>(B $B%5%$%:$OBg$-$9$.$J$$$h$&$K(B //f TrueType$B%U%)%s%HL>(B //%$B?t;z(B $BJ8;zNs(B $B$Y$D$d$/%a%C%=%IE*$K1_%0%i%U$r=q$-$^$9(B //h $B%X%C%@J8;zNs(B $B%Z!<%8$N@hF,$KJ8;zNs$r!V@D!W$G=PNO$7$^$9(B //c r,g,b r,g,b r,g,b $BJ8;z?'!"GX7J?'!"%X%C%@?'(B$B%$%a!<%8$NI=<($O!"Cf1{$K$I!<$s$H5/$-$^$9!#(B $B9b66%a%=%C%IE*$K%$%a!<%8$b07$C$F$$$^$9!#(B
$B%m%4$O!">.$5$a$N%$%a!<%8I=<($K$J$j$^$9!#(B
$B!V$Y$D$d$/%a%=%C%I!W$N$?$a$K1_%0%i%U:n@.5!G=$rMQ0U$7$^$7$?!#(B
//%50 $B4|BT$G$o$/$o$/(B //%30 $B$,$s$P$C$?!<(B //%15 $BHh$l$?(B($B$((B //% $B$A$g$C$T$jIT0B(B$B$HF~NO$9$k$3$H$G!"!V$Y$D$d$/%a%=%C%I!WE*$J1_%0%i%U$N!V9b66%a%=%C%I!WE*$JJ8;zI=<($r9T$J$C$F$$$^$9!#(B $B$"$kDxEY1s$/$G$b$_$($k$h$&$K!#(B $BK\Ev$OJ8;z0LCV$O$A$c$s$HD4@0$G$-$l$P$$$$$N$G$9$,!"$J$+$J$+Fq$7$$$N$H1s$/$G$_$K$/$/$J$C$F$O!"$3$N%D!<%k$H$7$F$N0UL#$,$J$$$N$G(B($B$$$$$o$1(B
$B!V%X%C%@!W$K$D$$$F$O!"J8;zNs$,>.$5$/H/I=
$B?';XDj$G$9$,!"(Br,g,b $B$r:GBgCM(B 1 $B$N>.?tE@$G;XDj$7$F$/$@$5$$!#(B
$BGr!V(B1,1,1$B!W9u!V(B0,0,0$B!W@D!V(B0,0,1$B!W3%?'!V(B0.5,0.5,0.5$B!W$J$I$G$9!#(B
$B!V(Br,r,r$B!W$N$h$&$K$9$k$H!"%i%s%@%`$K?'$r@8@.$7$^$9!#(B
$B3HD%$r4^$s$@%5%s%W%k$G$9!#(B
$B=U(B
$B:y(B
//i $B:y$N%$%a!<%8%U%!%$%k(B
//l $B<+A0%m%4(B
//h $B:y$O$$$$$G$9$M(B
//%60 $B$$$^$N5$;}(B
//%30 $B$A$g$C$H4|BT(B
//% $BIT0B$b$9$3$7(B
//h $B=U!":y$N%$%a!<%8$K$D$$$F$N5$;}(B
URL $B$rKd$a9~$s$@(B PDF $B$r:n@.$G$-$^$9!#(B
$BJ8;zNs$N$"$H$K!V(B
:http://...
$B!W$H%3%m%s(B(:)$B$N$"$H$K(B URL $B$r=q$$$F$/$@$5$$!#(B
Ruby:http://www.ruby-lang.org/$B$3$N>l9g$OKd$a9~$_$G$9$,!"(Badobe reader $B$O!"(BURL $BJ8;zNs$r$=$N$^$^(B URL $B$H$7$F2r
$B8=:_$NA0Ds>r7o$O!"(B
$B$G$9!#(B
- Linux $B>e$G$N=hM}$rA[Dj$7$F$$$^$9(B
- $B4A;z%3!<%I$HI,MW$J%i%$%V%i%j$r%$%s%9%H!<%k$9$k$3$H$G(B Win $B7O$G$bF0$/$H$O;W$$$^$9(B
- $BF~NO%U%!%$%kL>$N3HD%;R$O(B
.txt$B$G$*4j$$$7$^$9(B- $B=PNO%U%!%$%kL>$O!"F~NO%U%!%$%kL>$N3HD%;R(B
.txt$B$r(B- $B0l9T$"$?$j$NJ8;z?t$,$9$/$J$$$?$aF~NO$N4A;z%3!<%I$N<+F0H=Dj$,Fq$7$$$G$9(B
- $B8=:_$N%G%U%)%k%H$NF~NO4A;z%3!<%I$O(B EUC-JP $B$rA[Dj$7$F$$$^$9(B
- SJIS $B$r;HMQ$9$k>l9g$O(B
-S$B%*%W%7%g%s$r;HMQ$7$F$/$@$5$$(B
$B$b$7$b;f$K0u:~$9$k$H$-$K$O!"%=!<%9%3!<%I$J$7$N>l9g;f0lKg$K(B 16 $B%Z!<%8$/$i$$$G$A$g$&$I$$$$$N$G$O$J$$$G$7$g$&$+(B? $B%=!<%9%3!<%I$,$"$k>l9g$O$"$o$;$FD4@0$/$@$5$$!#(B
$B>r7o$,$$$/$D$+$"$k$N$G$9$,!"(Badobe reader $B$GF|K\8l$rFI$_>e$2$k$?$a$N(B FAQ $B$G$9!#(B
$BF|K\8l$NFI$_>e$2%(%s%8%s$O(B MS Office 2003 $B$^$?$O(B MS Office XP $B$r$*;}$N>l9gDI2C5!G=$GBP1~2DG=$G$9!#(B MS Office 2007 $B$O!"BP1~$7$F$$$J$$$h$&$G$9!#(B $B$3$N(B FAQ $B$G=q$+$l$F$$$k(B MS Office $B$,$J$$>l9g$NNc$O(B Windows XP $BI8=`$N!V(BSAPI5$B!WFI$_>e$2%(%s%8%sMQ$G$O$J$/!V(BSAPI4$B!WFI$_>e$2%(%s%8%sMQ$G$9!#(B $B$3$N$?$a%$%s%9%H!<%k$7$F$b%3%s%H%m!<%k%Q%M%k$N!V2;@
Web $B%V%i%&%6$G$NI=<(>e$O(B Ruby $B$N%9%/%j%W%H$G$9$,!"(BHTML $B$NFC
$B8=:_(B Ruby $B%9%/%j%W%H$OFbIt4A;z%3!<%I$O(B EUC $B$rA[Dj$7$F5-=R$7$F$$$^$9!#(B
$B
PDF $B%i%$%V%i%j$H$7$F(B
Haru Free PDF Library II
$B$,I,MW$G$9!#(B
Ruby $BMQ$N3HD%%i%$%V%i%j$b4^$^$l$F$$$^$9!#(B
$B9b66%a%=%C%IMQ$KBg$-$J%U%)%s%H$r07$($k$h$&$K$9$k$?$a$N%Q%C%A$H(B Ruby $BMQ$N%3!<%I$X$N%Q%C%A$NFs$D$N%Q%C%A$r
$B%U%!%$%kL>$O(B
$B
$B
1.9 $B7O$O!"
$BM%$l$?(B
Haru Free PDF Library II
$B$N$*$+$2$G!"$H$F$b3Z$K%$%s%W%j%a%s%H$G$-$^$7$?!#(B
$BI=<($5$l$?$H$-$NJ8;zNs$ND9$5$J$I$N>pJs$r$A$c$s$H%9%/%j%W%HCf$GMxMQ$G$-$?$N$,Bg$-$$$G$9!#(B
$B$H$F$b$H$F$b46
$B9b66$5$s$,0lHV:G=i$K9b66%a%=%C%I$G%W%l%<%s$r$7$?$H$-!"8e$m$N$[$&$K$$$^$7$?!#(B
$BCB@8$N=V4V$KN)$A2q$($F!"$H$C$F$b%i%C%-!<(B!
$B%"%s%A%g%3%*%W%7%g%s$NDI2C!#(B
$B%$%a!<%8$N%5%$%:D4@0!#(B
bug fix $B$H:Y$+$JD4@0!#(B
$BJ8;z$N1"$N%5%$%:$rJ8;z%5%$%:$K$"$o$;$F=$@5(B
//c r,g,b r,g,b r,g,b $B$G?';XDj(B
$B%F%9%HE*$J%$%s%W%j%a%s%H$G$9(B
$B$H%m%4I=<($N(B bug fix
L:$BJ8;zNs(B $B:84s$;!"(BR:$BJ8;zNs(B $B1&4s$;!"(BC:$BJ8;zNs(B $BCf1{(B($B%G%U%)%k%H(B)
$B%F%9%HE*$J%$%s%W%j%a%s%H$G$9(B
$B%U%)%s%H$N%m!<%I%(%i!<$,$G$?>l9g$K%U%)%s%H%U%!%$%kL>$rI=<($9$k$h$&$K=$@5!#(B
$B%U%)%s%H$r2?EY$b:FMxMQ$G$-$k$h$&$K!"%U%)%s%H$N%m!<%IItJ,$N=$@5!#(B
$B!V(B//h $B%X%C%@!
$B%*%W%7%g%s(B -n $B$N%5%]!<%H!#(B
$BF~NO$N%F%-%9%H%U%!%$%kCf$K!"30It%U%!%$%k$rMxMQ$9$k(B //l, //i, //f $B$,$"$C$?>l9g$KL5;k$7$^$9!#(B
$B30It%U%!%$%k$rMQ0U$G$-$J$$>l9g$K!"F~NO%F%-%9%H%U%!%$%k$r=$@5$7$J$/$F$bMxMQ2DG=$G$9!#(B
$B%*%W%7%g%s$N2r
$B2;@<=PNO(B($BFI$_>e$2(B)$BBP1~$N$?$a$K!"J8;z=PNO=g$rD4@0!#(B
URL $BKd$a9~$_$KBP1~!#(B($BJ8;zNs(B:http://....)
$B%9%/%j%W%H$N4A;z%3!<%I$r(B EUC $B$KLa$7!"=PNO$N$_(B SJIS $B$X(B
fix $B%G%U%)%k%H4A;z%3!<%I$rJQ99$7$?$?$a!#(B
-Ks $B$K$9$k$N$rK:$l$F$^$7$?!#(B
$B-!(B ($B!{$K!V(B1$B!W(B)$B$r%5%]!<%H$7$^$7$?!#(B
$B%0%j%C%I$N=PNO$r%*%W%7%g%s$K$7$^$7$?!#(B
$B:G=i$N8x3+!#(B
t5pdf.rb
$B$H$J$C$F$$$^$9$,(B
t2pdf.rb
$B$G$b9%$-$K$7$F$/$@$5$$!#(B
$B$=$N$&$A(B
t2pdf.rb
$B$N(B 2.0 $B7O$K$J$kM=Dj$G$9!#(B
#! /usr/local/bin/ruby -Ke
# /home/tetsu/src/ruby/pdf/t5pdf.rb
# created: April 15,2007 Sunday 23:26:24
# author: tetsu(WATANABE Tetsuya)
RCS_ID = %q$Id: t5pdf.rb,v 1.21 2008/01/19 19:43:37 tetsu Exp $
# usage: t5pdf.rb [-pSgn] [-f TrueTypeFont] [-l logo(jpg,png) TAKAHASHI-Method.txt
# $B4A;z%3!<%I$K$D$$$F(B
# $BFbIt%3!<%I$O(B EUC $B$r;H$C$F$$$^$9!#(B
# PDF $B%i%$%V%i%j$X$O(B SJIS $B$rEO$7$F$$$^$9!#(B($B!{$K!V(B1$B!W(B)$B$r%5%]!<%H$9$k$?$a$K(B SJIS $BEO$7$K$7$^$7$?!#(B
# //f TrueTypeFont.ttf
# //l logo.jpg(png)
# //h $B%X%C%@J8;zNs(B
# //i image.jpg(png)
# //$B?t;z(B%
# L:$B:84s$;(B
# R:$B1&4s$;(B
# $BH>3Q%9%Z!<%9$rF~$l$k$H%=!<%9%3!<%I$J$IMQ(B
# //c r,g,b($BJ8;z(B) r,g,b($BGX7J?'(B) r,g,b($B%X%C%@J8;z?'(B)
require 'hpdf'
require 'nkf'
# Ruby 1.9 $B7O$J$iITMW$G$9$,!"J8;z2=$1$r2sHr$9$k$?$a$KF~NO$b8GDj(B
class String
def e2s
NKF.nkf('-Es', self)
end
def s2e
NKF.nkf('-Se', self)
end
end
class HPDFDoc
def info_create_date
t = Time.now
self.set_info_date_attr(HPDFDoc::HPDF_INFO_CREATION_DATE, t.year, t.mon, t.mday, t.hour, t.min, t.sec, '+', 9, 0)
end
def info_author(author)
self.set_info_attr(HPDFDoc::HPDF_INFO_AUTHOR, author)
end
def info_creator(creator)
self.set_info_attr(HPDFDoc::HPDF_INFO_CREATOR, creator)
end
def info_title(title)
self.set_info_attr(HPDFDoc::HPDF_INFO_TITLE, title)
end
def info_keyword(keyword)
self.set_info_attr(HPDFDoc::HPDF_INFO_KEYWORDS, keyword)
end
def info_subject(subject)
self.set_info_attr(HPDFDoc::HPDF_INFO_SUBJECT, subject)
end
def file_to_image(filename)
case filename = File.expand_path(filename)
when /\.jpe?g$/i
self.load_jpeg_image_from_file(filename)
when /\.png$/i
self.load_png_image_from_file(filename)
end
end
def ttf_font_load(filename, encode)
# $B%U%)%s%H$N%m!<%I%(%i!<$,$G$k$H!"(Brescue $B$7$F$b0J8e$N=hM}$O$&$^$/$$$+$J$$$h$&$G$9(B
begin
tt_font_name = self.load_ttfont_from_file(File.expand_path(filename), HPDFDoc::HPDF_TRUE)
# STDERR.puts "#{tt_font_name} #{filename}"
rescue HPDFError
STDERR.puts "TrueType font load error: #{filename}"
raise
end
self.get_font(tt_font_name, encode)
end
end
class HPDFPage
def grid(font = nil)
w = self.get_width
h = self.get_height
self.set_gray_fill(0.5)
self.set_gray_stroke(0.8)
y = 0
while y < h
if y % 10 == 0
self.set_line_width(0.5)
elsif self.get_line_width != 0.25
self.set_line_width(0.25)
end
self.move_to(0, y); self.line_to(w, y)
self.stroke
if y % 10 == 0 && y > 0
self.set_gray_stroke(0.5)
self.move_to(0, y); self.line_to(5, y)
self.stroke
self.set_gray_stroke(0.8)
end
y += 5
end
x = 0
while x < w
if x % 10 == 0
self.set_line_width(0.5)
elsif self.get_line_width != 0.25
self.set_line_width(0.25)
end
self.move_to(x, 0); self.line_to(x, h)
self.stroke
if x % 50 == 0 && x > 0
self.set_gray_stroke(0.5)
self.move_to(x, 0); self.line_to(x, 5)
self.move_to(x, h); self.line_to(x, h - 5)
self.stroke
self.set_gray_stroke(0.8)
end
x += 5
end
if font
self.set_font_and_size(font, 5)
self.begin_text
y = 0
while y < h
if y % 10 == 0 && y > 0
self.text_out(5, y - 2, y.to_s)
end
y += 5
end
x = 0
while x < w
if x % 50 == 0 && x > 0
self.text_out(x, 5, x.to_s)
self.text_out(x, h - 10, x.to_s)
end
x += 5
end
self.end_text
end
self.set_gray_fill(0)
self.set_gray_stroke(0)
end
def text_out_href(x, y, text, uri)
self.text_out(x, y, text)
w = self.text_width(text)
h = self.get_current_font_size
self.create_uri_link_annot(x, y, x + w, y + h, uri).set_border_style(0, 0, 0)
end
end
# $B%9%/%j%W%H>e$O(B EUC $B$G(B libharu(PDF) $B$X$O(B SJIS
class T2PDFv2
def initialize(file = 't.pdf')
@file = file
@pdf = HPDFDoc.new
@pdf.info_title("TAKAHASHI Method #{@file}")
@pdf.info_creator("Ruby, libhpdf: #{RCS_ID}")
@pdf.info_create_date
@pdf.set_compression_mode(HPDFDoc::HPDF_COMP_ALL)
@pdf.use_jp_fonts
@pdf.use_jp_encodings
@pdf.set_page_mode(HPDFDoc::HPDF_PAGE_MODE_USE_OUTLINE)
@font_h = Hash.new
@title_font = @pdf.get_font('Helvetica', nil)
@font_h['Helvetica'] = @title_font
@encode = '90ms-RKSJ-H'
@jp_font = @pdf.get_font('MS-PGothic', @encode)
@font_h['MS-PGothic'] = @jp_font
@encoder = @pdf.get_encoder(@encode)
@root = @pdf.create_outline(nil, '$BL\$,0c$C$F$b!V%U%)%s%HL>!W$,F1$8>l9g$K%(%i!<$K$J$k$3$H$,$"$k$h$&$G$9(B
if @font_h.key? filename
@font_h[filename]
else
@font_h[filename] = @pdf.ttf_font_load(filename, @encode)
end
end
def ttf_font(arr)
arr.each_index do |i|
if arr[i] =~ /^\/\/f (\S+)/
@jp_font = ttf_font_load($1)
end
end
end
# $B?'$,2u$l$A$c$$$^$9(B
def draw_betsuyaku(page, pos, st, en)
m = [w = page.get_width, h = page.get_height].min
r = (m - 100.0) / 2
x = w / 2
y = h / 2
page.set_rgb_fill(rand, rand, rand)
page.move_to(x, y)
if st == 0
page.line_to(x, y + r)
else
page.line_to(*pos)
end
en = 100.0 if st == en # $B%5%$%I%(%U%'%/%H$N5$$,$9$k$G$9(B
page.arc(x, y, r, 360.0 * st / 100.0, 360.0 * en / 100.0)
pos = page.get_current_pos
page.line_to(x, y)
page.fill
pos
end
def betsuyaku(page, arr)
pos = []
st = 0.0
sum = 0
arr.each_index do |i|
if arr[i] =~ /^\/\/\%(\d+)? (.+)$/
par = $1.to_i
en = st + par.to_f
msg = $2
pos = draw_betsuyaku(page, pos, st, en)
st = en
par = 100 - sum if par == 0
sum += par
arr[i] = " %2d%% #{msg}" % [par]
end
end
end
def header(page, arr)
w = page.get_width
h = page.get_height
size = @m
page.set_font_and_size(@jp_font, size)
y = h - size
arr.each_index do |i|
if arr[i] =~ /^\/\/h (.+)$/
l = $1.e2s
x = (w - page.text_width(l)) / 2
page.set_rgb_fill(*color_make(@h_color))
page.begin_text
page.text_out(x, y, l)
page.end_text
end
end
end
def anchoko(page, a)
return if a == ''
w = page.get_width
h = page.get_height
size = @m / 2
page.set_font_and_size(@jp_font, size)
y = 2
l = a.e2s
x = (w - page.text_width(l)) / 2
page.set_rgb_fill(*color_make(@h_color))
page.begin_text
page.text_out(x, y, l)
page.end_text
end
def takahashi(page, arr)
arr.delete_if {|x| x =~ /^\/\//}
return if arr.size == 0
w = page.get_width
h = page.get_height
page.set_font_and_size(@jp_font, 100.0)
len = 0.0
arr.each do |l|
if l =~ /^[LRC]:(.*)$/
l = $1
end
if l =~ /^(.+):(http:\/\/\S+)$/
l = $1
end
text_width = page.text_width(l.e2s)
len = text_width if text_width > len
end
line = arr.size
fontsize = [w * 100.0 / len, (h - @m / 2.0) / line].min
# $B%G%U%)%k%H$@$H(B fontsize 300 $B$^$G(B
# $B3Q%9%Z!<%9$N>l9g%=!<%9%3!<%IMQ(B
x = if l[0, 1] == ' '
l[0] = ''
0
else
l_w = page.text_width(l)
case lrc
when 'l'
0
when 'r'
w - l_w
else
(w - l_w) / 2.0
end
end
d = fontsize / 72.0
page.set_rgb_fill(1, 1, 1) # $BGr(B
page.text_out(x + d, y - d, l)
page.set_rgb_fill(*color_make(@f_color))
if url
page.text_out_href(x, y, l, url)
else
page.text_out(x, y, l)
end
y -= fontsize
end
page.end_text
end
def page(arr, n)
arr.delete_if {|x| x =~ /^\/\/ /}
arr.delete_if {|x| x =~ /^\/\/[fli] /} if @opt_nonouter
return if arr.size == 0
@pagenumber += 1
page = @pdf.add_page
page.set_size(@page_size, @page_direction)
color(page, arr)
page.grid if @opt_grid
draw_logoimage(page, arr)
draw_images(page, arr)
betsuyaku(page, arr)
add_outline(page, arr)
ttf_font(arr)
header(page, arr)
anchoko(page, n) if @opt_anchoko
takahashi(page, arr)
page_number(page) if @opt_pagenumber
end
end
def n2a(n)
arr = n.split("\n")
arr.delete_if do |l|
l =~ /^\/\//
end
arr.join(' ')
end
def parg(a1, argv)
if a1 == nil
if argv[0][0] == '-'
usage
else
argv.shift
end
else
a1
end
end
def usage
STDERR.puts "usage: #{$0} [-pSgna] [-f TrueTyepFont] [-l logo(jpeg,png)] TAKAHASHI-Method.txt..."
STDERR.puts " -p: print page number"
STDERR.puts " -S: SJIS Text"
STDERR.puts " -g: grid plot"
STDERR.puts " -n: non outer"
STDERR.puts " -a: anchoko"
STDERR.puts " -f TrueType_Font"
STDERR.puts " -l logo_image(jpeg or png)"
exit 1
end
opt_pagenumber = false
opt_SJIS = false
opt_ttf = false
opt_logo = false
opt_grid = false
opt_nonouter = false
opt_anchoko = false
while ARGV[0] =~ /^-/
$_ = ARGV.shift
if ~/^-f(.+)?/ then opt_ttf = parg($1, ARGV); next end
if ~/^-l(.+)?/ then opt_logo = parg($1, ARGV); next end
if ~/p/ then opt_pagenumber = true end
if ~/S/ then opt_SJIS = true end
if ~/g/ then opt_grid = true end
if ~/n/ then opt_nonouter = true end
if ~/a/ then opt_anchoko = true end
if ~/[^pSgna-]/ then usage end
end
while filename = ARGV.shift
pdfname = File.basename(filename, '.txt') + '.pdf'
f = File.open(filename)
t2pdf = T2PDFv2.new(pdfname)
t2pdf.opt_pagenumber = opt_pagenumber
t2pdf.opt_grid = opt_grid
t2pdf.opt_nonouter = opt_nonouter
t2pdf.opt_anchoko = opt_anchoko
t2pdf.ttf_font_load(opt_ttf) if opt_ttf
t2pdf.logo_load(opt_logo) if opt_logo
b_arr = []
while b = f.gets("\n\n")
if opt_SJIS
b = b.s2e
end
b_arr.push(b)
end
while b = b_arr.shift
n = if b_arr[0] == nil then '' else b_arr[0] end
t2pdf.page(b.split("\n"), n2a(n))
end
t2pdf.close
f.close
end
--- include/hpdf_consts.h.org 2006-11-23 12:34:40.000000000 +0900
+++ include/hpdf_consts.h 2007-04-16 03:06:43.000000000 +0900
@@ -139,10 +139,10 @@
#define HPDF_MIN_HORIZONTALSCALING 10
#define HPDF_MAX_HORIZONTALSCALING 300
#define HPDF_MIN_WORDSPACE -30
-#define HPDF_MAX_WORDSPACE 300
+#define HPDF_MAX_WORDSPACE 600 /* 300 */
#define HPDF_MIN_CHARSPACE -30
-#define HPDF_MAX_CHARSPACE 300
-#define HPDF_MAX_FONTSIZE 300
+#define HPDF_MAX_CHARSPACE 600 /* 300 */
+#define HPDF_MAX_FONTSIZE 600 /* 300 */
#define HPDF_MAX_ZOOMSIZE 10
#define HPDF_MAX_LEADING 300
#define HPDF_MAX_LINEWIDTH 100
--- if/ruby/hpdf.c.org 2006-11-23 13:19:32.000000000 +0900
+++ if/ruby/hpdf.c 2007-04-17 17:39:22.000000000 +0900
@@ -1388,7 +1388,7 @@
Data_Get_Struct(obj, HPDF_Doc_Rec, pdf);
s = STR2CSTR(ind);
- if (HPDF_StrLen(s, -1) != 1 || s[0] != '+' || s[0] != '-' || s[0] != 'Z')
+ if (HPDF_StrLen(s, -1) != 1 || (s[0] != '+' && s[0] != '-' && s[0] != 'Z' && s[0] != ' '))
rb_raise(rb_eHPDFError, "The eighth argument must be either of '+','-','Z',' '.");
tp = NUM2INT(type);
--- if/ruby/hpdf.c.org 2006-11-23 13:19:32.000000000 +0900
+++ if/ruby/hpdf.c 2007-04-17 17:39:22.000000000 +0900
@@ -2401,7 +2401,7 @@
HPDF_PTRACE(("hpdf_page_set_dash page=%p\n", page));
dash_phase = NUM2INT(phase);
- num_ptn = RARRAY(ptn)->len;
+ num_ptn = RARRAY_LEN(ptn);
if (!num_ptn) {
ret = HPDF_Page_SetDash(page, NULL, 0, 0);
return INT2NUM(ret);
@@ -2410,7 +2410,7 @@
for (i = 0; i < 8; i++)
dash_ptn[i] = 0;
- pptn = RARRAY(ptn)->ptr;
+ pptn = RARRAY_PTR(ptn);
for (i = 0; i < num_ptn; i++) {
dash_ptn[i] = NUM2INT(*pptn);
$B"#(B $B2r@b(B
$B"#(B $BMzNr(B
$B"#(B $B;29M(B URL
$BEOJUE/Li(B(WATANABE Tetsuya):
Tetsuya.WATANABE atmark nifty.com