SunshinePHP Developer Conference 2015

PDF_setcolor

(PHP 4 >= 4.0.5, PECL pdflib >= 1.0.0)

PDF_setcolorتعیین رنگ پر کردن و رنگ‌آمیزی

Description

bool PDF_setcolor ( resource $p , string $fstype , string $colorspace , float $c1 , float $c2 , float $c3 , float $c4 )

تعیین فضای رنگ فعلی و رنگ فعلی. Returns TRUE on success or FALSE on failure.

add a note add a note

User Contributed Notes 8 notes

up
0
_meto ALT+q web.de
10 years ago
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.
up
0
enyo vel cora
10 years ago
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);
?>
up
0
php at perfectweb dotcom
11 years ago
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
up
0
php at perfectweb dotcom
11 years ago
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
up
0
maurice dot anglebert at free dot fr
11 years ago
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);   
?>
up
0
psychosos at gmx dot at
11 years ago
If you want to change the font color you need to set type to  "fill", not "stroke" ("both" also works, of course).
up
0
steven dot gould at NO_SPAM dot stevengould dot org
12 years ago
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);

?>
up
-1
cancausecancer at yahoo dot com
3 years ago
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>';
*/
?>
To Top