summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-xobject.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2018-02-27 18:15:58 +0100
committerTor Andersson <tor.andersson@artifex.com>2018-06-02 02:08:18 +0200
commitf2c1f0ce45cc7f84a2d81e2f1948549fb9b7659a (patch)
tree4098ac7f587270b3c22c0da6a316f0840d7fd4e5 /source/pdf/pdf-xobject.c
parent9f7f99a2aafb5d0d5f7cdb311a72a3fb563ec8fe (diff)
downloadmupdf-f2c1f0ce45cc7f84a2d81e2f1948549fb9b7659a.tar.xz
Rework XObject form creation/updating.
Diffstat (limited to 'source/pdf/pdf-xobject.c')
-rw-r--r--source/pdf/pdf-xobject.c61
1 files changed, 25 insertions, 36 deletions
diff --git a/source/pdf/pdf-xobject.c b/source/pdf/pdf-xobject.c
index 9ee8f12c..6afe3d06 100644
--- a/source/pdf/pdf-xobject.c
+++ b/source/pdf/pdf-xobject.c
@@ -65,51 +65,40 @@ pdf_xobject_colorspace(fz_context *ctx, pdf_obj *xobj)
}
pdf_obj *
-pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat)
+pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat, pdf_obj *res, fz_buffer *contents)
{
- pdf_obj *form = NULL;
- pdf_obj *dict = NULL;
- pdf_obj *res = NULL;
- pdf_obj *procset;
-
- fz_var(dict);
- fz_var(res);
-
+ pdf_obj *ind = NULL;
+ pdf_obj *form = pdf_new_dict(ctx, doc, 5);
fz_try(ctx)
{
- dict = pdf_new_dict(ctx, doc, 0);
- pdf_dict_put_rect(ctx, dict, PDF_NAME(BBox), bbox);
- pdf_dict_put_int(ctx, dict, PDF_NAME(FormType), 1);
- pdf_dict_put_int(ctx, dict, PDF_NAME(Length), 0);
- pdf_dict_put_matrix(ctx, dict, PDF_NAME(Matrix), mat);
-
- res = pdf_new_dict(ctx, doc, 0);
- pdf_dict_put(ctx, dict, PDF_NAME(Resources), res);
-
- procset = pdf_new_array(ctx, doc, 2);
- pdf_dict_put_drop(ctx, res, PDF_NAME(ProcSet), procset);
- pdf_array_push(ctx, procset, PDF_NAME(PDF));
- pdf_array_push(ctx, procset, PDF_NAME(Text));
-
- pdf_dict_put(ctx, dict, PDF_NAME(Subtype), PDF_NAME(Form));
- pdf_dict_put(ctx, dict, PDF_NAME(Type), PDF_NAME(XObject));
-
- form = pdf_add_object(ctx, doc, dict);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, dict);
- pdf_drop_obj(ctx, res);
+ pdf_dict_put(ctx, form, PDF_NAME(Type), PDF_NAME(XObject));
+ pdf_dict_put(ctx, form, PDF_NAME(Subtype), PDF_NAME(Form));
+ pdf_dict_put_rect(ctx, form, PDF_NAME(BBox), bbox);
+ if (mat)
+ pdf_dict_put_matrix(ctx, form, PDF_NAME(Matrix), mat);
+ if (res)
+ pdf_dict_put(ctx, form, PDF_NAME(Resources), res);
+ ind = pdf_add_stream(ctx, doc, contents, form, 0);
}
fz_catch(ctx)
{
+ pdf_drop_obj(ctx, form);
fz_rethrow(ctx);
}
-
- return form;
+ return ind;
}
-void pdf_update_xobject_contents(fz_context *ctx, pdf_document *doc, pdf_obj *form, fz_buffer *buffer)
+void
+pdf_update_xobject(fz_context *ctx, pdf_document *doc, pdf_obj *form, const fz_rect *bbox, const fz_matrix *mat, pdf_obj *res, fz_buffer *contents)
{
- pdf_update_stream(ctx, doc, form, buffer, 0);
+ pdf_dict_put_rect(ctx, form, PDF_NAME(BBox), bbox);
+ if (mat)
+ pdf_dict_put_matrix(ctx, form, PDF_NAME(Matrix), mat);
+ else
+ pdf_dict_del(ctx, form, PDF_NAME(Matrix));
+ if (res)
+ pdf_dict_put(ctx, form, PDF_NAME(Resources), res);
+ else
+ pdf_dict_del(ctx, form, PDF_NAME(Resources));
+ pdf_update_stream(ctx, doc, form, contents, 0);
}