PHP Получить высоту и ширину в Pdf-файлах

У меня есть файл PDF. Я хотел бы получить его высоту и ширину в мм.

Поэтому я выполняю exec (pdfinfo …); У меня есть такой результат:

Создатель: Adobe InDesign CS5 (7.0.3) Производитель: Acrobat Distiller 9.4.2 (Macintosh) CreationDate: Пн Янв 30 15:48:43 2012 ModDate: Пт 10 Фев 10:35:05 2012 С меткой: нет Страницы: 34 Зашифрованные: нет Размер страницы: 552.744 x 708.643 pts Размер файла: 80724791 байт Оптимизировано: да PDF-версия: 1.3

У меня есть сценарий, который выдает мою информацию:

<?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; } ?> 

Все в порядке, потому что у меня три цифры с тремя цифрами (552.744 x 708.643). Но, я не знаю, почему, некоторые файлы PDF имеют эту информацию:

Создатель: pdftk 1.41 – www.pdftk.com Производитель: iText 2.1.5 (by lowagie.com) CreationDate: Пн Фев 27 13:18:23 2012 ModDate: Пн Фев 27 16:26:12 2012 С меткой: нет Страницы: 36 Шифрован: нет Размер страницы: 425.2 x 538.582 pts Размер файла: 5097597 байт Оптимизировано: есть Версия PDF: 1.6

425.2 x 538.582: Так что мой скрипт не работает!

Вы можете мне помочь? Спасибо большое!


Я проверяю это:

  $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"; 

это результат:

Размер страницы: 425.2 x 538.582 ptswidth = 0 height = 0

Небольшое регулярное выражение даст вам правильные результаты.

 <?php $str = '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'; preg_match('/Page size: ([0-9]*\.?[0-9]?) x ([0-9]*\.?[0-9]?)/', $str, $matches); $width = round($matches[1]/2.83); $height = round($matches[2]/2.83); echo "width = $width<br>height = $height"; ?> 

Обновление (требуется дополнительная информация): Полный рабочий пример ниже. Я обновил Regex, чтобы соответствовать реальному выпуску из pdfinfo

 <?php $output = shell_exec("pdfinfo ".$pdflivrelink); // find page count preg_match('/Pages:\s+([0-9]+)/', $output, $pagecountmatches); $pagecount = $pagecountmatches[1]; // find page sizes preg_match('/Page size:\s+([0-9]{0,5}\.?[0-9]{0,3}) x ([0-9]{0,5}\.?[0-9]{0,3})/', $output, $pagesizematches); $width = round($pagesizematches[1]/2.83); $height = round($pagesizematches[2]/2.83); echo "pagecount = $pagecount <br>width = $width<br>height = $height"; ?> 

Сделайте это с помощью 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); 

Почему бы не использовать простой PHP для получения размеров PDF?

 <?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")); 

Поскольку вы знаете формат строки размера, вы также можете сделать это, как показано ниже. (Эта функция возвращает ширину и высоту в массиве.)

 function size_pdf($size){ $result = array(); $tmp = exlode('x', $size); $result['height'] = round(trim($tmp[0])/2.83); $result['width'] = round(trim($tmp[1])/2.83); return $result; }