#!/usr/bin/perl
#=======================================================================
#    ____  ____  _____              _    ____ ___   ____
#   |  _ \|  _ \|  ___|  _   _     / \  |  _ \_ _| |___ \
#   | |_) | | | | |_    (_) (_)   / _ \ | |_) | |    __) |
#   |  __/| |_| |  _|    _   _   / ___ \|  __/| |   / __/
#   |_|   |____/|_|     (_) (_) /_/   \_\_|  |___| |_____|
#
#   A Perl Module Chain to faciliate the Creation and Modification
#   of High-Quality "Portable Document Format (PDF)" Files.
#
#   Copyright 1999-2004 Alfred Reibenschuh <areibens@cpan.org>.
#
#=======================================================================
#
#   PERMISSION TO USE, COPY, MODIFY, AND DISTRIBUTE THIS FILE FOR
#   ANY PURPOSE WITH OR WITHOUT FEE IS HEREBY GRANTED, PROVIDED THAT
#   THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE APPEAR IN ALL
#   COPIES.
#
#   THIS FILE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
#   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
#   IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
#   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
#   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
#   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
#   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
#   OF THE USE OF THIS FILE, EVEN IF ADVISED OF THE POSSIBILITY OF
#   SUCH DAMAGE.
#
#   $Id: 025_unifonts,v 2.0 2005/11/16 02:16:00 areibens Exp $
#
#=======================================================================

use File::Basename;
use PDF::API3::Compat::API2;
use PDF::API3::Compat::API2::Util;
use Unicode::UCD 'charinfo';
use Encode qw[:all];
use Getopt::Long;
use PDF::API3::Compat::API2::UniWrap;
use utf8;

#-----------------------------------------
package PDF::API3::Compat::API2::UniWrap;

sub char_length {
    my $self=shift if ref($_[0]);
    my ($c) = @_;

    #if ($c eq 'CM' || $c eq 'ZW') {
    #    return 0;
    #}
    if(defined $self && defined $self->{widthobj}) 
    {
        return $self->{widthobj}->width($c);
    } 

    return 1;
}

#-----------------------------------------
package main;

$uw = PDF::API3::Compat::API2::UniWrap->new(line_length=>50, emergency_break=>50);

$api=PDF::API3::Compat::API2->new();

$api->mediabox(595,842);

$helv=$api->corefont('Helvetica-Bold',-encode=>'latin1');

$times=$api->corefont('Times-Roman',-encode=>'latin1');
$time2=$api->synfont($times,-slant=>1.3);
$treb=$api->corefont('Trebuchet-Italic',-encode=>'latin1');
$tre2=$api->synfont($treb,-slant=>1.1,-space=>60);
$georg=$api->corefont('Georgia-Italic',-encode=>'latin1');

$jfs=$api->cjkfont( 'KozMin', -encode=>'shiftjis' );
$jf1=$api->cjkfont( 'KozMin-Bold', -encode=>'shiftjis' );
$jf2=$api->cjkfont( 'KozGo-Italic', -encode=>'shiftjis' );

$uf=$api->unifont($jf1,[$time2,[0]], -encode=>'shiftjis');
$u2=$api->unifont($jf2,[$tre2,[0]], -encode=>'shiftjis');
$u3=$api->unifont($jf2,{ font=>$georg, blocks=>[0] }, -encode=>'shiftjis');

$start=tell(DATA);

q|    Ming Ming-Bold Ming-Italic Ming-BoldItalic
    Song Song-Bold Song-Italic Song-BoldItalic
    MyungJo MyungJo-Bold MyungJo-Italic MyungJo-BoldItalic
    KozMin KozMin-Bold KozMin-Italic KozMin-BoldItalic
    KozGo KozGo-Bold KozGo-Italic KozGo-BoldItalic|;

%fonts=(
'KozMin'=>$jfs,
'KozMin-Bold + Times'=>$uf,
'KozGo-Italic + Trebuchet-Italic'=>$u2,
'KozGo-Italic + Georgia-Italic'=>$u3
);


foreach my $fontname ('KozMin','KozMin-Bold + Times','KozGo-Italic + Trebuchet-Italic','KozGo-Italic + Georgia-Italic')
{
    $y=800;

    $page = $api->page;
    $gfx = $page->gfx;
    delete $gfx->{Filter};
    my $font=$fonts{$fontname};
    $uw->{widthobj}=$font;

    seek(DATA,$start,0);
    binmode(DATA,':raw');

    $gfx->textlabel(50,$y,$helv,10,$fontname,-color=>'darkred');
    foreach (1..45)
    {
	$y-=15;
	$line=<DATA>;
	$line=~s|[\012\015]+$||go;
	$gfx->textlabel(50,$y,$font,10,$line,-hspace=>80);
    }
}

$api->saveas("$0.pdf");
$api->end;

__END__
PDFJ - {PDFW[

=head1 SYNOPSIS

  use PDFJ qw(SJIS);
  $doc = PDFJ::Doc->new($pdfversion, $paperwidth, $paperheight);
  $font = $doc->new_font('Ryumin-Light', '90ms-RKSJ-H', 'Times-Roman');
  $page = $doc->new_page;
  $text = Text("eLXg", TStyle(font => $font, fontsize => 10));
  $paragraph = Paragraph($text, PStyle(size => 100, align => 'w', linefeed => 20));
  $image = $doc->new_image($jpgfile, $pixelwidth, $pixelheight, $width, $height);
  $shape = Shape->ellipse($x, $y, $rx, $ry);
  $block = Block('V', $paragraph, $image, $shape, BStyle(align => 'c'));
  $block->show($page, $x, $y);
  $doc->print('sample.pdf');

=head1 DESCRIPTION

=head2 Tv

̃W[͓{PDF𐶐B̂悤ȓB

=over 4

=item *

JIS X 4051u{ꕶ̍sgŕ@vi1995jɂقڏsgŃ[gݍłA֑s̋lߐL΂͂̃W[ɔC邱ƂłB

=item *

rAYAc̉AcÃnCtl[VAETA_AԊ|Ƃgŏ̃W[ɔC邱ƂłB

=item *

Type1tHgł́AaRyumin-LightGothicBBB-MediumATimesAHelveticaACourier̊et@~gB̓tHĝ͖ߍ܂Ȃ̂ŁARpNgPDFB\Eɂ̃tHgȂƑփtHgƂȂB

=item *

CӂTrueTypetHggƂłBTrueTypetHg͖ߍ܂iaɂĂ̓TuZbgŁĵŁA኱PDF̃TCY傫Ȃ邪AǂȊł悤ɕ\EłB

=item *

ɁAŒsb`̔ptHggƂAv|[ViȉtHggƂłB

=item *

{ꕶR[hƂẮAVtgJISA{EUCAUTF8AUnicodeɑΉĂB

=item *

JPEG摜it@CURLwjƐ}`B摜}`eLXg̈ꕔƂčsɔzu邱Ƃ\Btɐ}`̒ɃeLXg摜zu邱ƂłB

=item *

eLXgsƍsw肵Đ܂ԂAi邱ƂłBiɂ͉ӏ̂߂̃xt邱Ƃł

=item *

iA摜A}`ȂǂׂăubNƂ܂Ƃ܂邱ƂłBubNɂ́Ae̔zuA̗͂]AgAhԂFȂǂwłBubN̕т̕ƂāAとAEAEBubNqɂ邱Ƃŕ\邱ƂłB

=item *

iubNw̑傫𒴂Ȃ悤ɕāÃy[Wɕĕ\邱ƂłB

=item *

PDF̕AAEgCAnCp[NiURLjtłB

=item *

ÍłB

=back

=head2 \\ȃIuWFNg

PDFJł͎̕\\ȍ\vfɑΉIuWFNggݍ킹PDF쐬B݂͂ȁAshowƂ\bhŃy[WɈʒuw肵ĕ\邱ƂłBshow\bh̋̓IȎgɂĂ͌qB

=over 4

=item eLXgiPDFJ::Textj

w̕Aw̃tHgTCYȂǂ̑ɏ]ĕ\́BtHg̃GR[fBOHł΍E։ŁAVłΏォ牺֏cŕ\B

rAYAcAETA_A݂͂Ƃ̎w肪łB

eLXĝɂ͍ssƂ͂ȂA܂Ԃĕ\邱Ƃ͂ȂB

łȂA\\ȃIuWFNg܂ނƂłB

=item iiPDFJ::Paragraphj

eLXgɑ΂čsƍsƔzuw肵čs̐܂ԂȂAЂƂ̒iƂĕ\́Bs̐܂ԂɔA֑AnCtl[VAs̋lߐL΂͎IɏB

܂eLXgɂ́AłȂ摜}`ЂƂ̂̕悤ɈĊ܂ނƂłB

sAs̃CfgA擪sɂ郉xw肷邱ƂłB

ȋO̊Ԋuw肷邱ƂłB̊Ԋu͒iׂăubNۂɓKpB

=item 摜iPDFJ::Imagej

JPEG`ŁAt@CɕۑĂ̂AURLŎQƂł摜݂̂B̃sNZTCYƂ͊֌WȂw̑傫ŕ\łB

̗͂]w肷邱ƂłB

=item }`iPDFJ::Shapej

A`Ap`A~Aȉ~AxWGȐgݍ킹Đ}`쐬A\łB̗LAAFA_AhԂ̗LAFƂwłB

}`ɃeLXgzu邱ƂłB

̗͂]w肷邱ƂłB

=item ubNiPDFJ::Blockj

\\ȃIuWFNg̕ɕׂĂЂƂ܂Ƃ߂ɂ́BƂẮAHiEjARiEjAViとj̎OނBŜ̕⍂w肵ēe̔zuw肷邱ƂłBe̔zúAEɁAlijAcijAriEjA㉺ɁAtijAmijAbijgݍ킹Ďw肷BAŜ̕⍂͓eɂČ܂镝⍂菬͂łȂB

IuWFNgɑO̊Ԋu̎w肪΁Aɏ]ĊԊu󂯂B܂AڐlŊԊuw肷邱ƂłB

ubNɂ́A̗͂]AgAhԂFw肷邱ƂłB

ubNqɂ邱ƂŁA\邱ƂłB

=back

=head2 ̑̃IuWFNg

̑Ɏ̂悤ȃIuWFNgA\\ȃIuWFNgƂƂɎgpB

=over 4

=item tHgiPDFJ::AFontAPDFJ::CIDFontj

tHgType1tHgł́AaRyumin-LightGothicBBB-MediumATimesAHelveticaACourier̊et@~gBTrueTypetHg͔Cӂ̂̂gBPDFɖߍ܂̂ŁAߍ݂ꂽTrueTypetHgłȂ΂ȂȂB

atHgw肵eLXgɉꂽƂɂ́AatHg̔pi͔pŒjg邪Agݍ킹鉢tHgw肵ĂƂ̉tHggBv|[ViȘatHgɂ͑ΉĂȂB

cpGR[fBOiVjw肵atHgw肷ƁÃeLXg͏cƂȂB

=item eLXgX^CiPDFJ::TextStylej

tHgAtHgTCYA`惂[hAx[XCAΆAicł͖TjA͂ݔA_AYiEjArATA}`X^CAwłB

`惂[h́A̘gƓhԂ̑gݍ킹̎wB}`X^ĆA`AETA͂ݔɂ}`X^C̎wB

=item iX^CiPDFJ::ParagraphStylej

sAAsAxAxAsCfgAsCfgAOԊuAԊuAwłB

ƂẮAbisjAmijAeisjAwi[jB

=item ubNX^CiPDFJ::BlockStylej

AAAtOA͗]AgAhԂFAOԊuAԊuAwłB

=item }`X^CiPDFJ::ShapeStylej

A_AFAhԂFA͗]AOԊuAԊuAwłB

=item FiPDFJ::Colorj

DFwƁAqfaw肪łB}`̐FƓhԂF̎wɎgB

=item y[WiPDFJ::Pagej

ey[W̓eێBeLXg摜}`ȂǁA\\ȃIuWFNg̓y[Wɔzu邱ƂŎۂɕ\B

=item PDFiPDFJ::Docj

PDFBy[WQA\[XƂẴtHg摜܂Ƃ߁AŏIIɈPDFt@CƂďo͂B

=back

=head2 PDFJ̃CXg[

Ǘ҂łΎ̕WIȎ菇ŃCXg[łB

  perl Makefile.PL
  make
  make install

Ōmake install͊ǗҌŎsBWindowsłmakełȂnmakegpB

Ǘ҂łȂꍇłAPDFJ\鎟̃W[t@CQPerl痘płiȂ킿@INCɃZbgꂽjfBNgɂΗpłB

  PDFJ.pm
  PDFJ/Object.pm
  PDFJ/Unicode.pm
  PDFJ/E2U.pm
  PDFJ/S2U.pm
  PDFJ/U2C.pm
  PDFJ/TTF.pm

PDFJ́ÃnCtl[VȂ߂ɁATeX::HyphenW[gpĂB܂ރeLXgꍇ͕KvƂȂ̂ŁACPAN_E[hăCXg[ĂBǗ҂łȂꍇ́ÃW[Perl痘płfBNgɂ΂悢B

  TeX/Hyphen.pm
  TeX/Hyphen/czech.pm
  TeX/Hyphen/german.pm

PDFJ́AtHg摜Ȃǂ̃f[^𖄂ߍލۂɁAftHgłCompress::ZlibW[gpBCompress::ZlibȂACompress::ZlibgȂꍇ̂߂ɁACompress::Zlibg킸Ƀf[^̖ߍ݂ȂIvVpӂĂBiL<"IuWFNg̍쐬">QƁj

ÍȂۂɂ́ADigest::MD5W[KvłB

=head2 PDFJ̎gp

PDFJgpɂ́A̂悤ɂ use PDFJ ̈ɓ{ꕶR[hw肷Bȗ'SJIS'Ƃ݂ȂB

  # Shift-JIS̏ꍇ
  use PDFJ 'SJIS';

  # EUC̏ꍇ
  use PDFJ 'EUC';

  # UTF8̏ꍇ
  use PDFJ 'UTF8';

  # UNICODEiUCS2j̏ꍇ
  use PDFJ 'UNICODE';

eLXgIuWFNg鎞ɗ^镶AtHg̃GR[fBOł̓{ꕶR[h́Ause PDFJ Ŏw肵̂ƍv悤ɂȂ΂ȂȂB

قȂ镶R[h݂؂ւĎgp邱Ƃ͂łȂB

use PDFJ ɂĎ̃Tu[`GNX|[gB

  Doc
  Text
  TStyle
  NewLine
  Outline
  Dest
  Paragraph
  PStyle
  Block
  BStyle
  NewBlock
  BlockSkip
  Shape
  SStyle
  Color

=head2 IuWFNg̍쐬

܂ŏɕIuWFNg쐬Ȃ΂ȂȂB

  $docobj = PDFJ::Doc->new($version, $width, $height);

ŁA$versionPDF̃o[WiL̒QƁjA$width̓y[W̕A$height̓y[W̍ŁAPʂ̓|Cgi1/72C`jłBi|Cg̒`͒܂̂ȂAPDFł1/72C`ƂĂB1C`25.4mmBj

ȂAy[W̕ƍ́Aey[WIuWFNg쐬鎞ɌʂɎw肷邱ƂłB

PDF̃o[W

PDF̃o[ẂÂ悤AcrobatAcrobat Reader̃o[WƑΉĂB

  PDFo[W1.2 c Acrobato[W3
  PDFo[W1.3 c Acrobato[W4
  PDFo[W1.4 c Acrobato[W5

Acrobat3łg悤ɂ1.2ɂĂBA{TrueTypetHggƂ1.3ȏオKvBAcrobat4ȏŎg΂悢ƂƂȂ1.3ɂĂ΂悢B

f[^ߍݕ@̎w

Compress::Zlibg킸Ƀf[^̖ߍ݂Ȃꍇ́AIuWFNgfilter\bhpĎ̂悤Ƀf[^ߍݕ@̎wȂĂB̎wȂꍇCompress::Zlibgߍ݂ȂB

  $docobj->filter('a');

=head2 y[WIuWFNg̍쐬

y[W͕IuWFNgnew_page\bhŒǉBƍȗƕIuWFNg̍쐬̍ۂɎw肵̂gB

  $pageobj = $docobj->new_page;
  $pageobj = $docobj->new_page($width, $height);

̂ƂAy[W͖ɒǉł邾ŁArɑ}@͗pӂĂȂB

y[Wԍ́Apagenum\bhœB

  $pagenum = $pageobj->pagenum;

=head2 tHgIuWFNg̍쐬

tHgIuWFNǵAIuWFNgAnew_font\bhōB

  $fontobj = $docobj->new_font($basefont, $encoding);

$basefont̓x[XtHgŁAType1tHg̏ꍇ̂ꂩw肷B

  tHg
  Courier
  Courier-Bold
  Courier-BoldOblique
  Courier-Oblique
  Helvetica
  Helvetica-Bold
  Helvetica-BoldOblique
  Helvetica-Oblique
  Times-Bold
  Times-BoldItalic
  Times-Italic
  Times-Roman

  atHg
  Ryumin-Light
  GothicBBB-Medium

$basefontTrueTypetHg̃t@Cigq.ttfjw肷邱ƂŁATrueTypetHgw肷邱ƂłB܂ATrueTypeCollectiontHgigq.ttcj̏ꍇ͂̒̉Ԗځi0琔āj̃tHggt@ČɁu:ԍvƂĕtBiFuc:\windows\fonts\msgothic.ttc:0vj

=over 4

TrueTypeCollectiontHg͌Œsb`̃tHgƃv|[ViȃtHgZbgɂȂĂ邱ƂAL̂悤ɂĎw肷̂͌Œsb`̕łȂ΂ȂȂBt̃XNvgttcinfo.plTrueTypeCollectiontHgɊ܂܂tHg𒲂ׂ邱ƂłBv|[ViȃtHg̓tHg P tĂ邱ƂB

TrueTypetHgPDFɖߍ܂i{tHg̏ꍇ̓TuZbgŁjAߍ݂ȂTrueTypetHg݂BPDFJ́AtHĝ̒ɂ閄ߍ݂邩ǂ̃tOāAOKǂ𔻒fBAʂ̃CZXt@CȂǂŎgpĂꍇ肤̂ŁAtHg쐬҂̌NQȂ悤ɏ\ӂĂB

TrueTypetHg𖄂ߍލۂɂ́AtHgt@CɃjR[hɑΉcmape[uiplatformID3AplatformSpecificID1Aformat4̂́jKvłBÂTrueTypetHgł͂cmape[uȂ݂̂Bł͂TrueTypetHg͖ߍނƂłȂB

=back

$encoding̓GR[fBOŁÂꂩ̒`ς݃GR[fBOw肷BȗƁAtHgɑ΂Ă'WinAnsiEncoding'A{tHgɑ΂Ă'90ms-RKSJ-H'gBMacExpertEncoding̓GLXp[gtHgƌĂ΂ȃtHĝ߂̃GR[fBOB

  tHg̃GR[fBO
  WinAnsiEncoding
  MacRomanEncoding
  MacExpertEncoding

  {tHg̃GR[fBO
  83pv-RKSJ-H c Macintosh JIS X 0208 KanjiTalk6g
  90pv-RKSJ-H c Macintosh JIS X 0208 KanjiTalk7g
  90ms-RKSJ-H c Microsoft CP932 JIS X 0208 NEC,IBMg
  90ms-RKSJ-V c Vc
  Add-RKSJ-H  c JIS X 0208 xmFMRg
  Add-RKSJ-V  c Vc
  Ext-RKSJ-H  c JIS C 6226(JIS78) NECg
  Ext-RKSJ-V  c Vc
  EUC-H       c JIS X 0208
  EUC-V       c Vc
  EUC-NEC-H   c JIS X 0208 NECg
  EUC-NEC-V   c Vc
  UniJIS-UCS2-HW-H c Unicode 
  UniJIS-UCS2-HW-V c Unicode c

{tHg̃GR[fBO̖'H'͉A'V'͏cB'RKSJ'Ƃ̂Shift-JISpA'EUC'Ƃ̂EUCpA'Uni'Ƃ̂UnicodepB{v|[VitHg͎gȂƂɒӁB܂߂ĂׂĂ̕Spp̌Œsb`ƂȂB

EUC-NEC-HEUC-NEC-V́AEUC-HEUC-Vx[XNECgi_ł13,89-92ĵŁAPDFJœƎɒ`GR[fBOłigPDFAcrobatȂǂŊJătHgƃGR[fBÓuJX^vƕ\jBȊOAdobeɂĒ`ς̃GR[fBOB

UTF8̏ꍇtHgGR[fBOɂ͏LUnicodepw肷΂悢B

new_font\bhɂ͂̗p@A̂悤ɂē{tHgƉtHg̑gw肷B

  $fontobj = $docobj->new_font($jbasefont, $jencoding, $abasefont, $aencoding);

ŁA$jbasefont͓{x[XtHgA$jencoding͂̃GR[fBOA$abasefont͉x[XtHgA$aencoding͂̃GR[fBOB$aencodingȗWinAnsiEncodingB

̂悤ɓ{tHgƉtHggݍ킹tHgIuWFNgeLXgɑ΂Ďw肷ƁAeLXg̓{ꕔƉimɌ0x7f܂łASCII̕jɑ΂Ăꂼ̃tHgIɐ؂ւēKpBɂAɂĂ̓v|[Viȕ\ƂȂBgtHgł͉tHgKp̂ASCIIłAASCIIɂĂWinAnsiEncodingMacRomanEncodingɈႢ͂Ȃ̂ŁAg̉tHg̃GR[fBO͂ǂw肵ĂB

PƂ̉tHgKṕAuse PDFJ 'c'Ŏw肵{ꕶR[hɂ炸A1oCg1ƂăGR[fBOɏ]ĕ\B

{tHg̕ZbgAdobe-Japan1-4ƂĈBAdobe-Japan1-4ɂ́A܂ɌJIS X 02010208iꐅA񐅏jAъe[J[̊g܂܂Bڍׂ͎QƂ̂ƁB

http://partners.adobe.com/asn/developer/pdfs/tn/5078.Adobe-Japan1-6.pdf 

ŐV̕ZbgAdobe-Japan1-6łAɂJIS X 0212i⏕j0213iOAlj܂܂Ă邪ÂƂPDFJłAdobe-Japan1-6ł͂ȂAdobe-Japan1-4gB

=head2 eLXgIuWFNg̍쐬

eLXgIuWFNǵATextTu[`ō쐬B

  $textobj = Text(@list, $textstyle);

ŁA@list͕A\\ȃIuWFNgAsIuWFNg̃XgŁA@list̗vfɕׂꂽẽeLXg쐬B$textstyle̓eLXgX^CIuWFNgB

Xg͔zQƂ̌`ŗ^邱ƂłB

  $textobj = Text([@list], $textstyle);

sIuWFNgNewLineTu[`ō쐬ijBsIuWFNg̓eLXgIuWFNĝ܂ܕ\ꍇɂ͉̌ʂȂAiIuWFNgۂɋsʂ炷B

eLXgX^CIuWFNgTStyleTu[`ō쐬B

  $textstyle = TStyle(%args);

ɂ̓nbVXǧ`Ŏ̂̂^Bfontfontsize͕K{B̑̓IvVB

  font => tHgIuWFNg
  fontsize => tHgTCYi|Cgj
  italic => C^bNtOi^w肷ƃC^bNɁj
  bold => {[htOi^w肷ƃ{[hɁj
  slant => Α̃tOi^w肷ƎΑ̂Ɂj
  render => `惂[hi0:hׂA1:gA2:hׂ{gj
  shapestyle => `̐}`X^CIuWFNg
  rise => x[XC̏㒲li|Cgj
  vh => ctOi^w肷ƏcɁj
  withline => ܂͖TtOi^w肷Ɖ܂͖Ttj
  withlinestyle => ܂͖T̐}`X^CIuWFNg
  withbox => ͂ݘgwif:hׂAs:gAsf:hׂ{gj
  withboxstyle => ͂ݘg̐}`X^CIuWFNg
  withdot => _tOi^w肷ƌ_tj
  withnote => ߃eLXgIuWFNg
  suffix => Ywi'u'w肷ƏYA'l'w肷ƉYj
  ruby => r
  objalign => \\IuWFNg̔zu
  noglue => ɂĎ}钲]Ȃ
  code => R[hi'SJIS'A'EUC'A'UTF8'A'UNICODE'̂ꂩj

slantɂΑ͓̂{ꕶɂ̂ݗLłAɂĂItalicñtHgw肷邱ƂłȂƁBitalicboldɂẮAL<"C^bNƃ{[h">QƁB

rendershapestyle̎wȂƁA͍̓hׂŕ`悳B

withlinew肵withlinestyleȗƍ̎ƂȂBwithboxw肵withboxstyleȗƍ̎ƂȂB

withnotȅ͕Eɕʂ̃eLXgĩeLXgIuWFNgwithnoteŎw肷j\̂łAsuffix͎w肵Ĉʒu㉺閽߂łB

withnoteɕ^AwithnotestyleɃeLXgX^CIuWFNg^邱ƂłB

objaligńATextɉ摜}`Ȃǂ̕\\IuWFNg^ꂽƂɂǂzu邩̂悤Ɏw肷Bobjalign̎wȗƁAł'b'Acł'c'Ƃ݂ȂB

  ̏ꍇi㉺̔zu̎wƂȂj
  t c ƃIuWFNg̏[킹
  m c ƃIuWFNg̏㉺킹
  b c ƃIuWFNg̉[킹

  c̏ꍇiE̔zu̎wƂȂj
  l c ƃIuWFNg̍[킹
  c c ƃIuWFNg̍E킹
  r c ƃIuWFNg̉E[킹

codéAuse PDFJŎw肵R[hƂ͈ႤR[hɂeLXg^ƂɎw肷B

=head2 eLXgIuWFNg̓qɂ镔X^Cw

eLXg̈ꕔɓ̃X^CKpꍇAeLXgIuWFNgqɂĕX^Cw肷邱ƂłȂBqɂȂeLXgIuWFNgł͎q̃X^CŎw肳ĂȂX^C͐ê̂pB

Ⴆ΁ÃeLXg̈ꕔSVbNɂꍇA̂悤ɂB

  $mincho = $docobj->new_font('Ryumin-Light', '90ms-RKSJ-H');
  $gothic = $docobj->new_font('GothicBBB-Medium', '90ms-RKSJ-H');
  $textobj = Text([
      "", 
      Text("SVbN", TStyle(font => $gothic)),
      ""
    ], TStyle(font => $mincho, fontsize => 10));

̏ꍇA"SVbN"ɑ΂X^Cłfontsizew肳ĂȂ̂ŁAeX^Cfontsize10pB

eLXg̈ꕔɉꍇ́AႦ΂̂悤ɂB

  $mincho = $docobj->new_font('Ryumin-Light', '90ms-RKSJ-H');
  $normal_style = TStyle(font => $mincho, fontsize => 10);
  $uline_style = TStyle(withline => 1);
  $textobj = Text([
      "eLXg",
      Text("t", $uline_style),
    ], $normal_style);

eLXgX^C͂̂悤ɕϐɃZbgĂĎgƂł邵Â̗悤ɒTStyleTu[`gĂ悢B

=head2 C^bNƃ{[h

eLXgX^Citalicboldg߂ɂ́Aǂ̃tHgǂ̃tHg̃C^bN`{[h`łAƂƂhLgIuWFNgɋĂĂKvB̂߂ɁAitalic()bold()\bhgBႦΎ̂悤ɂB

  $ft = $docobj->new_font('Times-Roman');
  $fti = $docobj->new_font('Times-Italic');
  $ftb = $docobj->new_font('Times-Bold');
  $ftbi = $docobj->new_font('Times-BoldItalic');
  $docobj->italic($ft, $fti, $ftb, $ftbi);
  $docobj->bold($ft, $ftb, $fti, $ftbi);

̂悤ɁAtHgȀCtHgȀŁAgȏ܂Ƃ߂Ĉɗ^邱ƂłBgƂȂtHǵAtHgmA{tHgmAtHgƑgɂȂ{tHgmAłȂ΂ȂȂB

  Text('normal', Text('italic', TStyle(italic => 1)), TStyle(font => $ft))

̂悤ȃeLXgIuWFNgƁA'normal'ɂ$ftA'italic'ɂ$ftig邱ƂɂȂB

italic()bold()ł̓o^ĂȂtHgɑ΂italicbold̃X^C^ꍇ́Ǎʂ炳ȂB

ȂAʂɓ{tHgɂ̓C^bN`݂͑Ȃ̂ŁA{ꕶɑ΂ăeLXgX^Citalicw肳ꂽꍇ́AslantɒuČXĕ\B

=head2 iIuWFNg̍쐬

iIuWFNgParagraphTu[`ō쐬B

  $paragraphobj = Paragraph($textobj, $parastyle);

ŁA$textobj̓eLXgIuWFNgA$parastyle͒iX^CIuWFNgB̃eLXg^Ƃ͂̃eLXgIuWFNgɂ܂Ƃ߂ŗ^B

iX^CIuWFNgPStyleTu[`ō쐬B

  $parastyle = PStyle(%args);

ɂ̓nbVXǧ`Ŏ̂̂^Bsizelinefeedalign͕K{B̓IvVB

  size => i̍s̃TCYi|Cgj
  align => ib:s m: e:s w:[ W:[j
  linefeed => si|Cgj
  preskip => iO̊Ԋui|Cgj
  postskip => i̊Ԋui|Cgj
  beginindent => sCfg
  endindent => sCfg
  beginpadding => s̗]i|Cgj
  labeltext => x̃eLXgIuWFNg
  labelsize => x̍s̃TCYi|Cgj
  labelskip => xƖ{̊Ԋui|Cgj
  nobreak => ^break\bhŕȂ
  postnobreak => ^ƃubNbreakł̌ŕȂ
  float => ubNbreakňʒuړiuubNIuWFNg̕vQƁj

linefeedŎw肷͍̂słčsԂł͂ȂƂɒӁBlinefeed => '150%' ̂悤 l% Ǝw肷ƁAeLXgIuWFNg̃tHgTCYɑ΂銄Ƃ݂ȂB

preskippostskiṕAubNɒiׂ鎞̊ԊuƂĎgBȗƁAꂼsԁis肩tHgTCYj̔ɃZbgB

eLXǵA(size - beginpadding - beginindent - endindent - labelsize)Ƃs𒴂Ȃ悤ɐ܂ԂAalignɂđBwɂ闼[̎As͍sƂȂBWɂ鋭[ł́As܂߂ė[ƂȂBs̐܂Ԃ̍ۂ֑̋ƃnCtl[VA[̍ۂ̋lߐL΂́AJIS X 4051ɂقڑĂȂB

beginindentendindentzQƂ̌`ŗ^ƁA擪s珇ɎgBsvf傫Ƃ͍Ō̗vfJԂgB

beginpaddinǵAx܂߂iŜ́AsɎ]w肷Bi̗]size̒Ɋ܂܂BjāAxȂƂ́Abeginpadding̎wƒPƗvfbeginindent̎w͓ʂB

labeltextŃeLXgIuWFNgw肳ƁAxƂĐ擪s̑Oɕ\BxƖ{̊Ԃɂlabelskip̊ԊuBlabeltextɕ^Ɩ{̂̃eLXgIuWFNgƓeLXgX^CŃeLXgIuWFNgB

labeltextɂ́AeLXgIuWFNgԂTu[`QƂƁÃTu[`ɗ^̃XgAzQƂ̌`ŗ^邱ƂłBɂĔԍtӏłBႦ΂̂悤ɂȂB

  $LabelNum = 1;
  sub numlabel {
    my($fmt, $style) = @_;
    Text(sprintf($fmt, $LabelNum++), $style);
  }
  $ol_style = PStyle(size => 500, align => 'w', labelsize => 30,
    labeltext => [\&numlabel, "%d.", $normal_style]);
  $para1 = Paragaph($text1, $ol_style);
  $para2 = Paragaph($text2, $ol_style);

postnobreakfloat́A̒i܂ރubNbreakƂɈӖB

=head2 iIuWFNg̕

i̍s̑傫͒iX^CsizeŎw肵̂ɂȂ邪AƐȕ̑傫͍siƍsƃtHgTCYjŌ܂Bꂪ̑傫ɂȂ悤ɒi𕪊邽߂ɁAbreak\bhpӂĂBႦΉ̒iIuWFNg$paraɑ΂āA

  @paras = $para->break(200);

ƂƁA200|CgȉɂȂ悤ɕĩXgBAŏ̒i͍100ȉɂ΁A̂悤ɂ΂悢B

  @paras = $para->break(100, 200);

break̈Ɏw肵TCỸXg͏ɕĩTCYƂĎgAȂȂƍŌ̃TCYJԂgB

break̈Ɏw肵TCYāAŌ̃TCYłłȂcƂ́AɎŝƂĖ`lԂB

A$para->break(5, 200) ̂悤ɍŏrɃtHgTCY菬ȃTCYw肷ƁAɑΉċ̒iIuWFNgB̗ł́Aŏɋ̒iIuWFNgA200ɕꂽiIuWFNgԂ邱ƂɂȂB

iX^Cnobreak^ɐݒ肳ĂƁAȂBႦnobreakȉiIuWFNg$uparaA̍150łƂɁA$upara->break(100, 200)  (iIuWFNg, $uparaƓIuWFNg) ԂB$upara->break(100) ł͕ɎsĖ`lԂB

=head2 ubNIuWFNg̍쐬

ubNIuWFNgBlockTu[`ō쐬B

  $blockobj = Block($direction, @objlit, $blockstyle);

ŁA$direction̓ubN̓eׂA@objlit͕\\ȃIuWFNg̃XgA$blockstyle̓ubNX^CIuWFNgB

IuWFNg̃Xg͂̂悤ɔzQƂ̌`ŗ^邱ƂłB

  $blockobj = Block($direction, [@objlit], $blockstyle);

ubN̓éׂÂꂩw肷B

  H c E
  R c E獶
  V c ォ牺

$directionŎw肵ɁA@objlit̗vfɕׂ̂ubN̓eƂȂB̍ہAevf̕\\ȃIuWFNgɁApreskippostskip̃X^Cw肳Ă΁AɂĊԊuB܂ȎwƂāA@objlist̒ɃIuWFNgłȂ̐lƂ̊ԊuB

ubNX^CIuWFNgBStyleTu[`ō쐬B

  $blockstyle = BStyle(%args);

ɂ̓nbVXǧ`Ŏ̂̂^B

  width => i|Cgj
  height => i|Cgj
  align => 
  adjust => tOi^w肷Ɨvf̃ubÑTCY𑵂j
  padding => ͗]i|Cgj
  beginpadding => s̗]i|Cgj
  withbox => ͂ݘgwif:hׂAs:gAsf:hׂ{gj
  withboxstyle => ͂ݘg̐}`X^CIuWFNg
  preskip => O̊Ԋui|Cgj
  postskip => ̊Ԋui|Cgj
  nobreak => ^breakŕȂ
  postnobreak => ^ƃubNbreakł̌ŕȂ
  repeatheader => breakŕƂ擪ŌJԂvf
  float => ubNbreakňʒuړiuubNIuWFNg̕vQƁj
  nofirstfloat => ^breakŐ擪ɂfloatvfuȂ
  bfloatsep => floatb̗vfƂȊO̗vf̊Ԃɑ}\\IuWFNg
  efloatsep => floate̗vfƂȊO̗vf̊Ԃɑ}\\IuWFNg

widthAheightŕ⍂w肵ꍇAe̕⍂傫ꍇ͓eɍ킹Bew肵⍂傫ꍇ́AalignɂĈʒuB

alignɂ鑵͎̂ꂩgݍ킹ĎwBȗ'tl'Ƃ݂ȂB

  E
  l c 
  c c 
  r c E
  
  ㉺
  t c 
  m c 
  b c 

adjust^Ɏw肷ƁAHȐꍇ͗vfubN̍AV̏ꍇ͗vfubN̕AƂ傫̂ɑBubNׂĕ\쐬ƂɎgpB

padding͓e̎Ɏ]̕łAwithboxň͂ݘgw肵ꍇ̗͂]̊Oɕ`悳B

beginpadding͈͂ݘg̊O̍sɎ]̎włB

withboxł́A's','f','sf'̑ɁA'rX'iX͐ljtƊpaXŊۂȂB

=head2 ubNIuWFNg̕

iIuWFNgƓlɁAubNIuWFNgbreak\bhɂĕłBႦΕ'V'̃ubNIuWFNg$block200|CgȉɂȂ悤ɕ΁A

  @blocks = $block->break(200);

Ƃ΂悢Bŏ̃ubN100ȉɂ΁A̂悤ɂB

  @blocks = $block->break(100, 200);

break̈Ɏw肵TCỸXg͏ɕĩTCYƂĎgAȂȂƍŌ̃TCYJԂgB

ubN̍̕ہAubÑIuWFNgƂāA̓ubNAs̈قȂii'V'Ȃ'H'A'H''R'Ȃ'V'jƁÃIuWFNg邱Ƃłł邾w̃TCYɍ悤ɕB

w肵TCYŕłȂꍇAbreak\bh͖`lԂB̃TCYw肵ꍇɁAŌȊÕTCYꍇ́AɑΉ̂Ƃċ̃ubNԂB

ubNX^C nobreak ^ɂȂĂƁÃubN͕ȂB

ubN̒NewBlockTu[`ō쐬ubNIuWFNgƁAubN̍̕ۂɂŋIɕB

ubN̍̕ہA̗vfƂȂubNi}`̃X^C postnobreak ^ɐݒ肳ĂƁǍŕ邱Ƃ͂ȂBɂāAoiƖ{iʃy[Wɕ邱ƂhƂłB

ubN̍̕ہA̗vfƂȂubNi}`̃X^C float ݒ肳ĂƁA̗vf͕ꂽubNŎẅʒuɈړBfloatẅӖ͎̂ƂB

  bN:ꂽubN̐擪iN1`9܂͏ȗj
  eN:ꂽubN̖iN1`9܂͏ȗj
  h:ɉ\Ȃ炻̈ʒuɁAȂ玟̃ubN̐擪

bě1`9̔ԍtĐʂɃO[vłB̑傫Ȃ̂قǐ擪܂͖ɔzuBb0e0Ƃ͂beƂ邱ƂɒӁB

ubNX^Cnofirstfloat^Ɏw肷ƁAbreak̍ۂɑŜ̐擪ɂfloatvfuȂB

ubNX^Cbfloatsepŕ\\IuWFNgw肷ƁAfloatbŐ擪ɈړvfQ̌ɑ}BefloatsepŎw肵IuWFNgfloateŖɈړvfQ̑Oɑ}BɂAfloateƂăy[WɈړriƖ{i̊Ԃɋ؂悤ȂƂłBfloatbNeNiN1`9jgꍇ́AbfloatsepefloatsepɔzQƂ̌`ŃIuWFNg̃Xg^ƁANԖڂ̂̂gibeɂ0Ԗڂ̂̂gjBȂAbfloatsepefloatsepɎgIuWFNg͂pɎgpAubN̓eƂĎgĂ͂ȂȂB܂AbfloatsepɎgIuWFNgefloatsepɎgIuWFNgقȂIuWFNgłȂ΂ȂȂB

ubNX^C repeatheader w肳ĂƁA̒l̐̐擪vfAꂽeubN̐擪ŌJԂBi擪vf̓rŕꂽꍇ͏Bjɂĕ\̐擪̍ږ̍sJԂƂłB擪vf̂ƂȌʂ̂ŁA擪vf\ȒiubN̏ꍇ nobreak w肵ĂƁïႤubN̏ꍇ͕svjB܂擪vfƎ̗vfꂽꍇsK؂ȌʂƂȂ̂ŁA擪vfɂ postnobreak ̎wĂƁB

=head2 摜IuWFNg̍쐬

摜IuWFNgJPEG摜ɂĂ̂ݍ쐬łAIuWFNgnew_image\bhō쐬B

  $imgobj = $docobj->new_image($src, $pxwidth, $pxheight, 
    $width, $height, $padding, $colorspace);

ŁA$srcURL܂̓t@Cigq.jpg܂.jpegł邱ƁjA$pxwidth$pxheight͉摜̃sNZTCYA$width$height͕\TCYi|CgjA$padding͎̗͂]i|CgjA$colorspace̓J[Xy[Xirgb,gray,cmyk̂ꂩŏȗrgbjB$padding$colorspace͏ȗłB

݂̎dlł́AURLw肵ꍇ͐PDFɂURL񂾂ߍ܂A\ۂAcrobatReaderURLɃANZXĉ摜eǂ݂ƂBĕ\ɎԂAANZXłȂƉ摜\łȂƂƂN肤B

t@Cw肵摜̏ꍇ́AꂽPDFɉ摜ê̂f[^ƂĖߍ܂̂ŁẢ摜t@CPDFt@Cƈꏏɔzz肷Kv͂ȂB

摜IuWFNgɂ͑̕\\ȃIuWFNgƈăX^C̎w͂ȂBubNɊ܂߂ۂpostnobreakw肵Ƃ悤ȂƂ́A}`IuWFNg̒ɉ摜IuWFNg܂߂āA̐}`IuWFNgɃX^Cw肷B

=head2 }`IuWFNg̍쐬

}`IuWFNgShapeTu[`ō쐬B

  $shapeobj = Shape($shapestyle);

$shapestyle͐}`X^CIuWFNgB$shapestyle͏ȗłBꂾł͉̂Ȃ}`IuWFNg邾łB̌Ã\bhgĐ}`ĂB

=over 4

=item iline\bhj

  $shapeobj->line($x, $y, $w, $h, $style);

($x,$y)($x+$w,$y+$h)֒B$style͐}`X^CIuWFNgŁAȗ\B

=item `ibox\bhj

  $shapeobj->box($x, $y, $w, $h, $spec, $style);

($x,$y)($x+$w,$y+$h)ΊpƂ``B$style͐}`X^CIuWFNgŁAȗ\B$spec͎̕`wB

  f c ĥׂ
  s c ĝ
  sf c hׂ{g
  n c `悵Ȃ
  Ls̑ɁAliӁjAriEӁjAtiӁjAbiӁjȂgݍ킹
  ̓IvV
  rX c iX͐ljp𔼌aXŊۂ

box()ɑ΂$styleł́Aʏ̐}`X^CɉĎ̃X^CgBiL<"nCp[N">QƁj

  link => NĩN於܂́AURI:tURIj

=item ~icircle\bhj

  $shapeobj->circle($x, $y, $r, $spec, $arcarea, $style);

($x,$y)SA$rả~`B$arcarea͎l~wi1:EA2:A3:A4:EjŏȗΑS~B$style͐}`X^CIuWFNgŁAȗ\B$spec͎̕`wB

  f c ĥׂ
  s c ĝ
  sf c hׂ{g

=item ȉ~iellipse\bhj

  $shapeobj->ellipse($x, $y, $xr, $yr, $spec, $arcarea, $style);

$xraA$yrcał邱ƂΉ~ƓB

=item p`ipolygon\bhj

  $shapeobj->polygon([@coords], $spec, $style);

@coords͒_̍WXY̑gɕׂXgB$style͐}`X^CIuWFNgŁAȗ\B$spec͎̕`wB

  f c ĥׂ
  s c ĝ
  sf c hׂ{g

=item ~ʁiarc\bhj

  $shapeobj->arc($x, $y, $r, $start, $end, $spec, $style);

($x,$y)SA$raAJnp$startAIp$end̉~ʂ܂͉~ʂƔaň͂܂ꂽ̈悪`BJnpAIp̓WAB$style͐}`X^CIuWFNgŁAȗ\B$spec͎̕`wB$speca͉̎~ʂ̂݁Ȃ̏ꍇ͉~ʂƔaň͂܂ꂽ̈悪`悳B

  a c ~ʂ̂
  f c ĥׂ
  s c ĝ
  sf c hׂ{g

=item IuWFNgiobj\bhj

  $shapeobj->obj($obj, @showargs);

}`ɕ\\ȃIuWFNg$objA$obj->show($page, @showargs)ɂĔzuB

=back

ȏ̃\bh݂͂ȃIuWFNggԂ̂ŁA

  $shapeobj = Shape->line(c)->box(c)->obj(c);

̂悤ɋLq邱Ƃ\B

ȏ̃\bhŕ`悷ꍇ́AʂƂĂ̐}`IuWFNg㉺Eɂǂꂾ͈̔͂߂邩ƂŜƂĂ̐}`̑傫IɊǗAƍ\\IuWFNgƂĈƂłB

ȊÕv~eBuȕ`惁\bhiPDFJ::Shapẽ\bhꗗQƁjÃ\bhgꍇ͐}`IuWFNg̑傫̊Ǘ͂ȂȂƂɒӂKvB

}`X^CIuWFNǵASStyleTu[`ō쐬B

  $shapestyle = SStyle(%args);

ɂ̓nbVXǧ`Ŏ̂̂^B

  fillcolor => hׂFiFIuWFNgj
  strokecolor => FiFIuWFNgj
  linewidth => i|Cgj
  linedash => [$dash, $gap, $phase] ܂ "$dash, $gap, $phase"
  preskip => O̊Ԋui|Cgj
  postskip => ̊Ԋui|Cgj
  postnobreak => ^ƃubNbreakł̌ŕȂ
  float => ubNbreakňʒuړiuubNIuWFNg̕vQƁj

linedash̎wŁA$dash͔jA$gap͌ԒA$phase͊JnʒuB$phase͏ȗ\B

preskipApostskipApostnobreakAfloat́AubN̒ɐ}`IuWFNguƂɈӖB

box()ɑ΂$styleł́AL̐}`X^CɉĎ̃X^CgB

  link => NĩN於܂́AURI:tURIj

=head2 ǉ̐}`IuWFNg\bh

use PDFJ::Shape; ƁA̒ǉ̐}``惁\bhPDFJ::ShapeɒǉB̃\bh͂IuWFNggԂB܂A`͈͂̊ǗȂB

=over 4

=item iarrow\bhj

  $shapeobj->arrow($x, $y, $w, $h, $headsize, $headangle, $style);

$headsize$headangleȊÖlineƓB̏I[ɁA$headsizeA[px̔$headangleiWAj̎Op`VtB

=item gʁibrace\bhj

  $shapeobj->brace($x, $y, $w, $h, $style);

̈Ӗ͋`ƓB̋`̒ɔ[܂gʂ`悷B$wȂJʁAȂʁB{}ł͊ԂɍȂ傫ȔgʂKvȏꍇɎgpB

=item pʁibracket\bhj

  $shapeobj->bracket($x, $y, $w, $h, $style);

̈Ӗ͋`ƓB̋`̒ɔ[܂pʂ`悷B$wȂJʁAȂʁB[]ł͊ԂɍȂ傫ȊpʂKvȏꍇɎgpB

=item ۊʁiparen\bhj

  $shapeobj->paren($x, $y, $w, $h, $style);

̈Ӗ͋`ƓB̋`̒ɔ[܂ۊʂ`悷B$wȂJʁAȂʁB()ł͊ԂɍȂ傫ȊpʂKvȏꍇɎgpB

=back

=head2 FIuWFNg̍쐬

FIuWFNǵAColorTu[`ō쐬B

  $colorobj = Color($r, $g, $b);
  $colorobj = Color('#RRGGBB');
  $colorobj = Color($g);

ȌꍇA$r͐ԁA$g͗΁A$b͐̂ꂼ̊i01܂ł͈̔͂̐ljB

ŁA#Ŏn܂16i6̏̕ꍇA񌅂ԁA΁A̊i00ff܂ŁjƂ݂ȂB

ŁAl̏ꍇ́AO[̊i01܂ł͈̔͂̐ljB0A1B

=head2 \\IuWFNg̃y[Wւ̔zu

\\ȃIuWFNgy[Wɔzuɂ́Ashow\bhpB

  $obj->show($page, $x, $y, $align, $transtype, @transargs);

ŁA$page̓y[WIuWFNgA$xA$y͕\ʒuA$align͔zuA$transtype͕ό`̎ށA@transargs͕ό`̃p[^łB$alignȍ~̈͏ȗłB

\ʒu̍ẂAy[W̍_(0,0)ƂȂAXW͉EցAYW͏֌đBPʂ̓|CgłB

zu$aligńA($x,$y)Ŏw肵\ʒuɑ΂āAIuWFNgǂ̂悤ɔzu邩w肷̂ŁẢʒuƏcʒugݍ킹Ďw肷B

  ʒu
    l c IuWFNg̍[$xɂ킹
    c c IuWFNg̒$xɂ킹
    r c IuWFNg̉E[$xɂ킹
  cʒu
    t c IuWFNg̏[$yɂ킹
    m c IuWFNg̒$yɂ킹
    b c IuWFNg̉[$yɂ킹

zu$align̎wȗƁÃIuWFNgŗĽ_($x,$y)ɂ킹BeIuWFNǧŗĽ_͎̂ƂB

  eLXg c 擪̍[́A[獂0.125{̈ʒu
  ceLXg c 擪̏[́AËʒu
  i c 擪seLXǧŗĽ_
  ubN c 
  摜 c 
  }` c `施߂̌_̂܂܌_ƂȂ

show\bhɁA$transtypeȍ~̈^ƁA\̍ۂɕό`邱ƂłBό`̎$transtypeƂ̃p[^@transargsɂ͎̂ꂩw肷B

  'magnify', $mx, $my c $mx{Ac$my{AgEk
  'rotate', $rad c v$radWA]
  'distort', $xtan, $ytan c (1,0)(1,$xtan)ցA(0,1)($ytan,1)ֈڂ悤ɁAAcꂼX

eό`́Ashow\bh$x$ÿŌ܂ʒu_ƂĂȂB

=head2 y[W̃C

show\bhŕ\\IuWFNgy[WɔzuĂƁAォzûOɔzuāAOɔzuꂽ̂ɏdȂĂB

̏dȂ̏𐧌䂵ꍇ̂߂ɁAy[WIuWFNglayer\bhpӂĂB

  $pageobj->layer($layernum);

$layernum̓CԍŁA0ȏ̐lBlayer\bhsƁAȍ~̕`͎w肵Cԍ̃Cɑ΂ĂȂB

y[W̓e\Ƃɂ́ACԍ̏ԂɔzuB

=head2 X^C̃Rs[

ړqɂȂeLXgIuWFNg̃eLXgX^CɊւẮAeq֌WɂěpȂ̂ŁAX^C̎w肪łBȊȌꍇɃX^C̎IȌpȂ邱Ƃ͂ȂB

̃X^CɂđύXǉ肵X^C쐬ꍇAclone\bhpB̃\bh̓eLXgX^CAiX^CAubNX^CA}`X^ĈׂĂɂĎgB

  $newstyle = $originalstyle->clone(%newargs);

%newargsw肵ȂΒPɃRs[B%newargsŎw肵͌̑㏑ȋȂΒǉjB

=head2 X^Cŵ܂܂ȕ@

ẽX^CIuWFNg쐬Aclone()ŃRs[肷ƂɁÄ̓nbVXgŗ^邪AnbVQƂcssCNȕŗ^邱ƂłB͓łB

  PStyle(size => 200, align => 'w', linefeed => '150%')
  PStyle({size => 200, align => 'w', linefeed => '150%'})
  PStyle('size:200; align:w; linefeed:150%')

ŗ^Ƃ́Au:lvu;vŋ؂ĕׂĎw肷BAnbVQƂ╶Ŏw肷Ƃ͈͂̈łȂ΂ȂȂB

lƂăIuWFNg^Ƃ͕ɂ@͎ȂAlX^CIuWFNgł鎞ɂ́Â悤 {} Ŏw肪\łB

  TStyle('withline:1; withlinestyle:{linewidth:0.5; linedash:2,2; strokecolor:#ff0000}')

ɃnbVXg^ƂɂAlƂăX^CIuWFNg鑮istyleŏIjAColorIuWFNg鑮icolorŏIjɂẮAlIuWFNgłȂnbVQƂ╶ŗ^邱ƂłB

  TStyle(withline => 1, withlinestyle => 
    {linewidth => 0.5, linedash => '2,2', strokecolor => '#ff0000'})

=head2 PDF̏o

쐬PDFt@Cɏo͂ɂ́AIuWFNgprint\bhpB

  $docobj->print($filename);

t@C$filename̊gq́Aʏ.pdfƂB

t@CƂ '-' w肷ƕWo͂ɏo͂B

=head2 ̒ǉ

PDFɂ͕̃^CgA쐬ҁAL[[hȂǂ̕邱ƂłBȂɂ́Â悤add_info()\bhpB

  $docobj->add_info(Title => '^Cg', Author => '쐬');

włL[͎̂̂B

  Title => ̃^Cg
  Author => ̍쐬Җ
  Subject => ̎
  Keywords => Ɋ֘AL[[h
  Creator => 쐬AvP[V

ȂAProducerL[ɂ́uPDFJ o[WvACreationDateL[ɂ͍쐬iWjIɃZbgB

=head2 AEgC

PDFɂ̓AEgCƂڎ@\iƂjBAEgC̍ڂ}EXŃNbNƂ̍ڂŎw肳ꂽʒu\BAEgC͊KwIɍ\A͂߂Ȃǂ̌oAEgCɑΉ邱ƂB

PDFJŕɃAEgCtɂ́AeLXgIuWFNg쐬ۂɁAΏۂ̕IuWFNg̑OɃAEgCwIuWFNguBAEgCwIuWFNg Outline() Tu[`ō쐬BႦ΁Au͂߂ɁvƂoAEgC̃gbvxɉꍇA̂悤ɂB

  Text(Outline('͂߂'), '͂߂', $midasi_style)

̃eLXgIuWFNgy[WɔzuƁÃAEgCɁu͂߂ɁvƂڂẮu͂߂ɁvƂeLXg̍̈ʒuw肳B̗ł̓AEgCڂƃeLXg̕𓯂ɂĂ邪AقȂ镶w肵Ă悢B

Px́u{̓evƂoAEgCɉꍇA̂悤ɂB

  Text(Outline('{̓e', 1), '{̓e', $midasi_style)

Outline() ̂QԖڂ̈ɂ́AAEgC̊Kwxw肷Bx 0 ͏Ĺu͂߂Ɂv̗̂悤ɏȗłB

AEgĆAOutline()܂񂾃eLXgIuWFNgy[WɔzuƂɏɒǉčĂB܂̂ƂÃAEgC̓rɑ}i͗pӂĂȂBx0̍ڂ̎Ƀx2̍ڂȂǁAKw̃MbvƁAMbv𖄂߂邽߂̋󕶎ɂAEgCڂB

=head2 nCp[N

PDFɂ̓nCp[N@\Ay[W̃NɎw肳ꂽ̈NbNƁÃN悪\BNƂẮȀꏊAʂ̏̕ꏊAURIihttp:ȂǂŎn܂C^[lbg̏ꏊƍl΂悢j邪ÂƂPDFJł͓̏ꏊURIɑΉĂB

ł̃Nɂ́AÑeLXgDest()Tu[`ŖOw肵č쐬PDFJ::DestIuWFNgzuBႦ

  Text(Dest('dest'),'N',TStyle(c))

ƂƁA'N'ƂeLXg̑O'dest'ƂÕN悪BDest()ōPDFJ::DestIuWFNĝ́A\ɂ͌ȂBN̖O͔Cӂ̕񂪎g邪AuURI:vŎn܂̂URIւ̃N̂߂ɎgB

Nł͋`̐}`IuWFNg̐}`X^ClinkŃN於w肷邩AeLXgX^CwithboxstyleœllinkwBႦ

  Shape->box(0,0,100,50,'s',SStyle(link => 'dest'))

ƂƁA100|CgAc50|Cg̋`āA̓NbNƖO'dest'̃NɔԁBeLXg̏ꍇ́A

  Text('NbN', TStyle(withbox => 'n', 
    withboxstyle => SStyle(link => 'dest')))

̂悤ɂ΂悢B̂悤withbox => 'n' ƂƋ`͕`悳ȂBNł邱Ƃ߂ɐFςƂtƂHv̓[U[ɔCĂBiwithbox => 'b' ŉt邱ƂłBj

URIN̏ꍇ́ADest()ɂ郊N̐ݒ͕KvȂAN̖OƂāAuURI:vɑURI΂悢BႦ

  Text('ăAhr', TStyle(withbox => 'n', 
    withboxstyle => SStyle(link => 'URI:http://www.adobe.com/')))

̂悤ɂB

URI͂łURIGR[hĂȂURIGR[hB

=head2 Í

PDF͈ÍłBPDF̃o[WɂĎgpłÍ͈̔͂ႤÂƂPDFJł͂Ƃ{I40rbgRC4ÍT|[gĂB

Íɂ́Aencrypt()\bhpāAI[i[pX[hA[U[pX[hA[U[ւ̎gptOAw肷B

  $docobj->encrypt($ownerpass, $userpass, $allow);

I[i[pX[hƃ[U[pX[hɓ̂w肷ƁAI[i[ŊJƂ͂łȂȂB

[U[ւ̎gptÓA̋LׂƂĎw肷B

  P c ̈
  M c e̕ύX
  C c ̃eLXgƉ摜̃Rs[
  N c eLXg߂ёΘbtH[tB[h̒ǉAύX

eLXg߂ёΘbtH[@\͍̂ƂPDFJł͖T|[g

=head2 PDFJ::DocNX̃\bh

  PDFJ::Doc->new($version, $pagewidth, $pageheight)
  PDFJ::Doc->new({version => $version, pagewidth => $pagewidth, pageheight => $pageheight})
  add_info($key => $value, ...)
  add_info({$key => $value, ...})
  encrypt($ownerpass, $userpass, $allow)
  encrypt({ownerpass => $ownerpass, userpass => $userpass, allow => $allow})
  filter($filter)
  filter({filter => $filter})
  print($file)
  print({file => $file})
  new_page($pagewidth, $pageheight)
  new_page({pagewidth => $pagewidth, pageheight => $pageheight})
  get_page($pagenum)
  get_page({number => $pagenum})
  get_lastpagenum
  new_font($basefont, $encoding, $abasefont, $aencoding)
  new_font({basefont => $basefont, encoding => $encoding, abasefont => $abasefont, aencoding => $aencoding})
  italic($font1, $font2, ...)
  italic({base => $font1, decorated => $font2})
  bold($font1, $font2, ...)
  bold({base => $font1, decorated => $font2})
  new_image($src, $pxwidth, $pxheight, $width, $height, $padding, $colorspace)
  new_image({src => $src, pxwidth => $pxwidth, pxheight => $pxheight, width => $width, height => $height, padding => $padding, colorspace => $colorspace})

=head2 PDFJ::PageNX̃\bh

  PDFJ::Page->new($docobj, $pagewidth, $pageheight)
  pagenum
  layer($layernum)
  layer({layer => $layernum})

=head2 PDFJ::AFontNX̃\bh

  PDFJ::AFont->new_std($docobj, $basefont, $encoding)
  PDFJ::AFont->new_ttf($docobj, $ttffile, $encoding)

=head2 PDFJ::CIDFontNX̃\bh

  PDFJ::CIDFont->new_std($docobj, $basefont, $encoding, $afontobj)
  PDFJ::CIDFont->new_ttf($docobj, $ttffile, $encoding, $afontobj)

=head2 PDFJ::ShowableNX̃\bh

̃\bh́APDFJ::TextAPDFJ::ParagraphAPDFJ::BlockAPDFJ::ImageAPDFJ::Shape̊eNXŋʂĎgB

  show($page, $x, $y, $align, $transtype, @transargs)
  show({page => $page, x => $x, y => $y, align => $align, transtype => $transtype, transargs => [@transargs]})
  width
  height

=head2 PDFJ::TextNX̃\bh

  PDFJ::Text->new($text, $style)
  PDFJ::Text->new(@texts, $style)
  PDFJ::Text->new([@texts], $style)
  PDFJ::Text->new({texts => $text, style => $style})
  PDFJ::Text->new({texts => [@text], style => $style})

=head2 PDFJ::ParagraphNX̃\bh

  PDFJ::Paragraph->new($text, $style)
  PDFJ::Paragraph->new({text => $text, style => $style})
  linesnum
  break($size)
  break(@sizes)
  break({sizes => $size})
  break({sizes => [@sizes]})

=head2 PDFJ::BlockNX̃\bh

  PDFJ::Block->new($direction, $object, $style)
  PDFJ::Block->new($direction, @objects, $style)
  PDFJ::Block->new($direction, [@objects], $style)
  PDFJ::Block->new({direction => $direction, objects => $object, style => $style})
  PDFJ::Block->new({direction => $direction, objects => [@objects], style => $style})
  adjustwidth($size)
  adjustwidth({size => $size})
  adjustheight($size)
  adjustheight({size => $size})
  break($size)
  break(@sizes)
  break({sizes => $size})
  break({sizes => [@sizes]})

=head2 PDFJ::BlockSkipNX̃\bh

  PDFJ::BlockSkip->new($skip)
  PDFJ::BlockSkip->new({skip => $skip})

=head2 PDFJ::ImageNX̃\bh

  PDFJ::Image->new($docobj, $src, $pxwidth, $pxheight, $width, $height, $padding)
  setsize($width, $height)
  setpadding($padding)

=head2 PDFJ::ShapeNX̃\bh

  PDFJ::Shape->new($style)
  PDFJ::Shape->new({style => $style})

}N߁i`͈͂̊ǗȂj

  line($x, $y, $w, $h, $style)
  line({x => $x, y => $y, w => $w, h => $h, style => $style})
  box($x, $y, $w, $h, $spec, $style)
  box({x => $x, y => $y, w => $w, h => $h, spec => $spec, style => $style})
  circle($x, $y, $r, $spec, $arcarea, $style)
  circle({x => $x, y => $y, r => $r, spec => $spec, arcarea => $arcarea, style => $style})
  ellipse($x, $y, $xr, $yr, $spec, $arcarea, $style)
  ellipse({x => $x, y => $y, xr => $xr, yr => $yr, spec => $spec, arcarea => $arcarea, style => $style})
  polygon([@coords], $spec, $style)
  polygon({coords => [@coords], spec => $spec, style => $style})
  arc($x, $y, $r, $start, $end, $spec, $style)
  arc({x => $x, y => $y, r => $r, start => $start, end => $end, spec => $spec, style => $style})

IuWFNgzu߁i`͈͂̊ǗȂj

  obj($obj, @showargs)
  obj({obj => $obj, showargs => [@showargs]})

v~eBu

  setboundary($x, $y)
  gstatepush
  gstatepop
  linewidth($w)
  linedash($dash, $gap, $phase)
  ctm(@array)
  fillcolor($color)
  strokecolor($color)
  fillgray($g)
  strokegray($g)
  fillrgb($r, $g, $b)
  strokergb($r, $g, $b)
  moveto($x, $y)
  lineto($x, $y)
  curveto($x1, $y1, $x2, $y2, $x3, $y3)
  rectangle($x, $y, $w, $h)
  closepath
  newpath
  stroke
  closestroke
  fill
  fill2
  fillstroke

=head2 PDFJ::StyleNX̃\bh

̃\bhPDFJ::TextStyleAPDFJ::ParagraphStyleAPDFJ::BlockStyleAPDFJ::ShapeStylêׂĂŎgB

  clone(%args)
  clone({%args})
  clone($argstr)

=head2 PDFJ::TextStyleNX̃\bh

  PDFJ::TextStyle->new(%args)
  PDFJ::TextStyle->new({%args})
  PDFJ::TextStyle->new($argstr)

=head2 PDFJ::ParagraphStyleNX̃\bh

  PDFJ::ParagraphStyle->new(%args)
  PDFJ::ParagraphStyle->new({%args})
  PDFJ::ParagraphStyle->new($argstr)

=head2 PDFJ::BlockStyleNX̃\bh

  PDFJ::BlockStyle->new(%args)
  PDFJ::BlockStyle->new({%args})
  PDFJ::BlockStyle->new($argstr)

=head2 PDFJ::ShapeStyleNX̃\bh

  PDFJ::ShapeStyle->new(%args)
  PDFJ::ShapeStyle->new({%args})
  PDFJ::ShapeStyle->new($argstr)

=head2 PDFJ::ColorNX̃\bh

  PDFJ::Color->new($r, $g, $b)
  PDFJ::Color->new($rgb)
  PDFJ::Color->new($g)
  PDFJ::Color->new({value => $rgb})
  PDFJ::Color->new({value => $g})

=head2 PDFJ::OutlineNX̃\bh

  PDFJ::Outline->new($title, $level)
  PDFJ::Outline->new({title => $title, level => $level})

=head2 PDFJ::DestNX̃\bh

  PDFJ::Dest->new($name)
  PDFJ::Dest->new({name => $name})

=head2 NX

ȉ́Aʏ̓[U[ڈKv̂ȂAPDFJŎgNXB

=over 4

=item PDFJ::FileNX

PDFJ::Doc̉BPDFPDFJ::DocIuWFNgPDFt@CɏoۂɁAPDFIuWFNg̍Ȃǂ̃^f[^tāAKɏ]t@C\B

=item PDFJ::ObjTableNX 

PDFJ::Doc̉BPDFJ::DocIuWFNgɊ܂܂PDFIuWFNgǗB

=item PDFJ::TextSpecNX

PDFJ::Text̉ƂāAeLXgێB

=item PDFJ::Object::* NXQ

PDFAdobeЂK肵PDF̕@ɉč\ĂA̍\Pʂ܂uIuWFNgvƌĂ΂BPDFx̃IuWFNgALŐ悤PDFJɂPerlIuWFNgƋʂ邽߂ɁAuPDFIuWFNgvƌĂԂƂɂBPDFJ́A჌xŃv~eBuPDFIuWFNgBA[U[ڈȂĂ悢悤ɂĂBPDFIuWFNg𑀍삵Ƃ́APDFJ::Object::* NXQg΂悢B

=item PDFJ::TTFNX

TrueTypetHgt@C(.ttf)̓eǂ݂ƂATuZbg쐬肷B

=item PDFJ::TTCNX

TrueTypeCollectiontHgt@C(.ttc)ǂ݂ƂāAw肵ԍ̃tHgɂĂPDFJ::TTFIuWFNg𓾂B

=back

=head1 AUTHOR

  
L<nakajima@netstock.co.jp|"mailto:nakajima@netstock.co.jp"> 
L<http://hp1.jonex.ne.jp/~nakajima.yasushi/|"http://hp1.jonex.ne.jp/~nakajima.yasushi/">

=head1 SEE ALSO

uJIS X 4051i{ꕶ̍sgŕ@jv(JISA1995)

uPDFt@X QŁv(AhrVXeYA2001)
