#php #zend-framework #pdf #zend-pdf
#php #zend-framework #PDF #zend-pdf
Вопрос:
У меня возникла проблема с созданием документов 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' . "ttt" . $this->_payin->getDateCreated()->format( 'd.m.Y' ),
'Seite' . "ttt" . '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:
Возможно, pdf не понимает t
.
Попробуйте заменить его на ‘chr (9)’, который является значением ascii символа табуляции. Например:- $tab = chr(9); $adressText = array( ‘Кунденуммер’ . $tab . $this->_user->getUserIdString(), ‘Belegnummer’ . $tab . $this->_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);
Надеюсь, вы поняли идею.
Комментарии:
1. спасибо за ваш ответ. Я пробовал, но это ничего не изменило.
2. Я тоже думал об этом ранее. В любом случае спасибо. Я думаю, что я закончу с этим