summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-appearance.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2018-06-15 13:46:10 +0200
committerRobin Watts <robin.watts@artifex.com>2018-06-22 16:48:45 +0100
commit072703ee156c94cd951cf2c406f4ff64e2ed094f (patch)
tree7005be8fc2b81dac3d553bb37e7d8e820bbd1eab /source/pdf/pdf-appearance.c
parent23cc78236960753e6157d5038db9e960670f0c64 (diff)
downloadmupdf-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.c25
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)