summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mupdf/pdf/annot.h3
-rw-r--r--source/pdf/pdf-annot-edit.c1
-rw-r--r--source/pdf/pdf-annot.c8
-rw-r--r--source/pdf/pdf-interpret.c9
4 files changed, 12 insertions, 9 deletions
diff --git a/include/mupdf/pdf/annot.h b/include/mupdf/pdf/annot.h
index 913dd80b..1773efae 100644
--- a/include/mupdf/pdf/annot.h
+++ b/include/mupdf/pdf/annot.h
@@ -64,7 +64,6 @@ struct pdf_annot_s
pdf_xobject *ap;
int ap_iteration;
- fz_matrix matrix;
pdf_annot *next;
pdf_annot *next_changed;
int annot_type;
@@ -80,7 +79,7 @@ pdf_obj *pdf_load_name_tree(fz_context *ctx, pdf_document *doc, pdf_obj *which);
fz_link *pdf_load_link_annots(fz_context *ctx, pdf_document *, pdf_obj *annots, const fz_matrix *page_ctm);
-void pdf_transform_annot(fz_context *ctx, pdf_annot *annot);
+void pdf_annot_transform(fz_context *ctx, pdf_annot *annot, fz_matrix *annot_ctm);
void pdf_load_annots(fz_context *ctx, pdf_document *, pdf_page *page, pdf_obj *annots, const fz_matrix *page_transform);
void pdf_update_annot(fz_context *ctx, pdf_document *, pdf_annot *annot);
void pdf_drop_annots(fz_context *ctx, pdf_annot *annot_list);
diff --git a/source/pdf/pdf-annot-edit.c b/source/pdf/pdf-annot-edit.c
index 5427ea3a..f4431414 100644
--- a/source/pdf/pdf-annot-edit.c
+++ b/source/pdf/pdf-annot-edit.c
@@ -74,7 +74,6 @@ pdf_update_annot(fz_context *ctx, pdf_document *doc, pdf_annot *annot)
fz_try(ctx)
{
annot->ap = pdf_load_xobject(ctx, doc, n);
- pdf_transform_annot(ctx, annot);
annot->ap_iteration = annot->ap->iteration;
}
fz_catch(ctx)
diff --git a/source/pdf/pdf-annot.c b/source/pdf/pdf-annot.c
index c5354c71..00e5b983 100644
--- a/source/pdf/pdf-annot.c
+++ b/source/pdf/pdf-annot.c
@@ -402,8 +402,9 @@ pdf_drop_annots(fz_context *ctx, pdf_annot *annot)
}
}
+/* Create transform to fit appearance stream to annotation Rect */
void
-pdf_transform_annot(fz_context *ctx, pdf_annot *annot)
+pdf_annot_transform(fz_context *ctx, pdf_annot *annot, fz_matrix *annot_ctm)
{
fz_rect bbox = annot->ap->bbox;
fz_rect rect;
@@ -423,7 +424,7 @@ pdf_transform_annot(fz_context *ctx, pdf_annot *annot)
x = rect.x0 - bbox.x0;
y = rect.y0 - bbox.y0;
- fz_pre_scale(fz_translate(&annot->matrix, x, y), w, h);
+ fz_pre_scale(fz_translate(annot_ctm, x, y), w, h);
}
fz_annot_type pdf_annot_obj_type(fz_context *ctx, pdf_obj *obj)
@@ -589,9 +590,10 @@ pdf_load_annots(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_obj *ann
if (pdf_is_stream(ctx, n))
{
annot->ap = pdf_load_xobject(ctx, doc, n);
- pdf_transform_annot(ctx, annot);
annot->ap_iteration = annot->ap->iteration;
}
+ else
+ fz_warn(ctx, "no appearance stream for annotation %d 0 R", pdf_to_num(ctx, annot->obj));
if (obj == doc->focus_obj)
doc->focus = annot;
diff --git a/source/pdf/pdf-interpret.c b/source/pdf/pdf-interpret.c
index f3b875cd..c4dfaf88 100644
--- a/source/pdf/pdf-interpret.c
+++ b/source/pdf/pdf-interpret.c
@@ -1250,12 +1250,15 @@ pdf_process_annot(fz_context *ctx, pdf_processor *proc, pdf_document *doc, pdf_p
if (pdf_is_hidden_ocg(ctx, doc->ocg, NULL, proc->event, pdf_dict_get(ctx, annot->obj, PDF_NAME_OC)))
return;
- if (proc->op_q && proc->op_cm && proc->op_Do_form && proc->op_Q)
+ if (proc->op_q && proc->op_cm && proc->op_Do_form && proc->op_Q && annot->ap)
{
+ fz_matrix matrix;
+ pdf_annot_transform(ctx, annot, &matrix);
proc->op_q(ctx, proc);
proc->op_cm(ctx, proc,
- annot->matrix.a, annot->matrix.b, annot->matrix.c,
- annot->matrix.d, annot->matrix.e, annot->matrix.f);
+ matrix.a, matrix.b,
+ matrix.c, matrix.d,
+ matrix.e, matrix.f);
proc->op_Do_form(ctx, proc, NULL, annot->ap, pdf_page_resources(ctx, page));
proc->op_Q(ctx, proc);
}