package org.apache.fop.render.pdf.fonts; import org.apache.fop.render.pdf.Font; import org.apache.fop.layout.FontDescriptor; import org.apache.fop.fonts.Glyphs; import org.apache.fop.pdf.PDFStream; import org.apache.fop.pdf.PDFTTFStream; import java.io.InputStream; import java.io.FileInputStream; import java.io.BufferedInputStream; import java.util.HashMap; public class extends Font implements FontDescriptor { private final static String fontName = ""; private final static String encoding = ""; private final static int capHeight = ; private final static int xHeight = ; private final static int ascender = ; private final static int descender = ; private final static int[] fontBBox = { , , , }; private final static String embedFileName = ; private final static String embedResourceName = ; private static PDFTTFStream embeddedFont=null; private final static int flags = ; private final static int stemV = ; private final static int italicAngle = ; private final static int firstChar = ; private final static int lastChar = ; private final static int[] width; private final static HashMap kerning=new HashMap(); static { width = new int[256]; width[] = ; HashMap tmptable; tmptable=new HashMap(); tmptable.put(Glyphs.glyphToString(""), new Integer()); kerning.put(Glyphs.glyphToString(""), tmptable); } public final boolean hasKerningInfo() {return kerning.isEmpty();} public final java.util.HashMap getKerningInfo() {return kerning;} public byte getSubType() {return org.apache.fop.pdf.PDFFont.TRUETYPE;} public boolean isEmbeddable() { return (embedFileName==null && embedResourceName==null) ? false : true; } public PDFStream getFontFile(int i) { InputStream instream=null; // Get file first if (embedFileName!=null) try { instream=new FileInputStream(embedFileName); } catch (Exception e) { System.out.println("Failed to embed fontfile: "+embedFileName); } // Get resource if (instream==null && embedResourceName!=null) try { instream=new BufferedInputStream(this.getClass().getResourceAsStream(embedResourceName)); } catch (Exception e) { System.out.println("Failed to embed fontresource: "+embedResourceName); } if (instream==null) return (PDFStream)null; // Read fontdata byte[] file = new byte[128000]; int fsize = 0; try { int l = instream.read(file, 0, 128000); fsize += l; if (l==128000) { // More to read - needs to extend byte[] tmpbuf; while (l > 0) { tmpbuf = new byte[file.length + 64000]; System.arraycopy(file, 0, tmpbuf, 0, file.length); l=instream.read(tmpbuf, file.length, 64000); fsize += l; file = tmpbuf; if (l < 64000) // whole file read. No need to loop again l=0; } } embeddedFont=new PDFTTFStream(i, fsize); embeddedFont.addFilter("flate"); embeddedFont.addFilter("ascii-85"); embeddedFont.setData(file, fsize); instream.close(); } catch (Exception e) {} return (PDFStream) embeddedFont; } public String encoding() { return encoding; } public String fontName() { return fontName; } public int getAscender() {return ascender;} public int getDescender() {return descender;} public int getCapHeight() {return capHeight;} public int getAscender(int size) { return size * ascender; } public int getCapHeight(int size) { return size * capHeight; } public int getDescender(int size) { return size * descender; } public int getXHeight(int size) { return size * xHeight; } public int getFlags() { return flags; } public int[] getFontBBox() { return fontBBox; } public int getItalicAngle() { return italicAngle; } public int getStemV() { return stemV; } public int getFirstChar() { return firstChar; } public int getLastChar() { return lastChar; } public int width(int i, int size) { return size * width[i]; } public int[] getWidths(int size) { int[] arr = new int[getLastChar()-getFirstChar()+1]; System.arraycopy(width, getFirstChar(), arr, 0, getLastChar()-getFirstChar()+1); for( int i = 0; i < arr.length; i++) arr[i] *= size; return arr; } }