David PHAM-VAN

Fix Font Subsetting

  1 +# 1.3.6
  2 +* Fix TTF Font SubSetting
  3 +
1 # 1.3.5 4 # 1.3.5
2 * Add some color functions 5 * Add some color functions
3 * Remove color constants from PdfColor, use PdfColors 6 * Remove color constants from PdfColor, use PdfColors
@@ -77,13 +77,16 @@ class TtfWriter { @@ -77,13 +77,16 @@ class TtfWriter {
77 77
78 // Add compound glyphs 78 // Add compound glyphs
79 for (int compound in compounds.keys) { 79 for (int compound in compounds.keys) {
80 - final int index = chars.indexOf(compound);  
81 - if (index >= 0) {  
82 - compounds[compound] = index; 80 + final TtfGlyphInfo index = glyphsInfo.firstWhere(
  81 + (TtfGlyphInfo glyph) => glyph.index == compound,
  82 + orElse: () => null);
  83 + if (index != null) {
  84 + compounds[compound] = glyphsInfo.indexOf(index);
  85 + assert(compounds[compound] >= 0, 'Unable to find the glyph');
83 } else { 86 } else {
84 compounds[compound] = glyphsInfo.length; 87 compounds[compound] = glyphsInfo.length;
85 final TtfGlyphInfo glyph = ttf.readGlyph(compound); 88 final TtfGlyphInfo glyph = ttf.readGlyph(compound);
86 - assert(glyph.compounds.isEmpty); // This is a simple glyph 89 + assert(glyph.compounds.isEmpty, 'This is not a simple glyph');
87 glyphsInfo.add(glyph); 90 glyphsInfo.add(glyph);
88 } 91 }
89 } 92 }
@@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl @@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl
4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf 4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf
5 repository: https://github.com/DavBfr/dart_pdf 5 repository: https://github.com/DavBfr/dart_pdf
6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues 6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues
7 -version: 1.3.5 7 +version: 1.3.6
8 8
9 environment: 9 environment:
10 sdk: ">=2.1.0 <3.0.0" 10 sdk: ">=2.1.0 <3.0.0"
@@ -75,4 +75,22 @@ void main() { @@ -75,4 +75,22 @@ void main() {
75 final File file = File('ttf.pdf'); 75 final File file = File('ttf.pdf');
76 file.writeAsBytesSync(pdf.save()); 76 file.writeAsBytesSync(pdf.save());
77 }); 77 });
  78 +
  79 + test('Font SubSetting', () {
  80 + final Uint8List fontData = File('open-sans.ttf').readAsBytesSync();
  81 + final TtfParser font = TtfParser(fontData.buffer.asByteData());
  82 + final TtfWriter ttfWriter = TtfWriter(font);
  83 + final Uint8List data = ttfWriter.withChars('hçHée'.runes.toList());
  84 + final File output = File('${font.fontName}.ttf');
  85 + output.writeAsBytesSync(data);
  86 + });
  87 +
  88 + test('Font SubSetting CN', () {
  89 + final Uint8List fontData = File('genyomintw.ttf').readAsBytesSync();
  90 + final TtfParser font = TtfParser(fontData.buffer.asByteData());
  91 + final TtfWriter ttfWriter = TtfWriter(font);
  92 + final Uint8List data = ttfWriter.withChars('hçHée 你好 檯號 ☃'.runes.toList());
  93 + final File output = File('${font.fontName}.ttf');
  94 + output.writeAsBytesSync(data);
  95 + });
78 } 96 }