diff options
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) |