private static void RecourseFonts(PdfDictionary page, IntHashtable hits, List<object[]> fonts, int level)
{
++level;
if (level > 50) // in case we have an endless loop
return;
if (page == null)
return;
PdfDictionary resources = page.GetAsDict(PdfName.RESOURCES);
if (resources == null)
return;
PdfDictionary font = resources.GetAsDict(PdfName.FONT);
if (font != null) {
foreach (PdfName key in font.Keys) {
PdfObject ft = font.Get(key);
if (ft == null || !ft.IsIndirect())
continue;
int hit = ((PRIndirectReference)ft).Number;
if (hits.ContainsKey(hit))
continue;
AddFont((PRIndirectReference)ft, hits, fonts);
}
}
PdfDictionary xobj = resources.GetAsDict(PdfName.XOBJECT);
if (xobj != null) {
foreach (PdfName key in xobj.Keys) {
PdfObject po = xobj.GetDirectObject(key);
if (po is PdfDictionary)
RecourseFonts((PdfDictionary)po, hits, fonts, level);
}
}
}