static const char* LoadType1FontFromStream (HPDF_Doc pdf, HPDF_Stream afmdata, HPDF_Stream pfmdata) { HPDF_FontDef def; HPDF_PTRACE ((" HPDF_LoadType1FontFromStream\n")); if (!HPDF_HasDoc (pdf)) return NULL; def = HPDF_Type1FontDef_Load (pdf->mmgr, afmdata, pfmdata); if (def) { HPDF_FontDef tmpdef = HPDF_Doc_FindFontDef (pdf, def->base_font); if (tmpdef) { HPDF_FontDef_Free (def); HPDF_SetError (&pdf->error, HPDF_FONT_EXISTS, 0); return NULL; } if (HPDF_List_Add (pdf->fontdef_list, def) != HPDF_OK) { HPDF_FontDef_Free (def); return NULL; } return def->base_font; } return NULL; }
HPDF_FontDef HPDF_Type1FontDef_Load (HPDF_MMgr mmgr, HPDF_Stream afm, HPDF_Stream font_data) { HPDF_FontDef fontdef; HPDF_STATUS ret; HPDF_PTRACE (" HPDF_Type1FontDef_Load\n"); if (!afm) return NULL; fontdef = HPDF_Type1FontDef_New (mmgr); if (!fontdef) return NULL; ret = LoadAfm (fontdef, afm); if (ret != HPDF_OK) { HPDF_FontDef_Free (fontdef); return NULL; } /* if font-data is specified, the font data is embeded */ if (font_data) { ret = LoadFontData (fontdef, font_data); if (ret != HPDF_OK) { HPDF_FontDef_Free (fontdef); return NULL; } } return fontdef; }
HPDF_FontDef HPDF_GetFontDef (HPDF_Doc pdf, const char *font_name) { HPDF_STATUS ret; HPDF_FontDef def; HPDF_PTRACE ((" HPDF_GetFontDef\n")); if (!HPDF_HasDoc (pdf)) return NULL; def = HPDF_Doc_FindFontDef (pdf, font_name); if (!def) { def = HPDF_Base14FontDef_New (pdf->mmgr, font_name); if (!def) return NULL; if ((ret = HPDF_List_Add (pdf->fontdef_list, def)) != HPDF_OK) { HPDF_FontDef_Free (def); HPDF_RaiseError (&pdf->error, ret, 0); def = NULL; } } return def; }
static const char* LoadTTFontFromStream2 (HPDF_Doc pdf, HPDF_Stream font_data, HPDF_UINT index, HPDF_BOOL embedding, const char *file_name) { HPDF_FontDef def; HPDF_PTRACE ((" HPDF_LoadTTFontFromStream2\n")); def = HPDF_TTFontDef_Load2 (pdf->mmgr, font_data, index, embedding); if (def) { HPDF_FontDef tmpdef = HPDF_Doc_FindFontDef (pdf, def->base_font); if (tmpdef) { HPDF_FontDef_Free (def); HPDF_SetError (&pdf->error, HPDF_FONT_EXISTS, 0); return NULL; } if (HPDF_List_Add (pdf->fontdef_list, def) != HPDF_OK) { HPDF_FontDef_Free (def); return NULL; } } else return NULL; if (embedding) { if (pdf->ttfont_tag[0] == 0) { HPDF_MemCpy (pdf->ttfont_tag, (HPDF_BYTE *)"HPDFAA", 6); } else { HPDF_INT i; for (i = 5; i >= 0; i--) { pdf->ttfont_tag[i] += 1; if (pdf->ttfont_tag[i] > 'Z') pdf->ttfont_tag[i] = 'A'; else break; } } HPDF_TTFontDef_SetTagName (def, (char *)pdf->ttfont_tag); } return def->base_font; }
HPDF_STATUS HPDF_Doc_RegisterFontDef (HPDF_Doc pdf, HPDF_FontDef fontdef) { HPDF_STATUS ret; HPDF_PTRACE ((" HPDF_Doc_RegisterFontDef\n")); if (!fontdef) return HPDF_SetError (&pdf->error, HPDF_INVALID_OBJECT, 0); if (HPDF_Doc_FindFontDef (pdf, fontdef->base_font) != NULL) { HPDF_FontDef_Free (fontdef); return HPDF_SetError (&pdf->error, HPDF_DUPLICATE_REGISTRATION, 0); } if ((ret = HPDF_List_Add (pdf->fontdef_list, fontdef)) != HPDF_OK) { HPDF_FontDef_Free (fontdef); return HPDF_SetError (&pdf->error, ret, 0); } return HPDF_OK; }
static void FreeFontDefList (HPDF_Doc pdf) { HPDF_List list = pdf->fontdef_list; HPDF_UINT i; HPDF_PTRACE ((" HPDF_Doc_FreeFontDefList\n")); for (i = 0; i < list->count; i++) { HPDF_FontDef def = (HPDF_FontDef)HPDF_List_ItemAt (list, i); HPDF_FontDef_Free (def); } HPDF_List_Free (list); pdf->fontdef_list = NULL; }