From be498ab76551419f39fe5e56a14968d604877840 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 15 Mar 2018 16:21:28 +0100 Subject: Fix 699026: Create missing font resource. If a widget DR is missing the font name given in the DA, create a new simple font for it. --- source/pdf/pdf-appearance.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'source/pdf/pdf-appearance.c') diff --git a/source/pdf/pdf-appearance.c b/source/pdf/pdf-appearance.c index 49e932c3..51064f0d 100644 --- a/source/pdf/pdf-appearance.c +++ b/source/pdf/pdf-appearance.c @@ -168,12 +168,22 @@ void pdf_parse_da(fz_context *ctx, char *da, pdf_da_info *di) static void get_font_info(fz_context *ctx, pdf_document *doc, pdf_obj *dr, char *da, font_info *font_rec) { pdf_font_desc *font; + pdf_obj *fontobj; pdf_parse_da(ctx, da, &font_rec->da_rec); if (font_rec->da_rec.font_name == NULL) fz_throw(ctx, FZ_ERROR_GENERIC, "No font name in default appearance"); - font_rec->font = font = pdf_load_font(ctx, doc, dr, pdf_dict_gets(ctx, pdf_dict_get(ctx, dr, PDF_NAME_Font), font_rec->da_rec.font_name), 0); + fontobj = pdf_dict_gets(ctx, pdf_dict_get(ctx, dr, PDF_NAME_Font), font_rec->da_rec.font_name); + if (!fontobj) + { + fz_font *helv = fz_new_base14_font(ctx, "Helvetica"); + fz_warn(ctx, "form resource dictionary is missing the default appearance font"); + fontobj = pdf_add_simple_font(ctx, doc, helv, PDF_SIMPLE_ENCODING_LATIN); + pdf_dict_puts_drop(ctx, pdf_dict_get(ctx, dr, PDF_NAME_Font), font_rec->da_rec.font_name, fontobj); + fz_drop_font(ctx, helv); + } + font_rec->font = font = pdf_load_font(ctx, doc, dr, fontobj, 0); font_rec->lineheight = 1.0f; if (font && font->ascent != 0.0f && font->descent != 0.0f) font_rec->lineheight = (font->ascent - font->descent) / 1000.0f; -- cgit v1.2.3