jeremias    2003/06/02 13:03:59

  Modified:    src/java/org/apache/fop/render/ps PSProcSets.java
  Log:
  Fix character set problems with Type 1 fonts
  Establish WinAnsiEncoding in PS interpreter
  Reencodes all fonts except Symbol and ZapfDingbats as WinAnsiEncoding
  Financed by: CTB/McGraw-Hill
  
  Revision  Changes    Path
  1.3       +41 -7     xml-fop/src/java/org/apache/fop/render/ps/PSProcSets.java
  
  Index: PSProcSets.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/ps/PSProcSets.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PSProcSets.java   17 Apr 2003 15:35:20 -0000      1.2
  +++ PSProcSets.java   2 Jun 2003 20:03:59 -0000       1.3
  @@ -55,6 +55,7 @@
   import java.util.Map;
   
   import org.apache.fop.fonts.Font;
  +import org.apache.fop.fonts.Glyphs;
   import org.apache.fop.layout.FontInfo;
   
   /**
  @@ -225,19 +226,52 @@
           }
           gen.writeln("end def");
           gen.writeln("%%EndResource");
  +        defineWinAnsiEncoding(gen);
  +        
  +        //Rewrite font encodings
           enum = fonts.keySet().iterator();
           while (enum.hasNext()) {
               String key = (String)enum.next();
               Font fm = (Font)fonts.get(key);
  -            gen.writeln("/" + fm.getFontName() + " findfont");
  -            gen.writeln("dup length dict begin");
  -            gen.writeln("  {1 index /FID ne {def} {pop pop} ifelse} forall");
  -            gen.writeln("  /Encoding ISOLatin1Encoding def");
  -            gen.writeln("  currentdict");
  -            gen.writeln("end");
  -            gen.writeln("/" + fm.getFontName() + " exch definefont pop");
  +            if (null == fm.getEncoding()) {
  +                //ignore (ZapfDingbats and Symbol run through here
  +                //TODO: ZapfDingbats and Symbol should get getEncoding() fixed!
  +            } else if ("WinAnsiEncoding".equals(fm.getEncoding())) {
  +                gen.writeln("/" + fm.getFontName() + " findfont");
  +                gen.writeln("dup length dict begin");
  +                gen.writeln("  {1 index /FID ne {def} {pop pop} ifelse} forall");
  +                gen.writeln("  /Encoding " + fm.getEncoding() + " def");
  +                gen.writeln("  currentdict");
  +                gen.writeln("end");
  +                gen.writeln("/" + fm.getFontName() + " exch definefont pop");
  +            } else {
  +                System.out.println("Only WinAnsiEncoding is supported. Font '" 
  +                    + fm.getFontName() + "' asks for: " + fm.getEncoding());
  +            }
           }
       }
   
  +    private static void defineWinAnsiEncoding(PSGenerator gen) throws IOException {
  +        gen.writeln("/WinAnsiEncoding [");
  +        for (int i = 0; i < Glyphs.WINANSI_ENCODING.length; i++) {
  +            if (i > 0) {
  +                if ((i % 5) == 0) {
  +                    gen.newLine();
  +                } else {
  +                    gen.write(" ");
  +                }
  +            }
  +            final char ch = Glyphs.WINANSI_ENCODING[i];
  +            final String glyphname = Glyphs.charToGlyphName(ch);
  +            if ("".equals(glyphname)) {
  +                gen.write("/" + Glyphs.NOTDEF);
  +            } else {
  +                gen.write("/");
  +                gen.write(glyphname);
  +            }
  +        }
  +        gen.newLine();
  +        gen.writeln("] def");
  +    }
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to