У меня есть PHP-скрипт, использующий Imagick, но есть риск ошибки NAN, если предоставленный пользователем файл PDF не содержит страниц или имеет страницу без высоты или ширины.Я не уверен, возможно ли это в структуре PDF.Также создание jpeg из номера страницы, большего, чем общее количество страниц, приведет к ошибке.Возможно ли, как правило, отправлять действительную оболочку PDF-файла, но без фактического содержимого страницы?
Основной вопрос: как мы можем подсчитать и измерить страницы для правильного захвата ошибок перед вводом преобразования из PDF в JPEG?
В приведенной ниже функции я предполагаю, что возможно иметь 0 высоту или 0 ширину.И используйте код, если ($ imH == 0) {$ imH = 1;}, но код, основанный на предположении, не выглядит правильным.
части функции были взяты из статьи umidjons:https://gist.github.com/umidjons/11037635
Код PHP:
function genPdfThumbnail ( $src, $targ, $size=256, $page=1 ){
if(file_exists($src) && !is_dir($src)): // source path must be available and cannot be a directory
if(mime_content_type($src) != 'application/pdf'){return FALSE;} // source is not a pdf file returns a failure
$sepa = '/'; // using '/' as path separation for nfs on linux.
$targ = dirname($src).$sepa.$targ;
$size = intval($size); // only use as integer, default is 256
$page = intval($page); // only use as integer, default is 1
$page--; // default page 1, must be treated as 0 hereafter
if ($page<0){$page=0;} // we cannot have negative values
$img = new Imagick($src."[$page]");
$imH = $img->getImageHeight();
$imW = $img->getImageWidth();
if ($imH==0) {$imH=1;} // if the pdf page has no height use 1 instead
if ($imW==0) {$imW=1;} // if the pdf page has no width use 1 instead
$sizR = round($size*(min($imW,$imH)/max($imW,$imH))); // relative pixels of the shorter side
$img -> setImageColorspace(255); // prevent image colors from inverting
$img -> setImageBackgroundColor('white'); // set background color before flatten
$img = $img->flattenImages(); // prevent black zones on transparency in pdf
$img -> setimageformat('jpeg');
if ($imH == $imW){$img->thumbnailimage($size,$size);} // square page
if ($imH < $imW) {$img->thumbnailimage($size,$sizR);} // landscape page orientation
if ($imH > $imW) {$img->thumbnailimage($sizR,$size);} // portrait page orientation
if(!is_dir(dirname($targ))){mkdir(dirname($targ),0777,true);} // if not there make target directory
$img -> writeimage($targ);
$img -> clear();
$img -> destroy();
if(file_exists( $targ )){ return $targ; } // return the path to the new file for further processing
endif;
return FALSE; // source file not available or Imagick didn't create jpeg file, returns a failure
}
вызовите функцию, например:
$newthumb = genPdfThumbnail('/nfs/vsp/server/u/user/public_html/any.pdf','thumbs/any.p01.jpg',150,'01');