[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-2d-dev
Subject:    Re: [OpenJDK 2D-Dev] Printing to Postscript doesn't support dieresis
From:       Mario Torre <neugens () redhat ! com>
Date:       2014-11-13 18:20:18
Message-ID: 1415902818.3847.42.camel () nirvana ! localdomain
[Download RAW message or body]

On Fri, 2014-11-07 at 17:36 +0100, Mario Torre wrote:
> Hi all,
> 
> I've been working on a strange issue recently, this seems to affect all
> recent version of OpenJDK as well as Oracle JDK.
> 
> The issue appears to be related to this change:
> 
> http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/rev/fbe9320339ea
> 
> The issue as I could find by debugging OpenJDK is a mix of a couple of
> things.
> 
> This change was addressing postscript size explosion, where missing font
> descriptor in version prior to this fix were causing characters to be
> rendered as paths.
> 
> The new code creates an actual descriptor array, so fonts can be
> rendered directly by postscript. However, it seems that the postscript
> code assumes ISO_8859_1 encoding, so if I pass some characters with,
> say, umlaut, like 'ä', instead of creating a patch the character is
> encoded as <c3a4> (which is correct ihmo) but then mapped to
> ISOLatin1Encoding.
> 
> This is a snippet of the generated postscript file, the file is
> generated using a modified verion of the PrintSE.java test in OpenJDK:
> 
> http://cr.openjdk.java.net/~neugens/psDieresisBug/PrintSEUmlauts.java
> 
> /ISOF {
>      dup findfont dup length 1 add dict begin {
>              1 index /FID eq {pop pop} {D} ifelse
>      } forall /Encoding ISOLatin1Encoding D
>      currentdict end definefont
> } BD
> /NZ {dup 1 lt {pop 1} if} BD
> /S {
>      moveto 1 index stringwidth pop NZ sub
>      1 index length 1 sub NZ div 0
>      3 2 roll ashow newpath} BD
> 12.0 12 F
> <c3a4> 7.44 100.0 100.0 S
> pgSave restore
> 
> I'm not really confident with Postscript at this level, so I would like
> some hints of where to look for an actual fix.
> 
> I have a workaround that seems to work, something like:
> 
> GlyphVector gv = font.createGlyphVector(frc, "ä");
> g2d.drawGlyphVector(gv, 250, 220);
> 
> which basically forces the glyph path again. And of course I could
> revert the original change, but in either case it doesn't seem correct.
> 
> My guess is that we should either somehow force ISO_8859_1 when calling
> CharsetString[] makeMultiCharsetString from PSPrinterJob, or have a
> proper fix for the Postscript file.
> 
> Any idea of hint is very much appreciated.
> 
> Cheers,
> Mario
> 
> 

Ping?

Mario


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic