diff options
author | Tor Andersson <tor@ghostscript.com> | 2011-02-03 10:40:27 +0000 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2011-02-03 10:40:27 +0000 |
commit | 17921bc919273990bbf68e3ec8e8c8ef24246930 (patch) | |
tree | e3224082f6542259eea68f041c91133b69260cdc | |
parent | 8355256a0fa6eedaa02a4e7b8ba3c2dbd58fe567 (diff) | |
download | mupdf-17921bc919273990bbf68e3ec8e8c8ef24246930.tar.xz |
Add support for launch, named and complex link actions.
-rw-r--r-- | mupdf/mupdf.h | 3 | ||||
-rw-r--r-- | mupdf/pdf_annot.c | 32 |
2 files changed, 25 insertions, 10 deletions
diff --git a/mupdf/mupdf.h b/mupdf/mupdf.h index 9528221a..e53ea90a 100644 --- a/mupdf/mupdf.h +++ b/mupdf/mupdf.h @@ -454,6 +454,9 @@ typedef enum pdf_linkkind_e { PDF_LGOTO = 0, PDF_LURI, + PDF_LLAUNCH, + PDF_LNAMED, + PDF_LACTION, } pdf_linkkind; struct pdf_link_s diff --git a/mupdf/pdf_annot.c b/mupdf/pdf_annot.c index 41588c28..2155a19e 100644 --- a/mupdf/pdf_annot.c +++ b/mupdf/pdf_annot.c @@ -85,6 +85,24 @@ pdf_loadlink(pdf_xref *xref, fz_obj *dict) dest = fz_dictgets(action, "URI"); pdf_logpage("action uri %s\n", fz_tostrbuf(dest)); } + else if (fz_isname(obj) && !strcmp(fz_toname(obj), "Launch")) + { + kind = PDF_LLAUNCH; + dest = fz_dictgets(action, "F"); + pdf_logpage("action %s (%d %d R)\n", fz_toname(obj), fz_tonum(dest), fz_togen(dest)); + } + else if (fz_isname(obj) && !strcmp(fz_toname(obj), "Named")) + { + kind = PDF_LNAMED; + dest = fz_dictgets(action, "N"); + pdf_logpage("action %s (%d %d R)\n", fz_toname(obj), fz_tonum(dest), fz_togen(dest)); + } + else if (fz_isname(obj) && (!strcmp(fz_toname(obj), "GoToR"))) + { + kind = PDF_LACTION; + dest = action; + pdf_logpage("action %s (%d %d R)\n", fz_toname(obj), fz_tonum(dest), fz_togen(dest)); + } else { pdf_logpage("unhandled link action, ignoring link\n"); @@ -111,7 +129,6 @@ void pdf_loadlinks(pdf_link **linkp, pdf_xref *xref, fz_obj *annots) { pdf_link *link; - fz_obj *subtype; fz_obj *obj; int i; @@ -122,16 +139,11 @@ pdf_loadlinks(pdf_link **linkp, pdf_xref *xref, fz_obj *annots) for (i = 0; i < fz_arraylen(annots); i++) { obj = fz_arrayget(annots, i); - - subtype = fz_dictgets(obj, "Subtype"); - if (fz_isname(subtype) && !strcmp(fz_toname(subtype), "Link")) + pdf_link *temp = pdf_loadlink(xref, obj); + if (temp) { - pdf_link *temp = pdf_loadlink(xref, obj); - if (temp) - { - temp->next = link; - link = temp; - } + temp->next = link; + link = temp; } } |