diff options
author | Paul Gardiner <paulg.artifex@glidos.net> | 2013-02-27 14:00:48 +0000 |
---|---|---|
committer | Robin Watts <robin.watts@artifex.com> | 2013-02-28 17:07:43 +0000 |
commit | ef953fabd93b97fff2c02fc4ab004d00cfc24beb (patch) | |
tree | d724c35812d218ce4802ac94ead4ba7d7de7e3f9 /pdf | |
parent | 092461c105210cfc652984cd96e6c88aec545461 (diff) | |
download | mupdf-ef953fabd93b97fff2c02fc4ab004d00cfc24beb.tar.xz |
Fix bug: failure to set the SubType field of created annotations.
Also, in the app, protect against exceptions thrown due to unknown
annotation types.
Diffstat (limited to 'pdf')
-rw-r--r-- | pdf/pdf_annot.c | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/pdf/pdf_annot.c b/pdf/pdf_annot.c index ccc7c24c..e79f8c45 100644 --- a/pdf/pdf_annot.c +++ b/pdf/pdf_annot.c @@ -413,6 +413,39 @@ static int annot_type(pdf_obj *obj) return -1; } +static const char *annot_type_str(fz_annot_type type) +{ + switch (type) + { + case FZ_ANNOT_TEXT: return "Text"; + case FZ_ANNOT_LINK: return "Link"; + case FZ_ANNOT_FREETEXT: return "FreeText"; + case FZ_ANNOT_LINE: return "Line"; + case FZ_ANNOT_SQUARE: return "Square"; + case FZ_ANNOT_CIRCLE: return "Circle"; + case FZ_ANNOT_POLYGON: return "Polygon"; + case FZ_ANNOT_POLYLINE: return "PolyLine"; + case FZ_ANNOT_HIGHLIGHT: return "Highlight"; + case FZ_ANNOT_UNDERLINE: return "Underline"; + case FZ_ANNOT_SQUIGGLY: return "Squiggly"; + case FZ_ANNOT_STRIKEOUT: return "StrikeOut"; + case FZ_ANNOT_STAMP: return "Stamp"; + case FZ_ANNOT_CARET: return "Caret"; + case FZ_ANNOT_INK: return "Ink"; + case FZ_ANNOT_POPUP: return "Popup"; + case FZ_ANNOT_FILEATTACHMENT: return "FileAttachment"; + case FZ_ANNOT_SOUND: return "Sound"; + case FZ_ANNOT_MOVIE: return "Movie"; + case FZ_ANNOT_WIDGET: return "Widget"; + case FZ_ANNOT_SCREEN: return "Screen"; + case FZ_ANNOT_PRINTERMARK: return "PrinterMark"; + case FZ_ANNOT_TRAPNET: return "TrapNet"; + case FZ_ANNOT_WATERMARK: return "Watermark"; + case FZ_ANNOT_3D: return "3D"; + default: return ""; + } +} + pdf_annot * pdf_load_annots(pdf_document *xref, pdf_obj *annots, pdf_page *page) { @@ -606,7 +639,7 @@ pdf_create_annot(pdf_document *doc, pdf_page *page, fz_annot_type type) { int ind_obj_num; fz_rect rect = {0.0, 0.0, 0.0, 0.0}; - char *type_str = ""; + char *type_str = annot_type_str(type); pdf_obj *annot_arr = pdf_dict_gets(page->me, "Annots"); if (annot_arr == NULL) { @@ -616,15 +649,6 @@ pdf_create_annot(pdf_document *doc, pdf_page *page, fz_annot_type type) pdf_dict_puts_drop(annot_obj, "Type", pdf_new_name(ctx, "Annot")); - switch(type) - { - case FZ_ANNOT_STRIKEOUT: - type_str = "StrikeOut"; - break; - default: - break; - } - pdf_dict_puts_drop(annot_obj, "Subtype", pdf_new_name(ctx, type_str)); pdf_dict_puts_drop(annot_obj, "Rect", pdf_new_rect(ctx, &rect)); |