Beispiel #1
0
        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();
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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);
        }