public bool TryGetNamedColorSpace(NameToken name, out ResourceColorSpace namedToken) { namedToken = default(ResourceColorSpace); if (name == null) { throw new ArgumentNullException(nameof(name)); } if (!namedColorSpaces.TryGetValue(name, out var colorSpaceName)) { return(false); } namedToken = colorSpaceName; return(true); }
public void LoadResourceDictionary(DictionaryToken resourceDictionary, bool isLenientParsing) { currentResourceState.Push(); if (resourceDictionary.TryGet(NameToken.Font, out var fontBase)) { var fontDictionary = DirectObjectFinder.Get <DictionaryToken>(fontBase, scanner); LoadFontDictionary(fontDictionary, isLenientParsing); } if (resourceDictionary.TryGet(NameToken.Xobject, out var xobjectBase)) { var xobjectDictionary = DirectObjectFinder.Get <DictionaryToken>(xobjectBase, scanner); foreach (var pair in xobjectDictionary.Data) { if (!(pair.Value is IndirectReferenceToken reference)) { throw new InvalidOperationException($"Expected the XObject dictionary value for key /{pair.Key} to be an indirect reference, instead got: {pair.Value}."); } currentResourceState[NameToken.Create(pair.Key)] = reference.Data; } } if (resourceDictionary.TryGet(NameToken.ExtGState, scanner, out DictionaryToken extGStateDictionaryToken)) { foreach (var pair in extGStateDictionaryToken.Data) { var name = NameToken.Create(pair.Key); var state = DirectObjectFinder.Get <DictionaryToken>(pair.Value, scanner); extendedGraphicsStates[name] = state; } } if (resourceDictionary.TryGet(NameToken.ColorSpace, scanner, out DictionaryToken colorSpaceDictionary)) { foreach (var nameColorSpacePair in colorSpaceDictionary.Data) { var name = NameToken.Create(nameColorSpacePair.Key); if (DirectObjectFinder.TryGet(nameColorSpacePair.Value, scanner, out NameToken colorSpaceName)) { namedColorSpaces[name] = new ResourceColorSpace(colorSpaceName); } else if (DirectObjectFinder.TryGet(nameColorSpacePair.Value, scanner, out ArrayToken colorSpaceArray)) { if (colorSpaceArray.Length == 0) { throw new PdfDocumentFormatException($"Empty ColorSpace array encountered in page resource dictionary: {resourceDictionary}."); } var first = colorSpaceArray.Data[0]; if (!(first is NameToken arrayNamedColorSpace)) { throw new PdfDocumentFormatException($"Invalid ColorSpace array encountered in page resource dictionary: {colorSpaceArray}."); } namedColorSpaces[name] = new ResourceColorSpace(arrayNamedColorSpace, colorSpaceArray); } else { throw new PdfDocumentFormatException($"Invalid ColorSpace token encountered in page resource dictionary: {nameColorSpacePair.Value}."); } } } }