/// <summary> /// Reads the compressed object with the specified index in the object stream /// of the object with the specified object id. /// </summary> internal PdfReference ReadCompressedObject(PdfObjectID objectID, int index) { PdfReference iref; #if true Debug.Assert(_document._irefTable.ObjectTable.ContainsKey(objectID)); if (!_document._irefTable.ObjectTable.TryGetValue(objectID, out iref)) { throw new NotImplementedException("This case is not coded or something else went wrong"); } #else // We should never come here because the object stream must be a type 1 entry in the xref stream // and iref was created before. // Has the specified object already an iref in the object table? if (!_document._irefTable.ObjectTable.TryGetValue(objectID, out iref)) { try { #if true_ iref = new PdfReference(objectID,); iref.ObjectID = objectID; _document._irefTable.Add(os); #else PdfDictionary dict = (PdfDictionary)ReadObject(null, objectID, false, false); PdfObjectStream os = new PdfObjectStream(dict); iref = new PdfReference(os); iref.ObjectID = objectID; _document._irefTable.Add(os); #endif } catch (Exception ex) { Debug.WriteLine(ex.Message); throw; } } #endif // Read in object stream object when we come here for the very first time. if (iref.Value == null) { try { Debug.Assert(_document._irefTable.Contains(iref.ObjectID)); PdfDictionary pdfObject = (PdfDictionary)ReadObject(null, iref.ObjectID, false, false); PdfObjectStream objectStream = new PdfObjectStream(pdfObject); Debug.Assert(objectStream.Reference == iref); // objectStream.Reference = iref; Superfluous, see Assert in line before. Debug.Assert(objectStream.Reference.Value != null, "Something went wrong."); } catch (Exception ex) { Debug.WriteLine(ex.Message); throw; } } Debug.Assert(iref.Value != null); PdfObjectStream objectStreamStream = iref.Value as PdfObjectStream; if (objectStreamStream == null) { Debug.Assert(((PdfDictionary)iref.Value).Elements.GetName("/Type") == "/ObjStm"); objectStreamStream = new PdfObjectStream((PdfDictionary)iref.Value); Debug.Assert(objectStreamStream.Reference == iref); // objectStream.Reference = iref; Superfluous, see Assert in line before. Debug.Assert(objectStreamStream.Reference.Value != null, "Something went wrong."); } Debug.Assert(objectStreamStream != null); //PdfObjectStream objectStreamStream = (PdfObjectStream)iref.Value; if (objectStreamStream == null) throw new Exception("Something went wrong here."); return objectStreamStream.ReadCompressedObject(index); }
/// <summary> /// Reads the irefs from the compressed object with the specified index in the object stream /// of the object with the specified object id. /// </summary> internal void ReadIRefsFromCompressedObject(PdfObjectID objectID) { PdfReference iref; Debug.Assert(_document._irefTable.ObjectTable.ContainsKey(objectID)); if (!_document._irefTable.ObjectTable.TryGetValue(objectID, out iref)) { // We should never come here because the object stream must be a type 1 entry in the xref stream // and iref was created before. throw new NotImplementedException("This case is not coded or something else went wrong"); } // Read in object stream object when we come here for the very first time. if (iref.Value == null) { try { Debug.Assert(_document._irefTable.Contains(iref.ObjectID)); PdfDictionary pdfObject = (PdfDictionary)ReadObject(null, iref.ObjectID, false, false); PdfObjectStream objectStream = new PdfObjectStream(pdfObject); Debug.Assert(objectStream.Reference == iref); // objectStream.Reference = iref; Superfluous, see Assert in line before. Debug.Assert(objectStream.Reference.Value != null, "Something went wrong."); } catch (Exception ex) { Debug.WriteLine(ex.Message); throw; } } Debug.Assert(iref.Value != null); PdfObjectStream objectStreamStream = iref.Value as PdfObjectStream; if (objectStreamStream == null) { Debug.Assert(((PdfDictionary)iref.Value).Elements.GetName("/Type") == "/ObjStm"); objectStreamStream = new PdfObjectStream((PdfDictionary)iref.Value); Debug.Assert(objectStreamStream.Reference == iref); // objectStream.Reference = iref; Superfluous, see Assert in line before. Debug.Assert(objectStreamStream.Reference.Value != null, "Something went wrong."); } Debug.Assert(objectStreamStream != null); //PdfObjectStream objectStreamStream = (PdfObjectStream)iref.Value; if (objectStreamStream == null) throw new Exception("Something went wrong here."); objectStreamStream.ReadReferences(_document._irefTable); }