Zend framework 如何将文本与Zend_PDF右对齐?

Zend framework 如何将文本与Zend_PDF右对齐?,zend-framework,pdf,pdf-generation,zend-pdf,Zend Framework,Pdf,Pdf Generation,Zend Pdf,我正在与Zend_PDF合作。唯一我自己搞不清楚的任务就是把我的文本对齐到页面的右边 我怎样才能做到 编辑 我用下面的drew010答案和网上的其他信息创建了一个新类,我用它来水平对齐文本 <?php /** * Advanced PDF functionnalities */ class Advanced_Pdf { /** * Align text at left of provided coordinates */ const TEXT_ALI

我正在与Zend_PDF合作。唯一我自己搞不清楚的任务就是把我的文本对齐到页面的右边

我怎样才能做到

编辑

我用下面的drew010答案和网上的其他信息创建了一个新类,我用它来水平对齐文本

<?php
/**
 * Advanced PDF functionnalities
 */
class Advanced_Pdf
{
    /**
     * Align text at left of provided coordinates
     */
    const TEXT_ALIGN_LEFT = 'left';

    /**
     * Align text at right of provided coordinates
     */
    const TEXT_ALIGN_RIGHT = 'right';

    /**
     * Center-text horizontally within provided coordinates
     */
    const TEXT_ALIGN_CENTER = 'center';

    /**
     * Extension of basic draw-text function to allow it to horizontally center text
     */
    public function drawTextWithPosition(Zend_Pdf_Page $page, $text, $y1, $xOffset = 0, $position = self::TEXT_ALIGN_LEFT, $encoding = null)
    {
        $bottom = $y1; // could do the same for vertical-centering
        $text_width = $this->getTextWidth($text, $page->getFont(), $page->getFontSize());

        switch ($position) {
            case self::TEXT_ALIGN_LEFT:
                $left = 60 + $xOffset;
                break;
            case self::TEXT_ALIGN_RIGHT:
                $left = $page->getWidth() - $text_width - $page->getFontSize() - 35 + $xOffset;
                break;
            case self::TEXT_ALIGN_CENTER:
                $left = ($page->getWidth() / 2) - ($text_width / 2) + $xOffset;
                break;
            default:
                throw new Exception("Invalid position value \"$position\"");
        }

        // display multi-line text
        foreach (explode(PHP_EOL, $text) as $i => $line) {
            $page->drawText($line,$left,$y1,$encoding);
        }
        return $this;
    }

    /**
     * Return length of generated string in points
     *
     * @param string $string
     * @param Zend_Pdf_Resource_Font $font
     * @param int $font_size
     * @return double
     */
    public function getTextWidth($text, Zend_Pdf_Resource_Font $font, $font_size) 
    {
        $drawing_text = iconv('', 'UTF-16BE', $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; 
    }
}
?>

使用中的代码,您可以根据字体和字体大小计算要绘制的文本的宽度。一旦你有了字符串的宽度,你就可以根据页面的宽度对其进行右对齐

$text = 'Some text to right align';
$textWidth = getTextWidth($text, $zendPdfFont, $fontSize);

$page->drawText($text,
                $page->getWidth() - $textWidth - $fontSize,
                $verticalPosition);
与中心it类似:

$page->drawText($text,
               ($page->getWidth() / 2) - ($textWidth / 2),
                $verticalPosition);