【php开源代码栏目提醒】:网学会员在php开源代码频道为大家收集整理了chinese.php提供大家参考,希望对大家有所帮助!
<?php
require_once ('fpdf153/fpdf.php');
$Big5_widths=array(' '=>250,'!'=>250,'"'=>408,'#'=>668,'$'=>490,'%'=>875,'&'=>698,'\''=>250,
'('=>240,')'=>240,'*'=>417,'+'=>667,','=>250,'-'=>313,'.'=>250,'/'=>520,'0'=>500,'1'=>500,
'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>250,';'=>250,
'<'=>667,'='=>667,'>'=>667,'?'=>396,'@'=>921,'A'=>677,'B'=>615,'C'=>719,'D'=>760,'E'=>625,
'F'=>552,'G'=>771,'H'=>802,'I'=>354,'J'=>354,'K'=>781,'L'=>604,'M'=>927,'N'=>750,'O'=>823,
'P'=>563,'Q'=>823,'R'=>729,'S'=>542,'T'=>698,'U'=>771,'V'=>729,'W'=>948,'X'=>771,'Y'=>677,
'Z'=>635,'['=>344,'\\'=>520,']'=>344,'^'=>469,'_'=>500,'`'=>250,'a'=>469,'b'=>521,'c'=>427,
'd'=>521,'e'=>438,'f'=>271,'g'=>469,'h'=>531,'i'=>250,'j'=>250,'k'=>458,'l'=>240,'m'=>802,
'n'=>531,'o'=>500,'p'=>521,'q'=>521,'r'=>365,'s'=>333,'t'=>292,'u'=>521,'v'=>458,'w'=>677,
'x'=>479,'y'=>458,'z'=>427,'{'=>480,'|'=>496,'}'=>480,'~'=>667);
$GB_widths=array(' '=>207,'!'=>270,'"'=>342,'#'=>467,'$'=>462,'%'=>797,'&'=>710,'\''=>239,
'('=>374,')'=>374,'*'=>423,'+'=>605,','=>238,'-'=>375,'.'=>238,'/'=>334,'0'=>462,'1'=>462,
'2'=>462,'3'=>462,'4'=>462,'5'=>462,'6'=>462,'7'=>462,'8'=>462,'9'=>462,':'=>238,';'=>238,
'<'=>605,'='=>605,'>'=>605,'?'=>344,'@'=>748,'A'=>684,'B'=>560,'C'=>695,'D'=>739,'E'=>563,
'F'=>511,'G'=>729,'H'=>793,'I'=>318,'J'=>312,'K'=>666,'L'=>526,'M'=>896,'N'=>758,'O'=>772,
'P'=>544,'Q'=>772,'R'=>628,'S'=>465,'T'=>607,'U'=>753,'V'=>711,'W'=>972,'X'=>647,'Y'=>620,
'Z'=>607,'['=>374,'\\'=>333,']'=>374,'^'=>606,'_'=>500,'`'=>239,'a'=>417,'b'=>503,'c'=>427,
'd'=>529,'e'=>415,'f'=>264,'g'=>444,'h'=>518,'i'=>241,'j'=>230,'k'=>495,'l'=>228,'m'=>793,
'n'=>527,'o'=>524,'p'=>524,'q'=>504,'r'=>338,'s'=>336,'t'=>277,'u'=>517,'v'=>450,'w'=>652,
'x'=>466,'y'=>452,'z'=>407,'{'=>370,'|'=>258,'}'=>370,'~'=>605);
class PDF_Chinese extends FPDF {
function AddCIDFont($family, $style, $name, $cw, $CMap, $registry) {
$fontkey = strtolower($family) . strtoupper($style);
if (isset ($this->fonts[$fontkey]))
$this->Error("Font already added: $family $style");
$i = count($this->fonts) + 1;
$name = str_replace(' ', '', $name);
$this->fonts[$fontkey] = array (
'i' => $i,
'type' => 'Type0',
'name' => $name,
'up' => -130,
'ut' => 40,
'cw' => $cw,
'CMap' => $CMap,
'registry' => $registry
);
}
function AddCIDFonts($family, $name, $cw, $CMap, $registry) {
$this->AddCIDFont($family, '', $name, $cw, $CMap, $registry);
$this->AddCIDFont($family, 'B', $name . ',Bold', $cw, $CMap, $registry);
$this->AddCIDFont($family, 'I', $name . ',Italic', $cw, $CMap, $registry);
$this->AddCIDFont($family, 'BI', $name . ',BoldItalic', $cw, $CMap, $registry);
}
function AddBig5Font($family = 'Big5', $name = 'MSungStd-Light-Acro') {
//Add Big5 font with proportional Latin
$cw = $GLOBALS['Big5_widths'];
$CMap = 'ETenms-B5-H';
$registry = array (
'ordering' => 'CNS1',
'supplement' => 0
);
$this->AddCIDFonts($family, $name, $cw, $CMap, $registry);
}
function AddBig5hwFont($family = 'Big5-hw', $name = 'MSungStd-Light-Acro') {
//Add Big5 font with half-witdh Latin
for ($i = 32; $i <= 126; $i++)
$cw[chr($i)] = 500;
$CMap = 'ETen-B5-H';
$registry = array (
'ordering' => 'CNS1',
'supplement' => 0
);
$this->AddCIDFonts($family, $name, $cw, $CMap, $registry);
}
function AddGBFont($family = 'GB', $name = 'STSongStd-Light-Acro') {
//Add GB font with proportional Latin
$cw = $GLOBALS['GB_widths'];
$CMap = 'GBKp-EUC-H';
$registry = array (
'ordering' => 'GB1',
'supplement' => 2
);
$this->AddCIDFonts($family, $name, $cw, $CMap, $registry);
}
function AddGBhwFont($family = 'GB-hw', $name = 'STSongStd-Light-Acro') {
//Add GB font with half-width Latin
for ($i = 32; $i <= 126; $i++)
$cw[chr($i)] = 500;
$CMap = 'GBK-EUC-H';
$registry = array (
'ordering' => 'GB1',
'supplement' => 2
);
$this->AddCIDFonts($family, $name, $cw, $CMap, $registry);
}
function GetStringWidth($s) {
if ($this->CurrentFont['type'] == 'Type0')
return $this->GetMBStringWidth($s);
else
return parent :: GetStringWidth($s);
}
function GetMBStringWidth($s) {
//Multi-byte version of GetStringWidth()
$l = 0;
$cw = & $this->CurrentFont['cw'];
$nb = strlen($s);
$i = 0;
while ($i < $nb) {
$c = $s[$i];
if (ord($c) < 128) {
$l += $cw[$c];
$i++;
} else {
$l += 1000;
$i += 2;
}
}
return $l * $this->F