public static PDFFileIndirectObject Parse(PDFTextSearcher searcher, int number, int gen) { string start = number.ToString() + " " + gen.ToString() + " obj"; string end = "endobj"; string endstream = "endstream"; string stream = "stream"; string matchstart = searcher.GetInnerText(start.Length); if (matchstart != start) { throw new PDFNativeParserException(string.Format(CommonErrors.IndirectObjectCannotBeParsed, start)); } long startPos = searcher.Position; PDFFileRange endobjPos = searcher.MatchForwardString(end); if (endobjPos.Found == false) { throw new PDFNativeParserException(string.Format(CommonErrors.IndirectObjectCannotBeParsed, start)); } PDFFileRange endstreamPos = searcher.MatchBackwardString(endstream, startPos); PDFFileRange startstreamPos; if (endstreamPos.Found) { startstreamPos = searcher.MatchBackwardString(stream, startPos); if (startstreamPos.Found == false) { throw new PDFNativeParserException(string.Format(CommonErrors.IndirectObjectCannotBeParsed, start)); } endobjPos = startstreamPos; } else { startstreamPos = PDFFileRange.NotFound; } int length = (int)(endobjPos.StartOffset - startPos); string data = searcher.GetInnerText(startPos, length); PDFFileIndirectObject parsed = new PDFFileIndirectObject(number, gen, data); parsed._offset = startPos; if (startstreamPos.Found) { parsed.SetStreamData(searcher.GetInnerBytes(startstreamPos, endstreamPos)); } parsed.EnsureDataParsed(); return(parsed); }
// // .ctor // #region private PDFReader14(System.IO.Stream stream, bool ownStream) /// <summary> /// Constructs an new PDFReader14 /// </summary> /// <param name="stream"></param> /// <param name="ownStream"></param> internal PDFReader14(System.IO.Stream stream, bool ownStream, PDFTraceLog log) { this._innerStream = stream; this._ownsstream = ownStream; if (stream.CanSeek == false) { throw new ArgumentException("Cannot read a PDF File from a non-seekable stream"); } this._searcher = new PDFTextSearcher(stream); }