Hi, Turning on tracing the problem is that while the font cache is being written to the temporary directory:
[TRACE] FontCache - Writing font cache to C:\Documents and Settings\levinson\Local Settings\Temp\.fop\fop-fonts.cache The font cache is never read from the temporary directory. It is always read from the place user.home points to. For the code to be able to use the temporary directory, it would have to check to see if there is no .fop directory in directory given by System property user.home and if there is no .fop directory look under the temporary directory for .fop. I don't know if this would be an acceptable change. Best Regards, Jonathan Levinson From: Jonathan Levinson [mailto:[email protected]] Sent: Monday, August 16, 2010 1:58 PM To: Adrian Cumiskey Cc: [email protected] Subject: RE: RE: Problem with creation of font cache on Windows 7 64 bit Hi Adrian, Thanks for your help! I'm noticing behavior I did not expect after reading your code and reading https://issues.apache.org/bugzilla/show_bug.cgi?id=46686. It looks like if "mkdir" fails, FOP will use the temp directory. However testing this by pointing -Duser.home to a directory to which I do not have write permissions on Windows XP, I don't see any font cache created. Instead, it seems like fonts are completely reloaded each time with the <auto-detect> feature under <fonts> turned on. Reading the code, I see the following, which leads me to expect the temporary directory would be used. /** * Returns the default font cache file. * @param forWriting true if the user directory should be created * @return the default font cache file */ public static File getDefaultCacheFile(boolean forWriting) { File userHome = getUserHome(); if (userHome != null) { File fopUserDir = new File(userHome, FOP_USER_DIR); if (forWriting) { boolean writable = fopUserDir.canWrite(); if (!fopUserDir.exists()) { writable = fopUserDir.mkdir(); } if (!writable) { userHome = getTempDirectory(); fopUserDir = new File(userHome, FOP_USER_DIR); fopUserDir.mkdir(); } } return new File(fopUserDir, DEFAULT_CACHE_FILENAME); } return new File(FOP_USER_DIR); } Best Regards, Jonathan Levinson From: [email protected] [mailto:[email protected]] On Behalf Of Adrian Cumiskey Sent: Sunday, August 15, 2010 10:43 PM To: Jonathan Levinson Cc: [email protected]; [email protected] Subject: Re: RE: Problem with creation of font cache on Windows 7 64 bit Hi Jonathan, Well spotted, yes that should work well also. Although its a bit of a sneaky "back door" way of achieving it : -). Cheers, Adrian. On 2010-08-16 1:23 AM, "Jonathan Levinson" <[email protected]<mailto:[email protected]>> wrote: Thank you Adrian! Also I've noticed you can redirect the font-cache with the Java system property -Duser.home, so one can direct it to a different place by editing the JAVAOPTS set in fop.bat. Best Regards, Jonathan Levinson From: Adrian Cumiskey [mailto:[email protected]<mailto:[email protected]>] Sent: Sunday, August 15, 2010 12:28 PM To: [email protected]<mailto:[email protected]> Subject: Re: Problem with creation of font cache on Windows 7 64 bit Hi Jonathan, I have just committed a fix to the missing "cache-file" configuration option (...
