Skip to content

Instantly share code, notes, and snippets.

@Trainmaster
Created January 8, 2014 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Trainmaster/8321345 to your computer and use it in GitHub Desktop.
Save Trainmaster/8321345 to your computer and use it in GitHub Desktop.
<?php
try {
$pdflib = new PDFlib;
$colorspace = new Colorspace($pdflib);
print_r ($colorspace->analyze('test.pdf'));
} catch (PDFlibException $e) {
print_r ($e);
}
class Colorspace
{
protected $data = array();
public function __construct(PDFlib $p)
{
$this->p = $p;
}
public function analyze($filename)
{
$this->data = array();
$doc = $this->p->open_pdi_document(realpath($filename), '');
$this->data['filename'] = $this->p->pcos_get_string($doc, "filename");
$pagecount = (int) $this->p->pcos_get_number($doc, "length:pages");
for ($page = 0; $page < $pagecount; $page++) {
$this->analyzeColorspaces($doc, $page);
}
return $this->data;
}
public function analyzeColorspaces($doc, $page)
{
$colorspacecount = (int) $this->p->pcos_get_number($doc, "length:pages[" . $page . "]/colorspaces");
$page++;
if ($colorspacecount > 0) {
$this->data['pages'][$page]['colorspace_count'] = $colorspacecount;
for ($i = 0; $i < $colorspacecount; $i++) {
$this->data['pages'][$page]['colorspaces'][] = $this->analyzeColorspace($doc, $page, "pages[" . ($page - 1) . "]/colorspaces[" . $i . "]");
}
}
}
private function analyzeColorspace($doc, $page, $colorspace_path)
{
$name = $this->p->pcos_get_string($doc, $colorspace_path . "/name");
$components = $this->p->pcos_get_number($doc, $colorspace_path . "/components");
$colorspace = array(
'name' => $name,
'components' => $components
);
if ($name === "ICCBased") {
$colorspace['icc_channels'] = $this->p->pcos_get_number($doc, $colorspace_path . "/csarray[1]/N");
$colorspace['icc_profile_bytes'] = $this->p->pcos_get_number($doc, $colorspace_path . "/csarray[1]/Length");
} elseif ($name === "Lab" || $name === "CalGray" || $name === "CalRGB") {
for ($j = 0; $j < 3; $j += 1) {
$colorspace['whitepoint'][] = $this->p->pcos_get_number($doc, $colorspace_path . "/csarray[1]/WhitePoint[" . $j . "]");
}
} elseif ($name === "Separation") {
$colorspace['colorantname'] = $this->p->pcos_get_string($doc, $colorspace_path . "/colorantname");
$alternateid = (int) $this->p->pcos_get_number($doc, $colorspace_path . "/alternateid");
$colorspace['alternateid'] = $this->analyzeColorspace($doc, $page, "colorspaces[" . $alternateid . "]");
} elseif ($name === "DeviceN") {
$colorantcount = (int) $this->p->pcos_get_number($doc, "length:" . $colorspace_path . "/colorantnames");
$colorspace['colorcount'] = $colorcount;
for ($j = 0; $j < $colorantcount; $j += 1) {
$colorspace['colorantnames'][] = $this->p->pcos_get_string($doc, $colorspace_path . "/colorantnames[" . $j . "]");
}
$alternateid = (int) $this->p->pcos_get_number($doc, $colorspace_path . "/alternateid");
$colorspace['alternateid'] = $this->analyzeColorspace($doc, $page, "colorspaces[" . $alternateid . "]");
} elseif ($name === "Indexed") {
$palettesize = (int) $this->p->pcos_get_number($doc, $colorspace_path . "/csarray[2]");
$colorspace['palettesize'] = $palettesize;
$baseid = (int) $this->p->pcos_get_number($doc, $colorspace_path . "/baseid");
$colorspace['baseid'] = $this->analyzeColorspace($doc, $page, "colorspaces[" . $baseid . "]");
}
return $colorspace;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment