(apologies for the double post...somehow my email got tagged to the end of an
unrelated post)
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.