Issues

ZF-1254: Improve Zend_Pdf Text-Functions

Description

Zend_Pdf currently only has a function drawText to draw Text at a specific position. For real-world usage it is every hard to work with this - as you have to calculate width and height of texts all the time (only possible ZF-313).

It would be nice to have Features like FPDF where you don't have to manually calculate everytime the y-position of the next line: - Write: http://www.fpdf.org/en/doc/write.htm - GetX/GetY: http://www.fpdf.org/en/doc/getx.htm http://www.fpdf.org/en/doc/gety.htm - SetX/SetY: http://www.fpdf.org/en/doc/setx.htm http://www.fpdf.org/en/doc/sety.htm

Another helpful FPDF-feature is helpfull wenn creating tables: - Cell: http://www.fpdf.org/en/doc/cell.htm - MultiCell: http://www.fpdf.org/en/doc/multicell.htm

Additionally there exists a FPDF-Addon which allows to switch the font in a line - without having to calculate x and y positions: - Flowing Block: http://www.fpdf.de/downloads/addons/65/


Zend_Pdf has has many features fpdf lacks, it would be very nice if we could use Zend_Pdf - a much better OO-Interface, fpdf is one big class - utf8-support - use ttf-fonts directly

thanks, niko

Comments

Assign to Alexander.

Depends on document representation model, which should be designed before.

Postponed to post-1.0 period

I have recently created a class that emulates the FPDF cells. Currently, it is very basic but allows for creating of a cell, positioning the cell, and aligning text inside of the cell. I have attached a diff that creates the functionality. A small example is the following:


//create and attach the cell to the first page, and center in the X and Y direction
$cell=new Zend_Pdf_Cell($pdf->pages[0],Zend_Pdf_Cell::POSITION_CENTER_X | Zend_Pdf_Cell::POSITION_CENTER_Y);
//align the text in the center
$cell->addText("The quick brown fox jumped over the lazy dog.",Zend_Pdf_Cell::ALIGN_CENTER);
$cell->newLine();
//write the cell to the PDF document
$cell->write();

Patch for a cell class that allows simple cell creation and text alignment.

I have updated the Cell.php file and fixed a few things. Added borders and word wrapping.

I have just finished up a proposal using the Zend_Pdf_Cell, any comments are welcome. The proposal may be viewed at at http://framework.zend.com/wiki/display/…

Resetting 'fix version priority' and 'fix version' to be re-evaluated for next release.

Unassigning Zend_Pdf issues currently assigned to me pending decision on ZF 2.0 release timeframe and potential contribution of comprehensive changeset.

Alex, please take a look at this and resolve as necessary.

in _wordWrap() I've encountered endless loops resulting in a 500 server error in the following case: A word of 1 character length (e.g. "-") would be the last word in a cell. This one character would still fit the cell width but we are trying to addText() the word plus a space separator (" "), after having calculated the word's width based on the 1-character word. We end up getting stuck in the while-loop.

I can't explain it any smarter as I'm having trouble with this complex recursion. But I got a quick and dirty fix for this:


173c173
<           $maxTextSection=$this->_makeTextSection(array_shift($splitSection));
---
>           $maxTextSection=$this->_makeTextSection(array_shift($splitSection) . ' ');
175c175
<               $this->addText($maxTextSection['text'].' ');
---
>               $this->addText($maxTextSection['text']);
177c177
<               $maxTextSection=$this->_makeTextSection(array_shift($splitSection));
---
>               $maxTextSection=$this->_makeTextSection(array_shift($splitSection) . ' ');
181c181
<           $this->addText($maxTextSection['text'].' '.$restOfText);
---
>           $this->addText($maxTextSection['text'].$restOfText);

I have updated the attached Cell.php

besides, there was another bug I've fixed long time ago:


--- ZF-1254_Cell.php    2009-08-01 11:26:04.000000000 +0200
+++ Cell.php    2009-08-05 09:01:13.000000000 +0200
@@ -601,7 +601,7 @@
        for ($x=0;$xcmap->glyphNumbersForCharacters($charArray);
+       $charArray=$textSection['font']->glyphNumbersForCharacters($charArray);
        //get the lengths
        $lengths=$textSection['font']->widthsForGlyphs($charArray);
        $fontGlyphWidth=array_sum($lengths);

I've updated the attached Cell.php

I really like the Zend PDF functionality. It's fast and stable. But I think many users would benefit from two key features: -Allow to parse HTML text (like here: http://fpdf.org/en/tutorial/tuto6.htm) -Allow to create tables (like above).

Are these types of functionality scheduled to be included in the core framework anytime soon? Without it, most PDF documents will look rather basic.

There is a proposal which has some very nice features related to this as well. http://framework.zend.com/wiki/display/…

Maybe an idea to implement that one?