⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.pm

📁 PDF-API2-0.2.3.7_dev.tar.gz
💻 PM
📖 第 1 页 / 共 5 页
字号:
			$v=hex(substr($name,5,2))/0xff;
		} elsif(length($name)<11) {	
			$h=360*hex(substr($name,1,3))/0xfff;
			$s=hex(substr($name,4,3))/0xfff;
			$v=hex(substr($name,7,3))/0xfff;
		} else {		
			$h=360*hex(substr($name,1,4))/0xffff;
			$s=hex(substr($name,5,4))/0xffff;
			$v=hex(substr($name,9,4))/0xffff;
		}
		($r,$g,$b)=HSVtoRGB($h,$s,$v);
		$col=[$r,$g,$b];
	} else {
		$col = $colors{$name} || [0,0,0];
	}
	return(@{$col});
}

sub pdfkey {
	my $ddata=join('',@_);
	my $mdkey='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789gT';
	my $xdata="0" x 8;
	my $off=0;
	foreach my $set (0..(length($ddata)<<1)) {
		$off+=vec($ddata,$set,4);
		$off+=vec($xdata,($set & 7),8);
		vec($xdata,($set & 7),8)=vec($mdkey,($off & 0x3f),8);
	}
	return($xdata);
}

sub digestx {
	my $len=shift @_;
	my $mask=$len-1;
	my $ddata=join('',@_);
	my $mdkey='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789gT';
	my $xdata="0" x $len;
	my $off=0;
	my $set;
	foreach $set (0..(length($ddata)<<1)) {
		$off+=vec($ddata,$set,4);
		$off+=vec($xdata,($set & $mask),8);
		vec($xdata,($set & ($mask<<1 |1)),4)=vec($mdkey,($off & 0x7f),4);
	}
	
#	foreach $set (0..$mask) {
#		vec($xdata,$set,8)=(vec($xdata,$set,8) & 0x7f) | 0x40;
#	}

#	$off=0;
#	foreach $set (0..$mask) {
#		$off+=vec($xdata,$set,8);
#		vec($xdata,$set,8)=vec($mdkey,($off & 0x3f),8);
#	}

	return($xdata);
}

sub digest {
	return(digestx(32,@_));
}

sub digest16 {
	return(digestx(16,@_));
}

sub digest32 {
	return(digestx(32,@_));
}

sub xlog10 {
	my $n = shift;
	if($n) {
    		return log(abs($n))/log(10);
	} else { return 0; }
}

sub float {
	my $f=shift @_;
	my $mxd=shift @_||4;
	$f=0 if(abs($f)<0.0000000000000001);
	my $ad=floor(xlog10($f)-$mxd);
	if(abs($f-int($f)) < (10**(-$mxd))) {
		# just in case we have an integer
		return sprintf('%i',$f);
	} elsif($ad>0){
		return sprintf('%f',$f);
	} else {
		return sprintf('%.'.abs($ad).'f',$f);
	}
}
sub floats { return map { float($_); } @_; }
sub floats5 { return map { float($_,5); } @_; }


sub intg {
	my $f=shift @_;
	return sprintf('%i',$f);
}
sub intgs { return map { intg($_); } @_; }

my @cp1252 = (1 .. 127,
       0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
       0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008D, 0x017D, 0x008F,
       0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
       0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x009D, 0x017E, 0x0178,
       0xA0 .. 0xFF);

%winfonts=(
	'arialblack' => {
		'-widths' => [ 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 333, 333, 500, 660, 666, 1000, 889, 277, 389, 389, 556, 660, 333, 333, 333, 277, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 333, 333, 660, 660, 660, 610, 740, 777, 777, 777, 777, 722, 666, 833, 833, 389, 666, 833, 666, 943, 833, 833, 722, 833, 777, 722, 722, 833, 777, 1000, 777, 777, 722, 389, 277, 389, 660, 500, 333, 666, 666, 666, 666, 666, 389, 666, 666, 333, 333, 666, 333, 1000, 666, 666, 666, 666, 443, 610, 443, 666, 610, 943, 666, 610, 556, 389, 277, 389, 660, 750, 666, 750, 277, 666, 500, 1000, 666, 666, 333, 1000, 722, 333, 1000, 750, 722, 750, 750, 277, 277, 500, 500, 500, 500, 1000, 333, 950, 610, 333, 1000, 750, 556, 777, 333, 333, 666, 666, 660, 666, 277, 666, 333, 799, 399, 666, 660, 333, 799, 500, 399, 660, 399, 399, 333, 666, 850, 333, 333, 399, 399, 666, 1000, 1000, 1000, 610, 777, 777, 777, 777, 777, 777, 1000, 777, 722, 722, 722, 722, 389, 389, 389, 389, 777, 833, 833, 833, 833, 833, 833, 660, 833, 833, 833, 833, 833, 777, 722, 666, 666, 666, 666, 666, 666, 666, 1000, 666, 666, 666, 666, 666, 333, 333, 333, 333, 666, 666, 666, 666, 666, 666, 666, 660, 666, 666, 666, 666, 666, 610, 666, 610 ],
		'-descent' => -309,
		'-firstchar' => 1,
		'-fontname' => 'ArialBlack',
		'-capheight' => 715,
		'-italicangle' => '0',
		'-flags' => 40,
		'-ascent' => 1100,
		'-xheight' => 518,
		'-fontbbox' => [ -193, -306, 1687, 1083 ],
		'-type' => 'TrueType',
		'-lastchar' => 255
	},
	'arialbolditalic' => {
		'-widths' => [ 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 277, 333, 474, 556, 556, 889, 722, 237, 333, 333, 389, 583, 277, 333, 277, 277, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 583, 583, 583, 610, 975, 722, 722, 722, 722, 666, 610, 777, 722, 277, 556, 722, 610, 833, 722, 777, 666, 777, 722, 666, 610, 722, 666, 943, 666, 666, 610, 333, 277, 333, 583, 556, 333, 556, 610, 556, 610, 556, 333, 610, 610, 277, 277, 556, 277, 889, 610, 610, 610, 610, 389, 556, 333, 610, 556, 777, 556, 556, 500, 389, 279, 389, 583, 750, 556, 750, 277, 556, 500, 1000, 556, 556, 333, 1000, 666, 333, 1000, 750, 610, 750, 750, 277, 277, 500, 500, 350, 556, 1000, 333, 1000, 556, 333, 943, 750, 500, 666, 277, 333, 556, 556, 556, 556, 279, 556, 333, 736, 370, 556, 583, 333, 736, 552, 399, 548, 333, 333, 333, 576, 556, 277, 333, 333, 365, 556, 833, 833, 833, 610, 722, 722, 722, 722, 722, 722, 1000, 722, 666, 666, 666, 666, 277, 277, 277, 277, 722, 722, 777, 777, 777, 777, 777, 583, 777, 722, 722, 722, 722, 666, 666, 610, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 277, 277, 277, 277, 610, 610, 610, 610, 610, 610, 610, 548, 610, 610, 610, 610, 610, 556, 610, 556 ],
		'-descent' => -211,
		'-firstchar' => 1,
		'-fontname' => 'ArialBoldItalic',
		'-capheight' => 715,
		'-italicangle' => -12,
		'-flags' => 104,
		'-ascent' => 905,
		'-xheight' => 518,
		'-type' => 'TrueType',
		'-fontbbox' => [ -559, -376, 1156, 1030 ],
		'-lastchar' => 255
	},
	'arialbold' => {
		'-widths' => [ 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 277, 333, 474, 556, 556, 889, 722, 237, 333, 333, 389, 583, 277, 333, 277, 277, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 583, 583, 583, 610, 975, 722, 722, 722, 722, 666, 610, 777, 722, 277, 556, 722, 610, 833, 722, 777, 666, 777, 722, 666, 610, 722, 666, 943, 666, 666, 610, 333, 277, 333, 583, 556, 333, 556, 610, 556, 610, 556, 333, 610, 610, 277, 277, 556, 277, 889, 610, 610, 610, 610, 389, 556, 333, 610, 556, 777, 556, 556, 500, 389, 279, 389, 583, 750, 556, 750, 277, 556, 500, 1000, 556, 556, 333, 1000, 666, 333, 1000, 750, 610, 750, 750, 277, 277, 500, 500, 350, 556, 1000, 333, 1000, 556, 333, 943, 750, 500, 666, 277, 333, 556, 556, 556, 556, 279, 556, 333, 736, 370, 556, 583, 333, 736, 552, 399, 548, 333, 333, 333, 576, 556, 277, 333, 333, 365, 556, 833, 833, 833, 610, 722, 722, 722, 722, 722, 722, 1000, 722, 666, 666, 666, 666, 277, 277, 277, 277, 722, 722, 777, 777, 777, 777, 777, 583, 777, 722, 722, 722, 722, 666, 666, 610, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 277, 277, 277, 277, 610, 610, 610, 610, 610, 610, 610, 548, 610, 610, 610, 610, 610, 556, 610, 556 ],
		'-descent' => -211,
		'-firstchar' => 1,
		'-fontname' => 'ArialBold',
		'-capheight' => 715,
		'-italicangle' => '0',
		'-flags' => 40,
		'-ascent' => 905,
		'-xheight' => 518,
		'-type' => 'TrueType',
		'-fontbbox' => [ -627, -376, 2033, 1047 ],
		'-lastchar' => 255
	},
	'arialitalic' => {
		'-widths' => [ 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 277, 277, 354, 556, 556, 889, 666, 190, 333, 333, 389, 583, 277, 333, 277, 277, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 277, 277, 583, 583, 583, 556, 1015, 666, 666, 722, 722, 666, 610, 777, 722, 277, 500, 666, 556, 833, 722, 777, 666, 777, 722, 666, 610, 722, 666, 943, 666, 666, 610, 277, 277, 277, 469, 556, 333, 556, 556, 500, 556, 556, 277, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 277, 556, 500, 722, 500, 500, 500, 333, 259, 333, 583, 750, 556, 750, 222, 556, 333, 1000, 556, 556, 333, 1000, 666, 333, 1000, 750, 610, 750, 750, 222, 222, 333, 333, 350, 556, 1000, 333, 1000, 500, 333, 943, 750, 500, 666, 277, 333, 556, 556, 556, 556, 259, 556, 333, 736, 370, 556, 583, 333, 736, 552, 399, 548, 333, 333, 333, 576, 537, 277, 333, 333, 365, 556, 833, 833, 833, 610, 666, 666, 666, 666, 666, 666, 1000, 722, 666, 666, 666, 666, 277, 277, 277, 277, 722, 722, 777, 777, 777, 777, 777, 583, 777, 722, 722, 722, 722, 666, 666, 610, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 277, 277, 277, 277, 556, 556, 556, 556, 556, 556, 556, 548, 610, 556, 556, 556, 556, 500, 556, 500 ],
		'-descent' => -211,
		'-firstchar' => 1,
		'-fontname' => 'ArialItalic',
		'-capheight' => 715,
		'-italicangle' => -12,
		'-flags' => 104,
		'-ascent' => 905,
		'-xheight' => 518,
		'-type' => 'TrueType',
		'-fontbbox' => [ -517, -324, 1081, 1024 ],
		'-lastchar' => 255
	},
	'arial' => {
		'-widths' => [ 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 277, 277, 354, 556, 556, 889, 666, 190, 333, 333, 389, 583, 277, 333, 277, 277, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 277, 277, 583, 583, 583, 556, 1015, 666, 666, 722, 722, 666, 610, 777, 722, 277, 500, 666, 556, 833, 722, 777, 666, 777, 722, 666, 610, 722, 666, 943, 666, 666, 610, 277, 277, 277, 469, 556, 333, 556, 556, 500, 556, 556, 277, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 277, 556, 500, 722, 500, 500, 500, 333, 259, 333, 583, 750, 556, 750, 222, 556, 333, 1000, 556, 556, 333, 1000, 666, 333, 1000, 750, 610, 750, 750, 222, 222, 333, 333, 350, 556, 1000, 333, 1000, 500, 333, 943, 750, 500, 666, 277, 333, 556, 556, 556, 556, 259, 556, 333, 736, 370, 556, 583, 333, 736, 552, 399, 548, 333, 333, 333, 576, 537, 277, 333, 333, 365, 556, 833, 833, 833, 610, 666, 666, 666, 666, 666, 666, 1000, 722, 666, 666, 666, 666, 277, 277, 277, 277, 722, 722, 777, 777, 777, 777, 777, 583, 777, 722, 722, 722, 722, 666, 666, 610, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 277, 277, 277, 277, 556, 556, 556, 556, 556, 556, 556, 548, 610, 556, 556, 556, 556, 500, 556, 500 ],
		'-descent' => -211,
		'-firstchar' => 1,
		'-fontname' => 'Arial',
		'-capheight' => 715,
		'-italicangle' => '0',
		'-flags' => 40,
		'-ascent' => 905,
		'-xheight' => 518,
		'-type' => 'TrueType',
		'-fontbbox' => [ -664, -324, 2028, 1037 ],
		'-lastchar' => 255
	},
	'comicsansmsbold' => {
		'-widths' => [ 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 433, 237, 437, 842, 693, 820, 654, 433, 366, 366, 529, 610, 433, 610, 433, 511, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 433, 433, 610, 610, 610, 565, 931, 731, 630, 618, 721, 624, 606, 679, 768, 546, 665, 610, 550, 882, 812, 798, 532, 876, 640, 693, 695, 736, 674, 1039, 723, 635, 693, 376, 549, 376, 610, 626, 556, 555, 593, 513, 587, 559, 508, 530, 577, 280, 403, 540, 273, 776, 523, 525, 534, 520, 480, 486, 471, 520, 486, 684, 590, 552, 538, 366, 421, 366, 610, 500, 618, 500, 433, 588, 429, 675, 610, 596, 556, 1241, 693, 610, 1193, 500, 693, 500, 500, 226, 226, 433, 433, 610, 441, 882, 556, 882, 507, 610, 896, 500, 538, 635, 476, 237, 610, 793, 610, 610, 421, 634, 556, 795, 610, 638, 610, 610, 795, 626, 610, 610, 610, 610, 556, 610, 760, 610, 556, 610, 610, 638, 610, 610, 610, 565, 731, 731, 731, 731, 731, 731, 1086, 618, 624, 624, 624, 624, 546, 546, 546, 546, 721, 812, 798, 798, 798, 798, 798, 610, 798, 736, 736, 736, 736, 635, 520, 533, 555, 555, 555, 555, 555, 555, 911, 513, 559, 559, 559, 559, 280, 280, 280, 280, 508, 523, 525, 525, 525, 525, 525, 610, 533, 520, 520, 520, 520, 552, 534, 552 ],
		'-descent' => -291,
		'-firstchar' => 1,
		'-fontname' => 'ComicSansMSBold',
		'-capheight' => 758,
		'-italicangle' => '0',
		'-flags' => 34,
		'-ascent' => 1102,
		'-xheight' => 539,
		'-type' => 'TrueType',
		'-fontbbox' => [ -111, -291, 1229, 1102 ],
		'-lastchar' => 255
	},
	'comicsansms' => {
		'-widths' => [ 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 298, 237, 424, 842, 693, 820, 654, 388, 366, 366, 529, 480, 276, 416, 249, 511, 610, 450, 610, 610, 610, 610, 610, 610, 610, 610, 298, 298, 381, 510, 381, 523, 931, 731, 630, 602, 721, 624, 606, 679, 768, 546, 665, 610, 550, 882, 796, 798, 520, 876, 628, 693, 679, 736, 649, 1039, 723, 635, 693, 376, 549, 376, 581, 626, 556, 511, 593, 513, 587, 547, 508, 530, 577, 280, 403, 540, 273, 776, 523, 525, 534, 520, 480, 486, 471, 520, 486, 684, 590, 520, 538, 366, 421, 366, 597, 500, 610, 500, 298, 426, 411, 675, 596, 596, 556, 1241, 693, 381, 1193, 500, 693, 500, 500, 180, 180, 393, 393, 387, 441, 882, 556, 882, 403, 381, 896, 500, 538, 635, 298, 237, 623, 793, 611, 635, 404, 634, 556, 795, 526, 577, 480, 416, 795, 626, 409, 480, 650, 650, 556, 520, 693, 249, 556, 650, 449, 577, 650, 650, 650, 523, 731, 731, 731, 731, 731, 731, 1086, 602, 624, 624, 624, 624, 546, 546, 546, 546, 721, 796, 798, 798, 798, 798, 798, 480, 798, 736, 736, 736, 736, 635, 520, 443, 511, 511, 511, 511, 511, 511, 911, 513, 547, 547, 547, 547, 280, 280, 280, 280, 508, 523, 525, 525, 525, 525, 525, 480, 525, 520, 520, 520, 520, 520, 534, 431 ],
		'-descent' => -291,
		'-firstchar' => 1,
		'-fontname' => 'ComicSansMS',
		'-capheight' => 758,
		'-italicangle' => '0',
		'-flags' => 34,
		'-ascent' => 1102,
		'-xheight' => 539,
		'-type' => 'TrueType',
		'-fontbbox' => [ -92, -312, 1186, 1102 ],
		'-lastchar' => 255
	},
	'couriernewbolditalic' => {
		'-widths' => [ 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -