X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/blobdiff_plain/faad49522ea261d95c5a9803b115e1203fe257fa..138d7ffb158595a29130949de7a01ac5fdb5c352:/bk_pdf.c diff --git a/bk_pdf.c b/bk_pdf.c index 44f7486..44a9699 100644 --- a/bk_pdf.c +++ b/bk_pdf.c @@ -250,6 +250,54 @@ void pdf_backend(paragraph *sourceform, keywordlist *keywords, } objstream(cstr, "ET"); + /* + * Also, we want an annotation dictionary containing the + * cross-references from this page. + */ + if (page->first_xref) { + xref *xr; + objtext(opage, "/Annots [\n"); + + for (xr = page->first_xref; xr; xr = xr->next) { + object *annot; + char buf[256]; + + annot = new_object(&olist); + objref(opage, annot); + objtext(opage, "\n"); + + objtext(annot, "<<\n/Type /Annot\n/Subtype /Link\n/Rect ["); + sprintf(buf, "%g %g %g %g", + xr->lx / 4096.0, xr->by / 4096.0, + xr->rx / 4096.0, xr->ty / 4096.0); + objtext(annot, buf); + objtext(annot, "]\n/Border [0 0 0]\n"); + + if (xr->dest.type == PAGE) { + objtext(annot, "/Dest ["); + objref(annot, (object *)xr->dest.page->spare); + objtext(annot, " /XYZ null null null]\n"); + } else { + char *p; + + objtext(annot, "/A <<\n/Type /Action\n/S /URI\n/URI ("); + for (p = xr->dest.url; *p; p++) { + char c[2]; + c[0] = *p; + c[1] = '\0'; + if (*p == '(' || *p == ')' || *p == '\\') + objtext(annot, "\\"); + objtext(annot, c); + } + objtext(annot, ")\n>>\n"); + } + + objtext(annot, ">>\n"); + } + + objtext(opage, "]\n"); + } + objtext(opage, ">>\n"); }