ZendPdf помещает изображение с зеркальным эффектом

Спасибо, что уделили время чтению этого поста.

Я пишу файл PDF на лету с помощью ZendPdf, но в момент добавления изображения в PDF оно отображается зеркально:

Вот эффект для лучшего понимания: http://snag.gy/ZYbWp.jpg

Исходное изображение в порядке.

Может ли кто-нибудь сказать мне, почему изображение зеркально отражено и как я могу сделать его оригинальным?

Я вставляю сюда все действие, где создается PDF-файл.

public function createPdfAction()
{
    $country = $this->params()->fromRoute('lang', null);

    $pdf = new \ZendPdf\PdfDocument();
    // Add new page generated by ZendPdf\Pdf object
    // (page is attached to the specified the document)
    $pdf->pages[] = ($page1 = $pdf->newPage('A4'));

    $width  = $page1->getWidth();
    $height = $page1->getHeight();

    $imageFile = dirname(__FILE__) . '/../../../../../html/img/site/logo_peug_scooter.jpg';
    if ( !isset( $pdf->imageCache[$imageFile] ))
    {
        try {
            // Create new image object
            //$stampImage = ZendPdf\Image::imageWithPath($imageFile);
            $pdf->imageCache[$imageFile] = ZendPdf\Image::imageWithPath($imageFile);
        } catch (ZendPdf\Exception $e) {
            // Example of operating with image loading exceptions.
            if ($e->getMessage() != 'Image extension is not installed.' &&
                $e->getMessage() != 'JPG support is not configured properly.') {
                throw $e;
            }
            $pdf->imageCache[$imageFile] = null;
        }
    }

    if (null != $pdf->imageCache[$imageFile]) {
        $page1->drawImage( $pdf->imageCache[$imageFile], 50, $height, 50 + 220, $height - 70 );
    }



    // Create new font
    $font = ZendPdf\Font::fontWithPath(dirname(__DIR__) . '/../../../../html/fonts/peugeot_style-webfont.ttf');
    // Apply font and draw text
    $page1->setFont($font, 16)
        ->setFillColor(ZendPdf\Color\Html::color('#0b2333'))
        ->drawText('DJANGO', 50, $height - 18 - 18 - 50);

    if ('uk' == $country) {
        $locale = 'en_GB'; //. strtoupper($country);
    } else {
        $locale = $country . '_' . strtoupper($country);
    }
    setlocale(LC_MONETARY, $locale);
    $price = money_format('%i', 2660);
    $font = ZendPdf\Font::fontWithPath(dirname(__DIR__) . '/../../../../html/fonts/peugeot_normal-webfont.ttf');
    // Apply font and draw text
    $page1->setFont($font, 16)
          ->setFillColor(ZendPdf\Color\Html::color('#0b2333'))
          ->drawText($price, 447, $height - 18 - 18 - 50);


    $pdf->save('/tmp/pdfs/sample2.pdf');


    $this->layout('layout/empty');
    $viewModel = new ViewModel();
    $viewModel->setTerminal(true);

    return $viewModel;

}

Буду признателен за любое руководство.

Спасибо.


person manou    schedule 09.07.2014    source источник


Ответы (1)


Обратите внимание, что система координат имеет свое начало в левом нижнем углу, а также ожидает, что 4 параметра координат drawImage будут предоставлены в этом порядке. Из нижнего левого угла изображения в верхний правый угол.

Вы измеряли снизу, но сначала вручали верхний левый угол:

$page1->drawImage( $pdf->imageCache[$imageFile], 50, $height, 50 + 220, $height - 70 );

Zend интерпретирует второе значение координаты как нижнюю часть изображения. Вы устанавливаете его на $height (верхний край страницы), а затем верхняя часть изображения находится на расстоянии $height-70 от низа. (70 пикселей ниже верхнего края страницы). Таким образом, верхняя часть изображения для Zend находится ниже нижней части изображения. Отсюда и зеркальное Изображение. (Я знаю, много вершин и низов... в сомнениях: перетасуйте 4 значения, пока вам не повезет.) Вместо этого должно быть:

$page1->drawImage( $pdf->imageCache[$imageFile], 50, $height - 70, 50 + 220, $height);
person Flo Ryan    schedule 03.03.2015
comment
Я сам наткнулся на вопрос, ища ответ. После того, как я понял это, я разместил его для будущих посетителей. Не думал, что ты будешь ждать 7 месяцев. :-) - person Flo Ryan; 04.03.2015
comment
Да, спасибо, что помогли закрыть проблему, как это могло бы быть. Я забыл вернуться, чтобы переиграть себя. Я комментирую все свои исследования, когда задаю вопросы. - person manou; 06.03.2015