virtual protected internal void ReadObjStm(PRStream stream, IntHashtable map) { if (stream == null) return; int first = stream.GetAsNumber(PdfName.FIRST).IntValue; int n = stream.GetAsNumber(PdfName.N).IntValue; byte[] b = GetStreamBytes(stream, tokens.File); PRTokeniser saveTokens = tokens; tokens = new PRTokeniser(new RandomAccessFileOrArray(new RandomAccessSourceFactory().CreateSource(b))); try { int[] address = new int[n]; int[] objNumber = new int[n]; bool ok = true; for (int k = 0; k < n; ++k) { ok = tokens.NextToken(); if (!ok) break; if (tokens.TokenType != PRTokeniser.TokType.NUMBER) { ok = false; break; } objNumber[k] = tokens.IntValue; ok = tokens.NextToken(); if (!ok) break; if (tokens.TokenType != PRTokeniser.TokType.NUMBER) { ok = false; break; } address[k] = tokens.IntValue + first; } if (!ok) throw new InvalidPdfException(MessageLocalization.GetComposedMessage("error.reading.objstm")); for (int k = 0; k < n; ++k) { if (map.ContainsKey(k)) { tokens.Seek(address[k]); tokens.NextToken(); PdfObject obj; if (tokens.TokenType == PRTokeniser.TokType.NUMBER) { obj = new PdfNumber(tokens.StringValue); } else { tokens.Seek(address[k]); obj = ReadPRObject(); } xrefObj[objNumber[k]] = obj; } } } finally { tokens = saveTokens; } }
protected internal PdfObject ReadOneObjStm(PRStream stream, int idx) { int first = stream.GetAsNumber(PdfName.FIRST).IntValue; byte[] b = GetStreamBytes(stream, tokens.File); PRTokeniser saveTokens = tokens; tokens = new PRTokeniser(b); try { int address = 0; bool ok = true; ++idx; for (int k = 0; k < idx; ++k) { ok = tokens.NextToken(); if (!ok) break; if (tokens.TokenType != PRTokeniser.TK_NUMBER) { ok = false; break; } ok = tokens.NextToken(); if (!ok) break; if (tokens.TokenType != PRTokeniser.TK_NUMBER) { ok = false; break; } address = tokens.IntValue + first; } if (!ok) throw new InvalidPdfException(MessageLocalization.GetComposedMessage("error.reading.objstm")); tokens.Seek(address); return ReadPRObject(); } finally { tokens = saveTokens; } }
virtual protected internal PdfObject ReadOneObjStm (PRStream stream, int idx) { int first = stream.GetAsNumber(PdfName.FIRST).IntValue; byte[] b = GetStreamBytes(stream, tokens.File); PRTokeniser saveTokens = tokens; tokens = new PRTokeniser(new RandomAccessFileOrArray(new RandomAccessSourceFactory().CreateSource(b))); try { int address = 0; bool ok = true; ++idx; for (int k = 0; k < idx; ++k) { ok = tokens.NextToken(); if (!ok) break; if (tokens.TokenType != PRTokeniser.TokType.NUMBER) { ok = false; break; } ok = tokens.NextToken(); if (!ok) break; if (tokens.TokenType != PRTokeniser.TokType.NUMBER) { ok = false; break; } address = tokens.IntValue + first; } if (!ok) throw new InvalidPdfException(MessageLocalization.GetComposedMessage("error.reading.objstm")); tokens.Seek(address); tokens.NextToken(); PdfObject obj; if (tokens.TokenType == PRTokeniser.TokType.NUMBER) { obj = new PdfNumber(tokens.StringValue); } else { tokens.Seek(address); obj = ReadPRObject(); } return obj; } finally { tokens = saveTokens; } }
protected internal void ReadObjStm(PRStream stream, IntHashtable map) { int first = stream.GetAsNumber(PdfName.FIRST).IntValue; int n = stream.GetAsNumber(PdfName.N).IntValue; byte[] b = GetStreamBytes(stream, tokens.File); PRTokeniser saveTokens = tokens; tokens = new PRTokeniser(b); try { int[] address = new int[n]; int[] objNumber = new int[n]; bool ok = true; for (int k = 0; k < n; ++k) { ok = tokens.NextToken(); if (!ok) break; if (tokens.TokenType != PRTokeniser.TK_NUMBER) { ok = false; break; } objNumber[k] = tokens.IntValue; ok = tokens.NextToken(); if (!ok) break; if (tokens.TokenType != PRTokeniser.TK_NUMBER) { ok = false; break; } address[k] = tokens.IntValue + first; } if (!ok) throw new InvalidPdfException("Error reading ObjStm"); for (int k = 0; k < n; ++k) { if (map.ContainsKey(k)) { tokens.Seek(address[k]); PdfObject obj = ReadPRObject(); xrefObj[objNumber[k]] = obj; } } } finally { tokens = saveTokens; } }