private PdfStream(PdfDictionary dictionary, PdfData data) : base(PdfObjectType.Stream) { IsContainer = true; StreamDictionary = dictionary; Data = data; }
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)); }