Ignore:
Timestamp:
2012/05/14 00:32:52 (12 years ago)
Author:
Seasoft
Message:

#1794 (data/module/fpdi/japanese.php のカスタマイズを分離する)
#1802 (PDF 納品書の備考欄に背景色が塗られる場合がある)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_12-dev/data/module/fpdi/japanese.php

    r20993 r21826  
    22require('fpdi.php'); 
    33 
    4 $SJIS_widths=array(' '=>278,'!'=>299,'"'=>353,'#'=>614,'$'=>614,'%'=>721,'&'=>735,'\''=>216, 
    5     '('=>323,')'=>323,'*'=>449,'+'=>529,','=>219,'-'=>306,'.'=>219,'/'=>453,'0'=>614,'1'=>614, 
    6     '2'=>614,'3'=>614,'4'=>614,'5'=>614,'6'=>614,'7'=>614,'8'=>614,'9'=>614,':'=>219,';'=>219, 
    7     '<'=>529,'='=>529,'>'=>529,'?'=>486,'@'=>744,'A'=>646,'B'=>604,'C'=>617,'D'=>681,'E'=>567, 
    8     'F'=>537,'G'=>647,'H'=>738,'I'=>320,'J'=>433,'K'=>637,'L'=>566,'M'=>904,'N'=>710,'O'=>716, 
    9     'P'=>605,'Q'=>716,'R'=>623,'S'=>517,'T'=>601,'U'=>690,'V'=>668,'W'=>990,'X'=>681,'Y'=>634, 
    10     'Z'=>578,'['=>316,'\\'=>614,']'=>316,'^'=>529,'_'=>500,'`'=>387,'a'=>509,'b'=>566,'c'=>478, 
    11     'd'=>565,'e'=>503,'f'=>337,'g'=>549,'h'=>580,'i'=>275,'j'=>266,'k'=>544,'l'=>276,'m'=>854, 
    12     'n'=>579,'o'=>550,'p'=>578,'q'=>566,'r'=>410,'s'=>444,'t'=>340,'u'=>575,'v'=>512,'w'=>760, 
    13     'x'=>503,'y'=>529,'z'=>453,'{'=>326,'|'=>380,'}'=>326,'~'=>387); 
     4$SJIS_widths = array(' '=>278,'!'=>299,'"'=>353,'#'=>614,'$'=>614,'%'=>721,'&'=>735,'\''=>216, 
     5    '('=>323,')'=>323,'*'=>449,'+'=>529,','=>219,'-'=>306,'.'=>219,'/'=>453,'0'=>614,'1'=>614, 
     6    '2'=>614,'3'=>614,'4'=>614,'5'=>614,'6'=>614,'7'=>614,'8'=>614,'9'=>614,':'=>219,';'=>219, 
     7    '<'=>529,'='=>529,'>'=>529,'?'=>486,'@'=>744,'A'=>646,'B'=>604,'C'=>617,'D'=>681,'E'=>567, 
     8    'F'=>537,'G'=>647,'H'=>738,'I'=>320,'J'=>433,'K'=>637,'L'=>566,'M'=>904,'N'=>710,'O'=>716, 
     9    'P'=>605,'Q'=>716,'R'=>623,'S'=>517,'T'=>601,'U'=>690,'V'=>668,'W'=>990,'X'=>681,'Y'=>634, 
     10    'Z'=>578,'['=>316,'\\'=>614,']'=>316,'^'=>529,'_'=>500,'`'=>387,'a'=>509,'b'=>566,'c'=>478, 
     11    'd'=>565,'e'=>503,'f'=>337,'g'=>549,'h'=>580,'i'=>275,'j'=>266,'k'=>544,'l'=>276,'m'=>854, 
     12    'n'=>579,'o'=>550,'p'=>578,'q'=>566,'r'=>410,'s'=>444,'t'=>340,'u'=>575,'v'=>512,'w'=>760, 
     13    'x'=>503,'y'=>529,'z'=>453,'{'=>326,'|'=>380,'}'=>326,'~'=>387); 
    1414 
    1515class PDF_Japanese extends FPDI 
    1616{ 
    17 function AddCIDFont($family,$style,$name,$cw,$CMap,$registry) 
    18 { 
    19     $fontkey=strtolower($family).strtoupper($style); 
    20     if(isset($this->fonts[$fontkey])) 
    21         $this->Error("CID font already added: $family $style"); 
    22     $i=count($this->fonts)+1; 
    23     $this->fonts[$fontkey]=array('i'=>$i,'type'=>'Type0','name'=>$name,'up'=>-120,'ut'=>40,'cw'=>$cw,'CMap'=>$CMap,'registry'=>$registry); 
    24 } 
    25  
    26 function AddCIDFonts($family,$name,$cw,$CMap,$registry) 
    27 { 
    28     $this->AddCIDFont($family,'',$name,$cw,$CMap,$registry); 
    29     $this->AddCIDFont($family,'B',$name.',Bold',$cw,$CMap,$registry); 
    30     $this->AddCIDFont($family,'I',$name.',Italic',$cw,$CMap,$registry); 
    31     $this->AddCIDFont($family,'BI',$name.',BoldItalic',$cw,$CMap,$registry); 
     17function AddCIDFont($family, $style, $name, $cw, $CMap, $registry) 
     18{ 
     19    $fontkey=strtolower($family).strtoupper($style); 
     20    if(isset($this->fonts[$fontkey])) 
     21        $this->Error("CID font already added: $family $style"); 
     22    $i=count($this->fonts)+1; 
     23    $this->fonts[$fontkey]=array('i'=>$i,'type'=>'Type0','name'=>$name,'up'=>-120,'ut'=>40,'cw'=>$cw,'CMap'=>$CMap,'registry'=>$registry); 
     24} 
     25 
     26function AddCIDFonts($family, $name, $cw, $CMap, $registry) 
     27{ 
     28    $this->AddCIDFont($family,'',$name,$cw,$CMap,$registry); 
     29    $this->AddCIDFont($family,'B',$name.',Bold',$cw,$CMap,$registry); 
     30    $this->AddCIDFont($family,'I',$name.',Italic',$cw,$CMap,$registry); 
     31    $this->AddCIDFont($family,'BI',$name.',BoldItalic',$cw,$CMap,$registry); 
    3232} 
    3333 
    3434function AddSJISFont($family='SJIS') 
    3535{ 
    36     //Add SJIS font with proportional Latin 
    37     $name='KozMinPro-Regular-Acro'; 
    38     //$name='Gothic'; // •ÏX 
    39     $cw=$GLOBALS['SJIS_widths']; 
    40     $CMap='90msp-RKSJ-H'; 
    41     $registry=array('ordering'=>'Japan1','supplement'=>2); 
    42     $this->AddCIDFonts($family,$name,$cw,$CMap,$registry); 
     36    // Add SJIS font with proportional Latin 
     37    $name='KozMinPro-Regular-Acro'; 
     38    $cw=$GLOBALS['SJIS_widths']; 
     39    $CMap='90msp-RKSJ-H'; 
     40    $registry=array('ordering'=>'Japan1','supplement'=>2); 
     41    $this->AddCIDFonts($family,$name,$cw,$CMap,$registry); 
    4342} 
    4443 
    4544function AddSJIShwFont($family='SJIS-hw') 
    4645{ 
    47     //Add SJIS font with half-width Latin 
    48     $name='KozMinPro-Regular-Acro'; 
    49     for($i=32;$i<=126;$i++) 
    50         $cw[chr($i)]=500; 
    51     $CMap='90ms-RKSJ-H'; 
    52     $registry=array('ordering'=>'Japan1','supplement'=>2); 
    53     $this->AddCIDFonts($family,$name,$cw,$CMap,$registry); 
     46    // Add SJIS font with half-width Latin 
     47    $name='KozMinPro-Regular-Acro'; 
     48    for($i=32;$i<=126;$i++) 
     49        $cw[chr($i)]=500; 
     50    $CMap='90ms-RKSJ-H'; 
     51    $registry=array('ordering'=>'Japan1','supplement'=>2); 
     52    $this->AddCIDFonts($family,$name,$cw,$CMap,$registry); 
    5453} 
    5554 
    5655function GetStringWidth($s) 
    5756{ 
    58     if($this->CurrentFont['type']=='Type0') 
    59         return $this->GetSJISStringWidth($s); 
    60     else 
    61         return parent::GetStringWidth($s); 
     57    if($this->CurrentFont['type']=='Type0') 
     58        return $this->GetSJISStringWidth($s); 
     59    else 
     60        return parent::GetStringWidth($s); 
    6261} 
    6362 
    6463function GetSJISStringWidth($s) 
    6564{ 
    66     //SJIS version of GetStringWidth() 
    67     $l=0; 
    68     $cw=&$this->CurrentFont['cw']; 
    69     $nb=strlen($s); 
    70     $i=0; 
    71     while($i<$nb) 
    72     { 
    73         $o=ord($s{$i}); 
    74         if($o<128) 
    75         { 
    76             //ASCII 
    77             $l+=$cw[$s{$i}]; 
    78             $i++; 
    79         } 
    80         elseif($o>=161 and $o<=223) 
    81         { 
    82             //Half-width katakana 
    83             $l+=500; 
    84             $i++; 
    85         } 
    86         else 
    87         { 
    88             //Full-width character 
    89             $l+=1000; 
    90             $i+=2; 
    91         } 
    92     } 
    93     return $l*$this->FontSize/1000; 
    94 } 
    95  
    96 function MultiCell($w,$h,$txt,$border=0,$align='L',$fill=0,$ln=2) 
    97 { 
    98     if($this->CurrentFont['type']=='Type0') 
    99         $this->SJISMultiCell($w,$h,$txt,$border,$align,$fill,$ln); 
    100     else 
    101         parent::MultiCell($w,$h,$txt,$border,$align,$fill,$ln); 
    102 } 
    103  
    104 function SJISMultiCell($w,$h,$txt,$border=0,$align='L',$fill=0,$ln=2) 
    105 { 
    106     //Output text with automatic or explicit line breaks 
    107     $cw=&$this->CurrentFont['cw']; 
    108     if($w==0) 
    109         $w=$this->w-$this->rMargin-$this->x; 
    110     $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
    111     $s=str_replace("\r",'',$txt); 
    112     $nb=strlen($s); 
    113     if($nb>0 and $s{$nb-1}=="\n") 
    114         $nb--; 
    115     $b=0; 
    116     if($border) 
    117     { 
    118         if($border==1) 
    119         { 
    120             $border='LTRB'; 
    121             $b='LRT'; 
    122             $b2='LR'; 
    123         } 
    124         else 
    125         { 
    126             $b2=''; 
    127             if(is_int(strpos($border,'L'))) 
    128                 $b2.='L'; 
    129             if(is_int(strpos($border,'R'))) 
    130                 $b2.='R'; 
    131             $b=is_int(strpos($border,'T')) ? $b2.'T' : $b2; 
    132         } 
    133     } 
    134     $sep=-1; 
    135     $i=0; 
    136     $j=0; 
    137     $l=0; 
    138     $nl=1; 
    139     $this->rise_h = 0; //‚‚³ŒvŽZ—p 
    140  
    141     while($i<$nb) 
    142     { 
    143         //Get next character 
    144         $c=$s{$i}; 
    145         $o=ord($c); 
    146         if($o==10) 
    147         { 
    148             //Explicit line break 
    149             $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); 
    150             $i++; 
    151             $sep=-1; 
    152             $j=$i; 
    153             $l=0; 
    154             $nl++; 
    155             $this->rise_h += $h; //‚‚³ŒvŽZ—p 
    156             if($border and $nl==2) 
    157                 $b=$b2; 
    158             continue; 
    159         } 
    160         if($o<128) 
    161         { 
    162             //ASCII 
    163             $l+=$cw[$c]; 
    164             $n=1; 
    165             if($o==32) 
    166                 $sep=$i; 
    167         } 
    168         elseif($o>=161 and $o<=223) 
    169         { 
    170             //Half-width katakana 
    171             $l+=500; 
    172             $n=1; 
    173             $sep=$i; 
    174         } 
    175         else 
    176         { 
    177             //Full-width character 
    178             $l+=1000; 
    179             $n=2; 
    180             $sep=$i; 
    181         } 
    182         if($l>$wmax) 
    183         { 
    184             //Automatic line break 
    185             if($sep==-1 or $i==$j) 
    186             { 
    187                 if($i==$j) 
    188                     $i+=$n; 
    189                 $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); 
    190             } 
    191             else 
    192             { 
    193                 $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill); 
    194                 $i=($s[$sep]==' ') ? $sep+1 : $sep; 
    195             } 
    196             $this->rise_h += $h; //‚‚³ŒvŽZ—p 
    197             $sep=-1; 
    198             $j=$i; 
    199             $l=0; 
    200             $nl++; 
    201             if($border and $nl==2) 
    202                 $b=$b2; 
    203         } 
    204         else 
    205         { 
    206             $i+=$n; 
    207             if($o>=128) 
    208                 $sep=$i; 
    209         } 
    210     } 
    211     //Last chunk 
    212     if($border and is_int(strpos($border,'B'))) 
    213         $b.='B'; 
    214     $this->Cell($w,$h,substr($s,$j,$i-$j),$b,$ln,$align,$fill); 
    215     $this->rise_h += $h; //‘‰Á•ª‚̍‚‚³‚ðŒvŽZ 
    216     //‰üs‚È‚µÝ’è‚©‚A‚‚³‚ª‹K’è‚̍‚‚³ˆÈã‚Å‚ ‚ê‚ÎYŽ²‚ðÝ’肵‚È‚¨‚·B 
    217     if($ln == 0 and $h < $this->rise_h) { 
    218       $this->y = $this->y - $this->rise_h + $h; 
    219     } 
    220  
    221     //$this->x=$this->lMargin; 
    222 } 
    223  
    224 function Write($h,$txt,$link='') 
    225 { 
    226     if($this->CurrentFont['type']=='Type0') 
    227         $this->SJISWrite($h,$txt,$link); 
    228     else 
    229         parent::Write($h,$txt,$link); 
    230 } 
    231  
    232 function SJISWrite($h,$txt,$link) 
    233 { 
    234     //SJIS version of Write() 
    235     $cw=&$this->CurrentFont['cw']; 
    236     $w=$this->w-$this->rMargin-$this->x; 
    237     $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
    238     $s=str_replace("\r",'',$txt); 
    239     $nb=strlen($s); 
    240     $sep=-1; 
    241     $i=0; 
    242     $j=0; 
    243     $l=0; 
    244     $nl=1; 
    245     while($i<$nb) 
    246     { 
    247         //Get next character 
    248         $c=$s{$i}; 
    249         $o=ord($c); 
    250         if($o==10) 
    251         { 
    252             //Explicit line break 
    253             $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); 
    254             $i++; 
    255             $sep=-1; 
    256             $j=$i; 
    257             $l=0; 
    258             if($nl==1) 
    259             { 
    260                 //Go to left margin 
    261                 $this->x=$this->lMargin; 
    262                 $w=$this->w-$this->rMargin-$this->x; 
    263                 $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
    264             } 
    265             $nl++; 
    266             continue; 
    267         } 
    268         if($o<128) 
    269         { 
    270             //ASCII 
    271             $l+=$cw[$c]; 
    272             $n=1; 
    273             if($o==32) 
    274                 $sep=$i; 
    275         } 
    276         elseif($o>=161 and $o<=223) 
    277         { 
    278             //Half-width katakana 
    279             $l+=500; 
    280             $n=1; 
    281             $sep=$i; 
    282         } 
    283         else 
    284         { 
    285             //Full-width character 
    286             $l+=1000; 
    287             $n=2; 
    288             $sep=$i; 
    289         } 
    290         if($l>$wmax) 
    291         { 
    292             //Automatic line break 
    293             if($sep==-1 or $i==$j) 
    294             { 
    295                 if($this->x>$this->lMargin) 
    296                 { 
    297                     //Move to next line 
    298                     $this->x=$this->lMargin; 
    299                     $this->y+=$h; 
    300                     $w=$this->w-$this->rMargin-$this->x; 
    301                     $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
    302                     $i+=$n; 
    303                     $nl++; 
    304                     continue; 
    305                 } 
    306                 if($i==$j) 
    307                     $i+=$n; 
    308                 $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); 
    309             } 
    310             else 
    311             { 
    312                 $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',0,$link); 
    313                 $i=($s[$sep]==' ') ? $sep+1 : $sep; 
    314             } 
    315             $sep=-1; 
    316             $j=$i; 
    317             $l=0; 
    318             if($nl==1) 
    319             { 
    320                 $this->x=$this->lMargin; 
    321                 $w=$this->w-$this->rMargin-$this->x; 
    322                 $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
    323             } 
    324             $nl++; 
    325         } 
    326         else 
    327         { 
    328             $i+=$n; 
    329             if($o>=128) 
    330                 $sep=$i; 
    331         } 
    332     } 
    333     //Last chunk 
    334     if($i!=$j) 
    335         $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j,$i-$j),0,0,'',0,$link); 
    336 } 
    337  
    338 function _putfonts() 
    339 { 
    340     $nf=$this->n; 
    341     foreach($this->diffs as $diff) 
    342     { 
    343         //Encodings 
    344         $this->_newobj(); 
    345         $this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.']>>'); 
    346         $this->_out('endobj'); 
    347     } 
    348     $mqr=get_magic_quotes_runtime(); 
    349     set_magic_quotes_runtime(0); 
    350     foreach($this->FontFiles as $file=>$info) 
    351     { 
    352         //Font file embedding 
    353         $this->_newobj(); 
    354         $this->FontFiles[$file]['n']=$this->n; 
    355         if(defined('FPDF_FONTPATH')) 
    356             $file=FPDF_FONTPATH.$file; 
    357         $size=filesize($file); 
    358         if(!$size) 
    359             $this->Error('Font file not found'); 
    360         $this->_out('<</Length '.$size); 
    361         if(substr($file,-2)=='.z') 
    362             $this->_out('/Filter /FlateDecode'); 
    363         $this->_out('/Length1 '.$info['length1']); 
    364         if(isset($info['length2'])) 
    365             $this->_out('/Length2 '.$info['length2'].' /Length3 0'); 
    366         $this->_out('>>'); 
    367         $f=fopen($file,'rb'); 
    368         $this->_putstream(fread($f,$size)); 
    369         fclose($f); 
    370         $this->_out('endobj'); 
    371     } 
    372     set_magic_quotes_runtime($mqr); 
    373     foreach($this->fonts as $k=>$font) 
    374     { 
    375         //Font objects 
    376         $this->_newobj(); 
    377         $this->fonts[$k]['n']=$this->n; 
    378         $this->_out('<</Type /Font'); 
    379         if($font['type']=='Type0') 
    380             $this->_putType0($font); 
    381         else 
    382         { 
    383             $name=$font['name']; 
    384             $this->_out('/BaseFont /'.$name); 
    385             if($font['type']=='core') 
    386             { 
    387                 //Standard font 
    388                 $this->_out('/Subtype /Type1'); 
    389                 if($name!='Symbol' and $name!='ZapfDingbats') 
    390                     $this->_out('/Encoding /WinAnsiEncoding'); 
    391             } 
    392             else 
    393             { 
    394                 //Additional font 
    395                 $this->_out('/Subtype /'.$font['type']); 
    396                 $this->_out('/FirstChar 32'); 
    397                 $this->_out('/LastChar 255'); 
    398                 $this->_out('/Widths '.($this->n+1).' 0 R'); 
    399                 $this->_out('/FontDescriptor '.($this->n+2).' 0 R'); 
    400                 if($font['enc']) 
    401                 { 
    402                     if(isset($font['diff'])) 
    403                         $this->_out('/Encoding '.($nf+$font['diff']).' 0 R'); 
    404                     else 
    405                         $this->_out('/Encoding /WinAnsiEncoding'); 
    406                 } 
    407             } 
    408             $this->_out('>>'); 
    409             $this->_out('endobj'); 
    410             if($font['type']!='core') 
    411             { 
    412                 //Widths 
    413                 $this->_newobj(); 
    414                 $cw=&$font['cw']; 
    415                 $s='['; 
    416                 for($i=32;$i<=255;$i++) 
    417                     $s.=$cw[chr($i)].' '; 
    418                 $this->_out($s.']'); 
    419                 $this->_out('endobj'); 
    420                 //Descriptor 
    421                 $this->_newobj(); 
    422                 $s='<</Type /FontDescriptor /FontName /'.$name; 
    423                 foreach($font['desc'] as $k=>$v) 
    424                     $s.=' /'.$k.' '.$v; 
    425                 $file=$font['file']; 
    426                 if($file) 
    427                     $s.=' /FontFile'.($font['type']=='Type1' ? '' : '2').' '.$this->FontFiles[$file]['n'].' 0 R'; 
    428                 $this->_out($s.'>>'); 
    429                 $this->_out('endobj'); 
    430             } 
    431         } 
    432     } 
     65    // SJIS version of GetStringWidth() 
     66    $l=0; 
     67    $cw=&$this->CurrentFont['cw']; 
     68    $nb=strlen($s); 
     69    $i=0; 
     70    while($i<$nb) 
     71    { 
     72        $o=ord($s[$i]); 
     73        if($o<128) 
     74        { 
     75            // ASCII 
     76            $l+=$cw[$s[$i]]; 
     77            $i++; 
     78        } 
     79        elseif($o>=161 && $o<=223) 
     80        { 
     81            // Half-width katakana 
     82            $l+=500; 
     83            $i++; 
     84        } 
     85        else 
     86        { 
     87            // Full-width character 
     88            $l+=1000; 
     89            $i+=2; 
     90        } 
     91    } 
     92    return $l*$this->FontSize/1000; 
     93} 
     94 
     95function MultiCell($w, $h, $txt, $border=0, $align='L', $fill=false) 
     96{ 
     97    if($this->CurrentFont['type']=='Type0') 
     98        $this->SJISMultiCell($w,$h,$txt,$border,$align,$fill); 
     99    else 
     100        parent::MultiCell($w,$h,$txt,$border,$align,$fill); 
     101} 
     102 
     103function SJISMultiCell($w, $h, $txt, $border=0, $align='L', $fill=false) 
     104{ 
     105    // Output text with automatic or explicit line breaks 
     106    $cw=&$this->CurrentFont['cw']; 
     107    if($w==0) 
     108        $w=$this->w-$this->rMargin-$this->x; 
     109    $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
     110    $s=str_replace("\r",'',$txt); 
     111    $nb=strlen($s); 
     112    if($nb>0 && $s[$nb-1]=="\n") 
     113        $nb--; 
     114    $b=0; 
     115    if($border) 
     116    { 
     117        if($border==1) 
     118        { 
     119            $border='LTRB'; 
     120            $b='LRT'; 
     121            $b2='LR'; 
     122        } 
     123        else 
     124        { 
     125            $b2=''; 
     126            if(is_int(strpos($border,'L'))) 
     127                $b2.='L'; 
     128            if(is_int(strpos($border,'R'))) 
     129                $b2.='R'; 
     130            $b=is_int(strpos($border,'T')) ? $b2.'T' : $b2; 
     131        } 
     132    } 
     133    $sep=-1; 
     134    $i=0; 
     135    $j=0; 
     136    $l=0; 
     137    $nl=1; 
     138    while($i<$nb) 
     139    { 
     140        // Get next character 
     141        $c=$s[$i]; 
     142        $o=ord($c); 
     143        if($o==10) 
     144        { 
     145            // Explicit line break 
     146            $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); 
     147            $i++; 
     148            $sep=-1; 
     149            $j=$i; 
     150            $l=0; 
     151            $nl++; 
     152            if($border && $nl==2) 
     153                $b=$b2; 
     154            continue; 
     155        } 
     156        if($o<128) 
     157        { 
     158            // ASCII 
     159            $l+=$cw[$c]; 
     160            $n=1; 
     161            if($o==32) 
     162                $sep=$i; 
     163        } 
     164        elseif($o>=161 && $o<=223) 
     165        { 
     166            // Half-width katakana 
     167            $l+=500; 
     168            $n=1; 
     169            $sep=$i; 
     170        } 
     171        else 
     172        { 
     173            // Full-width character 
     174            $l+=1000; 
     175            $n=2; 
     176            $sep=$i; 
     177        } 
     178        if($l>$wmax) 
     179        { 
     180            // Automatic line break 
     181            if($sep==-1 || $i==$j) 
     182            { 
     183                if($i==$j) 
     184                    $i+=$n; 
     185                $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); 
     186            } 
     187            else 
     188            { 
     189                $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill); 
     190                $i=($s[$sep]==' ') ? $sep+1 : $sep; 
     191            } 
     192            $sep=-1; 
     193            $j=$i; 
     194            $l=0; 
     195            $nl++; 
     196            if($border && $nl==2) 
     197                $b=$b2; 
     198        } 
     199        else 
     200        { 
     201            $i+=$n; 
     202            if($o>=128) 
     203                $sep=$i; 
     204        } 
     205    } 
     206    // Last chunk 
     207    if($border && is_int(strpos($border,'B'))) 
     208        $b.='B'; 
     209    $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); 
     210    $this->x=$this->lMargin; 
     211} 
     212 
     213function Write($h, $txt, $link='') 
     214{ 
     215    if($this->CurrentFont['type']=='Type0') 
     216        $this->SJISWrite($h,$txt,$link); 
     217    else 
     218        parent::Write($h,$txt,$link); 
     219} 
     220 
     221function SJISWrite($h, $txt, $link) 
     222{ 
     223    // SJIS version of Write() 
     224    $cw=&$this->CurrentFont['cw']; 
     225    $w=$this->w-$this->rMargin-$this->x; 
     226    $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
     227    $s=str_replace("\r",'',$txt); 
     228    $nb=strlen($s); 
     229    $sep=-1; 
     230    $i=0; 
     231    $j=0; 
     232    $l=0; 
     233    $nl=1; 
     234    while($i<$nb) 
     235    { 
     236        // Get next character 
     237        $c=$s[$i]; 
     238        $o=ord($c); 
     239        if($o==10) 
     240        { 
     241            // Explicit line break 
     242            $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); 
     243            $i++; 
     244            $sep=-1; 
     245            $j=$i; 
     246            $l=0; 
     247            if($nl==1) 
     248            { 
     249                // Go to left margin 
     250                $this->x=$this->lMargin; 
     251                $w=$this->w-$this->rMargin-$this->x; 
     252                $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
     253            } 
     254            $nl++; 
     255            continue; 
     256        } 
     257        if($o<128) 
     258        { 
     259            // ASCII 
     260            $l+=$cw[$c]; 
     261            $n=1; 
     262            if($o==32) 
     263                $sep=$i; 
     264        } 
     265        elseif($o>=161 && $o<=223) 
     266        { 
     267            // Half-width katakana 
     268            $l+=500; 
     269            $n=1; 
     270            $sep=$i; 
     271        } 
     272        else 
     273        { 
     274            // Full-width character 
     275            $l+=1000; 
     276            $n=2; 
     277            $sep=$i; 
     278        } 
     279        if($l>$wmax) 
     280        { 
     281            // Automatic line break 
     282            if($sep==-1 || $i==$j) 
     283            { 
     284                if($this->x>$this->lMargin) 
     285                { 
     286                    // Move to next line 
     287                    $this->x=$this->lMargin; 
     288                    $this->y+=$h; 
     289                    $w=$this->w-$this->rMargin-$this->x; 
     290                    $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
     291                    $i+=$n; 
     292                    $nl++; 
     293                    continue; 
     294                } 
     295                if($i==$j) 
     296                    $i+=$n; 
     297                $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link); 
     298            } 
     299            else 
     300            { 
     301                $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',0,$link); 
     302                $i=($s[$sep]==' ') ? $sep+1 : $sep; 
     303            } 
     304            $sep=-1; 
     305            $j=$i; 
     306            $l=0; 
     307            if($nl==1) 
     308            { 
     309                $this->x=$this->lMargin; 
     310                $w=$this->w-$this->rMargin-$this->x; 
     311                $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 
     312            } 
     313            $nl++; 
     314        } 
     315        else 
     316        { 
     317            $i+=$n; 
     318            if($o>=128) 
     319                $sep=$i; 
     320        } 
     321    } 
     322    // Last chunk 
     323    if($i!=$j) 
     324        $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j,$i-$j),0,0,'',0,$link); 
    433325} 
    434326 
    435327function _putType0($font) 
    436328{ 
    437     //Type0 
    438     $this->_out('/Subtype /Type0'); 
    439     $this->_out('/BaseFont /'.$font['name'].'-'.$font['CMap']); 
    440     $this->_out('/Encoding /'.$font['CMap']); 
    441     $this->_out('/DescendantFonts ['.($this->n+1).' 0 R]'); 
    442     $this->_out('>>'); 
    443     $this->_out('endobj'); 
    444     //CIDFont 
    445     $this->_newobj(); 
    446     $this->_out('<</Type /Font'); 
    447     $this->_out('/Subtype /CIDFontType0'); 
    448     $this->_out('/BaseFont /'.$font['name']); 
    449     $this->_out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('.$font['registry']['ordering'].') /Supplement '.$font['registry']['supplement'].'>>'); 
    450     $this->_out('/FontDescriptor '.($this->n+1).' 0 R'); 
    451     $W='/W [1 ['; 
    452     foreach($font['cw'] as $w) 
    453         $W.=$w.' '; 
    454     $this->_out($W.'] 231 325 500 631 [500] 326 389 500]'); 
    455     $this->_out('>>'); 
    456     $this->_out('endobj'); 
    457     //Font descriptor 
    458     $this->_newobj(); 
    459     $this->_out('<</Type /FontDescriptor'); 
    460     $this->_out('/FontName /'.$font['name']); 
    461     $this->_out('/Flags 6'); 
    462     $this->_out('/FontBBox [0 -200 1000 900]'); 
    463     $this->_out('/ItalicAngle 0'); 
    464     $this->_out('/Ascent 800'); 
    465     $this->_out('/Descent -200'); 
    466     $this->_out('/CapHeight 800'); 
    467     $this->_out('/StemV 60'); 
    468     $this->_out('>>'); 
    469     $this->_out('endobj'); 
    470 } 
    471  
    472 //Load data 
    473 function LoadData($file) 
    474 { 
    475     //Read file lines 
    476     $lines=file($file); 
    477     $data=array(); 
    478     foreach($lines as $line) 
    479         $data[]=explode(';',chop($line)); 
    480     return $data; 
    481 } 
    482  
    483 //Colored table 
    484 function FancyTable($header,$data,$w) 
    485 { 
    486     //Colors, line width and bold font 
    487     $this->SetFillColor(216,216,216); 
    488     $this->SetTextColor(0); 
    489     $this->SetDrawColor(0,0,0); 
    490     $this->SetLineWidth(.3); 
    491     $this->SetFont('','B'); 
    492     //Header 
    493     for($i=0;$i<count($header);$i++) 
    494         $this->Cell($w[$i],7,$header[$i],1,0,'C',1); 
    495     $this->Ln(); 
    496     //Color and font restoration 
    497     $this->SetFillColor(235,235,235); 
    498     $this->SetTextColor(0); 
    499     $this->SetFont(''); 
    500     //Data 
    501     $fill=0; 
    502     foreach($data as $row) 
    503     { 
    504     $h = 4; 
    505     $i = 0; 
    506     $this->Cell(5, $h, '', 0, 0, '', 0, ''); 
    507     foreach($row as $col) { 
    508         if($i > 3) { $i = 0; } 
    509         if ($i != 0) { 
    510             //$this->MultiCell($w[$i],$h,number_format($col),1,'R',$fill, 0); 
    511             $this->MultiCell($w[$i],$h,$col,1,'R',$fill, 0); 
    512         } else { 
    513             $this->MultiCell($w[$i],$h,$col,1,'L',$fill, 0); 
    514         } 
    515         $h = $this->rise_h; 
    516         $i++; 
    517     } 
    518     $this->Ln(); 
    519         $fill=!$fill; 
    520  
    521     } 
    522     $this->Cell(5, $h, '', 0, 0, '', 0, ''); 
    523     $this->Cell(array_sum($w),0,'','T'); 
    524 } 
    525  
    526 function Footer() 
    527 { 
    528     //‰º’[‚©‚ç1.5 cm ‚Ɉړ® 
    529     $this->SetY(-15); 
    530     //ƒtƒHƒ“ƒg‚ðÝ’èB Arial italic 8 
    531     $this->SetFont('Arial','I',8); 
    532     //Œ»Ý‚̃y[ƒW”ԍ†‚Æ‘ƒy[ƒW”‚ðo—Í 
    533     #$this->Cell(0,10,''.$this->PageNo().' / {nb}',0,0,'C'); 
    534 } 
    535  
     329    // Type0 
     330    $this->_newobj(); 
     331    $this->_out('<</Type /Font'); 
     332    $this->_out('/Subtype /Type0'); 
     333    $this->_out('/BaseFont /'.$font['name'].'-'.$font['CMap']); 
     334    $this->_out('/Encoding /'.$font['CMap']); 
     335    $this->_out('/DescendantFonts ['.($this->n+1).' 0 R]'); 
     336    $this->_out('>>'); 
     337    $this->_out('endobj'); 
     338    // CIDFont 
     339    $this->_newobj(); 
     340    $this->_out('<</Type /Font'); 
     341    $this->_out('/Subtype /CIDFontType0'); 
     342    $this->_out('/BaseFont /'.$font['name']); 
     343    $this->_out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('.$font['registry']['ordering'].') /Supplement '.$font['registry']['supplement'].'>>'); 
     344    $this->_out('/FontDescriptor '.($this->n+1).' 0 R'); 
     345    $W='/W [1 ['; 
     346    foreach($font['cw'] as $w) 
     347        $W.=$w.' '; 
     348    $this->_out($W.'] 231 325 500 631 [500] 326 389 500]'); 
     349    $this->_out('>>'); 
     350    $this->_out('endobj'); 
     351    // Font descriptor 
     352    $this->_newobj(); 
     353    $this->_out('<</Type /FontDescriptor'); 
     354    $this->_out('/FontName /'.$font['name']); 
     355    $this->_out('/Flags 6'); 
     356    $this->_out('/FontBBox [0 -200 1000 900]'); 
     357    $this->_out('/ItalicAngle 0'); 
     358    $this->_out('/Ascent 800'); 
     359    $this->_out('/Descent -200'); 
     360    $this->_out('/CapHeight 800'); 
     361    $this->_out('/StemV 60'); 
     362    $this->_out('>>'); 
     363    $this->_out('endobj'); 
     364} 
    536365} 
    537366?> 
Note: See TracChangeset for help on using the changeset viewer.