[OpenJDK 2D-Dev] [PATCH] JDK-4627340 : RFE: A way to improve text printing performance for postscript devices

anton nashatyrev anton.nashatyrev at oracle.com
Fri Jan 10 11:49:29 UTC 2014


Hi Alex,

     you also might be interested in the issue I'm working on: 
https://bugs.openjdk.java.net/browse/JDK-8023990
     If you are targeting Linux platform and working with Latin-1 
charset primarily this fix may help (I hope I could push it in the 
nearest future). FYI the fix is here: 
http://cr.openjdk.java.net/%7Ealitvinov/8023990/webrev.00

Regards,
Anton.

P.S. I'm not a 2D developer, so I couldn't take care of your proposal, 
but I think it's good.

On 09.01.2014 20:34, Alex Geller wrote:
> Hi,
> this is not a production code patch but rather a proof of concept.
> The patch improves the Postscript produced in calls to 
> Graphics2D.drawString().
> The the current implementation first tries to print strings using one 
> of the standard Postscript fonts (PSPrinterJob.textOut()) and if that 
> fails it falls back to drawing glyph vectors.
> The patch adds a third method which is to convert the string into 
> glyphs by means of Font.createGlyphVector() and embed those glyphs in 
> form of a Postscript "Type 3" font.
> The font is updated incrementally which is explicitly allowed by the 
> Postscript specification.
> The incremental update makes the patch also usable for Asian 
> environments where eager embedding is not a good option because the 
> fonts are huge.
> The file is reduced compared to glyph vector drawing. As an example 
> consider a "terms an conditions" page that has 17,000 characters using 
> 3 different fonts.
> Using the current method the Postscript file is about 8 MB. Using the 
> new method the file is 164 KB.
> However, the motivation for submitting this patch is not the file size 
> but the printing time. The original file takes 4:45 minutes to print 
> while the version with the embedded font prints in less than 10 
> seconds on the same printer.
> I suspect the slowness in the fact that the glyph vectors are not 
> cached while the Type 3 fonts are. I posted the results of some 
> related experiments with the Postscript "ucache" command on the OTN 
> forum (see https://community.oracle.com/thread/2617145).
> Based on that I can post a patch for speeding up 
> Graphics2D.drawGlyphVector() substantially too if there is interest.
> Coming back to the main topic my question is if there are chances that 
> this gets included. If yes, then I would do (perhaps with some help) 
> what is necessary to take it from a POC to production code.
> I would also be happy if it could be included and activated only by a 
> system property or a rendering hint.
> The issue is quite important to us and time doesn't seem to heal this. 
> Even printers in the 10,000$ class can take minutes to print a few 
> pages using the current method.
> Attachments:
> - openjdk.patch: A patch based on "openjdk_7_b147_jun_11"
> - PSTest.java: A test program demonstrating the feature
> - out.ps.zip: A zipped Postscript file produced by the test program 
> "PSTest.java"
> Thanks,
> Alex
>
>




More information about the 2d-dev mailing list