diff options
author | Paul Gardiner <paulg.artifex@glidos.net> | 2012-09-19 15:06:04 +0100 |
---|---|---|
committer | Paul Gardiner <paulg.artifex@glidos.net> | 2012-09-19 15:06:04 +0100 |
commit | 7428d9e85791260bf9d481b49e90c4321339453a (patch) | |
tree | b0ca0a6868c47119ade0f5a8a846f4d1ceef6782 /pdf | |
parent | 5f8e096b9090577ed93072448339a6500a5178f3 (diff) | |
download | mupdf-7428d9e85791260bf9d481b49e90c4321339453a.tar.xz |
Forms: handle print request, both from javascript and from named action
Currently the app windows app responds with a message box explaining that
the MuPDF library passes print requests to the app, but the app does not
implement printing.
Diffstat (limited to 'pdf')
-rw-r--r-- | pdf/mupdf-internal.h | 1 | ||||
-rw-r--r-- | pdf/pdf_event.c | 10 | ||||
-rw-r--r-- | pdf/pdf_form.c | 7 | ||||
-rw-r--r-- | pdf/pdf_js.c | 10 |
4 files changed, 28 insertions, 0 deletions
diff --git a/pdf/mupdf-internal.h b/pdf/mupdf-internal.h index 7fd287dd..9e5b4848 100644 --- a/pdf/mupdf-internal.h +++ b/pdf/mupdf-internal.h @@ -633,6 +633,7 @@ void pdf_choice_widget_set_value(pdf_document *doc, fz_widget *tw, int n, char * void pdf_set_doc_event_callback(pdf_document *doc, fz_doc_event_cb *event_cb, void *data); void pdf_event_issue_alert(pdf_document *doc, fz_alert_event *event); +void pdf_event_issue_print(pdf_document *doc); /* * Javascript handler diff --git a/pdf/pdf_event.c b/pdf/pdf_event.c index 5be3534b..653d2a1f 100644 --- a/pdf/pdf_event.c +++ b/pdf/pdf_event.c @@ -31,6 +31,16 @@ void pdf_event_issue_alert(pdf_document *doc, fz_alert_event *alert) } } +void pdf_event_issue_print(pdf_document *doc) +{ + fz_doc_event e; + + e.type = FZ_DOCUMENT_EVENT_PRINT; + + if (doc->event_cb) + doc->event_cb(&e, doc->event_cb_data); +} + void pdf_set_doc_event_callback(pdf_document *doc, fz_doc_event_cb *fn, void *data) { doc->event_cb = fn; diff --git a/pdf/pdf_form.c b/pdf/pdf_form.c index 6821e232..22b552cf 100644 --- a/pdf/pdf_form.c +++ b/pdf/pdf_form.c @@ -1688,6 +1688,13 @@ static void execute_action(pdf_document *doc, pdf_obj *obj, pdf_obj *a) { reset_form(doc, pdf_dict_gets(a, "Fields"), pdf_to_int(pdf_dict_gets(a, "Flags")) & 1); } + else if (!strcmp(type, "Named")) + { + char *name = pdf_to_name(pdf_dict_gets(a, "N")); + + if (!strcmp(name, "Print")) + pdf_event_issue_print(doc); + } } } diff --git a/pdf/pdf_js.c b/pdf/pdf_js.c index 2a3c865c..a5fb553c 100644 --- a/pdf/pdf_js.c +++ b/pdf/pdf_js.c @@ -519,6 +519,15 @@ static pdf_jsimp_obj *doc_resetForm(void *jsctx, void *obj, int argc, pdf_jsimp_ return NULL; } +static pdf_jsimp_obj *doc_print(void *jsctx, void *obj, int argc, pdf_jsimp_obj *args[]) +{ + pdf_js *js = (pdf_js *)jsctx; + + pdf_event_issue_print(js->doc); + + return NULL; +} + static void declare_dom(pdf_js *js) { pdf_jsimp *imp = js->imp; @@ -527,6 +536,7 @@ static void declare_dom(pdf_js *js) js->doctype = pdf_jsimp_new_type(imp, NULL); pdf_jsimp_addmethod(imp, js->doctype, "getField", doc_getField); pdf_jsimp_addmethod(imp, js->doctype, "resetForm", doc_resetForm); + pdf_jsimp_addmethod(imp, js->doctype, "print", doc_print); pdf_jsimp_addproperty(imp, js->doctype, "event", doc_getEvent, doc_setEvent); pdf_jsimp_addproperty(imp, js->doctype, "app", doc_getApp, doc_setApp); |