Hi,
I'm making a call to org.apache.fop.tools.fontlist.FontListGenerator.listFonts( 
... ) to get a list of font names for my desktop application.  To get the font 
names, I take the keys from the returned fontFamilies SortedMap; the actual 
data is junked.
I hadn't realised just how much memory is used by listfont( ... ) - on some 
platforms such as Windows 7, in excess of 250 MB.  In this case I'm hitting out 
of memory errors.
I was wondering if there's a simpler way (uses less memory) to get just the 
font names (first family names)?  As I said, I don't make use of the metrics 
and other font details...just the first family name for each font.  Digging 
down into  listfont( ... ), I was wondering if it's safe to take the 
firstFamilyName and place it into a list say and then drop the following lines 
for the containers/sort?
Iterator iter = fontInfo.getFontTriplets().entrySet().iterator();while 
(iter.hasNext()) {    Map.Entry entry = (Map.Entry)iter.next();    FontTriplet 
triplet = (FontTriplet)entry.getKey();    String key = 
(String)entry.getValue();    FontSpec container;    if (keyBag.contains(key)) { 
       keyBag.remove(key);
        FontMetrics metrics = (FontMetrics)fonts.get(key);
        container = new FontSpec(key, metrics);        
container.addFamilyNames(metrics.getFamilyNames());        keys.put(key, 
container);        String firstFamilyName = 
(String)container.getFamilyNames().first();        List containers = 
(List)fontFamilies.get(firstFamilyName);        if (containers == null) {       
     containers = new java.util.ArrayList();            
fontFamilies.put(firstFamilyName, containers);        }        
containers.add(container);        Collections.sort(containers);    } else {     
   container = (FontSpec)keys.get(key);    }    container.addTriplet(triplet);}
I'm guessing a lot of memory is chewed up in the containers/sort section...but 
really I can't be sure as I don't fully follow what's going on!
Ideally I'd just up the amount of memory supplied to the desktop application, 
but I don't have that option and besides, it just delays the problem of running 
out of memory.

Thanks in advance,Bernard.                                        

Reply via email to