示例#1
0
        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);
        }
示例#2
0
        //
        // .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);
        }