Estoy intentando crear dinámicamente documentos PDF en el servidor y enviarlos al cliente utilizando la biblioteca Zend_Pdf. Todo el texto en el PDF debe estar alineado al centro de la página, que será de tamaño carta, horizontal. Usando funciones que he encontrado varias veces en varios sitios, tengo un problema: la justificación del centro está desactivada. Todo el texto está apareciendo demasiado a la izquierda. Aquí está mi código:¿Por qué este código para centrar texto en un PDF utilizando la biblioteca PHP Zend_Pdf no funciona?
<?
require('Zend/Pdf.php');
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$pdf = new Zend_Pdf();
// Create a new page, add to page listing
$pdfPage = $pdf->newPage(Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE);
$pdf->pages[] = $pdfPage;
// Add certify that
$pdfPage->setFont($font, 15.75);
drawCenteredText($pdfPage, "THIS IS TO CERTIFY THAT", 378);
// Add name
$pdfPage->setFont($font, 39.75);
drawCenteredText($pdfPage, "Example Name", 314.25);
// Headers
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=\"cert.pdf\"");
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
// Output PDF
echo $pdf->render();
function drawCenteredText($page, $text, $bottom) {
$text_width = getTextWidth($text, $page->getFont(), $page->getFontSize());
$box_width = $page->getWidth();
$left = ($box_width - $text_width)/2;
$page->drawText($text, $left, $bottom, 'UTF-8');
}
function getTextWidth($text, $font, $font_size) {
$drawing_text = iconv('', 'UTF-8', $text);
$characters = array();
for ($i = 0; $i < strlen($drawing_text); $i++) {
$characters[] = (ord($drawing_text[$i++]) << 8) | ord ($drawing_text[$i]);
}
$glyphs = $font->glyphNumbersForCharacters($characters);
$widths = $font->widthsForGlyphs($glyphs);
$text_width = (array_sum($widths)/$font->getUnitsPerEm()) * $font_size;
return $text_width;
}
?>
... y este es el resultado.
Cheers, esto me ayudó a salir :) – zenzelezz
¿Cómo aplicar el ajuste de texto utilizando el función del centro? – Tom
Estoy teniendo el mismo problema. Y este código tampoco me sirve. Cuando imprimo_r $ font-> widthsForGlyphs ($ glyphs); solo obtener matrices llenas de ceros – returnvoid