xmlgraphics-fop-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bernard Giannetti <thebernmeis...@hotmail.com>
Subject Getting a list of font names without the memory hit...
Date Tue, 30 Jul 2013 10:23:04 GMT
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. 		 	   		  
View raw message