David PHAM-VAN

Fix Type1 font widths

1 # Changelog 1 # Changelog
2 2
  3 +## 3.10.2
  4 +
  5 +- Fix Type1 font widths
  6 +
3 ## 3.10.1 7 ## 3.10.1
4 8
5 - Fix web debug build 9 - Fix web debug build
@@ -47,7 +47,6 @@ abstract class PdfFont extends PdfObjectDict { @@ -47,7 +47,6 @@ abstract class PdfFont extends PdfObjectDict {
47 stdHW: 84, 47 stdHW: 84,
48 stdVW: 106, 48 stdVW: 106,
49 isFixedPitch: true, 49 isFixedPitch: true,
50 - missingWidth: 600,  
51 ); 50 );
52 } 51 }
53 52
@@ -63,7 +62,6 @@ abstract class PdfFont extends PdfObjectDict { @@ -63,7 +62,6 @@ abstract class PdfFont extends PdfObjectDict {
63 stdHW: 51, 62 stdHW: 51,
64 stdVW: 51, 63 stdVW: 51,
65 isFixedPitch: true, 64 isFixedPitch: true,
66 - missingWidth: 600,  
67 ); 65 );
68 } 66 }
69 67
@@ -80,7 +78,6 @@ abstract class PdfFont extends PdfObjectDict { @@ -80,7 +78,6 @@ abstract class PdfFont extends PdfObjectDict {
80 isFixedPitch: true, 78 isFixedPitch: true,
81 stdHW: 84, 79 stdHW: 84,
82 stdVW: 106, 80 stdVW: 106,
83 - missingWidth: 600,  
84 ); 81 );
85 } 82 }
86 83
@@ -97,7 +94,6 @@ abstract class PdfFont extends PdfObjectDict { @@ -97,7 +94,6 @@ abstract class PdfFont extends PdfObjectDict {
97 italicAngle: -12, 94 italicAngle: -12,
98 stdHW: 51, 95 stdHW: 51,
99 stdVW: 51, 96 stdVW: 51,
100 - missingWidth: 600,  
101 ); 97 );
102 } 98 }
103 99
@@ -280,9 +276,6 @@ See https://github.com/DavBfr/dart_pdf/wiki/Fonts-Management @@ -280,9 +276,6 @@ See https://github.com/DavBfr/dart_pdf/wiki/Fonts-Management
280 /// Spans the distance between the baseline and the lowest descending glyph 276 /// Spans the distance between the baseline and the lowest descending glyph
281 double get descent; 277 double get descent;
282 278
283 - /// Default width of a glyph  
284 - static const double defaultGlyphWidth = 0.600;  
285 -  
286 /// Internal units per 279 /// Internal units per
287 int get unitsPerEm; 280 int get unitsPerEm;
288 281
@@ -42,7 +42,7 @@ class PdfType1Font extends PdfFont { @@ -42,7 +42,7 @@ class PdfType1Font extends PdfFont {
42 required int stdHW, 42 required int stdHW,
43 required int stdVW, 43 required int stdVW,
44 bool isFixedPitch = false, 44 bool isFixedPitch = false,
45 - int? missingWidth, 45 + this.missingWidth = 0.600,
46 this.widths = const <double>[]}) 46 this.widths = const <double>[]})
47 : assert(() { 47 : assert(() {
48 // ignore: avoid_print 48 // ignore: avoid_print
@@ -54,22 +54,26 @@ class PdfType1Font extends PdfFont { @@ -54,22 +54,26 @@ class PdfType1Font extends PdfFont {
54 params['/BaseFont'] = PdfName('/$fontName'); 54 params['/BaseFont'] = PdfName('/$fontName');
55 if (settings.version.index >= PdfVersion.pdf_1_5.index) { 55 if (settings.version.index >= PdfVersion.pdf_1_5.index) {
56 params['/FirstChar'] = const PdfNum(0); 56 params['/FirstChar'] = const PdfNum(0);
57 - params['/LastChar'] = const PdfNum(256);  
58 - params['/Widths'] = PdfArray.fromNum(widths.map((e) => e * 1000)); 57 + params['/LastChar'] = const PdfNum(255);
  58 + if (widths.isNotEmpty) {
  59 + params['/Widths'] =
  60 + PdfArray.fromNum(widths.map((e) => (e * unitsPerEm).toInt()));
  61 + } else {
  62 + params['/Widths'] = PdfArray.fromNum(
  63 + List<int>.filled(256, (missingWidth * unitsPerEm).toInt()));
  64 + }
59 65
60 final fontDescriptor = PdfObjectDict(pdfDocument, type: '/FontDescriptor') 66 final fontDescriptor = PdfObjectDict(pdfDocument, type: '/FontDescriptor')
61 ..params['/FontName'] = PdfName('/$fontName') 67 ..params['/FontName'] = PdfName('/$fontName')
62 ..params['/Flags'] = PdfNum(32 + (isFixedPitch ? 1 : 0)) 68 ..params['/Flags'] = PdfNum(32 + (isFixedPitch ? 1 : 0))
63 ..params['/FontBBox'] = PdfArray.fromNum(fontBBox) 69 ..params['/FontBBox'] = PdfArray.fromNum(fontBBox)
64 - ..params['/Ascent'] = PdfNum((ascent * 1000).toInt())  
65 - ..params['/Descent'] = PdfNum((descent * 1000).toInt()) 70 + ..params['/Ascent'] = PdfNum((ascent * unitsPerEm).toInt())
  71 + ..params['/Descent'] = PdfNum((descent * unitsPerEm).toInt())
66 ..params['/ItalicAngle'] = PdfNum(italicAngle) 72 ..params['/ItalicAngle'] = PdfNum(italicAngle)
67 ..params['/CapHeight'] = PdfNum(capHeight) 73 ..params['/CapHeight'] = PdfNum(capHeight)
68 ..params['/StemV'] = PdfNum(stdVW) 74 ..params['/StemV'] = PdfNum(stdVW)
69 - ..params['/StemH'] = PdfNum(stdHW);  
70 - if (missingWidth != null) {  
71 - fontDescriptor.params['/MissingWidth'] = PdfNum(missingWidth);  
72 - } 75 + ..params['/StemH'] = PdfNum(stdHW)
  76 + ..params['/MissingWidth'] = PdfNum((missingWidth * unitsPerEm).toInt());
73 77
74 params['/FontDescriptor'] = fontDescriptor.ref(); 78 params['/FontDescriptor'] = fontDescriptor.ref();
75 } 79 }
@@ -90,6 +94,9 @@ class PdfType1Font extends PdfFont { @@ -90,6 +94,9 @@ class PdfType1Font extends PdfFont {
90 /// Width of each glyph 94 /// Width of each glyph
91 final List<double> widths; 95 final List<double> widths;
92 96
  97 + /// Default width of a glyph
  98 + final double missingWidth;
  99 +
93 @override 100 @override
94 PdfFontMetrics glyphMetrics(int charCode) { 101 PdfFontMetrics glyphMetrics(int charCode) {
95 if (!isRuneSupported(charCode)) { 102 if (!isRuneSupported(charCode)) {
@@ -98,12 +105,11 @@ class PdfType1Font extends PdfFont { @@ -98,12 +105,11 @@ class PdfType1Font extends PdfFont {
98 } 105 }
99 106
100 return PdfFontMetrics( 107 return PdfFontMetrics(
101 - left: 0,  
102 - top: descent,  
103 - right: charCode < widths.length  
104 - ? widths[charCode]  
105 - : PdfFont.defaultGlyphWidth,  
106 - bottom: ascent); 108 + left: 0,
  109 + top: descent,
  110 + right: charCode < widths.length ? widths[charCode] : missingWidth,
  111 + bottom: ascent,
  112 + );
107 } 113 }
108 114
109 @override 115 @override
@@ -6,7 +6,7 @@ issue_tracker: https://github.com/DavBfr/dart_pdf/issues @@ -6,7 +6,7 @@ issue_tracker: https://github.com/DavBfr/dart_pdf/issues
6 screenshots: 6 screenshots:
7 - description: 'Example of a generated document' 7 - description: 'Example of a generated document'
8 path: example.jpg 8 path: example.jpg
9 -version: 3.10.1 9 +version: 3.10.2
10 10
11 environment: 11 environment:
12 sdk: ">=2.18.0 <3.0.0" 12 sdk: ">=2.18.0 <3.0.0"