summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-page.c
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2015-03-20 17:02:35 +0000
committerRobin Watts <robin.watts@artifex.com>2015-03-24 19:49:58 +0000
commitf533104d6e66b3fc6d3b63b98ec7fe4fb175b366 (patch)
tree9b26b57a66dcb5124c568a9826311d41292a6056 /source/pdf/pdf-page.c
parente0f638b398b2362f5843ea0c1907f678cfa8e278 (diff)
downloadmupdf-f533104d6e66b3fc6d3b63b98ec7fe4fb175b366.tar.xz
Rework handling of PDF names for speed and memory.
Currently, every PDF name is allocated in a pdf_obj structure, and comparisons are done using strcmp. Given that we can predict most of the PDF names we'll use in a given file, this seems wasteful. The pdf_obj type is opaque outside the pdf-object.c file, so we can abuse it slightly without anyone outside knowing. We collect a sorted list of names used in PDF (resources/pdf/names.txt), and we add a utility (namedump) that preprocesses this into 2 header files. The first (include/mupdf/pdf/pdf-names-table.h, included as part of include/mupdf/pdf/object.h), defines a set of "PDF_NAME_xxxx" entries. These are pdf_obj *'s that callers can use to mean "A PDF object that means literal name 'xxxx'" The second (source/pdf/pdf-name-impl.h) is a C array of names. We therefore update the code so that rather than passing "xxxx" to functions (such as pdf_dict_gets(...)) we now pass PDF_NAME_xxxx (to pdf_dict_get(...)). This is a fairly natural (if widespread) change. The pdf_dict_getp (and sibling) functions that take a path (e.g. "foo/bar/baz") are therefore supplemented with equivalents that take a list (pdf_dict_getl(... , PDF_NAME_foo, PDF_NAME_bar, PDF_NAME_baz, NULL)). The actual implementation of this relies on the fact that small pointer values are never valid values. For a given pdf_obj *p, if NULL < (intptr_t)p < PDF_NAME__LIMIT then p is a literal entry in the name table. This enables us to do fast pointer compares and to skip expensive strcmps. Also, bring "null", "true" and "false" into the same style as PDF names. Rather than using full pdf_obj structures for null/true/false, use special pointer values just above the PDF_NAME_ table. This saves memory and makes comparisons easier.
Diffstat (limited to 'source/pdf/pdf-page.c')
-rw-r--r--source/pdf/pdf-page.c142
1 files changed, 71 insertions, 71 deletions
diff --git a/source/pdf/pdf-page.c b/source/pdf/pdf-page.c
index 7917afbf..588ba093 100644
--- a/source/pdf/pdf-page.c
+++ b/source/pdf/pdf-page.c
@@ -36,7 +36,7 @@ pdf_lookup_page_loc_imp(fz_context *ctx, pdf_document *doc, pdf_obj *node, int *
{
do
{
- kids = pdf_dict_gets(ctx, node, "Kids");
+ kids = pdf_dict_get(ctx, node, PDF_NAME_Kids);
len = pdf_array_len(ctx, kids);
if (len == 0)
@@ -62,10 +62,10 @@ pdf_lookup_page_loc_imp(fz_context *ctx, pdf_document *doc, pdf_obj *node, int *
for (i = 0; i < len; i++)
{
pdf_obj *kid = pdf_array_get(ctx, kids, i);
- char *type = pdf_to_name(ctx, pdf_dict_gets(ctx, kid, "Type"));
- if (*type ? !strcmp(type, "Pages") : pdf_dict_gets(ctx, kid, "Kids") && !pdf_dict_gets(ctx, kid, "MediaBox"))
+ pdf_obj *type = pdf_dict_get(ctx, kid, PDF_NAME_Type);
+ if (type ? pdf_name_eq(ctx, type, PDF_NAME_Pages) : pdf_dict_get(ctx, kid, PDF_NAME_Kids) && !pdf_dict_get(ctx, kid, PDF_NAME_MediaBox))
{
- int count = pdf_to_int(ctx, pdf_dict_gets(ctx, kid, "Count"));
+ int count = pdf_to_int(ctx, pdf_dict_get(ctx, kid, PDF_NAME_Count));
if (*skip < count)
{
node = kid;
@@ -78,8 +78,8 @@ pdf_lookup_page_loc_imp(fz_context *ctx, pdf_document *doc, pdf_obj *node, int *
}
else
{
- if (*type ? strcmp(type, "Page") != 0 : !pdf_dict_gets(ctx, kid, "MediaBox"))
- fz_warn(ctx, "non-page object in page tree (%s)", type);
+ if (type ? !pdf_name_eq(ctx, type, PDF_NAME_Page) != 0 : !pdf_dict_get(ctx, kid, PDF_NAME_MediaBox))
+ fz_warn(ctx, "non-page object in page tree (%s)", pdf_to_name(ctx, type));
if (*skip == 0)
{
if (parentp) *parentp = node;
@@ -114,8 +114,8 @@ pdf_lookup_page_loc_imp(fz_context *ctx, pdf_document *doc, pdf_obj *node, int *
pdf_obj *
pdf_lookup_page_loc(fz_context *ctx, pdf_document *doc, int needle, pdf_obj **parentp, int *indexp)
{
- pdf_obj *root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root");
- pdf_obj *node = pdf_dict_gets(ctx, root, "Pages");
+ pdf_obj *root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root);
+ pdf_obj *node = pdf_dict_get(ctx, root, PDF_NAME_Pages);
int skip = needle;
pdf_obj *hit;
@@ -137,16 +137,16 @@ pdf_lookup_page_obj(fz_context *ctx, pdf_document *doc, int needle)
static int
pdf_count_pages_before_kid(fz_context *ctx, pdf_document *doc, pdf_obj *parent, int kid_num)
{
- pdf_obj *kids = pdf_dict_gets(ctx, parent, "Kids");
+ pdf_obj *kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids);
int i, total = 0, len = pdf_array_len(ctx, kids);
for (i = 0; i < len; i++)
{
pdf_obj *kid = pdf_array_get(ctx, kids, i);
if (pdf_to_num(ctx, kid) == kid_num)
return total;
- if (!strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, kid, "Type")), "Pages"))
+ if (pdf_name_eq(ctx, pdf_dict_get(ctx, kid, PDF_NAME_Type), PDF_NAME_Pages))
{
- pdf_obj *count = pdf_dict_gets(ctx, kid, "Count");
+ pdf_obj *count = pdf_dict_get(ctx, kid, PDF_NAME_Count);
int n = pdf_to_int(ctx, count);
if (!pdf_is_int(ctx, count) || n < 0)
fz_throw(ctx, FZ_ERROR_GENERIC, "illegal or missing count in pages tree");
@@ -165,10 +165,10 @@ pdf_lookup_page_number(fz_context *ctx, pdf_document *doc, pdf_obj *node)
int total = 0;
pdf_obj *parent, *parent2;
- if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, node, "Type")), "Page") != 0)
+ if (!pdf_name_eq(ctx, pdf_dict_get(ctx, node, PDF_NAME_Type), PDF_NAME_Page) != 0)
fz_throw(ctx, FZ_ERROR_GENERIC, "invalid page object");
- parent2 = parent = pdf_dict_gets(ctx, node, "Parent");
+ parent2 = parent = pdf_dict_get(ctx, node, PDF_NAME_Parent);
fz_var(parent);
fz_try(ctx)
{
@@ -178,7 +178,7 @@ pdf_lookup_page_number(fz_context *ctx, pdf_document *doc, pdf_obj *node)
fz_throw(ctx, FZ_ERROR_GENERIC, "cycle in page tree (parents)");
total += pdf_count_pages_before_kid(ctx, doc, parent, needle);
needle = pdf_to_num(ctx, parent);
- parent = pdf_dict_gets(ctx, parent, "Parent");
+ parent = pdf_dict_get(ctx, parent, PDF_NAME_Parent);
}
}
fz_always(ctx)
@@ -189,7 +189,7 @@ pdf_lookup_page_number(fz_context *ctx, pdf_document *doc, pdf_obj *node)
pdf_unmark_obj(ctx, parent2);
if (parent2 == parent)
break;
- parent2 = pdf_dict_gets(ctx, parent2, "Parent");
+ parent2 = pdf_dict_get(ctx, parent2, PDF_NAME_Parent);
}
}
fz_catch(ctx)
@@ -201,7 +201,7 @@ pdf_lookup_page_number(fz_context *ctx, pdf_document *doc, pdf_obj *node)
}
static pdf_obj *
-pdf_lookup_inherited_page_item(fz_context *ctx, pdf_document *doc, pdf_obj *node, const char *key)
+pdf_lookup_inherited_page_item(fz_context *ctx, pdf_document *doc, pdf_obj *node, pdf_obj *key)
{
pdf_obj *node2 = node;
pdf_obj *val;
@@ -212,12 +212,12 @@ pdf_lookup_inherited_page_item(fz_context *ctx, pdf_document *doc, pdf_obj *node
{
do
{
- val = pdf_dict_gets(ctx, node, key);
+ val = pdf_dict_get(ctx, node, key);
if (val)
break;
if (pdf_mark_obj(ctx, node))
fz_throw(ctx, FZ_ERROR_GENERIC, "cycle in page tree (parents)");
- node = pdf_dict_gets(ctx, node, "Parent");
+ node = pdf_dict_get(ctx, node, PDF_NAME_Parent);
}
while (node);
}
@@ -228,7 +228,7 @@ pdf_lookup_inherited_page_item(fz_context *ctx, pdf_document *doc, pdf_obj *node
pdf_unmark_obj(ctx, node2);
if (node2 == node)
break;
- node2 = pdf_dict_gets(ctx, node2, "Parent");
+ node2 = pdf_dict_get(ctx, node2, PDF_NAME_Parent);
}
while (node2);
}
@@ -247,8 +247,8 @@ static int pdf_resources_use_blending(fz_context *ctx, pdf_document *doc, pdf_ob
static int
pdf_extgstate_uses_blending(fz_context *ctx, pdf_document *doc, pdf_obj *dict)
{
- pdf_obj *obj = pdf_dict_gets(ctx, dict, "BM");
- if (pdf_is_name(ctx, obj) && strcmp(pdf_to_name(ctx, obj), "Normal"))
+ pdf_obj *obj = pdf_dict_get(ctx, dict, PDF_NAME_BM);
+ if (obj && !pdf_name_eq(ctx, obj, PDF_NAME_Normal))
return 1;
return 0;
}
@@ -257,18 +257,18 @@ static int
pdf_pattern_uses_blending(fz_context *ctx, pdf_document *doc, pdf_obj *dict)
{
pdf_obj *obj;
- obj = pdf_dict_gets(ctx, dict, "Resources");
+ obj = pdf_dict_get(ctx, dict, PDF_NAME_Resources);
if (pdf_resources_use_blending(ctx, doc, obj))
return 1;
- obj = pdf_dict_gets(ctx, dict, "ExtGState");
+ obj = pdf_dict_get(ctx, dict, PDF_NAME_ExtGState);
return pdf_extgstate_uses_blending(ctx, doc, obj);
}
static int
pdf_xobject_uses_blending(fz_context *ctx, pdf_document *doc, pdf_obj *dict)
{
- pdf_obj *obj = pdf_dict_gets(ctx, dict, "Resources");
- if (!strcmp(pdf_to_name(ctx, pdf_dict_getp(ctx, dict, "Group/S")), "Transparency"))
+ pdf_obj *obj = pdf_dict_get(ctx, dict, PDF_NAME_Resources);
+ if (pdf_name_eq(ctx, pdf_dict_getp(ctx, dict, "Group/S"), PDF_NAME_Transparency))
return 1;
return pdf_resources_use_blending(ctx, doc, obj);
}
@@ -292,19 +292,19 @@ pdf_resources_use_blending(fz_context *ctx, pdf_document *doc, pdf_obj *rdb)
fz_try(ctx)
{
- obj = pdf_dict_gets(ctx, rdb, "ExtGState");
+ obj = pdf_dict_get(ctx, rdb, PDF_NAME_ExtGState);
n = pdf_dict_len(ctx, obj);
for (i = 0; i < n; i++)
if (pdf_extgstate_uses_blending(ctx, doc, pdf_dict_get_val(ctx, obj, i)))
goto found;
- obj = pdf_dict_gets(ctx, rdb, "Pattern");
+ obj = pdf_dict_get(ctx, rdb, PDF_NAME_Pattern);
n = pdf_dict_len(ctx, obj);
for (i = 0; i < n; i++)
if (pdf_pattern_uses_blending(ctx, doc, pdf_dict_get_val(ctx, obj, i)))
goto found;
- obj = pdf_dict_gets(ctx, rdb, "XObject");
+ obj = pdf_dict_get(ctx, rdb, PDF_NAME_XObject);
n = pdf_dict_len(ctx, obj);
for (i = 0; i < n; i++)
if (pdf_xobject_uses_blending(ctx, doc, pdf_dict_get_val(ctx, obj, i)))
@@ -331,43 +331,43 @@ found:
static void
pdf_load_transition(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_obj *transdict)
{
- char *name;
+ pdf_obj *name;
pdf_obj *obj;
int type;
- obj = pdf_dict_gets(ctx, transdict, "D");
+ obj = pdf_dict_get(ctx, transdict, PDF_NAME_D);
page->transition.duration = (obj ? pdf_to_real(ctx, obj) : 1);
- page->transition.vertical = (pdf_to_name(ctx, pdf_dict_gets(ctx, transdict, "Dm"))[0] != 'H');
- page->transition.outwards = (pdf_to_name(ctx, pdf_dict_gets(ctx, transdict, "M"))[0] != 'I');
+ page->transition.vertical = !pdf_name_eq(ctx, pdf_dict_get(ctx, transdict, PDF_NAME_Dm), PDF_NAME_H);
+ page->transition.outwards = !pdf_name_eq(ctx, pdf_dict_get(ctx, transdict, PDF_NAME_M), PDF_NAME_I);
/* FIXME: If 'Di' is None, it should be handled differently, but
* this only affects Fly, and we don't implement that currently. */
- page->transition.direction = (pdf_to_int(ctx, pdf_dict_gets(ctx, transdict, "Di")));
+ page->transition.direction = (pdf_to_int(ctx, pdf_dict_get(ctx, transdict, PDF_NAME_Di)));
/* FIXME: Read SS for Fly when we implement it */
/* FIXME: Read B for Fly when we implement it */
- name = pdf_to_name(ctx, pdf_dict_gets(ctx, transdict, "S"));
- if (!strcmp(name, "Split"))
+ name = pdf_dict_get(ctx, transdict, PDF_NAME_S);
+ if (pdf_name_eq(ctx, name, PDF_NAME_Split))
type = FZ_TRANSITION_SPLIT;
- else if (!strcmp(name, "Blinds"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Blinds))
type = FZ_TRANSITION_BLINDS;
- else if (!strcmp(name, "Box"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Box))
type = FZ_TRANSITION_BOX;
- else if (!strcmp(name, "Wipe"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Wipe))
type = FZ_TRANSITION_WIPE;
- else if (!strcmp(name, "Dissolve"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Dissolve))
type = FZ_TRANSITION_DISSOLVE;
- else if (!strcmp(name, "Glitter"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Glitter))
type = FZ_TRANSITION_GLITTER;
- else if (!strcmp(name, "Fly"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Fly))
type = FZ_TRANSITION_FLY;
- else if (!strcmp(name, "Push"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Push))
type = FZ_TRANSITION_PUSH;
- else if (!strcmp(name, "Cover"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Cover))
type = FZ_TRANSITION_COVER;
- else if (!strcmp(name, "Uncover"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Uncover))
type = FZ_TRANSITION_UNCOVER;
- else if (!strcmp(name, "Fade"))
+ else if (pdf_name_eq(ctx, name, PDF_NAME_Fade))
type = FZ_TRANSITION_FADE;
else
type = FZ_TRANSITION_NONE;
@@ -464,13 +464,13 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number)
page->me = pdf_keep_obj(ctx, pageobj);
page->incomplete = 0;
- obj = pdf_dict_gets(ctx, pageobj, "UserUnit");
+ obj = pdf_dict_get(ctx, pageobj, PDF_NAME_UserUnit);
if (pdf_is_real(ctx, obj))
userunit = pdf_to_real(ctx, obj);
else
userunit = 1;
- pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, "MediaBox"), &mediabox);
+ pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, PDF_NAME_MediaBox), &mediabox);
if (fz_is_empty_rect(&mediabox))
{
fz_warn(ctx, "cannot find page size for page %d", number + 1);
@@ -480,7 +480,7 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number)
mediabox.y1 = 792;
}
- pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, "CropBox"), &cropbox);
+ pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, PDF_NAME_CropBox), &cropbox);
if (!fz_is_empty_rect(&cropbox))
fz_intersect_rect(&mediabox, &cropbox);
@@ -495,7 +495,7 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number)
page->mediabox = fz_unit_rect;
}
- page->rotate = pdf_to_int(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, "Rotate"));
+ page->rotate = pdf_to_int(ctx, pdf_lookup_inherited_page_item(ctx, doc, pageobj, PDF_NAME_Rotate));
/* Snap page->rotate to 0, 90, 180 or 270 */
if (page->rotate < 0)
page->rotate = 360 - ((-page->rotate) % 360);
@@ -513,7 +513,7 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number)
fz_try(ctx)
{
- obj = pdf_dict_gets(ctx, pageobj, "Annots");
+ obj = pdf_dict_get(ctx, pageobj, PDF_NAME_Annots);
if (obj)
{
page->links = pdf_load_link_annots(ctx, doc, obj, &page->ctm);
@@ -529,9 +529,9 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number)
page->links = NULL;
}
- page->duration = pdf_to_real(ctx, pdf_dict_gets(ctx, pageobj, "Dur"));
+ page->duration = pdf_to_real(ctx, pdf_dict_get(ctx, pageobj, PDF_NAME_Dur));
- obj = pdf_dict_gets(ctx, pageobj, "Trans");
+ obj = pdf_dict_get(ctx, pageobj, PDF_NAME_Trans);
page->transition_present = (obj != NULL);
if (obj)
{
@@ -539,18 +539,18 @@ pdf_load_page(fz_context *ctx, pdf_document *doc, int number)
}
// TODO: inherit
- page->resources = pdf_lookup_inherited_page_item(ctx, doc, pageobj, "Resources");
+ page->resources = pdf_lookup_inherited_page_item(ctx, doc, pageobj, PDF_NAME_Resources);
if (page->resources)
pdf_keep_obj(ctx, page->resources);
- obj = pdf_dict_gets(ctx, pageobj, "Contents");
+ obj = pdf_dict_get(ctx, pageobj, PDF_NAME_Contents);
fz_try(ctx)
{
page->contents = pdf_keep_obj(ctx, obj);
if (pdf_resources_use_blending(ctx, doc, page->resources))
page->transparency = 1;
- else if (!strcmp(pdf_to_name(ctx, pdf_dict_getp(ctx, pageobj, "Group/S")), "Transparency"))
+ else if (pdf_name_eq(ctx, pdf_dict_getp(ctx, pageobj, "Group/S"), PDF_NAME_Transparency))
page->transparency = 1;
for (annot = page->annots; annot && !page->transparency; annot = annot->next)
@@ -577,14 +577,14 @@ pdf_delete_page(fz_context *ctx, pdf_document *doc, int at)
int i;
pdf_lookup_page_loc(ctx, doc, at, &parent, &i);
- kids = pdf_dict_gets(ctx, parent, "Kids");
+ kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids);
pdf_array_delete(ctx, kids, i);
while (parent)
{
- int count = pdf_to_int(ctx, pdf_dict_gets(ctx, parent, "Count"));
- pdf_dict_puts_drop(ctx, parent, "Count", pdf_new_int(ctx, doc, count - 1));
- parent = pdf_dict_gets(ctx, parent, "Parent");
+ int count = pdf_to_int(ctx, pdf_dict_get(ctx, parent, PDF_NAME_Count));
+ pdf_dict_put_drop(ctx, parent, PDF_NAME_Count, pdf_new_int(ctx, doc, count - 1));
+ parent = pdf_dict_get(ctx, parent, PDF_NAME_Parent);
}
doc->page_count = 0; /* invalidate cached value */
@@ -604,12 +604,12 @@ pdf_insert_page(fz_context *ctx, pdf_document *doc, pdf_page *page, int at)
{
if (count == 0)
{
- pdf_obj *root = pdf_dict_gets(ctx, pdf_trailer(ctx, doc), "Root");
- parent = pdf_dict_gets(ctx, root, "Pages");
+ pdf_obj *root = pdf_dict_get(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root);
+ parent = pdf_dict_get(ctx, root, PDF_NAME_Pages);
if (!parent)
fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find page tree");
- kids = pdf_dict_gets(ctx, parent, "Kids");
+ kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids);
if (!kids)
fz_throw(ctx, FZ_ERROR_GENERIC, "malformed page tree");
@@ -625,25 +625,25 @@ pdf_insert_page(fz_context *ctx, pdf_document *doc, pdf_page *page, int at)
/* append after last page */
pdf_lookup_page_loc(ctx, doc, count - 1, &parent, &i);
- kids = pdf_dict_gets(ctx, parent, "Kids");
+ kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids);
pdf_array_insert(ctx, kids, page_ref, i + 1);
}
else
{
/* insert before found page */
pdf_lookup_page_loc(ctx, doc, at, &parent, &i);
- kids = pdf_dict_gets(ctx, parent, "Kids");
+ kids = pdf_dict_get(ctx, parent, PDF_NAME_Kids);
pdf_array_insert(ctx, kids, page_ref, i);
}
- pdf_dict_puts(ctx, page->me, "Parent", parent);
+ pdf_dict_put(ctx, page->me, PDF_NAME_Parent, parent);
/* Adjust page counts */
while (parent)
{
- int count = pdf_to_int(ctx, pdf_dict_gets(ctx, parent, "Count"));
- pdf_dict_puts_drop(ctx, parent, "Count", pdf_new_int(ctx, doc, count + 1));
- parent = pdf_dict_gets(ctx, parent, "Parent");
+ int count = pdf_to_int(ctx, pdf_dict_get(ctx, parent, PDF_NAME_Count));
+ pdf_dict_put_drop(ctx, parent, PDF_NAME_Count, pdf_new_int(ctx, doc, count + 1));
+ parent = pdf_dict_get(ctx, parent, PDF_NAME_Parent);
}
}
@@ -686,13 +686,13 @@ pdf_create_page(fz_context *ctx, pdf_document *doc, fz_rect mediabox, int res, i
page->annots = NULL;
page->me = pageobj = pdf_new_dict(ctx, doc, 4);
- pdf_dict_puts_drop(ctx, pageobj, "Type", pdf_new_name(ctx, doc, "Page"));
+ pdf_dict_put_drop(ctx, pageobj, PDF_NAME_Type, PDF_NAME_Page);
page->mediabox.x0 = fz_min(mediabox.x0, mediabox.x1) * userunit;
page->mediabox.y0 = fz_min(mediabox.y0, mediabox.y1) * userunit;
page->mediabox.x1 = fz_max(mediabox.x0, mediabox.x1) * userunit;
page->mediabox.y1 = fz_max(mediabox.y0, mediabox.y1) * userunit;
- pdf_dict_puts_drop(ctx, pageobj, "MediaBox", pdf_new_rect(ctx, doc, &page->mediabox));
+ pdf_dict_put_drop(ctx, pageobj, PDF_NAME_MediaBox, pdf_new_rect(ctx, doc, &page->mediabox));
/* Snap page->rotate to 0, 90, 180 or 270 */
if (page->rotate < 0)
@@ -702,7 +702,7 @@ pdf_create_page(fz_context *ctx, pdf_document *doc, fz_rect mediabox, int res, i
page->rotate = 90*((page->rotate + 45)/90);
if (page->rotate > 360)
page->rotate = 0;
- pdf_dict_puts_drop(ctx, pageobj, "Rotate", pdf_new_int(ctx, doc, page->rotate));
+ pdf_dict_put_drop(ctx, pageobj, PDF_NAME_Rotate, pdf_new_int(ctx, doc, page->rotate));
fz_pre_rotate(fz_scale(&ctm, 1, -1), -page->rotate);
realbox = page->mediabox;