[poppler] Filled text field data not visible in saved document

Carlos Garcia Campos carlosgc at gnome.org
Tue Oct 16 05:26:25 PDT 2012


Excerpts from Albert Astals Cid's message of dom oct 14 18:12:02 +0200 2012:
> 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 :-)
>

Pushed to both branches just in case.
-- 
Carlos Garcia Campos
PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x523E6462


More information about the poppler mailing list