public HPDF_Xref(int offset = 0) { LibLogger.Debug(this.GetType(), $"HPDF_Xref offset {offset}"); HPDF_Xref_Entry newEntry; StartOffset = offset; Entries = new List <HPDF_Xref_Entry>(); Addr = 0; if (StartOffset == 0) { newEntry = new HPDF_Xref_Entry { EntryTyp = HPDF_FREE_ENTRY, ByteOffset = 0, GenNo = HPDF_Consts.HPDF_MAX_GENERATION_NUM, Obj = null }; Entries.Add(newEntry); } Trailer = new HPDF_Dict(); Error = new HPDF_Error(); }
public void HPDF_Xref_Add(HPDF_Object obj) { LibLogger.Debug(this.GetType(), "HPDF_Xref_Add"); if (obj == null) { Error = new HPDF_Error("HPDF_Xref_Add", HPDF_Error.HPDF_INVALID_OBJECT, 0); } var header = obj.Header; if ((header.ObjId & HPDF_Obj_Header.HPDF_OTYPE_DIRECT) != 0 || (header.ObjId & HPDF_Obj_Header.HPDF_OTYPE_INDIRECT) != 0) { Error = new HPDF_Error("HPDF_Xref_Add", HPDF_Error.HPDF_INVALID_OBJECT, 0); } if (Entries.Count >= HPDF_Consts.HPDF_LIMIT_MAX_XREF_ELEMENT) { Error = new HPDF_Error("HPDF_Xref_Add", HPDF_Error.HPDF_XREF_COUNT_ERR, 0); } var entry = new HPDF_Xref_Entry { EntryTyp = HPDF_IN_USE_ENTRY, ByteOffset = 0, GenNo = 0, Obj = obj }; Entries.Add(entry); header.ObjId = (uint)(StartOffset + Entries.Count - 1 + (int)HPDF_Obj_Header.HPDF_OTYPE_INDIRECT); header.GenNo = entry.GenNo; }
public HPDF_Xref_Entry HPDF_Xref_GetEntryByObjectId(uint objId) { LibLogger.Debug(this.GetType(), "HPDF_Xref_GetEntryByObjectId"); HPDF_Xref tmpXref = this; while (tmpXref != null) { uint i; if (tmpXref.Entries.Count + tmpXref.StartOffset > objId) { Error = new HPDF_Error("HPDF_Xref_GetEntryByObjectId", HPDF_Error.HPDF_INVALID_OBJ_ID, 0); } if (tmpXref.StartOffset < objId) { for (i = 0; i < tmpXref.Entries.Count; i++) { if (tmpXref.StartOffset + i == objId) { HPDF_Xref_Entry entry = tmpXref.HPDF_Xref_GetEntry((int)i); return(entry); } } } tmpXref = tmpXref.Prev; } return(null); }