diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2018-06-15 13:46:10 +0200 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2018-06-22 16:48:45 +0100 |
commit | 072703ee156c94cd951cf2c406f4ff64e2ed094f (patch) | |
tree | 7005be8fc2b81dac3d553bb37e7d8e820bbd1eab /source/pdf/pdf-appearance.c | |
parent | 23cc78236960753e6157d5038db9e960670f0c64 (diff) | |
download | mupdf-072703ee156c94cd951cf2c406f4ff64e2ed094f.tar.xz |
Call AA/F formatting when synthesizing appearance stream.
Diffstat (limited to 'source/pdf/pdf-appearance.c')
-rw-r--r-- | source/pdf/pdf-appearance.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/source/pdf/pdf-appearance.c b/source/pdf/pdf-appearance.c index 5693fe3d..c3e94baa 100644 --- a/source/pdf/pdf-appearance.c +++ b/source/pdf/pdf-appearance.c @@ -990,7 +990,30 @@ pdf_write_widget_appearance(fz_context *ctx, pdf_annot *annot, fz_buffer *buf, int ff = pdf_get_field_flags(ctx, annot->page->doc, annot->obj); if (pdf_name_eq(ctx, ft, PDF_NAME(Tx))) { - char *text = pdf_field_value(ctx, annot->page->doc, annot->obj); + pdf_document *doc = annot->page->doc; + pdf_obj *f = pdf_dict_getl(ctx, annot->obj, PDF_NAME(AA), PDF_NAME(F), NULL); + char *text = NULL; + if (f && doc->js) + { + pdf_js_event e; + e.target = annot->obj; + e.value = pdf_field_value(ctx, doc, annot->obj); + fz_try(ctx) + pdf_js_setup_event(doc->js, &e); + fz_always(ctx) + fz_free(ctx, e.value); + fz_catch(ctx) + fz_rethrow(ctx); + pdf_execute_action(ctx, doc, annot->obj, f); + if (pdf_js_get_event(doc->js)->rc) + text = fz_strdup(ctx, pdf_js_get_event(doc->js)->value); + else + text = pdf_field_value(ctx, doc, annot->obj); + } + else + { + text = pdf_field_value(ctx, doc, annot->obj); + } fz_try(ctx) pdf_write_tx_widget_appearance(ctx, annot, buf, rect, bbox, matrix, res, text, ff); fz_always(ctx) |