Podczas generowania dokumentów Pdf przy wykorzystaniu komponentu Zend_Pdf z Zend Framework możne spotkać problem związany z zamieszczaniem w dokumencie długiego tekstu. Z pomocą może tutaj przyjść poniższa metoda, która przyjmując kilka parametrów załatwi za nas całą sprawę automatycznie.

    /**
     * @param $page Zend_Pdf_Page
     * @param $text sting
     * @param $charactersPerLine int
     * @param $xOffset int
     * @param $yOffset int
     * @param $lineSpacing int
     * @return int
     */
    private function _drawMultilineText(&$page, $text, $charactersPerLine, $xOffset, $yOffset, $lineSpacing) {
        $lines = array();
        foreach(explode("\n", $text) as $line) {
            $lines = array_merge(
                $lines,
                explode(
                    "\n",
                    wordwrap($line, $charactersPerLine, "\n")
                )
            );
        }

        foreach($lines as $line) {
            $page->drawText($line, $xOffset, $yOffset, 'UTF-8');
            $yOffset -= $lineSpacing;
        }

        return $yOffset;
    }

Jako parametry metoda ta przyjmuje przede wszystkim obiekt Zend_Pdf_Page, na którym obecnie pracujemy oraz treść $text, którą chcemy wstawić do dokumentu. Pozostałe parametry tyczą już tylko i wyłącznie pozycji i ustawień wstawianego tekstu w dokumencie:

  • charactersPerLine – określa ile znaków ma się znaleźć maksymalnie w pojedynczej linii
  • xOffset – wartość przesunięcia w poziomie, gdzie będzie lewa krawędź wstawianego tekstu
  • yOffset – wartość przesunięcia w pionie dla pierwszej linii tekstu
  • lineSpacing – wysokość linii, pozwala określić odstęp pomiędzy kolejnymi liniami tekstu

W wyniku działania metodu otrzymamy tekst wstawiony na stronę dokumentu, a sama metoda zwróci nam przesunięcie w pionie dla ostatniej linii wstawianego tekstu, dzięki czemu uzyskamy informacje, w którym miejscu wstawić kolejne elementy w dokumencie.

Zend_Pdf – automatyczne zawijanie tekstu
Tagged on:                     

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Social Widgets powered by AB-WebLog.com.