HPDF_Image_SetColorMask (HPDF_Image image, HPDF_UINT rmin, HPDF_UINT rmax, HPDF_UINT gmin, HPDF_UINT gmax, HPDF_UINT bmin, HPDF_UINT bmax) { HPDF_Array array; const char *name; HPDF_STATUS ret = HPDF_OK; if (!HPDF_Image_Validate (image)) return HPDF_INVALID_IMAGE; if (HPDF_Dict_GetItem (image, "ImageMask", HPDF_OCLASS_BOOLEAN)) return HPDF_RaiseError (image->error, HPDF_INVALID_OPERATION, 0); if (HPDF_Image_GetBitsPerComponent (image) != 8) return HPDF_RaiseError (image->error, HPDF_INVALID_BIT_PER_COMPONENT, 0); name = HPDF_Image_GetColorSpace (image); if (!name || HPDF_StrCmp (COL_RGB, name) != 0) return HPDF_RaiseError (image->error, HPDF_INVALID_COLOR_SPACE, 0); /* Each integer must be in the range 0 to 2^BitsPerComponent - 1 */ if (rmax > 255 || gmax > 255 || bmax > 255) return HPDF_RaiseError (image->error, HPDF_INVALID_PARAMETER, 0); array = HPDF_Array_New (image->mmgr); if (!array) return HPDF_CheckError (image->error); ret += HPDF_Dict_Add (image, "Mask", array); ret += HPDF_Array_AddNumber (array, rmin); ret += HPDF_Array_AddNumber (array, rmax); ret += HPDF_Array_AddNumber (array, gmin); ret += HPDF_Array_AddNumber (array, gmax); ret += HPDF_Array_AddNumber (array, bmin); ret += HPDF_Array_AddNumber (array, bmax); if (ret != HPDF_OK) return HPDF_CheckError (image->error); return HPDF_OK; }
HPDF_UINT HPDF_Catalog_GetViewerPreference (HPDF_Catalog catalog) { HPDF_Dict preferences; HPDF_UINT value = 0; HPDF_Boolean obj; HPDF_PTRACE ((" HPDF_Catalog_GetViewerPreference\n")); preferences = (HPDF_Dict)HPDF_Dict_GetItem (catalog, "ViewerPreferences", HPDF_OCLASS_DICT); if (!preferences) return 0; obj = (HPDF_Boolean)HPDF_Dict_GetItem (preferences, "HideToolbar", HPDF_OCLASS_BOOLEAN); if (obj) { if (obj->value) value += HPDF_HIDE_TOOLBAR; } obj = (HPDF_Boolean)HPDF_Dict_GetItem (preferences, "HideMenubar", HPDF_OCLASS_BOOLEAN); if (obj) { if (obj->value) value += HPDF_HIDE_MENUBAR; } obj = (HPDF_Boolean)HPDF_Dict_GetItem (preferences, "HideWindowUI", HPDF_OCLASS_BOOLEAN); if (obj) { if (obj->value) value += HPDF_HIDE_WINDOW_UI; } obj = (HPDF_Boolean)HPDF_Dict_GetItem (preferences, "FitWindow", HPDF_OCLASS_BOOLEAN); if (obj) { if (obj->value) value += HPDF_FIT_WINDOW; } obj = (HPDF_Boolean)HPDF_Dict_GetItem (preferences, "CenterWindow", HPDF_OCLASS_BOOLEAN); if (obj) { if (obj->value) value += HPDF_CENTER_WINDOW; } return value; }
HPDF_PageMode HPDF_Catalog_GetPageMode (HPDF_Catalog catalog) { HPDF_Name mode; HPDF_UINT i = 0; mode = (HPDF_Name)HPDF_Dict_GetItem (catalog, "PageMode", HPDF_OCLASS_NAME); if (!mode) return HPDF_PAGE_MODE_USE_NONE; while (HPDF_PAGE_MODE_NAMES[i]) { if (HPDF_StrCmp (mode->value, HPDF_PAGE_MODE_NAMES[i]) == 0) return (HPDF_PageMode)i; i++; } return HPDF_PAGE_MODE_USE_NONE; }
HPDF_PageLayout HPDF_Catalog_GetPageLayout (HPDF_Catalog catalog) { HPDF_Name layout; HPDF_UINT i = 0; layout = (HPDF_Name)HPDF_Dict_GetItem (catalog, "PageLayout", HPDF_OCLASS_NAME); if (!layout) return HPDF_PAGE_LAYOUT_EOF; while (HPDF_PAGE_LAYOUT_NAMES[i]) { if (HPDF_StrCmp (layout->value, HPDF_PAGE_LAYOUT_NAMES[i]) == 0) return (HPDF_PageLayout)i; i++; } return HPDF_PAGE_LAYOUT_EOF; }
HPDF_STATUS HPDF_PDFA_AppendOutputIntents(HPDF_Doc pdf, const char *iccname, HPDF_Dict iccdict) { HPDF_Array intents; HPDF_Dict intent; HPDF_STATUS ret; if (!HPDF_HasDoc (pdf)) return HPDF_INVALID_DOCUMENT; /* prepare intent */ intent = HPDF_Dict_New (pdf->mmgr); ret = HPDF_Xref_Add (pdf->xref, intent); if ( ret != HPDF_OK) { HPDF_Dict_Free(intent); return ret; } ret += HPDF_Dict_AddName (intent, "Type", "OutputIntent"); ret += HPDF_Dict_AddName (intent, "S", "GTS_PDFA1"); ret += HPDF_Dict_Add (intent, "OutputConditionIdentifier", HPDF_String_New (pdf->mmgr, iccname, NULL)); ret += HPDF_Dict_Add (intent, "OutputCondition", HPDF_String_New (pdf->mmgr, iccname,NULL)); ret += HPDF_Dict_Add (intent, "Info", HPDF_String_New (pdf->mmgr, iccname, NULL)); ret += HPDF_Dict_Add (intent, "DestOutputProfile ", iccdict); if ( ret != HPDF_OK) { HPDF_Dict_Free(intent); return ret; } /* Copied from HPDF_AddIntent - not public function */ intents = HPDF_Dict_GetItem (pdf->catalog, "OutputIntents", HPDF_OCLASS_ARRAY); if (intents == NULL) { intents = HPDF_Array_New (pdf->mmgr); if (intents) { HPDF_STATUS ret = HPDF_Dict_Add (pdf->catalog, "OutputIntents", intents); if (ret != HPDF_OK) { HPDF_CheckError (&pdf->error); return HPDF_Error_GetDetailCode (&pdf->error); } } } HPDF_Array_Add(intents,intent); return HPDF_Error_GetDetailCode (&pdf->error); }
const char* HPDF_Info_GetInfoAttr (HPDF_Dict info, HPDF_InfoType type) { const char* name = InfoTypeToName (type); HPDF_String s; HPDF_PTRACE((" HPDF_Info_GetInfoAttr\n")); if (!info) return NULL; s = (HPDF_String)HPDF_Dict_GetItem (info, name, HPDF_OCLASS_STRING); if (!s) return NULL; else return (const char *)(s->value); }
HPDF_Image_AddSMask (HPDF_Image image, HPDF_Image smask) { const char *name; if (!HPDF_Image_Validate (image)) return HPDF_INVALID_IMAGE; if (!HPDF_Image_Validate (smask)) return HPDF_INVALID_IMAGE; if (HPDF_Dict_GetItem (image, "SMask", HPDF_OCLASS_BOOLEAN)) return HPDF_RaiseError (image->error, HPDF_INVALID_OPERATION, 0); name = HPDF_Image_GetColorSpace (smask); if (!name || HPDF_StrCmp (COL_GRAY, name) != 0) return HPDF_RaiseError (smask->error, HPDF_INVALID_COLOR_SPACE, 0); return HPDF_Dict_Add (image, "SMask", smask); }
static HPDF_BOOL CheckSubType (HPDF_Annotation annot, HPDF_AnnotType type) { HPDF_Name subtype; HPDF_PTRACE((" HPDF_Annotation_CheckSubType\n")); if (!HPDF_Annotation_Validate (annot)) return HPDF_FALSE; subtype = HPDF_Dict_GetItem (annot, "Subtype", HPDF_OCLASS_NAME); if (!subtype || HPDF_StrCmp (subtype->value, HPDF_ANNOT_TYPE_NAMES[(HPDF_INT)type]) != 0) { HPDF_RaiseError (annot->error, HPDF_INVALID_ANNOTATION, 0); return HPDF_FALSE; } return HPDF_TRUE; }
static HPDF_STATUS PngBeforeWrite (HPDF_Dict obj) { HPDF_STATUS ret; png_byte header[HPDF_PNG_BYTES_TO_CHECK]; HPDF_UINT len = HPDF_PNG_BYTES_TO_CHECK; HPDF_Stream png_data; HPDF_String s; HPDF_PTRACE ((" PngBeforeWrite\n")); HPDF_MemStream_FreeData(obj->stream); s = HPDF_Dict_GetItem (obj, "_FILE_NAME", HPDF_OCLASS_STRING); if (!s) return HPDF_SetError (obj->error, HPDF_MISSING_FILE_NAME_ENTRY, 0); png_data = HPDF_FileReader_New (obj->mmgr, (const char *)(s->value)); if (!HPDF_Stream_Validate (png_data)) return obj->error->error_no; HPDF_MemSet (header, 0x00, HPDF_PNG_BYTES_TO_CHECK); ret = HPDF_Stream_Read (png_data, header, &len); if (ret != HPDF_OK || png_sig_cmp (header, (png_size_t)0, HPDF_PNG_BYTES_TO_CHECK)) { HPDF_Stream_Free(png_data); return HPDF_SetError (obj->error, HPDF_INVALID_PNG_IMAGE, 0); } if ((ret = LoadPngData (obj, NULL, png_data, HPDF_FALSE)) != HPDF_OK) { HPDF_Stream_Free(png_data); return ret; } HPDF_Stream_Free(png_data); return HPDF_OK; }
HPDF_STATUS HPDF_Doc_PrepareEncryption (HPDF_Doc pdf) { HPDF_Encrypt e= HPDF_EncryptDict_GetAttr (pdf->encrypt_dict); HPDF_Dict info = GetInfo (pdf); HPDF_Array id; if (!e) return HPDF_DOC_ENCRYPTDICT_NOT_FOUND; if (!info) return pdf->error.error_no; if (HPDF_EncryptDict_Prepare (pdf->encrypt_dict, info, pdf->xref) != HPDF_OK) return pdf->error.error_no; /* reset 'ID' to trailer-dictionary */ id = HPDF_Dict_GetItem (pdf->trailer, "ID", HPDF_OCLASS_ARRAY); if (!id) { id = HPDF_Array_New (pdf->mmgr); if (!id || HPDF_Dict_Add (pdf->trailer, "ID", id) != HPDF_OK) return pdf->error.error_no; } else HPDF_Array_Clear (id); if (HPDF_Array_Add (id, HPDF_Binary_New (pdf->mmgr, e->encrypt_id, HPDF_ID_LEN)) != HPDF_OK) return pdf->error.error_no; if (HPDF_Array_Add (id, HPDF_Binary_New (pdf->mmgr, e->encrypt_id, HPDF_ID_LEN)) != HPDF_OK) return pdf->error.error_no; return HPDF_OK; }
HPDF_BOOL HPDF_Image_Validate (HPDF_Image image) { HPDF_Name subtype; HPDF_PTRACE ((" HPDF_Image_Validate\n")); if (!image) return HPDF_FALSE; if (image->header.obj_class != (HPDF_OSUBCLASS_XOBJECT | HPDF_OCLASS_DICT)) { HPDF_RaiseError (image->error, HPDF_INVALID_IMAGE, 0); return HPDF_FALSE; } subtype = HPDF_Dict_GetItem (image, "Subtype", HPDF_OCLASS_NAME); if (!subtype || HPDF_StrCmp (subtype->value, "Image") != 0) { HPDF_RaiseError (image->error, HPDF_INVALID_IMAGE, 0); return HPDF_FALSE; } return HPDF_TRUE; }
static HPDF_STATUS AddAnnotation (HPDF_Page page, HPDF_Annotation annot) { HPDF_Array array; HPDF_STATUS ret; HPDF_PTRACE((" HPDF_Pages\n")); /* find "Annots" entry */ array = HPDF_Dict_GetItem (page, "Annots", HPDF_OCLASS_ARRAY); if (!array) { array = HPDF_Array_New (page->mmgr); if (!array) return HPDF_Error_GetCode (page->error); ret = HPDF_Dict_Add (page, "Annots", array); if (ret != HPDF_OK) return ret; } return HPDF_Array_Add (array, annot); }
HPDF_EXPORT(HPDF_STATUS) HPDF_U3D_Set3DActivation(HPDF_Annotation u3dAnnotation, HPDF_Dict activation) { HPDF_STATUS ret = HPDF_OK; HPDF_Name subtype; HPDF_PTRACE ((" HPDF_U3D_Set3DActivation\n")); if (u3d == NULL || activation == NULL) { return HPDF_INVALID_U3D_DATA; } subtype = HPDF_Dict_GetItem (u3dAnnotation, "Subtype", HPDF_OCLASS_NAME); if (!subtype || HPDF_StrCmp (subtype->value, "3D") != 0) { HPDF_RaiseError (u3dAnnotation->error, HPDF_INVALID_ANNOTATION, 0); return HPDF_FALSE; } ret = HPDF_Dict_Add(u3dAnnotation, "3DA", activation); return ret; }
HPDF_EXPORT(HPDF_STATUS) HPDF_3DView_AddNode(HPDF_Dict view, const char *name, HPDF_REAL opacity, HPDF_BOOL visible) { HPDF_Array nodes = NULL; HPDF_Dict node; HPDF_STATUS ret = HPDF_OK; HPDF_PTRACE ((" HPDF_3DView_AddNode\n")); if (view == NULL || opacity < 0 || opacity > 1 || name == NULL || name[0] == '\0') { return HPDF_INVALID_U3D_DATA; } nodes = (HPDF_Array)HPDF_Dict_GetItem (view, "NA", HPDF_OCLASS_ARRAY); if (nodes == NULL) { nodes = HPDF_Array_New (view->mmgr); if (!nodes) { return HPDF_Error_GetCode (view->error); } ret = HPDF_Dict_Add (view, "NA", nodes); if (ret != HPDF_OK) { HPDF_Array_Free (nodes); return ret; } } node = HPDF_Dict_New (view->mmgr); if (!node) { HPDF_Array_Free (nodes); return HPDF_Error_GetCode (view->error); } ret = HPDF_Dict_AddName (node, "Type", "3DNode"); if (ret != HPDF_OK) { HPDF_Array_Free (nodes); HPDF_Dict_Free (node); return ret; } ret = HPDF_Dict_Add (node, "N", HPDF_String_New (view->mmgr, name, NULL)); if (ret != HPDF_OK) { HPDF_Array_Free (nodes); HPDF_Dict_Free (node); return ret; } ret = HPDF_Dict_AddReal (node, "O", opacity); if (ret != HPDF_OK) { HPDF_Array_Free (nodes); HPDF_Dict_Free (node); return ret; } ret = HPDF_Dict_AddBoolean (node, "V", visible); if (ret != HPDF_OK) { HPDF_Dict_Free (node); HPDF_Array_Free (nodes); return ret; } ret = HPDF_Array_Add(nodes, node); if (ret != HPDF_OK) { HPDF_Dict_Free (node); HPDF_Array_Free (nodes); return ret; } return ret; }