2013-03-19 1 views
1

Имея серьезные проблемы с разумом, связанные с рендерингом PNG-файлов DOMPDF.DOMPDF PNG output - несколько PNG, отображающих только один PNG с неправильными цветами

Использование последней версии DOMPDF в соответствии с их страницей Github на сервере Windows IIS.


У меня есть два раза проблема:

  1. PNG изображение отображающая с черным фоном и белым передним планом, независимо от цвета изображений
  2. Если я использую несколько изображений PNG, все изображения на странице отображаются в виде первого изображения, раздавленный в различные соотношения размеров

Вот скриншот, чтобы объяснить:

Banner

Теперь, если я заменю один из изображений с файлом JPEG, это работает:

jpeg

Если изменить первый PNG изображение, которое будет вынесено, оно показывает, как это:

Barry


HTML, что я использую выглядит следующим образом:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

    <head> 
     <title>test</title> 

     <style type="text/css"> 

      *{ 
       color:'.$font.'; 
       font-family:Helvetica, Arial, Serif; 
      } 

      .i{font-style: italic;} 
      .b{font-weight:bold;} 

      h1, h2, h3, h4, h5, h6{display:inline;} 
      h1{font-size:350%;} 
      h3{font-size:275%;} 
      h6{font-size:150%;} 
      span{font-size:125%;} 
      div{background-color:'.$bg.';} 

     </style> 
    </head> 

    <body> 

     <div align="center" style="margin-left:10px;margin-right:10px;padding:0px;"> 
      <br /> 
      <br /> 
      <br /> 
      <br /> 
      <img src="img/banner/'.$type.'/top.png" /> 
      <br /> 
      <br /> 
      <h1 class="b" style="color:'.$font.';">'.$type.' Certificate</h1> 
      <br /> 
      <br /> 
      <h3 class="i" style="color:'.$font.';">'.$name.'</h3> 
      <br /> 
      <br /> 
      <h6 style="color:'.$font.';">This certificate has been awarded to you for earning over '.$points.' points on the LEAP System.</h6> 
      <br /> 
      <br /> 
      <img src="img/barry.png" /> 
      <br /><br /> 
      <img src="img/badge.png" /> 
      <br /> 
      <h6 class="i">' . 'Date Awarded: '.date("d-m-Y").'</h6> 
      <br /> 
      <br /> 
      <span>Awarded by: '.$school.'</span> 
      <br /> 
      <br /> 
      <img src="img/banner/'.$type.'/bottom.png" /> 
      <br /> 
      <br /> 
      <br /> 
      <br /> 
     </div> 

    </body> 
</html> 

И PHP код, который я использую для создания PDF выглядит следующим образом:

public function save($data, $size, $orientation, $name, $type){ 
    $dompdf = new DOMPDF(); 
    $dompdf->set_paper($size, $orientation); 
    $dompdf->load_html($data); 
    $dompdf->render(); 
    $data = $dompdf->output(); 

    $filename = 'data/'.$type.'/'.$name.' - '.date("d-m-Y").'.pdf'; 
    return file_put_contents($filename, $data); 
} 

После сгенерировать сертификат, я получить следующий журнал в dompdf\lib\fonts\log.htm:

52 7936.00 KB 1073.05 ms OFF 
[__construct img/banner/Bronze/top.png][__construct img/barry.png][__construct img/badge.png][__construct img/banner/Bronze/bottom.png]get_min_max_width() auto auto;758.85850393701pt auto;773.85850393701pt auto;1010 121|757.5 90.75;get_min_max_width() auto auto;758.85850393701pt auto;773.85850393701pt auto;115 100|86.25 75;get_min_max_width() auto auto;758.85850393701pt auto;773.85850393701pt auto;187 60|140.25 45;[image:C:\Inetpub\wwwroot\frog\certificate_generator/img/banner/Bronze/top.png|1010|121|3]!!!png!!![addImagePng .png] 
Warning: unlink(.png) [function.unlink]: No such file or directory in C:\Inetpub\wwwroot\frog\certificate_generator\dompdf\lib\class.pdf.php on line 4046 
[image:C:\Inetpub\wwwroot\frog\certificate_generator/img/barry.png|115|100|3]!!!png!!! 
Warning: unlink(.png) [function.unlink]: No such file or directory in C:\Inetpub\wwwroot\frog\certificate_generator\dompdf\lib\class.pdf.php on line 4046 
[image:C:\Inetpub\wwwroot\frog\certificate_generator/img/badge.png|187|60|3]!!!png!!! 
Warning: unlink(.png) [function.unlink]: No such file or directory in C:\Inetpub\wwwroot\frog\certificate_generator\dompdf\lib\class.pdf.php on line 4046 
get_min_max_width() auto auto;758.85850393701pt auto;773.85850393701pt auto;1010 121|757.5 90.75;[image:C:\Inetpub\wwwroot\frog\certificate_generator/img/banner/Bronze/bottom.png|1010|121|3]!!!png!!! 
Warning: unlink(.png) [function.unlink]: No such file or directory in C:\Inetpub\wwwroot\frog\certificate_generator\dompdf\lib\class.pdf.php on line 4046 

кто-нибудь знает, что может быть причиной этих, казалось бы, странные проблемы?

+1

Это странно. Похоже, одно из изображений анализируется для его альфа-канала, и это то, что помещается, хотя я не могу сказать, почему. Вероятно, это проблема пути, как видно из вызовов 'unlink()', есть некоторые неполные имена файлов. Эти ошибки, по-видимому, являются внутренними для dompdf/cpdf, но вы можете начать с проверки того, что HTML обрабатывается dompdf. Вызовите '$ dompdf-> output_html();' после загрузки HTML, чтобы узнать, что dompdf использует внутри. Вы также можете проверить страницу настройки на dompdf/www/setup.php, чтобы увидеть, есть ли какие-либо красные флаги. – BrianS

ответ

0

ОК, это оказалось потому, что ImageMagick не был установлен на нашем сервере. DomPDF должен, вероятно, проверить его существование, прежде чем пытаться генерировать PDF-файлы, содержащие PNG-файлы?

Просто для записи, вот шаги, которые я должен был принять, чтобы установить ImageMagick на IIS:

  • удаление существующего Imagick установка и DLL расширения из PHP
  • Установка Imagick ImageMagick-6.6.2-10-Q16-windows-dll из here.
  • Добавьте последнюю версию dll, защищающей потоки (ts) или non-thread safe (nts), например php_imagick_nts.dll, в каталог расширения PHP от this link.
  • Добавить extension=php_imagick_nts.dll в php.ини
  • Выполнить следующее CMD команду, чтобы добавить разрешения IIS во временный каталог: cacls c:\windows\temp /E /C /G iusr_SERVERNAME:R

Стоит отметить, что последнее утверждение можно считать небезопасными на рабочих установок. Вы можете изменить временный каталог imagick в настройках конфигурации, но лично я не мог заставить его работать.

+0

dompdf не будет использовать ImageMagick, если вы не включили расширение ImageMagick PHP. Если вы не установили ImageMagick, не активируйте расширение ImageMagick. – BrianS

+0

Кроме того, вам не нужен ImageMagick. dompdf способен выполнять свою работу только с расширением GD. Поддержка ImageMagick обеспечивается, поскольку она может улучшить производительность при обработке изображений. – BrianS