Issue Details (XML | Word | Printable)

Key: ZF-1254
Type: New Feature New Feature
Status: Open Open
Priority: Major Major
Assignee: Alexander Veremyev
Reporter: Niko Sams
Votes: 34
Watchers: 28
Operations

If you were logged in you would be able to see more operations.
Google issue summary
Zend Framework

Improve Zend_Pdf Text-Functions

Created: 12/Apr/07 04:21 AM   Updated: 22/Jan/10 03:55 AM
Return to search "Fixed in 1.5.1"
Component/s: Zend_Pdf
Affects Version/s: None
Fix Version/s: None

Time Tracking:
Not Specified

File Attachments: 1. File Cell.php (18 kB)
2. Text File Cell.php (18 kB)
3. Text File Cell.txt (12 kB)

Issue Links:
Duplicate
 


 Description  « Hide

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:

Another helpful FPDF-feature is helpfull wenn creating tables:

Additionally there exists a FPDF-Addon which allows to switch the font in a line - without having to calculate x and y positions:


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



Bill Karwin added a comment - 12/Apr/07 04:06 PM

Assign to Alexander.


Alexander Veremyev added a comment - 25/May/07 02:48 AM

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

Postponed to post-1.0 period


Logan Buesching added a comment - 25/Sep/07 12:09 PM

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();

Logan Buesching added a comment - 25/Sep/07 12:10 PM

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


Logan Buesching added a comment - 29/Nov/07 05:24 PM

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


Logan Buesching added a comment - 19/Mar/08 09:50 PM

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/ZFPROP/Zend_Pdf_Cell+-+Logan+Buesching


Wil Sinclair added a comment - 25/Mar/08 10:06 PM

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


Willie Alberty added a comment - 04/Dec/08 10:34 PM

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


Wil Sinclair added a comment - 08/Dec/08 05:00 PM

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


Philip Iezzi added a comment - 01/Aug/09 02:39 AM

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


Philip Iezzi added a comment - 05/Aug/09 12:04 AM

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;$x<strlen($textSection['text']);$x++) {
 			$charArray[]=ord(substr($textSection['text'],$x,1));
 		}
-    	$charArray=$textSection['font']->cmap->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


Gerrit Kamp added a comment - 07/Jan/10 02:40 PM

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.


Peter Moolenaar added a comment - 22/Jan/10 03:48 AM

There is a proposal which has some very nice features related to this as well.
http://framework.zend.com/wiki/display/ZFPROP/Zend_Pdf+text+drawing+improvements+-+Nico+Edtinger

Maybe an idea to implement that one?