You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.6 KiB
CoffeeScript
66 lines
2.6 KiB
CoffeeScript
AFMFont = require './afm'
|
|
PDFFont = require '../font'
|
|
fs = require 'fs'
|
|
|
|
class StandardFont extends PDFFont
|
|
constructor: (@document, @name, @id) ->
|
|
@font = new AFMFont STANDARD_FONTS[@name]()
|
|
{@ascender,@descender,@bbox,@lineGap} = @font
|
|
|
|
embed: ->
|
|
@dictionary.data =
|
|
Type: 'Font'
|
|
BaseFont: @name
|
|
Subtype: 'Type1'
|
|
Encoding: 'WinAnsiEncoding'
|
|
|
|
@dictionary.end()
|
|
|
|
encode: (text) ->
|
|
encoded = @font.encodeText text
|
|
glyphs = @font.glyphsForString '' + text
|
|
advances = @font.advancesForGlyphs glyphs
|
|
positions = []
|
|
for glyph, i in glyphs
|
|
positions.push
|
|
xAdvance: advances[i]
|
|
yAdvance: 0
|
|
xOffset: 0
|
|
yOffset: 0
|
|
advanceWidth: @font.widthOfGlyph glyph
|
|
|
|
return [encoded, positions]
|
|
|
|
widthOfString: (string, size) ->
|
|
glyphs = @font.glyphsForString '' + string
|
|
advances = @font.advancesForGlyphs glyphs
|
|
|
|
width = 0
|
|
for advance in advances
|
|
width += advance
|
|
|
|
scale = size / 1000
|
|
return width * scale
|
|
|
|
@isStandardFont: (name) ->
|
|
return name of STANDARD_FONTS
|
|
|
|
# This insanity is so browserify can inline the font files
|
|
STANDARD_FONTS =
|
|
"Courier": -> fs.readFileSync __dirname + "/../font/data/Courier.afm", 'utf8'
|
|
"Courier-Bold": -> fs.readFileSync __dirname + "/../font/data/Courier-Bold.afm", 'utf8'
|
|
"Courier-Oblique": -> fs.readFileSync __dirname + "/../font/data/Courier-Oblique.afm", 'utf8'
|
|
"Courier-BoldOblique": -> fs.readFileSync __dirname + "/../font/data/Courier-BoldOblique.afm", 'utf8'
|
|
"Helvetica": -> fs.readFileSync __dirname + "/../font/data/Helvetica.afm", 'utf8'
|
|
"Helvetica-Bold": -> fs.readFileSync __dirname + "/../font/data/Helvetica-Bold.afm", 'utf8'
|
|
"Helvetica-Oblique": -> fs.readFileSync __dirname + "/../font/data/Helvetica-Oblique.afm", 'utf8'
|
|
"Helvetica-BoldOblique": -> fs.readFileSync __dirname + "/../font/data/Helvetica-BoldOblique.afm", 'utf8'
|
|
"Times-Roman": -> fs.readFileSync __dirname + "/../font/data/Times-Roman.afm", 'utf8'
|
|
"Times-Bold": -> fs.readFileSync __dirname + "/../font/data/Times-Bold.afm", 'utf8'
|
|
"Times-Italic": -> fs.readFileSync __dirname + "/../font/data/Times-Italic.afm", 'utf8'
|
|
"Times-BoldItalic": -> fs.readFileSync __dirname + "/../font/data/Times-BoldItalic.afm", 'utf8'
|
|
"Symbol": -> fs.readFileSync __dirname + "/../font/data/Symbol.afm", 'utf8'
|
|
"ZapfDingbats": -> fs.readFileSync __dirname + "/../font/data/ZapfDingbats.afm", 'utf8'
|
|
|
|
module.exports = StandardFont
|