b=is_int(strpos($border,''T'')) ? $b2.''T'' : $b2; } } $sep=-1; $i=0; $j=0; $l=0; $ns=0; $nl=1; while($i<$nb) { //Get next character $c=$s[$i]; //Check if ASCII or MB $ascii=(ord($c)<128); if($c=="\n" { //Explicit line break if($this->ws>0) { $this->ws=0; $this->_out(''0 Tw''); } $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); $i++; $sep=-1; $j=$i; $l=0; $ns=0; $nl++; if($border and $nl==2) $b=$b2; continue; } if(!$ascii) { $sep=$i; $ls=$l; } elseif($c=='' '') { $sep=$i; $ls=$l; $ns++; } $l+=$ascii ? $cw[$c] : 1000; if($l>$wmax) { //Automatic line break if($sep==-1 or $i==$j) { if($i==$j) $i+=$ascii ? 1 : 2; if($this->ws>0) { $this->ws=0; $this->_out(''0 Tw''); } $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); } else { if($align==''J'') { if($s[$sep]=='' '') $ns--; if($s[$i-1]=='' '') { $ns--; $ls-=$cw['' '']; } $this->ws=($ns>0) ? ($wmax-$ls)/1000*$this->FontSize/$ns : 0; $this->_out(sprintf(''%.3f Tw'',$this->ws*$this->k)); } $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill); $i=($s[$sep]=='' '') ? $sep+1 : $sep; } $sep=-1; $j=$i; $l=0; $ns=0; $nl++; if($border and $nl==2) $b=$b2; } else $i+=$ascii ? 1 : 2; } //Last chunk if($this->ws>0) { $this->ws=0; $this->_out(''0 Tw''); } if($border and is_int(strpos($border,''B''))) $b.=''B''; $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); $this->x=$this->lMargin; } function Write($h,$txt,$link='''') { if($this->CurrentFont[''type'']==''Type0'') $this->MBWrite($h,$txt,$link); else parent::Write($h,$txt,$link); } function MBWrite($h,$txt,$link) { //Multi-byte version of Write() $cw=&$this->CurrentFont[''cw'']; $w=$this->w-$this->rMargin-$this->x; $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; $s=str_replace("\r",'''',$txt); $nb=strlen($s); $sep=-1; $i=0; $j=0; $l=0; $nl=1; while($i<$nb) { //Get next character $c=$s[$i]; //Check if ASCII or MB $ascii=(ord($c)<128); if($c=="\n" { //Explicit line break $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'''',0,$link); $i++; $sep=-1; $j=$i; $l=0; if($nl==1) { $this->x=$this->lMargin; $w=$this->w-$this->rMargin-$this->x; $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; } $nl++; continue; } if(!$ascii or $c=='' '') $sep=$i; $l+=$ascii ? $cw[$c] : 1000; if($l>$wmax) { //Automatic line break if($sep==-1 or $i==$j) { if($this->x>$this->lMargin) { //Move to next line $this->x=$this->lMargin; $this->y+=$h; $w=$this->w-$this->rMargin-$this->x; $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; $i++; $nl++; continue; } if($i==$j) $i+=$ascii ? 1 : 2; $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'''',0,$link); } else { $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'''',0,$link); $i=($s[$sep]=='' '') ? $sep+1 : $sep; } $sep=-1; $j=$i; $l=0; if($nl==1) { $this->x=$this->lMargin; $w=$this->w-$this->rMargin-$this->x; $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; } $nl++; } else $i+=$ascii ? 1 : 2; } //Last chunk if($i!=$j) $this->Cell($l/1000*$this->FontSize,$h,substr($s,$j,$i-$j),0,0,'''',0,$link); } function _putfonts() { $nf=$this->n; foreach($this->diffs as $diff) { //Encodings $this->_newobj(); $this->_out(''<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [''.$diff.'']>>''); $this->_out(''endobj''); } $mqr=get_magic_quotes_runtime(); set_magic_quotes_runtime(0); foreach($this->FontFiles as $file=>$info) { //Font file embedding $this->_newobj(); $this->FontFiles[$file][''n'']=$this->n; if(defined(''FPDF_FONTPATH'')) $file=FPDF_FONTPATH.$file; $size=filesize($file); if(!$size) $this->Error(''Font file not found''); $this->_out(''<</Length ''.$size); if(substr($file,-2)==''.z'') $this->_out(''/Filter /FlateDecode''); $this->_out(''/Length1 ''.$info[''length1'']); if(isset($info[''length2''])) $this->_out(''/Length2 ''.$info[''length2''].'' /Length3 0''); $this->_out(''>>''); $f=fopen($file,''rb''); $this->_putstream(fread($f,$size)); fclose($f); $this->_out(''endobj''); } set_magic_quotes_runtime($mqr); foreach($this->fonts as $k=>$font) { //Font objects $this->_newobj(); $this->fonts[$k][''n'']=$this->n; $this->_out(''<</Type /Font''); if($font[''type'']==''Type0'') $this->_putType0($font); else { $name=$font[''name'']; $this->_out(''/BaseFont /''.$name); if($font[''type'']==''core'') { //Standard font $this->_out(''/Subtype /Type1''); if($name!=''Symbol'' and $name!=''ZapfDingbats'') $this->_out(''/Encoding /WinAnsiEncoding''); } else { //Additional font $this->_out(''/Subtype /''.$font[''type'']); $this->_out(''/FirstChar 32''); $this->_out(''/LastChar 255''); $this->_out(''/Widths ''.($this->n+1).'' 0 R''); $this->_out(''/FontDescriptor ''.($this->n+2).'' 0 R''); if($font[''enc'']) { if(isset($font[''diff''])) $this->_out(''/Encoding ''.($nf+$font[''diff'']).'' 0 R''); else $this->_out(''/Encoding /WinAnsiEncoding''); } } $this->_out(''>>''); $this->_out(''endobj''); if($font[''type'']!=''core'') { //Widths $this->_newobj(); $cw=&$font[''cw'']; $s=''[''; for($i=32;$i<=255;$i++) $s.=$cw[chr($i)].'' ''; $this->_out($s.'']''); $this->_out(''endobj''); //Descriptor $this->_newobj(); $s=''<</Type /FontDescriptor /FontName /''.$name; foreach($font[''desc''] as $k=>$v) $s.='' /''.$k.'' ''.$v; $file=$font[''file'']; if($file) $s.='' /FontFile''.($font[''type'']==''Type1'' ? '''' : ''2'').'' ''.$this->FontFiles[$file][''n''].'' 0 R''; $this->_out($s.''>>''); $this->_out(''endobj''); } } } } function _putType0($font) { //Type0 $this->_out(''/Subtype /Type0''); $this->_out(''/BaseFont /''.$font[''name''].''-''.$font[''CMap'']); $this->_out(''/Encoding /''.$font[''CMap'']); $this->_out(''/DescendantFonts [''.($this->n+1).'' 0 R]''); $this->_out(''>>''); $this->_out(''endobj''); //CIDFont $this->_newobj(); $this->_out(''<</Type /Font''); $this->_out(''/Subtype /CIDFontType0''); $this->_out(''/BaseFont /''.$font[''name'']); $this->_out(''/CIDSystemI 上一页 [1] [2] [3] 下一页
|