Upcoming Zend_Pdf Enhancements

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Upcoming Zend_Pdf Enhancements

Willie Alberty
For the last few months I have been working with Kevin McArthur on a  
comprehensive PDF generation project for a client [Streamflow] who has  
some pretty advanced layout needs. The project is nearing completion  
and we have been discussing the possibility of contributing large  
portions of the code back to the Zend Framework as improvements to  
Zend_Pdf.

In light of several recent postings to fw-general and fw-formats, as  
well as a few encouraging proposals recently submitted to the Wiki, we  
would like to formally announce our plans and describe the new  
functionality at a high level here.

We will be submitting proposals in the coming weeks that describe  
these new components in more detail along with fully-functional  
reference implementations. Our hope is to join forces with other  
interested developers to help fast-track these proposals through the  
feedback and approval process, write tests, user documentation, and  
examples, and exercise the code as much as possible.

We're really proud of this work and are excited to share it with the  
community. We believe that these enhancements will further establish  
Zend_Pdf's role as the gold standard for PDF generation using PHP.


Text Layout Engine
------------------

"How do I wrap long lines of text?" This is probably the most commonly-
asked question regarding Zend_Pdf. I'm pleased to report that not only  
have we solved the problem of text-wrapping, but a whole host of  
others as well. The new engine provides fully-automatic text layout,  
and has customization hooks in a variety of places.

Line breaks are calculated using the Unicode Line Breaking Algorithm  
(UAX #14), providing linguistically-appropriate line breaks, not just  
at whitespace characters.

Paragraph styles allow you to specify left-, center-, and right-
alignment, as well as full justification, line leading, line height,  
line multiple (double-space, triple-space, etc.), pre- and post-  
paragraph spacing, left- and right-side margins, and first-line  
indentation. Paragraph styles also support left-, center-, right-, and  
decimal-aligned tab stops, with or without leaders, for intra-line  
alignment needs.

In addition to the left-to-right line sweep used by most Latin-based  
scripts, right-to-left line sweep is also supported, and is  
automatically detected by the layout engine; you never need to supply  
strings in reverse character order for right-to-left text layout.

The layout engine is based around the concept of an attributed string.  
These are Unicode strings of unlimited length, and fully support the  
entire Unicode character set, including characters outside the Basic  
Multilingual Plane (BMP).

Attributed strings allow you to assign stylistic attributes to  
arbitrary ranges of characters within the string. These attributes are  
used by typesetters to determine the specific look and location for  
every character. This means that you can make unlimited style changes  
within a block of text, even changing styles character-by-character if  
desired.

The layout engine automatically manages all of these style changes,  
applying them as necessary when drawing the text on the page. The  
following style attributes are supported:

  - Font
  - Font size
  - Fill color
  - Stroke width and color
  - Underline and strikethrough
  - Super- and sub-script
  - Background color

You can add your own custom attributes as well, which you can use in  
your own subclasses to completely customize the layout engine's  
behavior.

These attributed strings will eventually be shared with Zend_Rtf  
(recently proposed by Andries Seutens), as each attributed string is  
essentially a self-contained RTF document. This opens up the  
possibility for generating fully-styled PDF or RTF output from the  
same source with only a couple of lines of code. It will also  
eventually be possible to use existing styled RTF documents as the  
basis for PDF text drawing, eliminating the need to manually apply  
style attributes in your PHP code.

A layout manager class is responsible for drawing these attributed  
strings. It lays out the text in a series of arbitrarily-shaped text  
containers, automatically moving from one to the next as each is  
filled. Rectangular and circular containers will be provided, but you  
can easily create your own custom containers for other shapes or to  
flow text around images.

Multi-column output is as easy as creating two adjacent text  
containers on the same page. Text containers don't even need to be on  
the same PDF page: you can start your text in a small container on  
page 1, then continue it on page 17.

Callback functions are provided to allow you to create text additional  
containers as needed, which can be located on new pages. This is  
useful if you do not know the length of the text you are drawing ahead  
of time, or if you want to adapt your layout on-the-fly.

You can also use multiple layout managers on a single page, allowing  
you to create complex multi-page flows for a series of text runs.  
These can be useful for creating page headers and footers, or for  
running stories side-by-side in a newsletter.


Drawing Model
-------------

Three new primitive geometry classes allow you to precisely define  
drawing locations, sizes, and regions. They also provide a host of  
convenience functions allowing for calculation, conversion,  
intersection testing, etc.:

  - Point: x and y coordinate
  - Size: height and width
  - Rectangle: combination of a point and size

PDF pages are drawn using a series of content streams, which contain  
all of the low-level drawing commands. Zend_Pdf_Page currently manages  
its own private content stream.

We've separated content streams from Zend_Pdf_Page, promoting them to  
first-class objects. This allows us to use these content streams as  
templates that can be reused again and again, either on a single page  
or multiple pages. Templates can greatly reduce PDF file sizes and  
improve memory use and performance in PDF viewer applications.

It is also possible to create a template from any page in an existing  
PDF document. You can then reuse the template in the same PDF, or even  
copy it to a new PDF document, where you can use it as a page  
background, draw it as a thumbnail, perform imposition, etc.


Performance and Memory
----------------------

We've also made numerous performance and memory-usage improvements  
throughout the code. Most data is now lazily-loaded, allowing you to  
manipulate very large documents, containing thousands or millions of  
individual objects or hundreds of megabytes or gigabytes in size, with  
a very low memory footprint.


Future Enhancements
-------------------

All of this new functionality lays the groundwork for even more  
powerful enhancements down the road:

  - Top-to-bottom line sweep for Asian scripts
  - Bi-directional text (for Hebrew, Arabic, and others)
  - Bulleted and numbered text lists
  - HTML-inspired inline text tables
  - Inline attachments (for example, images that flow with text)
  - Advanced typographic features such as tracking, pairwise kerning,  
ligatures, etc.
  - Hyphenation support
  - Glyph substitution using fallback fonts
  - and more...


Again, we're really excited to be sharing this code with the  
community. We'll be creating the proposals for the various components  
in the coming weeks and announcing them on the fw-formats list when  
they're ready for review. In the meantime, if you have any high-level  
questions, please don't hesitate to ask.

--

Willie Alberty, Owner
Spenlen Media
[hidden email]

http://www.spenlen.com/

Reply | Threaded
Open this post in threaded view
|

Re: [fw-general] Upcoming Zend_Pdf Enhancements

akrabat

On 5 Apr 2008, at 03:53, Willie Alberty wrote:
>
>
> Again, we're really excited to be sharing this code with the  
> community. We'll be creating the proposals for the various  
> components in the coming weeks and announcing them on the fw-formats  
> list when they're ready for review. In the meantime, if you have any  
> high-level questions, please don't hesitate to ask.
>

That all sounds excellent, especially templates from existing PDFs,  
word wrapping and the memory footprint reductions.

Regards,

Rob...
Reply | Threaded
Open this post in threaded view
|

Re: [fw-general] Upcoming Zend_Pdf Enhancements

Amr Mostafa
In reply to this post by Willie Alberty
Awesome, I'm looking  forward a "formal" proposal of all this! :)

Best,
- Amr

On Sat, Apr 5, 2008 at 4:53 AM, Willie Alberty <[hidden email]> wrote:
For the last few months I have been working with Kevin McArthur on a comprehensive PDF generation project for a client [Streamflow] who has some pretty advanced layout needs. The project is nearing completion and we have been discussing the possibility of contributing large portions of the code back to the Zend Framework as improvements to Zend_Pdf.

In light of several recent postings to fw-general and fw-formats, as well as a few encouraging proposals recently submitted to the Wiki, we would like to formally announce our plans and describe the new functionality at a high level here.

We will be submitting proposals in the coming weeks that describe these new components in more detail along with fully-functional reference implementations. Our hope is to join forces with other interested developers to help fast-track these proposals through the feedback and approval process, write tests, user documentation, and examples, and exercise the code as much as possible.

We're really proud of this work and are excited to share it with the community. We believe that these enhancements will further establish Zend_Pdf's role as the gold standard for PDF generation using PHP.


Text Layout Engine
------------------

"How do I wrap long lines of text?" This is probably the most commonly-asked question regarding Zend_Pdf. I'm pleased to report that not only have we solved the problem of text-wrapping, but a whole host of others as well. The new engine provides fully-automatic text layout, and has customization hooks in a variety of places.

Line breaks are calculated using the Unicode Line Breaking Algorithm (UAX #14), providing linguistically-appropriate line breaks, not just at whitespace characters.

Paragraph styles allow you to specify left-, center-, and right-alignment, as well as full justification, line leading, line height, line multiple (double-space, triple-space, etc.), pre- and post- paragraph spacing, left- and right-side margins, and first-line indentation. Paragraph styles also support left-, center-, right-, and decimal-aligned tab stops, with or without leaders, for intra-line alignment needs.

In addition to the left-to-right line sweep used by most Latin-based scripts, right-to-left line sweep is also supported, and is automatically detected by the layout engine; you never need to supply strings in reverse character order for right-to-left text layout.

The layout engine is based around the concept of an attributed string. These are Unicode strings of unlimited length, and fully support the entire Unicode character set, including characters outside the Basic Multilingual Plane (BMP).

Attributed strings allow you to assign stylistic attributes to arbitrary ranges of characters within the string. These attributes are used by typesetters to determine the specific look and location for every character. This means that you can make unlimited style changes within a block of text, even changing styles character-by-character if desired.

The layout engine automatically manages all of these style changes, applying them as necessary when drawing the text on the page. The following style attributes are supported:

 - Font
 - Font size
 - Fill color
 - Stroke width and color
 - Underline and strikethrough
 - Super- and sub-script
 - Background color

You can add your own custom attributes as well, which you can use in your own subclasses to completely customize the layout engine's behavior.

These attributed strings will eventually be shared with Zend_Rtf (recently proposed by Andries Seutens), as each attributed string is essentially a self-contained RTF document. This opens up the possibility for generating fully-styled PDF or RTF output from the same source with only a couple of lines of code. It will also eventually be possible to use existing styled RTF documents as the basis for PDF text drawing, eliminating the need to manually apply style attributes in your PHP code.

A layout manager class is responsible for drawing these attributed strings. It lays out the text in a series of arbitrarily-shaped text containers, automatically moving from one to the next as each is filled. Rectangular and circular containers will be provided, but you can easily create your own custom containers for other shapes or to flow text around images.

Multi-column output is as easy as creating two adjacent text containers on the same page. Text containers don't even need to be on the same PDF page: you can start your text in a small container on page 1, then continue it on page 17.

Callback functions are provided to allow you to create text additional containers as needed, which can be located on new pages. This is useful if you do not know the length of the text you are drawing ahead of time, or if you want to adapt your layout on-the-fly.

You can also use multiple layout managers on a single page, allowing you to create complex multi-page flows for a series of text runs. These can be useful for creating page headers and footers, or for running stories side-by-side in a newsletter.


Drawing Model
-------------

Three new primitive geometry classes allow you to precisely define drawing locations, sizes, and regions. They also provide a host of convenience functions allowing for calculation, conversion, intersection testing, etc.:

 - Point: x and y coordinate
 - Size: height and width
 - Rectangle: combination of a point and size

PDF pages are drawn using a series of content streams, which contain all of the low-level drawing commands. Zend_Pdf_Page currently manages its own private content stream.

We've separated content streams from Zend_Pdf_Page, promoting them to first-class objects. This allows us to use these content streams as templates that can be reused again and again, either on a single page or multiple pages. Templates can greatly reduce PDF file sizes and improve memory use and performance in PDF viewer applications.

It is also possible to create a template from any page in an existing PDF document. You can then reuse the template in the same PDF, or even copy it to a new PDF document, where you can use it as a page background, draw it as a thumbnail, perform imposition, etc.


Performance and Memory
----------------------

We've also made numerous performance and memory-usage improvements throughout the code. Most data is now lazily-loaded, allowing you to manipulate very large documents, containing thousands or millions of individual objects or hundreds of megabytes or gigabytes in size, with a very low memory footprint.


Future Enhancements
-------------------

All of this new functionality lays the groundwork for even more powerful enhancements down the road:

 - Top-to-bottom line sweep for Asian scripts
 - Bi-directional text (for Hebrew, Arabic, and others)
 - Bulleted and numbered text lists
 - HTML-inspired inline text tables
 - Inline attachments (for example, images that flow with text)
 - Advanced typographic features such as tracking, pairwise kerning, ligatures, etc.
 - Hyphenation support
 - Glyph substitution using fallback fonts
 - and more...


Again, we're really excited to be sharing this code with the community. We'll be creating the proposals for the various components in the coming weeks and announcing them on the fw-formats list when they're ready for review. In the meantime, if you have any high-level questions, please don't hesitate to ask.

--

Willie Alberty, Owner
Spenlen Media
[hidden email]

http://www.spenlen.com/




--
Amr Mostafa, Head of Software Development, IT Synergy
[hidden email] http://itsyn.com
+(2012)1700502 +(202)35371020
Reply | Threaded
Open this post in threaded view
|

Re: Upcoming Zend_Pdf Enhancements

ezamaze
In reply to this post by Willie Alberty
This sounds like an exciting enhancement of Zend_Pdf.

> Our hope is to join forces with other  
> interested developers to help fast-track these proposals through the  
> feedback and approval process, write tests, user documentation, and  
> examples, and exercise the code as much as possible.

I would be glad to help where possible...

Best regards,
Matthias
Reply | Threaded
Open this post in threaded view
|

Re: Upcoming Zend_Pdf Enhancements

mvug
In reply to this post by Willie Alberty
Does anybody know what the status is? And especially the status of the enhancements to the memory usage and template system of zend pdf?
Thanks!  



Willie Alberty wrote
For the last few months I have been working with Kevin McArthur on a  
comprehensive PDF generation project for a client [Streamflow] who has  
some pretty advanced layout needs. The project is nearing completion  
and we have been discussing the possibility of contributing large  
portions of the code back to the Zend Framework as improvements to  
Zend_Pdf.

In light of several recent postings to fw-general and fw-formats, as  
well as a few encouraging proposals recently submitted to the Wiki, we  
would like to formally announce our plans and describe the new  
functionality at a high level here.

We will be submitting proposals in the coming weeks that describe  
these new components in more detail along with fully-functional  
reference implementations. Our hope is to join forces with other  
interested developers to help fast-track these proposals through the  
feedback and approval process, write tests, user documentation, and  
examples, and exercise the code as much as possible.

We're really proud of this work and are excited to share it with the  
community. We believe that these enhancements will further establish  
Zend_Pdf's role as the gold standard for PDF generation using PHP.


Text Layout Engine
------------------

"How do I wrap long lines of text?" This is probably the most commonly-
asked question regarding Zend_Pdf. I'm pleased to report that not only  
have we solved the problem of text-wrapping, but a whole host of  
others as well. The new engine provides fully-automatic text layout,  
and has customization hooks in a variety of places.

Line breaks are calculated using the Unicode Line Breaking Algorithm  
(UAX #14), providing linguistically-appropriate line breaks, not just  
at whitespace characters.

Paragraph styles allow you to specify left-, center-, and right-
alignment, as well as full justification, line leading, line height,  
line multiple (double-space, triple-space, etc.), pre- and post-  
paragraph spacing, left- and right-side margins, and first-line  
indentation. Paragraph styles also support left-, center-, right-, and  
decimal-aligned tab stops, with or without leaders, for intra-line  
alignment needs.

In addition to the left-to-right line sweep used by most Latin-based  
scripts, right-to-left line sweep is also supported, and is  
automatically detected by the layout engine; you never need to supply  
strings in reverse character order for right-to-left text layout.

The layout engine is based around the concept of an attributed string.  
These are Unicode strings of unlimited length, and fully support the  
entire Unicode character set, including characters outside the Basic  
Multilingual Plane (BMP).

Attributed strings allow you to assign stylistic attributes to  
arbitrary ranges of characters within the string. These attributes are  
used by typesetters to determine the specific look and location for  
every character. This means that you can make unlimited style changes  
within a block of text, even changing styles character-by-character if  
desired.

The layout engine automatically manages all of these style changes,  
applying them as necessary when drawing the text on the page. The  
following style attributes are supported:

  - Font
  - Font size
  - Fill color
  - Stroke width and color
  - Underline and strikethrough
  - Super- and sub-script
  - Background color

You can add your own custom attributes as well, which you can use in  
your own subclasses to completely customize the layout engine's  
behavior.

These attributed strings will eventually be shared with Zend_Rtf  
(recently proposed by Andries Seutens), as each attributed string is  
essentially a self-contained RTF document. This opens up the  
possibility for generating fully-styled PDF or RTF output from the  
same source with only a couple of lines of code. It will also  
eventually be possible to use existing styled RTF documents as the  
basis for PDF text drawing, eliminating the need to manually apply  
style attributes in your PHP code.

A layout manager class is responsible for drawing these attributed  
strings. It lays out the text in a series of arbitrarily-shaped text  
containers, automatically moving from one to the next as each is  
filled. Rectangular and circular containers will be provided, but you  
can easily create your own custom containers for other shapes or to  
flow text around images.

Multi-column output is as easy as creating two adjacent text  
containers on the same page. Text containers don't even need to be on  
the same PDF page: you can start your text in a small container on  
page 1, then continue it on page 17.

Callback functions are provided to allow you to create text additional  
containers as needed, which can be located on new pages. This is  
useful if you do not know the length of the text you are drawing ahead  
of time, or if you want to adapt your layout on-the-fly.

You can also use multiple layout managers on a single page, allowing  
you to create complex multi-page flows for a series of text runs.  
These can be useful for creating page headers and footers, or for  
running stories side-by-side in a newsletter.


Drawing Model
-------------

Three new primitive geometry classes allow you to precisely define  
drawing locations, sizes, and regions. They also provide a host of  
convenience functions allowing for calculation, conversion,  
intersection testing, etc.:

  - Point: x and y coordinate
  - Size: height and width
  - Rectangle: combination of a point and size

PDF pages are drawn using a series of content streams, which contain  
all of the low-level drawing commands. Zend_Pdf_Page currently manages  
its own private content stream.

We've separated content streams from Zend_Pdf_Page, promoting them to  
first-class objects. This allows us to use these content streams as  
templates that can be reused again and again, either on a single page  
or multiple pages. Templates can greatly reduce PDF file sizes and  
improve memory use and performance in PDF viewer applications.

It is also possible to create a template from any page in an existing  
PDF document. You can then reuse the template in the same PDF, or even  
copy it to a new PDF document, where you can use it as a page  
background, draw it as a thumbnail, perform imposition, etc.


Performance and Memory
----------------------

We've also made numerous performance and memory-usage improvements  
throughout the code. Most data is now lazily-loaded, allowing you to  
manipulate very large documents, containing thousands or millions of  
individual objects or hundreds of megabytes or gigabytes in size, with  
a very low memory footprint.


Future Enhancements
-------------------

All of this new functionality lays the groundwork for even more  
powerful enhancements down the road:

  - Top-to-bottom line sweep for Asian scripts
  - Bi-directional text (for Hebrew, Arabic, and others)
  - Bulleted and numbered text lists
  - HTML-inspired inline text tables
  - Inline attachments (for example, images that flow with text)
  - Advanced typographic features such as tracking, pairwise kerning,  
ligatures, etc.
  - Hyphenation support
  - Glyph substitution using fallback fonts
  - and more...


Again, we're really excited to be sharing this code with the  
community. We'll be creating the proposals for the various components  
in the coming weeks and announcing them on the fw-formats list when  
they're ready for review. In the meantime, if you have any high-level  
questions, please don't hesitate to ask.

--

Willie Alberty, Owner
Spenlen Media
willie@spenlen.com

http://www.spenlen.com/
Reply | Threaded
Open this post in threaded view
|

Re: Upcoming Zend_Pdf Enhancements

Joseph Chereshnovsky
Same question!!


On Wed, 2009-02-04 at 14:49 -0800, mvug wrote:

> Does anybody know what the status is? And especially the status of the
> enhancements to the memory usage and template system of zend pdf?
> Thanks!  
>
>
>
>
> Willie Alberty wrote:
> >
> > For the last few months I have been working with Kevin McArthur on a  
> > comprehensive PDF generation project for a client [Streamflow] who has  
> > some pretty advanced layout needs. The project is nearing completion  
> > and we have been discussing the possibility of contributing large  
> > portions of the code back to the Zend Framework as improvements to  
> > Zend_Pdf.
> >
> > In light of several recent postings to fw-general and fw-formats, as  
> > well as a few encouraging proposals recently submitted to the Wiki, we  
> > would like to formally announce our plans and describe the new  
> > functionality at a high level here.
> >
> > We will be submitting proposals in the coming weeks that describe  
> > these new components in more detail along with fully-functional  
> > reference implementations. Our hope is to join forces with other  
> > interested developers to help fast-track these proposals through the  
> > feedback and approval process, write tests, user documentation, and  
> > examples, and exercise the code as much as possible.
> >
> > We're really proud of this work and are excited to share it with the  
> > community. We believe that these enhancements will further establish  
> > Zend_Pdf's role as the gold standard for PDF generation using PHP.
> >
> >
> > Text Layout Engine
> > ------------------
> >
> > "How do I wrap long lines of text?" This is probably the most commonly-
> > asked question regarding Zend_Pdf. I'm pleased to report that not only  
> > have we solved the problem of text-wrapping, but a whole host of  
> > others as well. The new engine provides fully-automatic text layout,  
> > and has customization hooks in a variety of places.
> >
> > Line breaks are calculated using the Unicode Line Breaking Algorithm  
> > (UAX #14), providing linguistically-appropriate line breaks, not just  
> > at whitespace characters.
> >
> > Paragraph styles allow you to specify left-, center-, and right-
> > alignment, as well as full justification, line leading, line height,  
> > line multiple (double-space, triple-space, etc.), pre- and post-  
> > paragraph spacing, left- and right-side margins, and first-line  
> > indentation. Paragraph styles also support left-, center-, right-, and  
> > decimal-aligned tab stops, with or without leaders, for intra-line  
> > alignment needs.
> >
> > In addition to the left-to-right line sweep used by most Latin-based  
> > scripts, right-to-left line sweep is also supported, and is  
> > automatically detected by the layout engine; you never need to supply  
> > strings in reverse character order for right-to-left text layout.
> >
> > The layout engine is based around the concept of an attributed string.  
> > These are Unicode strings of unlimited length, and fully support the  
> > entire Unicode character set, including characters outside the Basic  
> > Multilingual Plane (BMP).
> >
> > Attributed strings allow you to assign stylistic attributes to  
> > arbitrary ranges of characters within the string. These attributes are  
> > used by typesetters to determine the specific look and location for  
> > every character. This means that you can make unlimited style changes  
> > within a block of text, even changing styles character-by-character if  
> > desired.
> >
> > The layout engine automatically manages all of these style changes,  
> > applying them as necessary when drawing the text on the page. The  
> > following style attributes are supported:
> >
> >   - Font
> >   - Font size
> >   - Fill color
> >   - Stroke width and color
> >   - Underline and strikethrough
> >   - Super- and sub-script
> >   - Background color
> >
> > You can add your own custom attributes as well, which you can use in  
> > your own subclasses to completely customize the layout engine's  
> > behavior.
> >
> > These attributed strings will eventually be shared with Zend_Rtf  
> > (recently proposed by Andries Seutens), as each attributed string is  
> > essentially a self-contained RTF document. This opens up the  
> > possibility for generating fully-styled PDF or RTF output from the  
> > same source with only a couple of lines of code. It will also  
> > eventually be possible to use existing styled RTF documents as the  
> > basis for PDF text drawing, eliminating the need to manually apply  
> > style attributes in your PHP code.
> >
> > A layout manager class is responsible for drawing these attributed  
> > strings. It lays out the text in a series of arbitrarily-shaped text  
> > containers, automatically moving from one to the next as each is  
> > filled. Rectangular and circular containers will be provided, but you  
> > can easily create your own custom containers for other shapes or to  
> > flow text around images.
> >
> > Multi-column output is as easy as creating two adjacent text  
> > containers on the same page. Text containers don't even need to be on  
> > the same PDF page: you can start your text in a small container on  
> > page 1, then continue it on page 17.
> >
> > Callback functions are provided to allow you to create text additional  
> > containers as needed, which can be located on new pages. This is  
> > useful if you do not know the length of the text you are drawing ahead  
> > of time, or if you want to adapt your layout on-the-fly.
> >
> > You can also use multiple layout managers on a single page, allowing  
> > you to create complex multi-page flows for a series of text runs.  
> > These can be useful for creating page headers and footers, or for  
> > running stories side-by-side in a newsletter.
> >
> >
> > Drawing Model
> > -------------
> >
> > Three new primitive geometry classes allow you to precisely define  
> > drawing locations, sizes, and regions. They also provide a host of  
> > convenience functions allowing for calculation, conversion,  
> > intersection testing, etc.:
> >
> >   - Point: x and y coordinate
> >   - Size: height and width
> >   - Rectangle: combination of a point and size
> >
> > PDF pages are drawn using a series of content streams, which contain  
> > all of the low-level drawing commands. Zend_Pdf_Page currently manages  
> > its own private content stream.
> >
> > We've separated content streams from Zend_Pdf_Page, promoting them to  
> > first-class objects. This allows us to use these content streams as  
> > templates that can be reused again and again, either on a single page  
> > or multiple pages. Templates can greatly reduce PDF file sizes and  
> > improve memory use and performance in PDF viewer applications.
> >
> > It is also possible to create a template from any page in an existing  
> > PDF document. You can then reuse the template in the same PDF, or even  
> > copy it to a new PDF document, where you can use it as a page  
> > background, draw it as a thumbnail, perform imposition, etc.
> >
> >
> > Performance and Memory
> > ----------------------
> >
> > We've also made numerous performance and memory-usage improvements  
> > throughout the code. Most data is now lazily-loaded, allowing you to  
> > manipulate very large documents, containing thousands or millions of  
> > individual objects or hundreds of megabytes or gigabytes in size, with  
> > a very low memory footprint.
> >
> >
> > Future Enhancements
> > -------------------
> >
> > All of this new functionality lays the groundwork for even more  
> > powerful enhancements down the road:
> >
> >   - Top-to-bottom line sweep for Asian scripts
> >   - Bi-directional text (for Hebrew, Arabic, and others)
> >   - Bulleted and numbered text lists
> >   - HTML-inspired inline text tables
> >   - Inline attachments (for example, images that flow with text)
> >   - Advanced typographic features such as tracking, pairwise kerning,  
> > ligatures, etc.
> >   - Hyphenation support
> >   - Glyph substitution using fallback fonts
> >   - and more...
> >
> >
> > Again, we're really excited to be sharing this code with the  
> > community. We'll be creating the proposals for the various components  
> > in the coming weeks and announcing them on the fw-formats list when  
> > they're ready for review. In the meantime, if you have any high-level  
> > questions, please don't hesitate to ask.
> >
> > --
> >
> > Willie Alberty, Owner
> > Spenlen Media
> > [hidden email]
> >
> > http://www.spenlen.com/
> >
> >
> >
>

Reply | Threaded
Open this post in threaded view
|

Res: Upcoming Zend_Pdf Enhancements

Luiz Fernando - webPROFIRE
Same question.

Please look at

http://www.refw.org/

It's Zend_Pdf based and they like to contribute to ZF.

This component, Re_Pdf, have a lot of goodies over Zend_Pdf.

But don't have a good documentation, only API PHPDOC, no reference guide, tutorials...
Only a IRC channel where nobody returns.

Best regards,
Luiz Fernando



De: Joseph <[hidden email]>
Para: fw-formats <[hidden email]>
Enviadas: Terça-feira, 7 de Abril de 2009 7:00:01
Assunto: Re: [fw-formats] Upcoming Zend_Pdf Enhancements

Same question!!


On Wed, 2009-02-04 at 14:49 -0800, mvug wrote:

> Does anybody know what the status is? And especially the status of the
> enhancements to the memory usage and template system of zend pdf?
> Thanks! 
>
>
>
>
> Willie Alberty wrote:
> >
> > For the last few months I have been working with Kevin McArthur on a 
> > comprehensive PDF generation project for a client [Streamflow] who has 
> > some pretty advanced layout needs. The project is nearing completion 
> > and we have been discussing the possibility of contributing large 
> > portions of the code back to the Zend Framework as improvements to 
> > Zend_Pdf.
> >
> > In light of several recent postings to fw-general and fw-formats, as 
> > well as a few encouraging proposals recently submitted to the Wiki, we 
> > would like to formally announce our plans and describe the new 
> > functionality at a high level here.
> >
> > We will be submitting proposals in the coming weeks that describe 
> > these new components in more detail along with fully-functional 
> > reference implementations. Our hope is to join forces with other 
> > interested developers to help fast-track these proposals through the 
> > feedback and approval process, write tests, user documentation, and 
> > examples, and exercise the code as much as possible.
> >
> > We're really proud of this work and are excited to share it with the 
> > community. We believe that these enhancements will further establish 
> > Zend_Pdf's role as the gold standard for PDF generation using PHP.
> >
> >
> > Text Layout Engine
> > ------------------
> >
> > "How do I wrap long lines of text?" This is probably the most commonly-
> > asked question regarding Zend_Pdf. I'm pleased to report that not only 
> > have we solved the problem of text-wrapping, but a whole host of 
> > others as well. The new engine provides fully-automatic text layout, 
> > and has customization hooks in a variety of places.
> >
> > Line breaks are calculated using the Unicode Line Breaking Algorithm 
> > (UAX #14), providing linguistically-appropriate line breaks, not just 
> > at whitespace characters.
> >
> > Paragraph styles allow you to specify left-, center-, and right-
> > alignment, as well as full justification, line leading, line height, 
> > line multiple (double-space, triple-space, etc.), pre- and post- 
> > paragraph spacing, left- and right-side margins, and first-line 
> > indentation. Paragraph styles also support left-, center-, right-, and 
> > decimal-aligned tab stops, with or without leaders, for intra-line 
> > alignment needs.
> >
> > In addition to the left-to-right line sweep used by most Latin-based 
> > scripts, right-to-left line sweep is also supported, and is 
> > automatically detected by the layout engine; you never need to supply 
> > strings in reverse character order for right-to-left text layout.
> >
> > The layout engine is based around the concept of an attributed string. 
> > These are Unicode strings of unlimited length, and fully support the 
> > entire Unicode character set, including characters outside the Basic 
> > Multilingual Plane (BMP).
> >
> > Attributed strings allow you to assign stylistic attributes to 
> > arbitrary ranges of characters within the string. These attributes are 
> > used by typesetters to determine the specific look and location for 
> > every character. This means that you can make unlimited style changes 
> > within a block of text, even changing styles character-by-character if 
> > desired.
> >
> > The layout engine automatically manages all of these style changes, 
> > applying them as necessary when drawing the text on the page. The 
> > following style attributes are supported:
> >
> >  - Font
> >  - Font size
> >  - Fill color
> >  - Stroke width and color
> >  - Underline and strikethrough
> >  - Super- and sub-script
> >  - Background color
> >
> > You can add your own custom attributes as well, which you can use in 
> > your own subclasses to completely customize the layout engine's 
> > behavior.
> >
> > These attributed strings will eventually be shared with Zend_Rtf 
> > (recently proposed by Andries Seutens), as each attributed string is 
> > essentially a self-contained RTF document. This opens up the 
> > possibility for generating fully-styled PDF or RTF output from the 
> > same source with only a couple of lines of code. It will also 
> > eventually be possible to use existing styled RTF documents as the 
> > basis for PDF text drawing, eliminating the need to manually apply 
> > style attributes in your PHP code.
> >
> > A layout manager class is responsible for drawing these attributed 
> > strings. It lays out the text in a series of arbitrarily-shaped text 
> > containers, automatically moving from one to the next as each is 
> > filled. Rectangular and circular containers will be provided, but you 
> > can easily create your own custom containers for other shapes or to 
> > flow text around images.
> >
> > Multi-column output is as easy as creating two adjacent text 
> > containers on the same page. Text containers don't even need to be on 
> > the same PDF page: you can start your text in a small container on 
> > page 1, then continue it on page 17.
> >
> > Callback functions are provided to allow you to create text additional 
> > containers as needed, which can be located on new pages. This is 
> > useful if you do not know the length of the text you are drawing ahead 
> > of time, or if you want to adapt your layout on-the-fly.
> >
> > You can also use multiple layout managers on a single page, allowing 
> > you to create complex multi-page flows for a series of text runs. 
> > These can be useful for creating page headers and footers, or for 
> > running stories side-by-side in a newsletter.
> >
> >
> > Drawing Model
> > -------------
> >
> > Three new primitive geometry classes allow you to precisely define 
> > drawing locations, sizes, and regions. They also provide a host of 
> > convenience functions allowing for calculation, conversion, 
> > intersection testing, etc.:
> >
> >  - Point: x and y coordinate
> >  - Size: height and width
> >  - Rectangle: combination of a point and size
> >
> > PDF pages are drawn using a series of content streams, which contain 
> > all of the low-level drawing commands. Zend_Pdf_Page currently manages 
> > its own private content stream.
> >
> > We've separated content streams from Zend_Pdf_Page, promoting them to 
> > first-class objects. This allows us to use these content streams as 
> > templates that can be reused again and again, either on a single page 
> > or multiple pages. Templates can greatly reduce PDF file sizes and 
> > improve memory use and performance in PDF viewer applications.
> >
> > It is also possible to create a template from any page in an existing 
> > PDF document. You can then reuse the template in the same PDF, or even 
> > copy it to a new PDF document, where you can use it as a page 
> > background, draw it as a thumbnail, perform imposition, etc.
> >
> >
> > Performance and Memory
> > ----------------------
> >
> > We've also made numerous performance and memory-usage improvements 
> > throughout the code. Most data is now lazily-loaded, allowing you to 
> > manipulate very large documents, containing thousands or millions of 
> > individual objects or hundreds of megabytes or gigabytes in size, with 
> > a very low memory footprint.
> >
> >
> > Future Enhancements
> > -------------------
> >
> > All of this new functionality lays the groundwork for even more 
> > powerful enhancements down the road:
> >
> >  - Top-to-bottom line sweep for Asian scripts
> >  - Bi-directional text (for Hebrew, Arabic, and others)
> >  - Bulleted and numbered text lists
> >  - HTML-inspired inline text tables
> >  - Inline attachments (for example, images that flow with text)
> >  - Advanced typographic features such as tracking, pairwise kerning, 
> > ligatures, etc.
> >  - Hyphenation support
> >  - Glyph substitution using fallback fonts
> >  - and more...
> >
> >
> > Again, we're really excited to be sharing this code with the 
> > community. We'll be creating the proposals for the various components 
> > in the coming weeks and announcing them on the fw-formats list when 
> > they're ready for review. In the meantime, if you have any high-level 
> > questions, please don't hesitate to ask.
> >
> > --
> >
> > Willie Alberty, Owner
> > Spenlen Media
> > [hidden email]
> >
> > http://www.spenlen.com/
> >
> >
> >
>



Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - Celebridades - Música - Esportes
Reply | Threaded
Open this post in threaded view
|

Re: Res: Upcoming Zend_Pdf Enhancements

Joseph Chereshnovsky
Yeah, thanks!!

It would be great to have all that features in Zend_Pdf.
In this case it would be some documented, test cases added, etc,
etc ... ...officially released.

Its a pity but right now it is just a third party component that is not
allowed to be used in serious projects :/



On Tue, 2009-04-07 at 05:33 -0700, Luiz Fernando wrote:

> Same question.
>
> Please look at
>
> http://www.refw.org/
>
> It's Zend_Pdf based and they like to contribute to ZF.
>
> This component, Re_Pdf, have a lot of goodies over Zend_Pdf.
>
> But don't have a good documentation, only API PHPDOC, no reference
> guide, tutorials...
> Only a IRC channel where nobody returns.
>
> Best regards,
> Luiz Fernando
>
>
>
>
> ______________________________________________________________________
> De: Joseph <[hidden email]>
> Para: fw-formats <[hidden email]>
> Enviadas: Terça-feira, 7 de Abril de 2009 7:00:01
> Assunto: Re: [fw-formats] Upcoming Zend_Pdf Enhancements
>
> Same question!!
>
>
> On Wed, 2009-02-04 at 14:49 -0800, mvug wrote:
> > Does anybody know what the status is? And especially the status of
> the
> > enhancements to the memory usage and template system of zend pdf?
> > Thanks!  
> >
> >
> >
> >
> > Willie Alberty wrote:
> > >
> > > For the last few months I have been working with Kevin McArthur on
> a  
> > > comprehensive PDF generation project for a client [Streamflow] who
> has  
> > > some pretty advanced layout needs. The project is nearing
> completion  
> > > and we have been discussing the possibility of contributing
> large  
> > > portions of the code back to the Zend Framework as improvements
> to  
> > > Zend_Pdf.
> > >
> > > In light of several recent postings to fw-general and fw-formats,
> as  
> > > well as a few encouraging proposals recently submitted to the
> Wiki, we  
> > > would like to formally announce our plans and describe the new  
> > > functionality at a high level here.
> > >
> > > We will be submitting proposals in the coming weeks that
> describe  
> > > these new components in more detail along with fully-functional  
> > > reference implementations. Our hope is to join forces with other  
> > > interested developers to help fast-track these proposals through
> the  
> > > feedback and approval process, write tests, user documentation,
> and  
> > > examples, and exercise the code as much as possible.
> > >
> > > We're really proud of this work and are excited to share it with
> the  
> > > community. We believe that these enhancements will further
> establish  
> > > Zend_Pdf's role as the gold standard for PDF generation using PHP.
> > >
> > >
> > > Text Layout Engine
> > > ------------------
> > >
> > > "How do I wrap long lines of text?" This is probably the most
> commonly-
> > > asked question regarding Zend_Pdf. I'm pleased to report that not
> only  
> > > have we solved the problem of text-wrapping, but a whole host of  
> > > others as well. The new engine provides fully-automatic text
> layout,  
> > > and has customization hooks in a variety of places.
> > >
> > > Line breaks are calculated using the Unicode Line Breaking
> Algorithm  
> > > (UAX #14), providing linguistically-appropriate line breaks, not
> just  
> > > at whitespace characters.
> > >
> > > Paragraph styles allow you to specify left-, center-, and right-
> > > alignment, as well as full justification, line leading, line
> height,  
> > > line multiple (double-space, triple-space, etc.), pre- and post-  
> > > paragraph spacing, left- and right-side margins, and first-line  
> > > indentation. Paragraph styles also support left-, center-, right-,
> and  
> > > decimal-aligned tab stops, with or without leaders, for
> intra-line  
> > > alignment needs.
> > >
> > > In addition to the left-to-right line sweep used by most
> Latin-based  
> > > scripts, right-to-left line sweep is also supported, and is  
> > > automatically detected by the layout engine; you never need to
> supply  
> > > strings in reverse character order for right-to-left text layout.
> > >
> > > The layout engine is based around the concept of an attributed
> string.  
> > > These are Unicode strings of unlimited length, and fully support
> the  
> > > entire Unicode character set, including characters outside the
> Basic  
> > > Multilingual Plane (BMP).
> > >
> > > Attributed strings allow you to assign stylistic attributes to  
> > > arbitrary ranges of characters within the string. These attributes
> are  
> > > used by typesetters to determine the specific look and location
> for  
> > > every character. This means that you can make unlimited style
> changes  
> > > within a block of text, even changing styles
> character-by-character if  
> > > desired.
> > >
> > > The layout engine automatically manages all of these style
> changes,  
> > > applying them as necessary when drawing the text on the page.
> The  
> > > following style attributes are supported:
> > >
> > >  - Font
> > >  - Font size
> > >  - Fill color
> > >  - Stroke width and color
> > >  - Underline and strikethrough
> > >  - Super- and sub-script
> > >  - Background color
> > >
> > > You can add your own custom attributes as well, which you can use
> in  
> > > your own subclasses to completely customize the layout engine's  
> > > behavior.
> > >
> > > These attributed strings will eventually be shared with Zend_Rtf  
> > > (recently proposed by Andries Seutens), as each attributed string
> is  
> > > essentially a self-contained RTF document. This opens up the  
> > > possibility for generating fully-styled PDF or RTF output from
> the  
> > > same source with only a couple of lines of code. It will also  
> > > eventually be possible to use existing styled RTF documents as
> the  
> > > basis for PDF text drawing, eliminating the need to manually
> apply  
> > > style attributes in your PHP code.
> > >
> > > A layout manager class is responsible for drawing these
> attributed  
> > > strings. It lays out the text in a series of arbitrarily-shaped
> text  
> > > containers, automatically moving from one to the next as each is  
> > > filled. Rectangular and circular containers will be provided, but
> you  
> > > can easily create your own custom containers for other shapes or
> to  
> > > flow text around images.
> > >
> > > Multi-column output is as easy as creating two adjacent text  
> > > containers on the same page. Text containers don't even need to be
> on  
> > > the same PDF page: you can start your text in a small container
> on  
> > > page 1, then continue it on page 17.
> > >
> > > Callback functions are provided to allow you to create text
> additional  
> > > containers as needed, which can be located on new pages. This is  
> > > useful if you do not know the length of the text you are drawing
> ahead  
> > > of time, or if you want to adapt your layout on-the-fly.
> > >
> > > You can also use multiple layout managers on a single page,
> allowing  
> > > you to create complex multi-page flows for a series of text
> runs.  
> > > These can be useful for creating page headers and footers, or
> for  
> > > running stories side-by-side in a newsletter.
> > >
> > >
> > > Drawing Model
> > > -------------
> > >
> > > Three new primitive geometry classes allow you to precisely
> define  
> > > drawing locations, sizes, and regions. They also provide a host
> of  
> > > convenience functions allowing for calculation, conversion,  
> > > intersection testing, etc.:
> > >
> > >  - Point: x and y coordinate
> > >  - Size: height and width
> > >  - Rectangle: combination of a point and size
> > >
> > > PDF pages are drawn using a series of content streams, which
> contain  
> > > all of the low-level drawing commands. Zend_Pdf_Page currently
> manages  
> > > its own private content stream.
> > >
> > > We've separated content streams from Zend_Pdf_Page, promoting them
> to  
> > > first-class objects. This allows us to use these content streams
> as  
> > > templates that can be reused again and again, either on a single
> page  
> > > or multiple pages. Templates can greatly reduce PDF file sizes
> and  
> > > improve memory use and performance in PDF viewer applications.
> > >
> > > It is also possible to create a template from any page in an
> existing  
> > > PDF document. You can then reuse the template in the same PDF, or
> even  
> > > copy it to a new PDF document, where you can use it as a page  
> > > background, draw it as a thumbnail, perform imposition, etc.
> > >
> > >
> > > Performance and Memory
> > > ----------------------
> > >
> > > We've also made numerous performance and memory-usage
> improvements  
> > > throughout the code. Most data is now lazily-loaded, allowing you
> to  
> > > manipulate very large documents, containing thousands or millions
> of  
> > > individual objects or hundreds of megabytes or gigabytes in size,
> with  
> > > a very low memory footprint.
> > >
> > >
> > > Future Enhancements
> > > -------------------
> > >
> > > All of this new functionality lays the groundwork for even more  
> > > powerful enhancements down the road:
> > >
> > >  - Top-to-bottom line sweep for Asian scripts
> > >  - Bi-directional text (for Hebrew, Arabic, and others)
> > >  - Bulleted and numbered text lists
> > >  - HTML-inspired inline text tables
> > >  - Inline attachments (for example, images that flow with text)
> > >  - Advanced typographic features such as tracking, pairwise
> kerning,  
> > > ligatures, etc.
> > >  - Hyphenation support
> > >  - Glyph substitution using fallback fonts
> > >  - and more...
> > >
> > >
> > > Again, we're really excited to be sharing this code with the  
> > > community. We'll be creating the proposals for the various
> components  
> > > in the coming weeks and announcing them on the fw-formats list
> when  
> > > they're ready for review. In the meantime, if you have any
> high-level  
> > > questions, please don't hesitate to ask.
> > >
> > > --
> > >
> > > Willie Alberty, Owner
> > > Spenlen Media
> > > [hidden email]
> > >
> > > http://www.spenlen.com/
> > >
> > >
> > >
> >
>
>
>
>
> ______________________________________________________________________
> Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 -
> Celebridades - Música - Esportes