Esempio n. 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();
        }
Esempio n. 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;
        }
Esempio n. 3
0
        public HPDF_Object HPDF_Dict_GetItem(string key, uint objClass)
        {
            LibLogger.Debug(this.GetType(), $"HPDF_Dict_GetItem key {key} objClass {objClass}");

            var         element = GetElement(key);
            HPDF_Object obj     = new HPDF_Object();

            if (element != null && key == element.Key)
            {
                var header = element.Value.Header;

                if (header.ObjClass == HPDF_Obj_Header.HPDF_OCLASS_PROXY)
                {
                    HPDF_Proxy p = new HPDF_Proxy(element.Value);
                    header = p.Header;
                    obj    = p.Obj;
                }
                else
                {
                    obj = element.Value;
                }

                if ((Header.ObjClass & HPDF_Obj_Header.HPDF_OCLASS_ANY) != objClass)
                {
                    Error = new HPDF_Error("HPDF_Dict_GetItem", HPDF_Error.HPDF_DICT_ITEM_UNEXPECTED_TYPE, 0);
                }
            }

            return(obj);
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        public HPDF_Pages HPDF_Catalog_GetRoot()
        {
            var pages = HPDF_Dict_GetItem("Pages", HPDF_Obj_Header.HPDF_OCLASS_DICT);

            if (pages == null || pages.Header.ObjClass != (HPDF_Obj_Header.HPDF_OSUBCLASS_PAGES | HPDF_Obj_Header.HPDF_OCLASS_DICT))
            {
                Error = new HPDF_Error("HPDF_Catalog_GetRoot", HPDF_Error.HPDF_PAGE_CANNOT_GET_ROOT_PAGES, 0);
            }

            return(pages as HPDF_Pages);
        }
Esempio n. 6
0
        public void HPDF_Dict_Add(string key, HPDF_Object obj)
        {
            LibLogger.Debug(this.GetType(), $"HPDF_Dict_Add key {key} obj.Header.ObjId {obj.Header.ObjId}");

            HPDF_Obj_Header  header = obj.Header;
            HPDF_DictElement element;

            if ((header.ObjId & HPDF_Obj_Header.HPDF_OTYPE_DIRECT) != 0)
            {
                Error = new HPDF_Error("HPDF_Dict_Add line - invalid object", HPDF_Error.HPDF_INVALID_OBJECT, 0);
            }

            if (key == null)
            {
                Error = new HPDF_Error("HPDF_Dict_Add line - invalid object", HPDF_Error.HPDF_INVALID_OBJECT, 0);
            }

            if (List.Count >= HPDF_Consts.HPDF_LIMIT_MAX_DICT_ELEMENT)
            {
                LibLogger.Debug(this.GetType(), " HPDF_Dict_Add exceed limitatin of dict count(" + HPDF_Consts.HPDF_LIMIT_MAX_DICT_ELEMENT.ToString() + ")");
                Error = new HPDF_Error("HPDF_Dict_Add line - invalid object", HPDF_Error.HPDF_DICT_COUNT_ERR, 0);
            }

            /* check whether there is an object which has same name */
            element = GetElement(key);

            if (element != null)
            {
                element.Value = null;
            }
            else
            {
                element = new HPDF_DictElement
                {
                    Key   = key,
                    Value = null
                };

                List.Add(element);
            }

            if ((header.ObjId & HPDF_Obj_Header.HPDF_OTYPE_INDIRECT) != 0)
            {
                var proxy = new HPDF_Proxy(obj);
                element.Value       = proxy;
                proxy.Header.ObjId |= HPDF_Obj_Header.HPDF_OTYPE_DIRECT;
            }
            else
            {
                element.Value = obj;
                header.ObjId |= HPDF_Obj_Header.HPDF_OTYPE_DIRECT;
            }
        }
Esempio n. 7
0
        public HPDF_Dict()
        {
            LibLogger.Debug(this.GetType(), "ctor");

            Header = new HPDF_Obj_Header
            {
                ObjClass = HPDF_Obj_Header.HPDF_OCLASS_DICT
            };

            List   = new List <HPDF_DictElement>();
            Filter = HPDF_Stream.HPDF_STREAM_FILTER_NONE;
            Error  = new HPDF_Error();
        }
Esempio n. 8
0
        public void HPDF_FreeDoc()
        {
            LibLogger.Debug(this.GetType(), "HPDF_FreeDoc");

            Error = new HPDF_Error();

            if (Xref != null)
            {
                Xref.HPDF_Xref_Free();
                Xref = null;
            }

            PdfVersion = (int)HPDF_PdfVer.HPDF_VER_13;
        }
Esempio n. 9
0
        public void HPDF_Obj_WriteValue(HPDF_Object obj, HPDF_Encrypt e)
        {
            LibLogger.Debug(this.GetType(), "HPDF_Obj_WriteValue");

            HPDF_Obj_Header header = obj.Header;
            var             clas   = header.ObjClass & HPDF_Obj_Header.HPDF_OCLASS_ANY;

            switch (clas)
            {
            case HPDF_Obj_Header.HPDF_OCLASS_NAME:
                HPDF_Name_Write(obj as HPDF_Name);
                break;

            case HPDF_Obj_Header.HPDF_OCLASS_NUMBER:
                HPDF_Number_Write(obj as HPDF_Number);
                break;

            case HPDF_Obj_Header.HPDF_OCLASS_REAL:
                HPDF_Real_Write(obj as HPDF_Real);
                break;

            case HPDF_Obj_Header.HPDF_OCLASS_STRING:
                HPDF_String_Write(obj as HPDF_String, e);
                break;

            case HPDF_Obj_Header.HPDF_OCLASS_BINARY:
                HPDF_Binary_Write(obj as HPDF_Binary, e);
                break;

            case HPDF_Obj_Header.HPDF_OCLASS_ARRAY:
                HPDF_Array_Write(obj as HPDF_Array, e);
                break;

            case HPDF_Obj_Header.HPDF_OCLASS_DICT:
                HPDF_Dict_Write(obj as HPDF_Dict, e);
                break;

            case HPDF_Obj_Header.HPDF_OCLASS_BOOLEAN:
                HPDF_Boolean_Write(obj as HPDF_Boolean);
                break;

            case HPDF_Obj_Header.HPDF_OCLASS_NULL:
                HPDF_Stream_WriteStr("null");
                break;

            default:
                Error = new HPDF_Error("HPDF_Obj_WriteValue", HPDF_Error.HPDF_ERR_UNKNOWN_CLASS, 0);
                break;
            }
        }
Esempio n. 10
0
        public void HPDF_List_Insert(HPDF_Object target, HPDF_Object item)
        {
            int         targetIdx = HPDF_List_Find(target);
            HPDF_Object lastItem  = Obj[Obj.Count - 1];
            int         i;

            LibLogger.Debug(this.GetType(), " HPDF_List_Insert");

            if (targetIdx < 0)
            {
                Error = new HPDF_Error("HPDF_List_Insert", HPDF_Error.HPDF_ITEM_NOT_FOUND, 0);
            }

            /* move the item of the list to behind one by one. */
            for (i = Obj.Count - 2; i >= targetIdx; i--)
            {
                Obj[i + 1] = Obj[i];
            }

            Obj[targetIdx] = item;

            HPDF_List_Add(lastItem);
        }
Esempio n. 11
0
        public void HPDF_Pages_AddKids(HPDF_Dict kid)
        {
            LibLogger.Debug(this.GetType(), "HPDF_Pages_AddKids");

            HPDF_Array    kids;
            HPDF_PageAttr pageAttr;

            if (kid.HPDF_Dict_GetItem("Parent", HPDF_Obj_Header.HPDF_OCLASS_DICT) == null)
            {
                Error = new HPDF_Error("HPDF_Pages_AddKids", HPDF_Error.HPDF_PAGE_CANNOT_SET_PARENT, 0);
            }

            kid.HPDF_Dict_Add("Parent", this);

            // C kids = (HPDF_Array )HPDF_Dict_GetItem (parent, "Kids", HPDF_OCLASS_ARRAY);
            kids = this.HPDF_Dict_GetItem("Kids", HPDF_Obj_Header.HPDF_OCLASS_ARRAY) as HPDF_Array;

            if (kids == null)
            {
                Error = new HPDF_Error("HPDF_Pages_AddKids", HPDF_Error.HPDF_PAGES_MISSING_KIDS_ENTRY, 0);
            }

            if (kid.Header.ObjClass == (HPDF_Obj_Header.HPDF_OCLASS_DICT | HPDF_Obj_Header.HPDF_OSUBCLASS_PAGE))
            {
                pageAttr        = (HPDF_PageAttr)kid.Attr;
                pageAttr.parent = this;
            }

            if (kid.Header.ObjClass == (HPDF_Obj_Header.HPDF_OCLASS_DICT | HPDF_Obj_Header.HPDF_OSUBCLASS_PAGE))
            {
                // TODO var	attr : HPDF_PageAttr = kid.attr ;
                pageAttr = (HPDF_PageAttr)kid.Attr;
            }

            //kids.HPDF_Array_Add(kid); //(kids, kid);
        }
Esempio n. 12
0
 public virtual double measureTextFn(HPDF_Font font, string text, uint len,
                                     double width, double fontSize, double charSpace, double wordSpace, bool wordwrap, C_NumberPointer realWidth)
 {
     Error = new HPDF_Error("Function measure text not implemented by HPDF_FontAttr");
     return(0);
 }
Esempio n. 13
0
 public virtual HPDF_TextWidth textWidthFn(HPDF_Font font, string text, uint len)
 {
     Error = new HPDF_Error("Function textWidthFn not implemented by HPDF_FontAttr");
     return(null);
 }