PDF_setcolor()
(PHP 4 >= 4.0.5, PECL pdflib >= 1.0.0)
Set fill and stroke color
说明
PDF_setcolor (resource $p,string $fstype,string $colorspace,float $c1,float $c2,float $c3,float $c4) : bool
Sets the current color space and color. 成功时返回 TRUE
, 或者在失败时返回 FALSE
。
If you encounter errors of the form function 'PDF_setcolor' must not be called in 'path' scope this generally means that you've called the PDFLib functions in the wrong order. For example, the following would be *incorrect* because PDF_rect marks the beginning of the "path scope", and set_color must not be called in path scope: <?php // THIS CODE WILL PRODUCE AN ERROR PDF_rect($pdf,0,0,$width,$height); PDF_setcolor($pdf,$red,$green,$blue); PDF_fill($pdf); <p>The correct order of function calls is as follows: <p>// Correct order of function calls PDF_setcolor($pdf,$red,$green,$blue); PDF_rect($pdf,0,0,$width,$height); PDF_fill($pdf); ?>
Here is a quick snippet to convert CMYK to RGB. It has better precision than a lot of other solutions that also don't factor in colour profiles. <?php $cmyk = '10,20,100,31'; list($c, $m, $y, $k) = explode(',', $cmyk); # Gets the rgb as floats (cast via (int) if you want int ) $r = (1 - min(($c / 100) * (1 - $k /= 100) + 1 * $k, 1)) * 255; $g = (1 - min(($m / 100) * (1 - $k) + 1 * $k, 1)) * 255; $b = (1 - min(($y / 100) * (1 - $k) + 1 * $k, 1)) * 255; echo "$r $g $b\r\n"; # Converts the rgb to hex with leading 0's $r = str_pad(dechex($r), 2, '0', STR_PAD_LEFT); $g = str_pad(dechex($g), 2, '0', STR_PAD_LEFT); $b = str_pad(dechex($b), 2, '0', STR_PAD_LEFT); echo "hex: $r$g$b\r\n"; /* an example to see the colour via html echo '<div style="width: 80px; height: 80px; background-color:#', "$r$g$b", '"></div>'; */ ?>
Damn, this took me some real long time! Maybe it's helpfull for those who even have no idea of color-Schemes like me ;) If u want to generate PDF's for Print Offices u need to set all the colors in CMYK. Here is a Function that will convert RGB to CMYK <? function hex2rgb($hex) { $color = str_replace('#','',$hex); $rgb = array('r' => hexdec(substr($color,0,2)), 'g' => hexdec(substr($color,2,2)), 'b' => hexdec(substr($color,4,2))); return $rgb; } function rgb2cmyk($var1,$g=0,$b=0) { if(is_array($var1)) { $r = $var1['r']; $g = $var1['g']; $b = $var1['b']; } else $r=$var1; $cyan = 255 - $r; $magenta = 255 - $g; $yellow = 255 - $b; $black = min($cyan, $magenta, $yellow); $cyan = @(($cyan - $black) / (255 - $black)) * 255; $magenta = @(($magenta - $black) / (255 - $black)) * 255; $yellow = @(($yellow - $black) / (255 - $black)) * 255; return array('c' => $cyan / 255, 'm' => $magenta / 255, 'y' => $yellow / 255, 'k' => $black / 255); } $color=rgb2cmyk(hex2rgb('#FF0000')); pdf_setcolor($pdf, "both", "cmyk", $color['c'], $color['m'], $color['y'], $color['k']); ?> U can call it with parameters (r,g,b) or just an array(r,g,b) that contains these values. Hope it works correct. All testing was fine.
This seems a little less complicated: this is the color you want to use : 'FF11AA' <?php pdf_setcolor ($pdf, 'both', 0xFF / 255, 0x11 / 255, 0xAA / 255); ?>
Here's a better implementation for setting HTML hexadecimal colors: function pdf_setcolor_hex($hexcolor, $type = '') { global $pdf; ## match this to your pdf resource handle $color['r'] = hexdec(substr($hexcolor, 0, 2))/255; $color['g'] = hexdec(substr($hexcolor, 2, 2))/255; $color['b'] = hexdec(substr($hexcolor, 4, 2))/255; if ($type != 'fill' && $type != 'stroke') $type = 'both'; pdf_setcolor($pdf, $type, 'rgb', $color['r'], $color['g'], $color['b']); } Sample usage: pdf_setcolor_hex('FFFFFF', 'fill'); -Derek
Here's a function for converting HTML hexadecimal colors to RGB decimals suitable for this function: $color_hex = "FF0000"; ## whatever hex color you want $color = convert_hexcolor_rgbdec($color_hex); pdf_setcolor($pdf, 'fill', 'rgb', $color['r'], $color['g'], $color['b']); function convert_hexcolor_rgbdec($color_hex) { $color['r'] = hexdec(substr($color_hex, 0, 2))/255; $color['g'] = hexdec(substr($color_hex, 2, 2))/255; $color['b'] = hexdec(substr($color_hex, 4, 2))/255; return $color; } -Derek
Bonjour, Cette fonction est utilisable pour dfinir une couleur de police. Hello, I search for the way of setting colors for the font in pdf and I find this. Hope it could help. <?php /** * set font color * maurice.anglebert@free.fr */ // path for the pdf file and string to show $pdfFilePath = $_SERVER[DOCUMENT_ROOT]."/the_dir_of_the_file/test.pdf"; $string = "The new color of my font"; $pdf = pdf_new(); pdf_open_file($pdf, $pdfFilePath); pdf_set_info($pdf, "Title", "Test pdf"); // A4 page pdf_begin_page($pdf, 595, 842); // set up of the font $font = pdf_findfont($pdf, "Courier", "host", FALSE); if (isset($font)) { pdf_setfont($pdf, $font, 10) or die ("unknown font"); } pdf_setColor($pdf, "fill", "rgb",0, 0, 1); // this for blue color // pdf_setColor($pdf, "fill", "rgb",1, 0, 0) for red pdf_set_value($pdf, "textrendering", 0); // show at the top of the page center pdf_show_boxed($pdf, $string, 0, 832, 595, 10, "center", ""); // resets graphic state pdf_initGraphics($pdf); // end of page and pdf_object pdf_end_page($pdf); pdf_close($pdf); pdf_delete($pdf); // use header to get the file header("Content-type: application/pdf"); header("Content-length: ".filesize($pdfFilePath)); header("Content-disposition: inline; filename=test.pdf"); readfile($pdfFilePath); ?>
If you want to change the font color you need to set type to "fill", not "stroke" ("both" also works, of course).