SetSubsetCommitPolicy(FontSubsetterCommitPolicies policy) { if (policy == FontSubsetterCommitPolicies.CommitEntireSequence && _commitCountPolicy != 1) { throw new ArgumentOutOfRangeException(SR.Get(SRID.ReachPackaging_SequenceCntMustBe1)); } _commitPolicy = policy; }
SetFontSubsettingPolicy(FontSubsetterCommitPolicies policy) { IServiceProvider resourceServiceProvider = (IServiceProvider)ResourcePolicy; XpsFontSerializationService fontService = (XpsFontSerializationService)resourceServiceProvider.GetService(typeof(XpsFontSerializationService)); if (fontService != null) { XpsFontSubsetter fontSubsetter = fontService.FontSubsetter; fontSubsetter.SetSubsetCommitPolicy(policy); } }
SubsetComplete(INode node) { FontSubsetterCommitPolicies signal = FontSubsetterCommitPolicies.CommitPerPage; bool validSubsetNode = true; bool subsetComplete = false; if (node is IXpsFixedDocumentSequenceWriter) { signal = FontSubsetterCommitPolicies.CommitEntireSequence; } else if (node is IXpsFixedDocumentWriter) { signal = FontSubsetterCommitPolicies.CommitPerDocument; } else if (node is IXpsFixedPageWriter) { signal = FontSubsetterCommitPolicies.CommitPerPage; } else { validSubsetNode = false; } if (validSubsetNode) { XpsFontSerializationService fontService = (XpsFontSerializationService)GetService(typeof(XpsFontSerializationService)); if (fontService != null) { XpsFontSubsetter fontSubsetter = fontService.FontSubsetter; subsetComplete = fontSubsetter.CommitFontSubsetsSignal(signal); } } return(subsetComplete); }
CommitFontSubsetsSignal( FontSubsetterCommitPolicies signal ) { // // flag indicating if this signal completed a subset // bool completedSubset = false; if (signal == FontSubsetterCommitPolicies.CommitPerPage) { foreach (FEMCacheItem item in _fontEmbeddingManagerCache.Values) { if (item != null) { item.AddRelationship(); item.CurrentPageReferences = false; } } } else if (signal == FontSubsetterCommitPolicies.CommitPerDocument && _commitPolicy == FontSubsetterCommitPolicies.CommitEntireSequence) { foreach (FEMCacheItem item in _fontEmbeddingManagerCache.Values) { if (item != null) { item.AddRestrictedRelationship(); } } } // // If we recieve a signal to commit a superset of what we are commiting on // i.e. Document Signal with commit Policy is per page // we must commit // if (signal >= _commitPolicy) { if (signal == _commitPolicy) { _currentCommitCnt++; } if (signal > _commitPolicy || _currentCommitCnt % _commitCountPolicy == 0) { foreach (FEMCacheItem item in _fontEmbeddingManagerCache.Values) { if (item != null && _commitPolicy != FontSubsetterCommitPolicies.None) { item.Commit(); // // We will be removing this FEMCacheItem from the cache // after this loop so we must add its document relationship // if restricted. If the policy is CommitPerDocumentSequence // we do not need to add since it will have been added at the document signal // if (signal != FontSubsetterCommitPolicies.CommitEntireSequence) { item.AddRestrictedRelationship(); } } } _fontEmbeddingManagerCache.Clear(); _currentCommitCnt = 0; completedSubset = true; } } return(completedSubset); }