public void ParseContent() { IList <PdfObject> args = new List <PdfObject>(); var context = new PsContext(_file, _page); while (_lexer.NextToken()) { switch (_lexer.Token) { case Token.Ider: ExecuteCommand(context, _lexer.StringValue, args); args.Clear(); break; case Token.StartArray: var arr = _lexer.ReadArray(null); args.Add(arr); break; default: args.Add(_lexer.PlainPdfObject()); break; } } }
public IEnumerable <Tuple <Int32, PdfObject> > ReadObjStream() { Dictionary <Int32, Int32> _refs = new Dictionary <Int32, Int32>(); Boolean bVal = false; Int32 nKey = 0; Int32 _startPos = -1; while (_lexer.NextToken()) { switch (_lexer.Token) { case Token.Number: if (bVal) { _refs.Add(nKey, _lexer.IntValue); bVal = false; } else { bVal = true; nKey = _lexer.IntValue; } break; case Token.StartDictionary: case Token.StartArray: if (_startPos == -1) { _startPos = _lexer.Position; } Int32 pos = _lexer.Position - _startPos; PdfObject obj = null; if (_lexer.Token == Token.StartDictionary) { obj = _lexer.ReadDictionary(); } else if (_lexer.Token == Token.StartArray) { obj = _lexer.ReadArray(null); } var k = _refs.FirstOrDefault(kv => Math.Abs(kv.Value - pos) < 3); if (k.Key != 0) { _refs.Remove(k.Key); yield return(Tuple.Create(k.Key, obj)); } if (_refs.Count == 0) { yield break; } break; } } }