]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
adds CID Font support to svg text
authorKeiron Liddle <keiron@apache.org>
Wed, 7 Mar 2001 22:52:11 +0000 (22:52 +0000)
committerKeiron Liddle <keiron@apache.org>
Wed, 7 Mar 2001 22:52:11 +0000 (22:52 +0000)
Submitted by: Claud Yu

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194143 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/render/pdf/SVGRenderer.java

index d790132870f923487d9100f756d1070ff54b3162..721d0526c3d048cbf3a2c470d7fe4a5598ebe906 100644 (file)
@@ -2187,14 +2187,34 @@ public class SVGRenderer {
                 * This handles the escaping of special pdf chars and deals with
                 * whitespace.
                 */
-               protected float addSVGStr(FontState fs, float currentX, String str,
-                                                                                                                       boolean spacing) {
+               protected float addSVGStr(FontState fs, float currentX, String str, boolean spacing) {
                                boolean inbetween = false;
                                boolean addedspace = false;
                                StringBuffer pdf = new StringBuffer();
+                               Font f = (Font) fs.getFontInfo().getFonts().get(fs.getFontName());
+                               boolean useMultiByte = false;
+                               if (f instanceof CIDFont) 
+                                       useMultiByte=true;
+                               String startText = useMultiByte ? "<" : "(";
+                               String endText = useMultiByte ? ">" : ")";
+
+                               pdf.append(startText);
+
+                               if ( useMultiByte ) {
+                                       String enc = ((CIDFont)f).getCharEncoding();
+                               try {
+                                               str = new String(str.getBytes(enc), "8859_1");
+                               } catch (java.io.UnsupportedEncodingException ex) { }
+                               } 
+
                                for (int i = 0; i < str.length(); i++) {
                                                char ch = str.charAt(i);
-                                               if (ch > 127) {
+                                               if ( useMultiByte ) {
+                                                               pdf = pdf.append(Integer.toHexString((int) ch));
+                                                               currentX += fs.width(ch) / 1000f;
+                                                               inbetween = true;
+                                                               addedspace = false;
+                                               } else if (ch > 127) {
                                                                pdf = pdf.append("\\");
                                                                pdf = pdf.append(Integer.toOctalString((int) ch));
                                                                currentX += fs.width(ch) / 1000f;
@@ -2249,6 +2269,7 @@ public class SVGRenderer {
                                                                }
                                                }
                                }
+                                       pdf.append(endText);
                                currentStream.write(pdf.toString());
                                return currentX;
                }
@@ -2379,10 +2400,10 @@ public class SVGRenderer {
                                                                                String str = ((CharacterData) o).getData();
                                                                                currentStream.write(transstr +
                                                                                                                                                                (currentX + matrix.getE()) + " " +
-                                                                                                                                                               (baseY + matrix.getF()) + " Tm " + "(");
+                                                                                                                                                               (baseY + matrix.getF()) + " Tm " );
                                                                                boolean spacing = "preserve".equals(te.getXMLspace());
                                                                                currentX = addSVGStr(fs, currentX, str, spacing);
-                                                                               currentStream.write(") Tj\n");
+                                                                               currentStream.write(" Tj\n");
                                                                } else if (o instanceof SVGTextPathElementImpl) {
                                                                                SVGTextPathElementImpl tpg = (SVGTextPathElementImpl) o;
                                                                                String ref = tpg.str;