Как отображать вкладки используя Zend_PDF - PullRequest
1 голос
/ 13 ноября 2011

У меня проблема с генерацией PDF-документов. Символы моего табулятора отображаются неправильно. Я уже пробовал разные шрифты или кодировки (UTF-8, Windows1552). С некоторыми шрифтами персонаж полностью скрыт. В некоторых случаях вместо вкладки "\ t" отображается квадратный символ.

Вот мой код.

Вопрос: «Как отображать вкладки с помощью Zend_PDF?»

public function generate()
{
    $pdf        = new Zend_Pdf();
    $page       = new Zend_Pdf_Page( Zend_Pdf_Page::SIZE_A4 );

    //render basic template
    $template   = Zend_Pdf_Image::imageWithPath( APPLICATION_PATH . '/resources/pdf/template.png' );
    $page->drawImage( $template, 0 ,0, 595, 842 );

    //render document title     
    $font = Zend_Pdf_Font::fontWithPath( APPLICATION_PATH . '/resources/pdf/arial-bold.ttf' );
    $page   ->setFont($font, 14)                
            ->drawText( 'Rechnung', 390, 700, 'utf-8' );

    //render reciever adress
    $font = Zend_Pdf_Font::fontWithPath( APPLICATION_PATH . '/resources/pdf/arial.ttf' );



    $adressText = array( 
        'Kundennummer' . "\t" . $this->_user->getUserIdString(),
        'Belegnummer' . "\t" . $this->_payin->getPayinIdString(),
        'Datum' . "\t\t\t" . $this->_payin->getDateCreated()->format( 'd.m.Y' ),
        'Seite' . "\t\t\t" . '1/1'
    );

    $page   ->setFont($font, 12);
    $adressY  =  680;

    foreach( $adressText as $line )
    {
        $page->drawText( $line, 390, $adressY , 'utf-8' );
        $adressY -= 12;
    }


    //add page to pdf document
    $pdf->pages[] = $page;

    //save pdf
    $pdf->save( $this->getOption( 'path' ) );   
}

1 Ответ

2 голосов
/ 14 ноября 2011

Может быть, PDF не понимает \t.

Попробуйте заменить его на «chr (9)», который является значением ascii символа табуляции. Например:- $ tab = chr (9); $ adressText = array ( «Кунденнуммер». $ таб. $ Это -> _ user-> getUserIdString (), «Белегнуммер». $ таб. $ Это -> _ payin-> getPayinIdString (), // так далее.. );

Исправление:
Поскольку вы должны указать координаты x, y для Zend_Pdf_Page::drawText(), такие элементы, как табуляции, переводы строк и т. Д., Не будут работать. Вам нужно будет установить фиксированные координаты для табуляции.

Например: -

$tabs = array(5, 20, 30, 50);
$page->drawText("At 1st tab", $tabs[0], 10);
$page->drawText("At 2nd Tab", $tabs[1], 10);
$page->drawText("At 3rd Tab", $tabs[2], 10);

Надеюсь, вы поняли идею.

...