PHP Получить высоту и ширину в свойствах PDF-файла - PullRequest
2 голосов
/ 08 марта 2012

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

Так я делаю exec (pdfinfo ...);У меня есть такой результат:

Создатель: Adobe InDesign CS5 (7.0.3) Производитель: Acrobat Distiller 9.4.2 (Macintosh) CreationDate: Mon Jan 30 15:48:43 2012 ModDate: Fri Feb 1010:35:05 2012 Tagged: нет Страницы: 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: Mon27 февраля 13:18:23 2012 ModDate: Mon 27 Feb 16:26:12 2012 Tagged: нет Страниц: 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 высота = 0

Ответы [ 4 ]

4 голосов
/ 08 марта 2012

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

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

?>
2 голосов
/ 27 мая 2015

Почему бы не использовать простой 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"));
2 голосов
/ 08 марта 2012

Сделайте это с 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);
0 голосов
/ 08 марта 2012

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

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...