2012-08-25 1 views
3

Я пытался что-то вродеСформировать полный размер и хорошее качество изображения в Zend_PDF

public function getPdf() 
{ 
    $imagePath=C:\Users\Hp\Desktop\image.jpg; 
    $image = Zend_Pdf_Image::imageWithPath($imagePath); 
    $page->drawImage($image, 40,764,240, 820); 
    $pdf->pages[] = $page; 
    $pdf->save('new.pdf'); 
} 

Он генерирует PDF с изображением успешно. Но он не поддерживает качество изображения. i.e Высота и ширина изображения искажаются и отображает небольшое изображение.

Может ли кто-нибудь помочь мне в решении этих проблем. Я хочу, чтобы изображение отображалось на странице в полном размере. Также обратите внимание, что пейзажные или портретные изображения должны соответственно помещаться на страницу.

ответ

4

Я подозреваю, что другой причине изображение выходит маленький, потому что вы рисуете изображение с помощью пикселей для ширины и высоты рисунка, но drawImage использует точки, которые сделают изображение намного меньшим, если вы используете измерения пикселей.

Вы можете использовать следующий код для преобразования пикселей в точки перед нанесением изображения: точка

$imgWidthPts = $image->getPixelWidth() * 72/96; 
$imgHeightPts = $image->getPixelHeight() * 72/96; 
$x1   = 40; 
$y1   = 764; 

$page->drawImage($image, $x1, $y1, $x1 + $imgWidthPts, $y1 + $imgHeightPts); 

Михая о 300dpi также действует так, если вы используете 72dpi изображение, оно появится немного облачно, но это должно позаботиться о том, чтобы нарисовать его в реальном размере.

+0

Отличное решение, спасибо большое! –

2

Для этого вам следует рассмотреть качество изображения, так как DPI PDF составляет 300 или более, JPEG, используемый на веб-сайтах или просмотр экрана, имеет 72 DPI.

двигатель PDF всегда будет пытаться поместить все данные одного размера. Вот почему ваш образ искажен, а качество плохое.

Вы можете попытаться изменить разрешение изображения:

$image = substr_replace($image, pack("cnn", 1, 300, 300), 13, 5); 
// replace the binary info with a new one, 300 DPI X resolution and 300 DPI Y resolution. 
+0

Я пробовал это, но он выдает сообщение об ошибке r Вызов функции-члена drawImage() для не-объекта – Nida

+0

Я думаю, вы должны воссоздать изображение в папке temp, а не загружать его. –

+0

Я тебя не понимаю. Не могли бы вы рассказать. – Nida