fz_error pdf_loadstoredfont(pdf_fontdesc *font, char *fontname, char *collection) { fz_error error; unsigned char *data; unsigned int len; char *filename = NULL; error = pdf_getfontbuffer(font, fontname, collection, &data, &len); if (error) goto trycid; pdf_logfont("load builtin font %s\n", fontname); error = fz_newfontfrombuffer(&font->font, data, len, 0); if (error) return fz_rethrow(error, "cannot load freetype font from buffer"); return fz_okay; trycid: error = pdf_getfontfile(font, fontname, collection, &filename); if (error) return fz_rethrow(error, "cannot get filename for font"); error = fz_newfontfromfile(&font->font, filename, 0); if(filename != NULL) fz_free(filename); if (error) return fz_rethrow(error, "cannot load font from file"); return fz_okay; }
fz_error pdf_loadembeddedfont(pdf_fontdesc *fontdesc, pdf_xref *xref, fz_obj *stmref) { fz_error error; fz_buffer *buf; pdf_logfont("load embedded font\n"); error = pdf_loadstream(&buf, xref, fz_tonum(stmref), fz_togen(stmref)); if (error) return fz_rethrow(error, "cannot load font stream (%d %d R)", fz_tonum(stmref), fz_togen(stmref)); error = fz_newfontfrombuffer(&fontdesc->font, buf->data, buf->len, 0); if (error) { fz_dropbuffer(buf); return fz_rethrow(error, "cannot load embedded font (%d %d R)", fz_tonum(stmref), fz_togen(stmref)); } /* save the buffer so we can free it later */ fontdesc->font->ftdata = buf->data; fontdesc->font->ftsize = buf->len; fz_free(buf); /* only free the fz_buffer struct, not the contained data */ fontdesc->isembedded = 1; return fz_okay; }
fz_error pdf_loadbuiltinfont(pdf_fontdesc *fontdesc, char *fontname) { fz_error error; unsigned char *data; unsigned int len; int i; for (i = 0; basefonts[i].name; i++) if (!strcmp(fontname, basefonts[i].name)) goto found; return fz_throw("cannot find font: '%s'", fontname); found: pdf_logfont("load builtin font %s\n", fontname); data = (unsigned char *) basefonts[i].cff; len = *basefonts[i].len; error = fz_newfontfrombuffer(&fontdesc->font, data, len, 0); if (error) return fz_rethrow(error, "cannot load freetype font from buffer"); fz_strlcpy(fontdesc->font->name, fontname, sizeof fontdesc->font->name); if (!strcmp(fontname, "Symbol") || !strcmp(fontname, "ZapfDingbats")) fontdesc->flags |= FD_SYMBOLIC; return fz_okay; }
fz_error pdf_loadbuiltinfont(pdf_fontdesc *font, char *fontname) { fz_error error; unsigned char *data; unsigned int len; int i; for (i = 0; basefonts[i].name; i++) if (!strcmp(fontname, basefonts[i].name)) goto found; return fz_throw("cannot find font: '%s'", fontname); found: pdf_logfont("load builtin font %s\n", fontname); data = (unsigned char *) basefonts[i].cff; len = *basefonts[i].len; error = fz_newfontfrombuffer(&font->font, data, len, 0); if (error) return fz_rethrow(error, "cannot load freetype font from buffer"); return fz_okay; }
static fz_error loadsystemcidfont(pdf_fontdesc *font, int ros, int kind) { #ifndef NOCJK fz_error error; /* We only have one builtin fallback font, we'd really like * to have one for each combination of ROS and Kind. */ pdf_logfont("loading builtin CJK font\n"); error = fz_newfontfrombuffer(&font->font, (unsigned char *)pdf_font_DroidSansFallback_ttf_buf, pdf_font_DroidSansFallback_ttf_len, 0); if (error) return fz_rethrow(error, "cannot load builtin CJK font"); font->font->ftsubstitute = 1; /* substitute font */ return fz_okay; #else return fz_throw("no builtin CJK font file"); #endif }