El Diumenge, 14 d'octubre de 2012, a les 10:45:10, Carlos Garcia Campos va escriure: > Excerpts from Fabio D'Urso's message of dom oct 14 02:49:09 +0200 2012: > > On Tuesday, September 18, 2012 07:52:23 PM Albert Astals Cid wrote: > > > El Dimarts, 18 de setembre de 2012, a les 07:49:05, vau escriure: > > > > Hi Albert, Hi Fabio, > > > > > > > > the solution from Fabio worked quite well to me. > > > > There are still some PDFs remaining which do not have their > > > > application > > > > stream changed - at least it looks like that. > > > > > > > > But for most of the files I tried it works fine. > > > > Hence, a big "thank you" to Fabio and I would recommend to apply that > > > > patch to an upcoming release. > > > > > > Spoke with Fabio in private and he seems not to be happy with it, he'll > > > be > > > working in a better one once he gets a bit of time. > > > > Here we go. I've rewritten the patches in a cleaner way and now I'm > > satisfied with them. > > > > Short recap: After filling and saving a PDF form, filled text fields are > > still shown with their old value (usually blank) in acroread (and in > > poppler too, when you open the resulting PDF file) because we don't > > update the annotation widgets' appearance streams. > > > > With these patches, the appearance stream gets rewritten for text and > > choice fields (for button fields it's not necessary). > > Note that choice fields still don't work in acroread, because of some > > unrelated issues that I'll discuss in a new thread. > > > > Patches in detail: > > > > 0001 > > > > Patch 0001 adds a AnnotWidget::updateAppearanceStream() method that is > > called by form handling code to inform the widget annotation that its > > appearance stream is no longer valid and needs to be rebuilt. > > This information was previously obtained by the widget annotation by > > testing field->isModified() before drawing. This new "push" approach has > > two advantages: > > 1) The appearance is now rebuilt only once after the contents are > > modified. > > Previously, field->isModified() stayed always true, even after the first > > draw() call, causing the apperance stream to be rebuilt on every > > subsequent > > draw() call too, even if contents stayed the same. > > 2) It gives the possibility to react to modifications immediatly, without > > having to wait for the next rendering. > > > > 0002 > > > > This patch creates the new appearance stream in > > AnnotWidget::updateAppearanceStream() and writes it in the xref. This > > patch > > fixes the original bug, but... > > Note: ...every time the field is modified (eg in okular it happens every > > time the the user adds or removes a character) the old apprearance stream > > is deleted and a new one is generated. This means that the xref entry for > > the old appearance is freed and a new one is allocated. Since every time > > a xref entry is freed its generation number gets incremented, repeated > > edits result in generation numbers rapidily growing. The next patch > > solves this issue. > > > > 0003 > > > > This patch avoids going through xref entry deallocation+allocation on > > every > > modification. Now it only happens the first time, and references to the > > newly allocated xref entry are kept, so that subsequent > > updateAppearanceStream invocations can do a simple overwrite instead. > > > > These patches are supposed to fix exactly the same documents that the > > previous proof-of-concept patch fixed. Please let me know if you find any > > difference. > Thanks Fabio!, patches look good to me. If nobody objects I'll commit > them to both master and poppler-0.20 branch.
I wasn't really planning to get a new 0.20.x out, but i guess it does not hurt in case i change minds to have them there :-) Cheers, Albert > > > Thank you, > > Fabio _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
