本文整理汇总了C++中pdf_to_name函数的典型用法代码示例。如果您正苦于以下问题:C++ pdf_to_name函数的具体用法?C++ pdf_to_name怎么用?C++ pdf_to_name使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pdf_to_name函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: pdf_extgstate_uses_blending
static int
pdf_extgstate_uses_blending(pdf_document *doc, pdf_obj *dict)
{
pdf_obj *obj = pdf_dict_gets(dict, "BM");
/* SumatraPDF: properly support /BM arrays */
if (pdf_is_array(obj))
{
int k;
for (k = 0; k < pdf_array_len(obj); k++)
{
char *bm = pdf_to_name(pdf_array_get(obj, k));
if (!strcmp(bm, "Normal") || fz_lookup_blendmode(bm) > 0)
break;
}
obj = pdf_array_get(obj, k);
}
if (pdf_is_name(obj) && strcmp(pdf_to_name(obj), "Normal"))
return 1;
/* SumatraPDF: support transfer functions */
obj = pdf_dict_getsa(dict, "TR", "TR2");
if (obj && !pdf_is_name(obj))
return 1;
return 0;
}
示例2: pdf_load_font_descriptor
static void
pdf_load_font_descriptor(pdf_font_desc *fontdesc, pdf_document *xref, pdf_obj *dict, char *collection, char *basefont)
{
pdf_obj *obj1, *obj2, *obj3, *obj;
char *fontname;
char *origname;
FT_Face face;
fz_context *ctx = xref->ctx;
if (!strchr(basefont, ',') || strchr(basefont, '+'))
origname = pdf_to_name(pdf_dict_gets(dict, "FontName"));
else
origname = basefont;
fontname = clean_font_name(origname);
fontdesc->flags = pdf_to_int(pdf_dict_gets(dict, "Flags"));
fontdesc->italic_angle = pdf_to_real(pdf_dict_gets(dict, "ItalicAngle"));
fontdesc->ascent = pdf_to_real(pdf_dict_gets(dict, "Ascent"));
fontdesc->descent = pdf_to_real(pdf_dict_gets(dict, "Descent"));
fontdesc->cap_height = pdf_to_real(pdf_dict_gets(dict, "CapHeight"));
fontdesc->x_height = pdf_to_real(pdf_dict_gets(dict, "XHeight"));
fontdesc->missing_width = pdf_to_real(pdf_dict_gets(dict, "MissingWidth"));
obj1 = pdf_dict_gets(dict, "FontFile");
obj2 = pdf_dict_gets(dict, "FontFile2");
obj3 = pdf_dict_gets(dict, "FontFile3");
obj = obj1 ? obj1 : obj2 ? obj2 : obj3;
if (pdf_is_indirect(obj))
{
fz_try(ctx)
{
pdf_load_embedded_font(fontdesc, xref, obj);
}
fz_catch(ctx)
{
fz_warn(ctx, "ignored error when loading embedded font; attempting to load system font");
if (origname != fontname)
pdf_load_builtin_font(ctx, fontdesc, fontname);
else
pdf_load_system_font(ctx, fontdesc, fontname, collection);
/* RJW: "cannot load font descriptor (%d %d R)", pdf_to_num(dict), pdf_to_gen(dict) */
}
}
else
{
if (origname != fontname)
示例3: pdfout_data_scalar_from_pdf
pdfout_data *
pdfout_data_scalar_from_pdf (fz_context *ctx, pdf_obj *obj)
{
const char *s;
if (pdf_is_null (ctx, obj))
return pdfout_data_scalar_new (ctx, "null", strlen ("null"));
else if (pdf_is_bool (ctx, obj))
{
if (pdf_to_bool (ctx, obj))
s = "true";
else
s = "false";
return pdfout_data_scalar_new (ctx, s, strlen (s));
}
else if (pdf_is_name (ctx, obj))
{
s = pdf_to_name (ctx, obj);
return pdfout_data_scalar_new (ctx, s, strlen (s));
}
else if (pdf_is_string (ctx, obj))
{
int len;
char *str = pdfout_str_obj_to_utf8 (ctx, obj, &len);
pdfout_data *result = pdfout_data_scalar_new (ctx, str, len);
free (str);
return result;
}
else if (pdf_is_int (ctx, obj))
{
int n = pdf_to_int (ctx, obj);
char buf[200];
int len = pdfout_snprintf (ctx, buf, "%d", n);
return pdfout_data_scalar_new (ctx, buf, len);
}
else if (pdf_is_real (ctx, obj))
{
float f = pdf_to_real (ctx, obj);
char buf[200];
int len = pdfout_snprintf (ctx, buf, "%g", f);
return pdfout_data_scalar_new (ctx, buf, len);
}
else
abort();
}
示例4: pdf_write_widget_appearance
static void
pdf_write_widget_appearance(fz_context *ctx, pdf_annot *annot, fz_buffer *buf,
fz_rect *rect, fz_rect *bbox, fz_matrix *matrix, pdf_obj **res)
{
pdf_obj *ft = pdf_dict_get_inheritable(ctx, annot->obj, PDF_NAME(FT));
if (pdf_name_eq(ctx, ft, PDF_NAME(Tx)))
{
int ff = pdf_field_flags(ctx, annot->obj);
char *format = NULL;
const char *text = NULL;
if (!annot->ignore_trigger_events)
{
format = pdf_field_event_format(ctx, annot->page->doc, annot->obj);
if (format)
text = format;
else
text = pdf_field_value(ctx, annot->obj);
}
else
{
text = pdf_field_value(ctx, annot->obj);
}
fz_try(ctx)
pdf_write_tx_widget_appearance(ctx, annot, buf, rect, bbox, matrix, res, text, ff);
fz_always(ctx)
fz_free(ctx, format);
fz_catch(ctx)
fz_rethrow(ctx);
}
else if (pdf_name_eq(ctx, ft, PDF_NAME(Ch)))
{
pdf_write_ch_widget_appearance(ctx, annot, buf, rect, bbox, matrix, res);
}
else if (pdf_name_eq(ctx, ft, PDF_NAME(Sig)))
{
pdf_write_sig_widget_appearance(ctx, annot, buf, rect, bbox, matrix, res);
}
else
{
fz_throw(ctx, FZ_ERROR_GENERIC, "cannot create appearance stream for %s widgets", pdf_to_name(ctx, ft));
}
}
示例5: pdf_lookup_page_number
int
pdf_lookup_page_number(pdf_document *doc, pdf_obj *node)
{
fz_context *ctx = doc->ctx;
int needle = pdf_to_num(node);
int total = 0;
pdf_obj *parent, *parent2;
if (strcmp(pdf_to_name(pdf_dict_gets(node, "Type")), "Page") != 0)
fz_throw(ctx, FZ_ERROR_GENERIC, "invalid page object");
parent2 = parent = pdf_dict_gets(node, "Parent");
fz_var(parent);
fz_try(ctx)
{
while (pdf_is_dict(parent))
{
if (pdf_mark_obj(parent))
fz_throw(ctx, FZ_ERROR_GENERIC, "cycle in page tree (parents)");
total += pdf_count_pages_before_kid(doc, parent, needle);
needle = pdf_to_num(parent);
parent = pdf_dict_gets(parent, "Parent");
}
}
fz_always(ctx)
{
/* Run back and unmark */
while (parent2)
{
pdf_unmark_obj(parent2);
if (parent2 == parent)
break;
parent2 = pdf_dict_gets(parent2, "Parent");
}
}
fz_catch(ctx)
{
fz_rethrow(ctx);
}
return total;
}
示例6: pdf_annot_icon_name
const char *
pdf_annot_icon_name(fz_context *ctx, pdf_annot *annot)
{
pdf_obj *name;
check_allowed_subtypes(ctx, annot, PDF_NAME(Name), icon_name_subtypes);
name = pdf_dict_get(ctx, annot->obj, PDF_NAME(Name));
if (!name)
{
pdf_obj *subtype = pdf_dict_get(ctx, annot->obj, PDF_NAME(Subtype));
if (pdf_name_eq(ctx, subtype, PDF_NAME(Text)))
return "Note";
if (pdf_name_eq(ctx, subtype, PDF_NAME(Stamp)))
return "Draft";
if (pdf_name_eq(ctx, subtype, PDF_NAME(FileAttachment)))
return "PushPin";
if (pdf_name_eq(ctx, subtype, PDF_NAME(Sound)))
return "Speaker";
}
return pdf_to_name(ctx, name);
}
示例7: pdf_count_pages_before_kid
static int
pdf_count_pages_before_kid(pdf_document *doc, pdf_obj *parent, int kid_num)
{
pdf_obj *kids = pdf_dict_gets(parent, "Kids");
int i, total = 0, len = pdf_array_len(kids);
for (i = 0; i < len; i++)
{
pdf_obj *kid = pdf_array_get(kids, i);
if (pdf_to_num(kid) == kid_num)
return total;
if (!strcmp(pdf_to_name(pdf_dict_gets(kid, "Type")), "Pages"))
{
pdf_obj *count = pdf_dict_gets(kid, "Count");
int n = pdf_to_int(count);
if (count == NULL || n <= 0)
fz_throw(doc->ctx, FZ_ERROR_GENERIC, "illegal or missing count in pages tree");
total += n;
}
else
total++;
}
fz_throw(doc->ctx, FZ_ERROR_GENERIC, "kid not found in parent's kids array");
}
示例8: pdf_load_embedded_cmap
/*
* Load CMap stream in PDF file
*/
pdf_cmap *
pdf_load_embedded_cmap(pdf_document *doc, pdf_obj *stmobj)
{
fz_stream *file = NULL;
pdf_cmap *cmap = NULL;
pdf_cmap *usecmap;
pdf_obj *wmode;
pdf_obj *obj = NULL;
fz_context *ctx = doc->ctx;
int phase = 0;
fz_var(phase);
fz_var(obj);
fz_var(file);
fz_var(cmap);
if (pdf_obj_marked(stmobj))
fz_throw(ctx, FZ_ERROR_GENERIC, "Recursion in embedded cmap");
if ((cmap = pdf_find_item(ctx, pdf_free_cmap_imp, stmobj)) != NULL)
{
return cmap;
}
fz_try(ctx)
{
file = pdf_open_stream(doc, pdf_to_num(stmobj), pdf_to_gen(stmobj));
phase = 1;
cmap = pdf_load_cmap(ctx, file);
phase = 2;
fz_close(file);
file = NULL;
wmode = pdf_dict_gets(stmobj, "WMode");
if (pdf_is_int(wmode))
pdf_set_cmap_wmode(ctx, cmap, pdf_to_int(wmode));
obj = pdf_dict_gets(stmobj, "UseCMap");
if (pdf_is_name(obj))
{
usecmap = pdf_load_system_cmap(ctx, pdf_to_name(obj));
pdf_set_usecmap(ctx, cmap, usecmap);
pdf_drop_cmap(ctx, usecmap);
}
else if (pdf_is_indirect(obj))
{
phase = 3;
pdf_mark_obj(obj);
usecmap = pdf_load_embedded_cmap(doc, obj);
pdf_unmark_obj(obj);
phase = 4;
pdf_set_usecmap(ctx, cmap, usecmap);
pdf_drop_cmap(ctx, usecmap);
}
pdf_store_item(ctx, stmobj, cmap, pdf_cmap_size(ctx, cmap));
}
fz_catch(ctx)
{
if (file)
fz_close(file);
if (cmap)
pdf_drop_cmap(ctx, cmap);
if (phase < 1)
fz_rethrow_message(ctx, "cannot open cmap stream (%d %d R)", pdf_to_num(stmobj), pdf_to_gen(stmobj));
else if (phase < 2)
fz_rethrow_message(ctx, "cannot parse cmap stream (%d %d R)", pdf_to_num(stmobj), pdf_to_gen(stmobj));
else if (phase < 3)
fz_rethrow_message(ctx, "cannot load system usecmap '%s'", pdf_to_name(obj));
else
{
if (phase == 3)
pdf_unmark_obj(obj);
fz_rethrow_message(ctx, "cannot load embedded usecmap (%d %d R)", pdf_to_num(obj), pdf_to_gen(obj));
}
}
return cmap;
}
示例9: pdf_process_extgstate
static void
pdf_process_extgstate(fz_context *ctx, pdf_processor *proc, pdf_csi *csi, pdf_obj *dict)
{
pdf_obj *obj;
obj = pdf_dict_get(ctx, dict, PDF_NAME_LW);
if (pdf_is_number(ctx, obj) && proc->op_w)
proc->op_w(ctx, proc, pdf_to_real(ctx, obj));
obj = pdf_dict_get(ctx, dict, PDF_NAME_LC);
if (pdf_is_int(ctx, obj) && proc->op_J)
proc->op_J(ctx, proc, fz_clampi(pdf_to_int(ctx, obj), 0, 2));
obj = pdf_dict_get(ctx, dict, PDF_NAME_LJ);
if (pdf_is_int(ctx, obj) && proc->op_j)
proc->op_j(ctx, proc, fz_clampi(pdf_to_int(ctx, obj), 0, 2));
obj = pdf_dict_get(ctx, dict, PDF_NAME_ML);
if (pdf_is_number(ctx, obj) && proc->op_M)
proc->op_M(ctx, proc, pdf_to_real(ctx, obj));
obj = pdf_dict_get(ctx, dict, PDF_NAME_D);
if (pdf_is_array(ctx, obj) && proc->op_d)
{
pdf_obj *dash_array = pdf_array_get(ctx, obj, 0);
pdf_obj *dash_phase = pdf_array_get(ctx, obj, 1);
proc->op_d(ctx, proc, dash_array, pdf_to_real(ctx, dash_phase));
}
obj = pdf_dict_get(ctx, dict, PDF_NAME_RI);
if (pdf_is_name(ctx, obj) && proc->op_ri)
proc->op_ri(ctx, proc, pdf_to_name(ctx, obj));
obj = pdf_dict_get(ctx, dict, PDF_NAME_FL);
if (pdf_is_number(ctx, obj) && proc->op_i)
proc->op_i(ctx, proc, pdf_to_real(ctx, obj));
obj = pdf_dict_get(ctx, dict, PDF_NAME_Font);
if (pdf_is_array(ctx, obj) && proc->op_Tf)
{
pdf_obj *font_ref = pdf_array_get(ctx, obj, 0);
pdf_obj *font_size = pdf_array_get(ctx, obj, 1);
pdf_font_desc *font = load_font_or_hail_mary(ctx, csi->doc, csi->rdb, font_ref, 0, csi->cookie);
fz_try(ctx)
proc->op_Tf(ctx, proc, "ExtGState", font, pdf_to_real(ctx, font_size));
fz_always(ctx)
pdf_drop_font(ctx, font);
fz_catch(ctx)
fz_rethrow(ctx);
}
/* transfer functions */
obj = pdf_dict_get(ctx, dict, PDF_NAME_TR2);
if (pdf_is_name(ctx, obj))
if (!pdf_name_eq(ctx, obj, PDF_NAME_Identity) && !pdf_name_eq(ctx, obj, PDF_NAME_Default))
fz_warn(ctx, "ignoring transfer function");
if (!obj) /* TR is ignored in the presence of TR2 */
{
pdf_obj *tr = pdf_dict_get(ctx, dict, PDF_NAME_TR);
if (pdf_is_name(ctx, tr))
if (!pdf_name_eq(ctx, tr, PDF_NAME_Identity))
fz_warn(ctx, "ignoring transfer function");
}
/* transparency state */
obj = pdf_dict_get(ctx, dict, PDF_NAME_CA);
if (pdf_is_number(ctx, obj) && proc->op_gs_CA)
proc->op_gs_CA(ctx, proc, pdf_to_real(ctx, obj));
obj = pdf_dict_get(ctx, dict, PDF_NAME_ca);
if (pdf_is_number(ctx, obj) && proc->op_gs_ca)
proc->op_gs_ca(ctx, proc, pdf_to_real(ctx, obj));
obj = pdf_dict_get(ctx, dict, PDF_NAME_BM);
if (pdf_is_array(ctx, obj))
obj = pdf_array_get(ctx, obj, 0);
if (pdf_is_name(ctx, obj) && proc->op_gs_BM)
proc->op_gs_BM(ctx, proc, pdf_to_name(ctx, obj));
obj = pdf_dict_get(ctx, dict, PDF_NAME_SMask);
if (proc->op_gs_SMask)
{
if (pdf_is_dict(ctx, obj))
{
pdf_xobject *xobj;
pdf_obj *group, *s, *bc, *tr;
float softmask_bc[FZ_MAX_COLORS];
fz_colorspace *colorspace;
int colorspace_n = 1;
int k, luminosity;
fz_var(xobj);
group = pdf_dict_get(ctx, obj, PDF_NAME_G);
if (!group)
fz_throw(ctx, FZ_ERROR_GENERIC, "cannot load softmask xobject (%d 0 R)", pdf_to_num(ctx, obj));
xobj = pdf_load_xobject(ctx, csi->doc, group);
//.........这里部分代码省略.........
示例10: pdf_load_xobject
pdf_xobject *
pdf_load_xobject(pdf_document *xref, pdf_obj *dict)
{
pdf_xobject *form;
pdf_obj *obj;
fz_context *ctx = xref->ctx;
if ((form = pdf_find_item(ctx, pdf_free_xobject_imp, dict)))
{
return form;
}
form = fz_malloc_struct(ctx, pdf_xobject);
FZ_INIT_STORABLE(form, 1, pdf_free_xobject_imp);
form->resources = NULL;
form->contents = NULL;
form->colorspace = NULL;
form->me = NULL;
/* Store item immediately, to avoid possible recursion if objects refer back to this one */
pdf_store_item(ctx, dict, form, pdf_xobject_size(form));
obj = pdf_dict_gets(dict, "BBox");
form->bbox = pdf_to_rect(ctx, obj);
obj = pdf_dict_gets(dict, "Matrix");
if (obj)
form->matrix = pdf_to_matrix(ctx, obj);
else
form->matrix = fz_identity;
form->isolated = 0;
form->knockout = 0;
form->transparency = 0;
obj = pdf_dict_gets(dict, "Group");
if (obj)
{
pdf_obj *attrs = obj;
form->isolated = pdf_to_bool(pdf_dict_gets(attrs, "I"));
form->knockout = pdf_to_bool(pdf_dict_gets(attrs, "K"));
obj = pdf_dict_gets(attrs, "S");
if (pdf_is_name(obj) && !strcmp(pdf_to_name(obj), "Transparency"))
form->transparency = 1;
obj = pdf_dict_gets(attrs, "CS");
if (obj)
{
form->colorspace = pdf_load_colorspace(xref, obj);
if (!form->colorspace)
fz_throw(ctx, "cannot load xobject colorspace");
}
}
form->resources = pdf_dict_gets(dict, "Resources");
if (form->resources)
pdf_keep_obj(form->resources);
fz_try(ctx)
{
form->contents = pdf_load_stream(xref, pdf_to_num(dict), pdf_to_gen(dict));
}
fz_catch(ctx)
{
pdf_remove_item(ctx, pdf_free_xobject_imp, dict);
pdf_drop_xobject(ctx, form);
fz_throw(ctx, "cannot load xobject content stream (%d %d R)", pdf_to_num(dict), pdf_to_gen(dict));
}
form->me = pdf_keep_obj(dict);
return form;
}
示例11: gatherimages
static void
gatherimages(int page, pdf_obj *pageref, pdf_obj *pageobj, pdf_obj *dict)
{
int i, n;
n = pdf_dict_len(dict);
for (i = 0; i < n; i++)
{
pdf_obj *imagedict;
pdf_obj *type;
pdf_obj *width;
pdf_obj *height;
pdf_obj *bpc = NULL;
pdf_obj *filter = NULL;
pdf_obj *cs = NULL;
pdf_obj *altcs;
int k;
imagedict = pdf_dict_get_val(dict, i);
if (!pdf_is_dict(imagedict))
{
fz_warn(ctx, "not an image dict (%d %d R)", pdf_to_num(imagedict), pdf_to_gen(imagedict));
continue;
}
type = pdf_dict_gets(imagedict, "Subtype");
if (strcmp(pdf_to_name(type), "Image"))
continue;
filter = pdf_dict_gets(imagedict, "Filter");
altcs = NULL;
cs = pdf_dict_gets(imagedict, "ColorSpace");
if (pdf_is_array(cs))
{
pdf_obj *cses = cs;
cs = pdf_array_get(cses, 0);
if (pdf_is_name(cs) && (!strcmp(pdf_to_name(cs), "DeviceN") || !strcmp(pdf_to_name(cs), "Separation")))
{
altcs = pdf_array_get(cses, 2);
if (pdf_is_array(altcs))
altcs = pdf_array_get(altcs, 0);
}
}
width = pdf_dict_gets(imagedict, "Width");
height = pdf_dict_gets(imagedict, "Height");
bpc = pdf_dict_gets(imagedict, "BitsPerComponent");
for (k = 0; k < images; k++)
if (!pdf_objcmp(image[k].u.image.obj, imagedict))
break;
if (k < images)
continue;
image = fz_resize_array(ctx, image, images+1, sizeof(struct info));
images++;
image[images - 1].page = page;
image[images - 1].pageref = pageref;
image[images - 1].pageobj = pageobj;
image[images - 1].u.image.obj = imagedict;
image[images - 1].u.image.width = width;
image[images - 1].u.image.height = height;
image[images - 1].u.image.bpc = bpc;
image[images - 1].u.image.filter = filter;
image[images - 1].u.image.cs = cs;
image[images - 1].u.image.altcs = altcs;
}
}
示例12: pdf_load_type3_font
pdf_font_desc *
pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *dict)
{
char buf[256];
char *estrings[256];
pdf_font_desc *fontdesc = NULL;
pdf_obj *encoding;
pdf_obj *widths;
pdf_obj *charprocs;
pdf_obj *obj;
int first, last;
int i, k, n;
fz_rect bbox;
fz_matrix matrix;
fz_font *font;
fz_var(fontdesc);
/* Make a new type3 font entry in the document */
if (doc->num_type3_fonts == doc->max_type3_fonts)
{
int new_max = doc->max_type3_fonts * 2;
if (new_max == 0)
new_max = 4;
doc->type3_fonts = fz_resize_array(ctx, doc->type3_fonts, new_max, sizeof(*doc->type3_fonts));
doc->max_type3_fonts = new_max;
}
fz_try(ctx)
{
obj = pdf_dict_get(ctx, dict, PDF_NAME_Name);
if (pdf_is_name(ctx, obj))
fz_strlcpy(buf, pdf_to_name(ctx, obj), sizeof buf);
else
fz_strlcpy(buf, "Unnamed-T3", sizeof buf);
fontdesc = pdf_new_font_desc(ctx);
obj = pdf_dict_get(ctx, dict, PDF_NAME_FontMatrix);
pdf_to_matrix(ctx, obj, &matrix);
obj = pdf_dict_get(ctx, dict, PDF_NAME_FontBBox);
fz_transform_rect(pdf_to_rect(ctx, obj, &bbox), &matrix);
font = fz_new_type3_font(ctx, buf, &matrix);
fontdesc->font = font;
fontdesc->size += sizeof(fz_font) + 256 * (sizeof(fz_buffer*) + sizeof(float));
fz_set_font_bbox(ctx, font, bbox.x0, bbox.y0, bbox.x1, bbox.y1);
/* Encoding */
for (i = 0; i < 256; i++)
estrings[i] = NULL;
encoding = pdf_dict_get(ctx, dict, PDF_NAME_Encoding);
if (!encoding)
{
fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: Type3 font missing Encoding");
}
if (pdf_is_name(ctx, encoding))
pdf_load_encoding(estrings, pdf_to_name(ctx, encoding));
if (pdf_is_dict(ctx, encoding))
{
pdf_obj *base, *diff, *item;
base = pdf_dict_get(ctx, encoding, PDF_NAME_BaseEncoding);
if (pdf_is_name(ctx, base))
pdf_load_encoding(estrings, pdf_to_name(ctx, base));
diff = pdf_dict_get(ctx, encoding, PDF_NAME_Differences);
if (pdf_is_array(ctx, diff))
{
n = pdf_array_len(ctx, diff);
k = 0;
for (i = 0; i < n; i++)
{
item = pdf_array_get(ctx, diff, i);
if (pdf_is_int(ctx, item))
k = pdf_to_int(ctx, item);
if (pdf_is_name(ctx, item) && k >= 0 && k < nelem(estrings))
estrings[k++] = pdf_to_name(ctx, item);
}
}
}
fontdesc->encoding = pdf_new_identity_cmap(ctx, 0, 1);
fontdesc->size += pdf_cmap_size(ctx, fontdesc->encoding);
pdf_load_to_unicode(ctx, doc, fontdesc, estrings, NULL, pdf_dict_get(ctx, dict, PDF_NAME_ToUnicode));
/* Widths */
pdf_set_default_hmtx(ctx, fontdesc, 0);
first = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_FirstChar));
last = pdf_to_int(ctx, pdf_dict_get(ctx, dict, PDF_NAME_LastChar));
//.........这里部分代码省略.........
示例13: pdf_lookup_page_loc_imp
static pdf_obj *
pdf_lookup_page_loc_imp(pdf_document *doc, pdf_obj *node, int *skip, pdf_obj **parentp, int *indexp)
{
fz_context *ctx = doc->ctx;
pdf_obj *kids, *hit;
int i, len;
kids = pdf_dict_gets(node, "Kids");
len = pdf_array_len(kids);
if (pdf_mark_obj(node))
fz_throw(ctx, FZ_ERROR_GENERIC, "cycle in page tree");
hit = NULL;
fz_var(hit);
fz_try(ctx)
{
for (i = 0; i < len; i++)
{
pdf_obj *kid = pdf_array_get(kids, i);
char *type = pdf_to_name(pdf_dict_gets(kid, "Type"));
if (!strcmp(type, "Page"))
{
if (*skip == 0)
{
if (parentp) *parentp = node;
if (indexp) *indexp = i;
hit = kid;
break;
}
else
{
(*skip)--;
}
}
else if (!strcmp(type, "Pages"))
{
int count = pdf_to_int(pdf_dict_gets(kid, "Count"));
if (*skip < count)
{
hit = pdf_lookup_page_loc_imp(doc, kid, skip, parentp, indexp);
if (hit)
break;
}
else
{
*skip -= count;
}
}
else
{
fz_throw(ctx, FZ_ERROR_GENERIC, "non-page object in page tree");
}
}
}
fz_always(ctx)
{
pdf_unmark_obj(node);
}
fz_catch(ctx)
{
fz_rethrow(ctx);
}
return hit;
}
示例14: build_filter
/*
* Create a filter given a name and param dictionary.
*/
static fz_stream *
build_filter(fz_stream *chain, pdf_document * xref, pdf_obj * f, pdf_obj * p, int num, int gen, pdf_image_params *params)
{
fz_context *ctx = chain->ctx;
char *s = pdf_to_name(f);
int predictor = pdf_to_int(pdf_dict_gets(p, "Predictor"));
int columns = pdf_to_int(pdf_dict_gets(p, "Columns"));
int colors = pdf_to_int(pdf_dict_gets(p, "Colors"));
int bpc = pdf_to_int(pdf_dict_gets(p, "BitsPerComponent"));
if (predictor == 0) predictor = 1;
if (columns == 0) columns = 1;
if (colors == 0) colors = 1;
if (bpc == 0) bpc = 8;
if (!strcmp(s, "ASCIIHexDecode") || !strcmp(s, "AHx"))
return fz_open_ahxd(chain);
else if (!strcmp(s, "ASCII85Decode") || !strcmp(s, "A85"))
return fz_open_a85d(chain);
else if (!strcmp(s, "CCITTFaxDecode") || !strcmp(s, "CCF"))
{
pdf_obj *k = pdf_dict_gets(p, "K");
pdf_obj *eol = pdf_dict_gets(p, "EndOfLine");
pdf_obj *eba = pdf_dict_gets(p, "EncodedByteAlign");
pdf_obj *columns = pdf_dict_gets(p, "Columns");
pdf_obj *rows = pdf_dict_gets(p, "Rows");
pdf_obj *eob = pdf_dict_gets(p, "EndOfBlock");
pdf_obj *bi1 = pdf_dict_gets(p, "BlackIs1");
if (params)
{
/* We will shortstop here */
params->type = PDF_IMAGE_FAX;
params->u.fax.k = (k ? pdf_to_int(k) : 0);
params->u.fax.eol = (eol ? pdf_to_bool(eol) : 0);
params->u.fax.eba = (eba ? pdf_to_bool(eba) : 0);
params->u.fax.columns = (columns ? pdf_to_int(columns) : 1728);
params->u.fax.rows = (rows ? pdf_to_int(rows) : 0);
params->u.fax.eob = (eob ? pdf_to_bool(eob) : 1);
params->u.fax.bi1 = (bi1 ? pdf_to_bool(bi1) : 0);
return chain;
}
return fz_open_faxd(chain,
k ? pdf_to_int(k) : 0,
eol ? pdf_to_bool(eol) : 0,
eba ? pdf_to_bool(eba) : 0,
columns ? pdf_to_int(columns) : 1728,
rows ? pdf_to_int(rows) : 0,
eob ? pdf_to_bool(eob) : 1,
bi1 ? pdf_to_bool(bi1) : 0);
}
else if (!strcmp(s, "DCTDecode") || !strcmp(s, "DCT"))
{
pdf_obj *ct = pdf_dict_gets(p, "ColorTransform");
if (params)
{
/* We will shortstop here */
params->type = PDF_IMAGE_JPEG;
params->u.jpeg.ct = (ct ? pdf_to_int(ct) : -1);
return chain;
}
return fz_open_dctd(chain, ct ? pdf_to_int(ct) : -1);
}
else if (!strcmp(s, "RunLengthDecode") || !strcmp(s, "RL"))
{
if (params)
{
/* We will shortstop here */
params->type = PDF_IMAGE_RLD;
return chain;
}
return fz_open_rld(chain);
}
else if (!strcmp(s, "FlateDecode") || !strcmp(s, "Fl"))
{
if (params)
{
/* We will shortstop here */
params->type = PDF_IMAGE_FLATE;
params->u.flate.predictor = predictor;
params->u.flate.columns = columns;
params->u.flate.colors = colors;
params->u.flate.bpc = bpc;
return chain;
}
chain = fz_open_flated(chain);
if (predictor > 1)
chain = fz_open_predict(chain, predictor, columns, colors, bpc);
return chain;
}
else if (!strcmp(s, "LZWDecode") || !strcmp(s, "LZW"))
{
//.........这里部分代码省略.........
示例15: pdf_load_type3_font
pdf_font_desc *
pdf_load_type3_font(pdf_document *doc, pdf_obj *rdb, pdf_obj *dict)
{
char buf[256];
char *estrings[256];
pdf_font_desc *fontdesc = NULL;
pdf_obj *encoding;
pdf_obj *widths;
pdf_obj *charprocs;
pdf_obj *obj;
int first, last;
int i, k, n;
fz_rect bbox;
fz_matrix matrix;
fz_context *ctx = doc->ctx;
fz_var(fontdesc);
/* Make a new type3 font entry in the document */
if (doc->num_type3_fonts == doc->max_type3_fonts)
{
int new_max = doc->max_type3_fonts * 2;
if (new_max == 0)
new_max = 4;
doc->type3_fonts = fz_resize_array(doc->ctx, doc->type3_fonts, new_max, sizeof(*doc->type3_fonts));
doc->max_type3_fonts = new_max;
}
fz_try(ctx)
{
obj = pdf_dict_gets(dict, "Name");
if (pdf_is_name(obj))
fz_strlcpy(buf, pdf_to_name(obj), sizeof buf);
else
sprintf(buf, "Unnamed-T3");
fontdesc = pdf_new_font_desc(ctx);
obj = pdf_dict_gets(dict, "FontMatrix");
pdf_to_matrix(ctx, obj, &matrix);
obj = pdf_dict_gets(dict, "FontBBox");
fz_transform_rect(pdf_to_rect(ctx, obj, &bbox), &matrix);
fontdesc->font = fz_new_type3_font(ctx, buf, &matrix);
fontdesc->size += sizeof(fz_font) + 256 * (sizeof(fz_buffer*) + sizeof(float));
fz_set_font_bbox(ctx, fontdesc->font, bbox.x0, bbox.y0, bbox.x1, bbox.y1);
/* SumatraPDF: expose Type3 FontDescriptor flags */
fontdesc->flags = pdf_to_int(pdf_dict_gets(pdf_dict_gets(dict, "FontDescriptor"), "Flags"));
/* Encoding */
for (i = 0; i < 256; i++)
estrings[i] = NULL;
encoding = pdf_dict_gets(dict, "Encoding");
if (!encoding)
{
fz_throw(ctx, FZ_ERROR_GENERIC, "syntaxerror: Type3 font missing Encoding");
}
if (pdf_is_name(encoding))
pdf_load_encoding(estrings, pdf_to_name(encoding));
if (pdf_is_dict(encoding))
{
pdf_obj *base, *diff, *item;
base = pdf_dict_gets(encoding, "BaseEncoding");
if (pdf_is_name(base))
pdf_load_encoding(estrings, pdf_to_name(base));
diff = pdf_dict_gets(encoding, "Differences");
if (pdf_is_array(diff))
{
n = pdf_array_len(diff);
k = 0;
for (i = 0; i < n; i++)
{
item = pdf_array_get(diff, i);
if (pdf_is_int(item))
k = pdf_to_int(item);
if (pdf_is_name(item) && k >= 0 && k < nelem(estrings))
estrings[k++] = pdf_to_name(item);
}
}
}
fontdesc->encoding = pdf_new_identity_cmap(ctx, 0, 1);
fontdesc->size += pdf_cmap_size(ctx, fontdesc->encoding);
pdf_load_to_unicode(doc, fontdesc, estrings, NULL, pdf_dict_gets(dict, "ToUnicode"));
/* SumatraPDF: trying to match Adobe Reader's behavior */
if (!(fontdesc->flags & PDF_FD_SYMBOLIC) && fontdesc->cid_to_ucs_len >= 128)
for (i = 32; i < 128; i++)
if (fontdesc->cid_to_ucs[i] == '?' || fontdesc->cid_to_ucs[i] == '\0')
//.........这里部分代码省略.........