NAME Imager::DTP - draw text with DTP app-like custom options SYNOPSIS use Imager::DTP::Textbox::Horizontal; # or Vertical # first, define font & text string my $font = Imager::Font->new(file=>'path/to/foo.ttf',type=>'ft2', size=>12); my $text = "Brother will kill brother, "; $text .= "spilling blood across the land.\n"; $text .= "Killing for religion, "; $text .= "something I don't understand."; # with multi-byte characters, encode it to UTF8, with internal # utf-8 flag enabled (using utf8::decode()). # create textbox instance my $tb = Imager::DTP::Textbox::Horizontal->new( text=>$text, # set text font=>$font, # set font wspace=>5, # set word distance (pixels) leading=>150, # set line distance (percent) halign=>'left', # set horizontal alignment valign=>'top', # set vertical alignment wrapWidth=>200, # set text wrap width wrapHeight=>180 # set text wrap height ); # draw the text string on target image my $target = Imager->new(xsize=>250,ysize=>250); $tb->draw(target=>$target,x=>10,y=>10); DESCRIPTION. Imager::DTP is a text drawing add-on for Imager, with ability to draw texts horizontally or vertically (from top to bottom), letter-based (not word-based) text wrapping for multi-byte characters, line alignment, and adjustment of distance between letters and lines. Vertical drawing and letter-based text wrapping are for multi-byte character languages, such as Japanese and Chinese. MORE THAN WORDS I've made an interactive sample viewer page, for quick and essential understanding of what the output will look like, by using Imager::DTP. You can make the output more complexing and fancy by making full use of the module, but save that for later, and just take a glance at all the basics. English Page http://iandeth.dyndns.org/mycpan/Imager-DTP/sample_viewer_en.html Japanese Page http://iandeth.dyndns.org/mycpan/Imager-DTP/sample_viewer_ja.html UTF8 ENCODING With multi-byte characters, text must be encoded to utf8, with it's internal utf8-flag ENABLED. This could be done by using utf8::decode() method, or with Perl5.8 and above, by using Encode::decode() method. FULL DESCRIPTION The main module (the most useful one) of Imager::DTP distribution will be Imager::DTP::Textbox. So see Imager::Textbox's documentation for full description on how to use. CLASS RELATION Imager::DTP consists of three basic modules (classes). These are: Imager::DTP::Letter Module for handling each letter/character that construct words. One Imager::Letter instance represents/holds one letter/character. Imager::DTP::Line Module for handling chunk of Letters, lined-up in a single vector. The word "Line" means "a single row in a text-wrapped textbox". Imager::DTP::Textbox A box to store all Lines and Letters in order. Calculation for text wrapping and line alignment are done within this module. The class relation of these modules (classes) is as follows: Imager::DTP::Textbox = [ Imager::DTP::Line = [ Imager::DTP::Letter, Imager::DTP::Letter, Imager::DTP::Letter ... ], Imager::DTP::Line = [ Imager::DTP::Letter, Imager::DTP::Letter, Imager::DTP::Letter ... ], ... ]; So there is no actuall Imager::DTP module (Imager::DTP.pm doesn't exist). The name space is for bundling all these modules under one package name. BUGS Currently, there is one un-solved problem in Imager::DTP::Line, with drawing multi-byte letters vertically. See Imager::DTP::Line's BUGS section for details. TODO See each basic module's TODO section. AUTHOR Toshimasa Ishibashi This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. SEE ALSO Imager, Imager::DTP::Textbox, Imager::DTP::Line, Imager::DTP::Letter