summaryrefslogtreecommitdiff
path: root/pdf
diff options
context:
space:
mode:
authorPaul Gardiner <paulg.artifex@glidos.net>2012-09-19 15:06:04 +0100
committerPaul Gardiner <paulg.artifex@glidos.net>2012-09-19 15:06:04 +0100
commit7428d9e85791260bf9d481b49e90c4321339453a (patch)
treeb0ca0a6868c47119ade0f5a8a846f4d1ceef6782 /pdf
parent5f8e096b9090577ed93072448339a6500a5178f3 (diff)
downloadmupdf-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.h1
-rw-r--r--pdf/pdf_event.c10
-rw-r--r--pdf/pdf_form.c7
-rw-r--r--pdf/pdf_js.c10
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);