From 4d261759d924550bd16b134d54245227b354f37d Mon Sep 17 00:00:00 2001 From: Vivien Nicolas <21@vingtetun.org> Date: Tue, 7 Jun 2011 19:17:46 +0200 Subject: [PATCH] Support TrueType Font --- PDFFont.js | 28 +++++++++++++++++++++++++++- pdf.js | 9 ++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) 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: