From 7428d9e85791260bf9d481b49e90c4321339453a Mon Sep 17 00:00:00 2001 From: Paul Gardiner Date: Wed, 19 Sep 2012 15:06:04 +0100 Subject: 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. --- apps/jstest_main.c | 5 +++++ apps/pdfapp.c | 3 +++ apps/pdfapp.h | 1 + apps/win_main.c | 5 +++++ apps/x11_main.c | 5 +++++ pdf/mupdf-internal.h | 1 + pdf/pdf_event.c | 10 ++++++++++ pdf/pdf_form.c | 7 +++++++ pdf/pdf_js.c | 10 ++++++++++ 9 files changed, 47 insertions(+) diff --git a/apps/jstest_main.c b/apps/jstest_main.c index a6ff06d1..7f4bc54a 100644 --- a/apps/jstest_main.c +++ b/apps/jstest_main.c @@ -53,6 +53,11 @@ void winalert(pdfapp_t *app, fz_alert_event *alert) } } +void winprint(pdfapp_t *app) +{ + fprintf(stderr, "The MuPDF library supports printing, but this application currently does not"); +} + static char pd_password[256] = ""; static char td_textinput[LONGLINE] = ""; diff --git a/apps/pdfapp.c b/apps/pdfapp.c index 0a87565a..5cb0adea 100644 --- a/apps/pdfapp.c +++ b/apps/pdfapp.c @@ -113,6 +113,9 @@ static void event_cb(fz_doc_event *event, void *data) winalert(app, alert); } break; + case FZ_DOCUMENT_EVENT_PRINT: + winprint(app); + break; } } diff --git a/apps/pdfapp.h b/apps/pdfapp.h index 46dcf291..4f251c4d 100644 --- a/apps/pdfapp.h +++ b/apps/pdfapp.h @@ -38,6 +38,7 @@ extern void winfullscreen(pdfapp_t*, int state); extern int winsavequery(pdfapp_t*); extern int wingetsavepath(pdfapp_t*, char *buf, int len); extern void winalert(pdfapp_t *, fz_alert_event *alert); +extern void winprint(pdfapp_t *); struct pdfapp_s { diff --git a/apps/win_main.c b/apps/win_main.c index 97f927f2..ba9e74a7 100644 --- a/apps/win_main.c +++ b/apps/win_main.c @@ -155,6 +155,11 @@ void winalert(pdfapp_t *app, fz_alert_event *alert) } } +void winprint(pdfapp_t *app) +{ + MessageBoxA(hwndframe, "The MuPDF library supports printing, but this application currently does not", "Print document", MB_ICONWARNING); +} + int winsavequery(pdfapp_t *app) { switch(MessageBoxA(hwndframe, "File has unsaved changes. Do you want to save", "MuPDF", MB_YESNOCANCEL)) diff --git a/apps/x11_main.c b/apps/x11_main.c index 182aadb4..722568d5 100644 --- a/apps/x11_main.c +++ b/apps/x11_main.c @@ -126,6 +126,11 @@ void winalert(pdfapp_t *app, fz_alert_event *alert) } } +void winprint(pdfapp_t *app) +{ + fprintf(stderr, "The MuPDF library supports printing, but this application currently does not"); +} + char *winpassword(pdfapp_t *app, char *filename) { char *r = password; 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); -- cgit v1.2.3