Git Product home page Git Product logo

node-font2svg's Introduction

font2svg

Dependency Status devDependency Status

Create a SVG subset font from a font file

var fs = require('fs');
var font2svg = require('font2svg');

var buf = fs.readFileSync('path/to/font.otf');

font2svg(buf, {include: ['A', 'B', 'C', '0', '1', '2']}, function(err, result) {
  if (err) {
    throw err;
  }

  result.toString(); //=> '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<svg>\n  <font ... '
});

Requirements

Before installing this module, you should install tx (a part of Adobe Font Development Kit for OpenType):

The FDK requires:

Mac OSX 10.4.x or later, or Windows XP or later

After installation, run tx -v command to check if tx has been installed successfully.

Installation

NPM version

Use npm.

npm install font2svg

API

var font2svg = require('font2svg');

font2svg(buffer[, options], callback)

buffer

Type: Buffer of a font file

Supported font formats depend on tx:

Conversion of font data represented in the following formats is supported: PFA, PFB, LWFN-POST, FFIL-sfnt, OTF, TTF, TTC, and AppleSingle/Double-sfnt. sfnt-formatted fonts with header versions of the following kinds are supported: 1.0, true, ttcf, typ1, CID, and OTTO. Note that OCF is not supported by tx.

options

In addition to the following, all options for child_process.exec except for encoding are available.

Note that maxBuffer option is 300000000 by default, unlike the original value (200*1024).

options.include

Type: String or Array of String
Default: []

The characters to be included in the SVG font subset.

options.fontFaceAttr

Type: Object
Default: {}

Set the attributes of font-face element.

font2svg(fontBuffer, {
  fontFaceAttr: {
    'font-weight': 'bold',
    'underline-position': '-100'
  }
}, function(err, result) {
  result.toString(); //=> ... <font-face ... font-weight="bold" underline-position="-100"> ...
});

Every key of the object must be a valid attribute name of font-face element.

// It throws an error because `font-weeight` is not a valid name of `font-face` element.
font2svg(fontBuffer, {'font-weeight': 'bold'}, callback);

options.encoding

Type: String
Default: null

Set encoding of the result (Buffer by default).

callback(error, svgData)

error: Error
svgData: Buffer or String (accoding to options.encoding)

var buf = fs.readFileSync('path/to/font.ttf');

font2svg(buf, {
  include: ['Hello, world.'],
  encoding: 'utf-8'
}, function(err, result) {
  result; //=> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<svg>\n  <font ... '
});

CLI

You can use this module as a CLI tool by installing it globally.

npm install -g font2svg

Usage

Usage1: font2svg <src path> <dest path> --include <string>
Usage2: font2svg <src path>  --include <string> > <dest path>
Usage3: cat <src path> | font2svg <dest path> --include <string>
Usage4: cat <src path> | font2svg --include <string> > <dest path>

Options:
--include, -in, -i -g <string>  Specify the characters to be included
--(attribute name)    <string>  Set attribute of font-face element
                                Example: --font-weight bold --units-per-em 980

--help,         -h              Print usage information
--version,      -v              Print version

Examples

font2svg src-font.otf dest-font.svg --include "foobar" --font-weight bold 
cat src-font.ttf | font2svg --include "bazqux" > dest-font.svg 

License

Copyright (c) 2014 Shinnosuke Watanabe

Licensed under the MIT License.

node-font2svg's People

Contributors

shinnn avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

mm-tom

node-font2svg's Issues

Issue with unicode attribute

I've run in to an issue with the following line on index.js:

          for (var i = 1; i < glyphs.length; i++) {
             glyphs[i].$.unicode = '&#' + uniquePoints[i] + ';';
          }

Is this supposed to be generating a valid character code for the glyph?

I've found that when cross referencing the generated svg font file to the source file, that this is attribute does not use the same character code.

Removing this altogether has fixed the issue for me, as it leaves a valid unicode character for the attribute.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.