static HPDF_STATUS WriteTrailer (HPDF_Xref xref, HPDF_Stream stream) { HPDF_UINT max_obj_id = xref->entries->count + xref->start_offset; HPDF_STATUS ret; HPDF_PTRACE ((" WriteTrailer\n")); if ((ret = HPDF_Dict_AddNumber (xref->trailer, "Size", max_obj_id)) != HPDF_OK) return ret; if (xref->prev) if ((ret = HPDF_Dict_AddNumber (xref->trailer, "Prev", xref->prev->addr)) != HPDF_OK) return ret; if ((ret = HPDF_Stream_WriteStr (stream, "trailer\012")) != HPDF_OK) return ret; if ((ret = HPDF_Dict_Write (xref->trailer, stream, NULL)) != HPDF_OK) return ret; if ((ret = HPDF_Stream_WriteStr (stream, "\012startxref\012")) != HPDF_OK) return ret; if ((ret = HPDF_Stream_WriteUInt (stream, xref->addr)) != HPDF_OK) return ret; if ((ret = HPDF_Stream_WriteStr (stream, "\012%%EOF\012")) != HPDF_OK) return ret; return HPDF_OK; }
HPDF_STATUS HPDF_Obj_WriteValue (void *obj, HPDF_Stream stream, HPDF_Encrypt e) { HPDF_Obj_Header *header; HPDF_STATUS ret; HPDF_PTRACE((" HPDF_Obj_WriteValue\n")); header = (HPDF_Obj_Header *)obj; HPDF_PTRACE((" HPDF_Obj_WriteValue obj=0x%08X obj_class=0x%04X\n", (HPDF_UINT)obj, (HPDF_UINT)header->obj_class)); switch (header->obj_class & HPDF_OCLASS_ANY) { case HPDF_OCLASS_NAME: ret = HPDF_Name_Write (obj, stream); break; case HPDF_OCLASS_NUMBER: ret = HPDF_Number_Write (obj, stream); break; case HPDF_OCLASS_REAL: ret = HPDF_Real_Write (obj, stream); break; case HPDF_OCLASS_STRING: ret = HPDF_String_Write (obj, stream, e); break; case HPDF_OCLASS_BINARY: ret = HPDF_Binary_Write (obj, stream, e); break; case HPDF_OCLASS_ARRAY: ret = HPDF_Array_Write (obj, stream, e); break; case HPDF_OCLASS_DICT: ret = HPDF_Dict_Write (obj, stream, e); break; case HPDF_OCLASS_BOOLEAN: ret = HPDF_Boolean_Write (obj, stream); break; case HPDF_OCLASS_DIRECT: ret = HPDF_Direct_Write (obj, stream); break; case HPDF_OCLASS_NULL: ret = HPDF_Stream_WriteStr (stream, "null"); break; default: ret = HPDF_ERR_UNKNOWN_CLASS; } return ret; }