diff --git a/PDFFont.js b/PDFFont.js
index 51e8282d1..3f494070f 100644
--- a/PDFFont.js
+++ b/PDFFont.js
@@ -4,6 +4,32 @@
  */
 var Fonts = new Dict();
 
+
+var Base64Encoder = {
+  encode: function(aData) {
+    var str = [];
+    var count = aData.length;
+    for (var i = 0; i < count; i++)
+      str.push(aData.getChar());
+
+    return window.btoa(str.join(""));
+  }
+};
+
+
+var TrueTypeFont = function(aFontName, aFontFile) {
+  if (Fonts.get(aFontName))
+    return;
+
+  //log("Loading a TrueType font: " + aFontName);
+  var fontData = Base64Encoder.encode(aFontFile);
+  Fonts.set(aFontName, fontData);
+
+  // Add the css rule
+  var url = "url(data:font/ttf;base64," + fontData + ");";
+  document.styleSheets[0].insertRule("@font-face { font-family: '" + aFontName + "'; src: " + url + " }", 0);
+};
+
 var Type1Parser = function(aAsciiStream, aBinaryStream) {
   var lexer = new Lexer(aAsciiStream);
 
@@ -608,6 +634,6 @@ var Type1Font = function(aFontName, aFontFile) {
   this.parser.parse();
 
   var end = Date.now();
-  dump("Time to parse font is:" + (end - start));
+  //log("Time to parse font is:" + (end - start));
 };
 
diff --git a/pdf.js b/pdf.js
index cca5ae730..15198c553 100644
--- a/pdf.js
+++ b/pdf.js
@@ -2292,7 +2292,14 @@ var CanvasGraphics = (function() {
                 break;
 
               case "TrueType":
-                TODO("implement TrueType support");
+                var fontDescriptor = font.get("FontDescriptor");
+                if (fontDescriptor.num) {
+                  var fontDescriptor = this.xref.fetchIfRef(fontDescriptor);
+                  var fontFile = this.xref.fetchIfRef(fontDescriptor.get("FontFile2"));
+                  fontName = fontDescriptor.get("FontName").name;
+                  fontName = fontName.replace("+", ""); // no + are allowed in the font name
+                  font = new TrueTypeFont(fontName, fontFile);
+                }
                 break;
 
               default: