* 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;
}
}
}
+ pdf.append(endText);
currentStream.write(pdf.toString());
return currentX;
}
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;