Exemple #1
0
 private PdfStream(PdfDictionary dictionary, PdfData data)
     : base(PdfObjectType.Stream)
 {
     IsContainer      = true;
     StreamDictionary = dictionary;
     Data             = data;
 }
Exemple #2
0
        public static PdfStream Parse(PdfDictionary dictionary, Lexer lexer)
        {
            if (dictionary is null)
            {
                throw new ArgumentNullException(nameof(dictionary));
            }

            lexer.Expects("stream");
            char eol = lexer.ReadChar();

            if (eol == '\r')
            {
                eol = lexer.ReadChar();
            }

            if (eol != '\n')
            {
                throw new ParsingException($@"Stream must end with either \r\n or \n. Was '{eol}'");
            }

            IPdfObject lengthObject = dictionary["Length"];

            if (lengthObject is null)
            {
                throw new ParsingException("Stream dictionary is missing 'Length' entry");
            }

            int length = 0;

            if (lengthObject is PdfIndirectReference reference)
            {
                PdfIndirectObject lenobj = lexer.IndirectReferenceResolver
                                           .GetObject(reference.ObjectNumber, reference.GenerationNumber);

                length = ((PdfNumeric)lenobj.Object).ToInt32();
            }
            else
            {
                length = int.Parse(lengthObject.ToString(), CultureInfo.InvariantCulture);
            }

            var data = PdfData.Parse(lexer, length);

            lexer.Expects("endstream");

            return(new PdfStream(dictionary, data));
        }