本文整理汇总了C++中pdf_to_name函数的典型用法代码示例。如果您正苦于以下问题:C++ pdf_to_name函数的具体用法?C++ pdf_to_name怎么用?C++ pdf_to_name使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pdf_to_name函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的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;
}
开发者ID:niife,项目名称:sumatrapdf,代码行数:24,代码来源:pdf-page.c
示例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)
开发者ID:yitoa,项目名称:YTReader,代码行数:47,代码来源:pdf_font.c
示例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();
}
开发者ID:amba,项目名称:pdfout,代码行数:45,代码来源:data.c
示例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));
}
}
开发者ID:TamirEvan,项目名称:mupdf,代码行数:42,代码来源:pdf-appearance.c
示例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;
}
开发者ID:codepongo,项目名称:sumatrapdf,代码行数:42,代码来源:pdf-page.c
示例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);
}
开发者ID:muennich,项目名称:mupdf,代码行数:20,代码来源:pdf-annot-edit.c
示例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");
}
开发者ID:codepongo,项目名称:sumatrapdf,代码行数:23,代码来源:pdf-page.c
示例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;
}
开发者ID:adan91,项目名称:gd-pdfview,代码行数:81,代码来源:pdf-cmap-load.c
示例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);
//.........这里部分代码省略.........
开发者ID:ArtifexSoftware,项目名称:mupdf,代码行数:101,代码来源:pdf-interpret.c
示例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;
}
开发者ID:Ernest0x,项目名称:mupdf,代码行数:74,代码来源:pdf_xobject.c
示例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;
}
}
开发者ID:ArphonePei,项目名称:PDFConverter,代码行数:72,代码来源:pdfinfo.c
示例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));
//.........这里部分代码省略.........
开发者ID:FauxFaux,项目名称:k2pdfopt,代码行数:101,代码来源:pdf-type3.c
示例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;
}
开发者ID:niife,项目名称:sumatrapdf,代码行数:67,代码来源:pdf-page.c
示例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"))
{
//.........这里部分代码省略.........
开发者ID:Ernest0x,项目名称:mupdf,代码行数:101,代码来源:pdf_stream.c
示例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')
//.........这里部分代码省略.........
开发者ID:niife,项目名称:sumatrapdf,代码行数:101,代码来源:pdf-type3.c
示例16: check_allowed_subtypes
static void check_allowed_subtypes(fz_context *ctx, pdf_annot *annot, pdf_obj *property, pdf_obj **allowed)
{
pdf_obj *subtype = pdf_dict_get(ctx, annot->obj, PDF_NAME(Subtype));
if (!is_allowed_subtype(ctx, annot, property, allowed))
fz_throw(ctx, FZ_ERROR_GENERIC, "%s annotations have no %s property", pdf_to_name(ctx, subtype), pdf_to_name(ctx, property));
}
开发者ID:muennich,项目名称:mupdf,代码行数:6,代码来源:pdf-annot-edit.c
示例17: copy_and_rename_resource
// just copy one of the resource sub-entries (e.g. /Font)
static int copy_and_rename_resource(fz_context *dest_ctx, pdf_obj *dest,
fz_context *src_ctx, pdf_obj *src, char *prefix, struct put_info *info)
{
char new_name[64]; /* this buffer is big enough up to hold all digits for two 16-bit numbers */
int i;
for(i = 0; i < pdf_dict_len(src_ctx, src); i++) {
pdf_obj *src_key = pdf_dict_get_key(src_ctx, src, i);
pdf_obj *src_val = pdf_dict_get_val(src_ctx, src, i);
if(!pdf_is_name(src_ctx, src_key)) {
return(2);
}
/* if this is an inline resource, just copy this object into the new
resource dict */
if(!pdf_is_indirect(src_ctx, src_val)) {
if(snprintf(new_name, sizeof(new_name) / sizeof(new_name[0]),
"%sinline_%d", prefix, info->next_inline_id++) >= sizeof(new_name) / sizeof(new_name[0]))
return(1); // not enough space
pdf_obj *new_res = copy_unassigned_object_continue(dest_ctx,
info->dest_doc, src_ctx, info->src_doc, src_val, &info->new_ids);
//pdf_obj *new_res = pdf_new_dict(dest_ctx, info->dest_doc, 10);
printf("dump it...\n");
pdf_fprint_obj(dest_ctx, stdout, new_res, 0);
/* now reference this new object in the resource object of this sheet */
pdf_obj *dest_key = pdf_new_name(dest_ctx, info->dest_doc, new_name);
pdf_dict_put(dest_ctx, dest, dest_key, new_res);
pdf_drop_obj(dest_ctx, dest_key);
pdf_drop_obj(dest_ctx, new_res);
} else {
/* The new name of resource objects is always the num/gen of the
referenced object in the src-file. Thus we can check by that name
if the object was already referenced by another page of this sheet. */
if(snprintf(new_name, sizeof(new_name) / sizeof(new_name[0]),
"%s%d_%d", prefix, pdf_to_num(dest_ctx, src_val), pdf_to_gen(dest_ctx, src_val)) >=
sizeof(new_name) / sizeof(new_name[0]))
return(1); // not enough space
if(pdf_dict_gets(dest_ctx, dest, new_name) == NULL) {
/* if this resource is not inlined and not already in the resource-dict
of the current sheet... */
/* ...copy the referenced resource to the new document!
If this object has copied already (for another sheet in dest_doc),
copy_object_continue() will do nothing */
pdf_obj *new_res = copy_object_continue(dest_ctx, info->dest_doc,
src_ctx, info->src_doc, src_val, &info->new_ids);
/* now reference this new object in the resource object of this sheet */
pdf_obj *dest_key = pdf_new_name(dest_ctx, info->dest_doc, new_name);
pdf_dict_put(dest_ctx, dest, dest_key, new_res);
pdf_drop_obj(dest_ctx, dest_key);
pdf_drop_obj(dest_ctx, new_res);
}
}
/* even if it was used on another sheet or on this sheet, add it to the
rename-dict for this sheet! Because it could have different names
on different source-pages */
pdf_obj *rename_key = pdf_new_name(dest_ctx, info->dest_doc, pdf_to_name(dest_ctx, src_key));
pdf_obj *rename_val = pdf_new_name(dest_ctx, info->dest_doc, new_name);
pdf_dict_put(dest_ctx, info->rename_dict, rename_key, rename_val);
pdf_drop_obj(dest_ctx, rename_key);
pdf_drop_obj(dest_ctx, rename_val);
}
return(0);
}
开发者ID:s-k2,项目名称:Juggler,代码行数:75,代码来源:put-content.c
示例18: pdf_parse_file_spec
char *
pdf_parse_file_spec(fz_context *ctx, pdf_document *doc, pdf_obj *file_spec, pdf_obj *dest)
{
pdf_obj *filename=NULL;
char *path = NULL;
char *uri = NULL;
char buf[256];
size_t n;
if (pdf_is_string(ctx, file_spec))
filename = file_spec;
if (pdf_is_dict(ctx, file_spec)) {
#if defined(_WIN32) || defined(_WIN64)
filename = pdf_dict_get(ctx, file_spec, PDF_NAME_DOS);
#else
filename = pdf_dict_get(ctx, file_spec, PDF_NAME_Unix);
#endif
if (!filename)
filename = pdf_dict_geta(ctx, file_spec, PDF_NAME_UF, PDF_NAME_F);
}
if (!pdf_is_string(ctx, filename))
{
fz_warn(ctx, "cannot parse file specification");
return NULL;
}
path = pdf_to_utf8(ctx, filename);
#if defined(_WIN32) || defined(_WIN64)
if (strcmp(pdf_to_name(ctx, pdf_dict_gets(ctx, file_spec, "FS")), "URL") != 0)
{
/* move the file name into the expected place and use the expected path separator */
char *c;
if (path[0] == '/' && (('A' <= path[1] && path[1] <= 'Z') || ('a' <= path[1] && path[1] <= 'z')) && path[2] == '/')
{
path[0] = path[1];
path[1] = ':';
}
for (c = path; *c; c++)
{
if (*c == '/')
*c = '\\';
}
}
#endif
if (pdf_is_array(ctx, dest))
fz_snprintf(buf, sizeof buf, "#page=%d", pdf_to_int(ctx, pdf_array_get(ctx, dest, 0)) + 1);
else if (pdf_is_name(ctx, dest))
fz_snprintf(buf, sizeof buf, "#%s", pdf_to_name(ctx, dest));
else if (pdf_is_string(ctx, dest))
fz_snprintf(buf, sizeof buf, "#%s", pdf_to_str_buf(ctx, dest));
else
buf[0] = 0;
n = 7 + strlen(path) + strlen(buf) + 1;
uri = fz_malloc(ctx, n);
fz_strlcpy(uri, "file://", n);
fz_strlcat(uri, path, n);
fz_strlcat(uri, buf, n);
fz_free(ctx, path);
return uri;
}
开发者ID:arbitrary-dev,项目名称:mupdf,代码行数:64,代码来源:pdf-annot.c
示例19: 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;
pdf_obj *hit = NULL;
int i, len;
pdf_obj *local_stack[LOCAL_STACK_SIZE];
pdf_obj **stack = &local_stack[0];
int stack_max = LOCAL_STACK_SIZE;
int stack_len = 0;
fz_var(hit);
fz_var(stack);
fz_var(stack_len);
fz_var(stack_max);
fz_try(ctx)
{
do
{
kids = pdf_dict_gets(node, "Kids");
len = pdf_array_len(kids);
if (len == 0)
fz_throw(ctx, FZ_ERROR_GENERIC, "Malformed pages tree");
/* Every node we need to unmark goes into the stack */
if (stack_len == stack_max)
{
if (stack == &local_stack[0])
{
stack = fz_malloc_array(ctx, stack_max * 2, sizeof(*stack));
memcpy(stack, &local_stack[0], stack_max * sizeof(*stack));
}
else
stack = fz_resize_array(ctx, stack, stack_max * 2, sizeof(*stack));
stack_max *= 2;
}
stack[stack_len++] = node;
if (pdf_mark_obj(node))
fz_throw(ctx, FZ_ERROR_GENERIC, "cycle in page tree");
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") || (!*type && pdf_dict_gets(kid, "MediaBox")))
{
if (*skip == 0)
{
if (parentp) *parentp = node;
if (indexp) *indexp = i;
hit = kid;
break;
}
else
{
(*skip)--;
}
}
else if (!strcmp(type, "Pages") || (!*type && pdf_dict_gets(kid, "Kids")))
{
int count = pdf_to_int(pdf_dict_gets(kid, "Count"));
if (*skip < count)
{
node = kid;
break;
}
else
{
*skip -= count;
}
}
else
{
fz_throw(ctx, FZ_ERROR_GENERIC, "non-page object in page tree (%s)", type);
}
}
}
while (hit == NULL);
}
fz_always(ctx)
{
for (i = stack_len; i > 0; i--)
pdf_unmark_obj(stack[i-1]);
if (stack != &local_stack[0])
fz_free(ctx, stack);
}
fz_catch(ctx)
{
fz_rethrow(ctx);
}
return hit;
}
开发者ID:codepongo,项目名称:sumatrapdf,代码行数:97,代码来源:pdf-page.c
示例20: pdf_parse_dict
pdf_obj *
pdf_parse_dict(pdf_document *xref, fz_stream *file, pdf_lexbuf *buf)
{
pdf_obj *dict;
pdf_obj *key = NULL;
pdf_obj *val = NULL;
int tok;
int a, b;
fz_context *ctx = file->ctx;
dict = pdf_new_dict(ctx, 8);
fz_var(key);
fz_var(val);
fz_try(ctx)
{
while (1)
{
tok = pdf_lex(file, buf);
skip:
if (tok == PDF_TOK_CLOSE_DICT)
break;
/* for BI .. ID .. EI in content streams */
if (tok == PDF_TOK_KEYWORD && !strcmp(buf->scratch, "ID"))
break;
if (tok != PDF_TOK_NAME)
fz_throw(ctx, "invalid key in dict");
key = fz_new_name(ctx, buf->scratch);
tok = pdf_lex(file, buf);
switch (tok)
{
case PDF_TOK_OPEN_ARRAY:
/* cf. http://code.google.com/p/sumatrapdf/issues/detail?id=1643 */
fz_try(ctx)
{
val = pdf_parse_array(xref, file, buf);
}
fz_catch(ctx)
{
fz_warn(ctx, "ignoring broken array for '%s'", pdf_to_name(key));
|
请发表评论