'PHP Get height and width in Pdf file proprieties
I have a PDF file. I would to get it height and width in mm.
So I do an exec(pdfinfo ... ); I have this result :
Creator: Adobe InDesign CS5 (7.0.3) Producer: Acrobat Distiller 9.4.2 (Macintosh) CreationDate: Mon Jan 30 15:48:43 2012 ModDate: Fri Feb 10 10:35:05 2012 Tagged: no Pages: 34 Encrypted: no Page size: 552.744 x 708.643 pts File size: 80724791 bytes Optimized: yes PDF version: 1.3
I have a script witch extract my info :
<?php
$output = shell_exec("pdfinfo ".$pdflivrelink);
$data = explode("\n", $output); //puts it into an array
for($c=0; $c < count($data); $c++) {
if(stristr($data[$c],"Pages") == true) {
$pagesnumber = trim(substr($data[$c],6));
}
if(stristr($data[$c],"Page size") == true) {
$pagesize_H = height_pdf(trim(substr($data[$c],9)));
}
if(stristr($data[$c],"Page size") == true) {
$pagesize_L = width_pdf(trim(substr($data[$c],9)));
}
}
function height_pdf($size){
$hauteur = round(substr($size,7,7)/2.83);
return $hauteur;
}
function width_pdf($size){
$largeur = round(substr($size,17,7)/2.83);
return $largeur;
} ?>
It's OK, because I have three numbers dot three numbers (552.744 x 708.643). But, I don't know why, some PDF files have this info :
Creator: pdftk 1.41 - www.pdftk.com Producer: iText 2.1.5 (by lowagie.com) CreationDate: Mon Feb 27 13:18:23 2012 ModDate: Mon Feb 27 16:26:12 2012 Tagged: no Pages: 36 Encrypted: no Page size: 425.2 x 538.582 pts File size: 5097597 bytes Optimized: yes PDF version: 1.6
425.2 x 538.582 : So my script doesn't work!
Can you help me? thank a lot!
I test this :
$output = shell_exec("pdfinfo ".$pdflivrelink);
$data = explode("\n", $output); //puts it into an array
for($c=0; $c < count($data); $c++) {
if(stristr($data[$c],"Pages") == true) {
$pagesnumber = trim(substr($data[$c],6));
}
if(stristr($data[$c],"Page size") == true) {
echo $data[$c];
preg_match('/Page size: ([0-9]*\.?[0-9]?) x ([0-9]*\.?[0-9]?)/', $data[$c], $matchess);
$width = round($matchess[1]/2.83);
$height = round($matchess[2]/2.83);
}
}
echo "width = $width<br>height = $height";
it result :
Page size: 425.2 x 538.582 ptswidth = 0 height = 0
Solution 1:[1]
Do it with a preg_match():
// Debugging:
$output = shell_exec("pdfinfo ".$pdflivrelink);
var_dump($output);
// Dimension:
preg_match('~ Page size: ([0-9\.]+) x ([0-9\.]+) pts ~', $output, $matches);
var_dump($matches);
// No of pages:
preg_match('~ Pages ([0-9]+) ~', $output, $matches);
var_dump($matches);
Solution 2:[2]
Why not use plain PHP to get the pdf dimensions?
<?php
function get_pdf_dimensions($path, $box="MediaBox") {
//$box can be set to BleedBox, CropBox or MediaBox
$stream = new SplFileObject($path);
$result = false;
while (!$stream->eof()) {
if (preg_match("/".$box."\[[0-9]{1,}.[0-9]{1,} [0-9]{1,}.[0-9]{1,} ([0-9]{1,}.[0-9]{1,}) ([0-9]{1,}.[0-9]{1,})\]/", $stream->fgets(), $matches)) {
$result["width"] = $matches[1];
$result["height"] = $matches[2];
break;
}
}
$stream = null;
return $result;
}
var_dump(get_pdf_dimensions("file.pdf"));
Solution 3:[3]
Using Fpdi, noting the use of getTemplateSize it's...
const INCHESTOMM = 25.4;
public static function getPDFdimensions($strFilename): array
{
$pdf1 = new FPDI('P', 'in');
$pdf1->setSourceFile($strFilename);
$tplIdx1 = $pdf1->importPage(1);
$size = $pdf1->getTemplateSize($tplIdx1);
$w = $size["width"];
$h = $size["height"];
return [round($w * self::INCHESTOMM), round($h * self::INCHESTOMM)];
}
Solution 4:[4]
Imagick library can be used to get the dimensions of file
$image = new Imagick($file);
$geo=$image->getImageGeometry();
$width=$geo['width'];
$height=$geo['height'];
If imagick library is not installed, Ubuntu users can use the following command to install it:
sudo apt-get install php-imagick
php -m | grep imagick
sudo service apache2 restart
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | fltman |
| Solution 3 | user2489234 |
| Solution 4 | Vaishnavi Aswale |
