aboutsummaryrefslogtreecommitdiffstats
path: root/src/codegen/t1font-file.xsl
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen/t1font-file.xsl')
-rw-r--r--src/codegen/t1font-file.xsl95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/codegen/t1font-file.xsl b/src/codegen/t1font-file.xsl
index 3e7eed0e8..27896d898 100644
--- a/src/codegen/t1font-file.xsl
+++ b/src/codegen/t1font-file.xsl
@@ -21,6 +21,13 @@ 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.PDFT1Stream;
+import java.io.InputStream;
+import java.io.FileInputStream;
+import java.io.BufferedInputStream;
+import java.util.Hashtable;
public class <xsl:value-of select="class-name"/> extends Font implements FontDescriptor {
private final static String fontName = "<xsl:value-of select="font-name"/>";
@@ -35,17 +42,93 @@ public class <xsl:value-of select="class-name"/> extends Font implements FontDes
<xsl:value-of select="bbox/right"/>,
<xsl:value-of select="bbox/top"/>
};
+ private final static String embedFileName = <xsl:value-of select="embedFile"/>;
+ private final static String embedResourceName = <xsl:value-of select="embedResource"/>;
+ private static PDFT1Stream embeddedFont=null;
private final static int flags = <xsl:value-of select="flags"/>;
private final static int stemV = <xsl:value-of select="stemv"/>;
private final static int italicAngle = <xsl:value-of select="italicangle"/>;
private final static int firstChar = <xsl:value-of select="first-char"/>;
private final static int lastChar = <xsl:value-of select="last-char"/>;
private final static int[] width;
+ private final static Hashtable kerning=new Hashtable();
static {
width = new int[256];
<xsl:for-each select="widths/char"><xsl:variable name="char-name" select="@name"/><xsl:variable name="char-num" select="document('charlist.xml')/font-mappings/map[@adobe-name=$char-name]/@win-ansi"/><xsl:if test="$char-num!='-1'"> width[<xsl:value-of select="$char-num"/>] = <xsl:value-of select="@width"/>;
</xsl:if></xsl:for-each>
+
+ Hashtable tmptable;
+<xsl:for-each select="kerning">
+<xsl:variable name="kpx1-name" select="@kpx1"/>
+ tmptable=new Hashtable();<xsl:for-each select="pair"><xsl:variable name="kpx2-name" select="@kpx2"/><xsl:variable name="kern-name" select="@kern"/>
+ tmptable.put(Glyphs.glyphToString("<xsl:value-of select="$kpx2-name"/>"), new Integer(<xsl:value-of select="$kern-name"/>));</xsl:for-each>
+ kerning.put(Glyphs.glyphToString("<xsl:value-of select="$kpx1-name"/>"), tmptable);
+</xsl:for-each>
+ }
+
+ public final boolean hasKerningInfo() {return kerning.isEmpty();}
+ public final java.util.Hashtable getKerningInfo() {return kerning;}
+ public byte getSubType() {return org.apache.fop.pdf.PDFFont.TYPE1;}
+
+ public boolean isEmbeddable() {
+ return (embedFileName==null &amp;&amp; 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 &amp;&amp; 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 &gt; 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 &lt; 64000) // whole file read. No need to loop again
+ l=0;
+ }
+ }
+
+ embeddedFont=new PDFT1Stream(i, fsize);
+ embeddedFont.addFilter("flate");
+ embeddedFont.addFilter("ascii-85");
+ embeddedFont.setData(file, fsize);
+ instream.close();
+ } catch (Exception e) {}
+
+ return (PDFStream) embeddedFont;
}
public String encoding() {
@@ -56,6 +139,18 @@ public class <xsl:value-of select="class-name"/> extends Font implements FontDes
return fontName;
}
+ public int getAscender() {
+ return ascender;
+ }
+
+ public int getCapHeight() {
+ return capHeight;
+ }
+
+ public int getDescender() {
+ return descender;
+ }
+
public int getAscender(int size) {
return size * ascender;
}