mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-26 13:48:55 +08:00
219 lines
8.3 KiB
Go
219 lines
8.3 KiB
Go
/*
|
|
* This file is subject to the terms and conditions defined in
|
|
* file 'LICENSE.md', which is part of this source code package.
|
|
*/
|
|
/*
|
|
* The embedded character metrics specified in this file are distributed under the terms listed in
|
|
* ./testdata/afms/MustRead.html.
|
|
*/
|
|
|
|
package fonts
|
|
|
|
import "sync"
|
|
|
|
func init() {
|
|
// The aliases seen for the standard 14 font names.
|
|
// Most of these are from table 5.5.1 in
|
|
// https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/adobe_supplement_iso32000.pdf
|
|
RegisterStdFont(HelveticaName, newFontHelvetica, "Arial")
|
|
RegisterStdFont(HelveticaBoldName, newFontHelveticaBold, "Arial,Bold")
|
|
RegisterStdFont(HelveticaObliqueName, newFontHelveticaOblique, "Arial,Italic")
|
|
RegisterStdFont(HelveticaBoldObliqueName, newFontHelveticaBoldOblique, "Arial,BoldItalic")
|
|
}
|
|
|
|
const (
|
|
// HelveticaName is a PDF name of the Helvetica font.
|
|
HelveticaName = StdFontName("Helvetica")
|
|
// HelveticaBoldName is a PDF name of the Helvetica (bold) font.
|
|
HelveticaBoldName = StdFontName("Helvetica-Bold")
|
|
// HelveticaObliqueName is a PDF name of the Helvetica (oblique) font.
|
|
HelveticaObliqueName = StdFontName("Helvetica-Oblique")
|
|
// HelveticaBoldObliqueName is a PDF name of the Helvetica (bold, oblique) font.
|
|
HelveticaBoldObliqueName = StdFontName("Helvetica-BoldOblique")
|
|
)
|
|
|
|
// newFontHelvetica returns a new instance of the font with a default encoder set (WinAnsiEncoding).
|
|
func newFontHelvetica() StdFont {
|
|
helveticaOnce.Do(initHelvetica)
|
|
desc := Descriptor{
|
|
Name: HelveticaName,
|
|
Family: string(HelveticaName),
|
|
Weight: FontWeightMedium,
|
|
Flags: 0x0020,
|
|
BBox: [4]float64{-166, -225, 1000, 931},
|
|
ItalicAngle: 0,
|
|
Ascent: 718,
|
|
Descent: -207,
|
|
CapHeight: 718,
|
|
XHeight: 523,
|
|
StemV: 88,
|
|
StemH: 76,
|
|
}
|
|
return NewStdFont(desc, helveticaCharMetrics)
|
|
}
|
|
|
|
// newFontHelveticaBold returns a new instance of the font with a default encoder set
|
|
// (WinAnsiEncoding).
|
|
func newFontHelveticaBold() StdFont {
|
|
helveticaOnce.Do(initHelvetica)
|
|
desc := Descriptor{
|
|
Name: HelveticaBoldName,
|
|
Family: string(HelveticaName),
|
|
Weight: FontWeightBold,
|
|
Flags: 0x0020,
|
|
BBox: [4]float64{-170, -228, 1003, 962},
|
|
ItalicAngle: 0,
|
|
Ascent: 718,
|
|
Descent: -207,
|
|
CapHeight: 718,
|
|
XHeight: 532,
|
|
StemV: 140,
|
|
StemH: 118,
|
|
}
|
|
return NewStdFont(desc, helveticaBoldCharMetrics)
|
|
}
|
|
|
|
// newFontHelveticaOblique returns a new instance of the font with a default encoder set (WinAnsiEncoding).
|
|
func newFontHelveticaOblique() StdFont {
|
|
helveticaOnce.Do(initHelvetica)
|
|
desc := Descriptor{
|
|
Name: HelveticaObliqueName,
|
|
Family: string(HelveticaName),
|
|
Weight: FontWeightMedium,
|
|
Flags: 0x0060,
|
|
BBox: [4]float64{-170, -225, 1116, 931},
|
|
ItalicAngle: -12,
|
|
Ascent: 718,
|
|
Descent: -207,
|
|
CapHeight: 718,
|
|
XHeight: 523,
|
|
StemV: 88,
|
|
StemH: 76,
|
|
}
|
|
return NewStdFont(desc, helveticaObliqueCharMetrics)
|
|
}
|
|
|
|
// newFontHelveticaBoldOblique returns a new instance of the font with a default encoder set (WinAnsiEncoding).
|
|
func newFontHelveticaBoldOblique() StdFont {
|
|
helveticaOnce.Do(initHelvetica)
|
|
desc := Descriptor{
|
|
Name: HelveticaBoldObliqueName,
|
|
Family: string(HelveticaName),
|
|
Weight: FontWeightBold,
|
|
Flags: 0x0060,
|
|
BBox: [4]float64{-174, -228, 1114, 962},
|
|
ItalicAngle: -12,
|
|
Ascent: 718,
|
|
Descent: -207,
|
|
CapHeight: 718,
|
|
XHeight: 532,
|
|
StemV: 140,
|
|
StemH: 118,
|
|
}
|
|
return NewStdFont(desc, helveticaBoldObliqueCharMetrics)
|
|
}
|
|
|
|
var helveticaOnce sync.Once
|
|
|
|
func initHelvetica() {
|
|
// unpack font metrics
|
|
helveticaCharMetrics = make(map[rune]CharMetrics, len(type1CommonRunes))
|
|
helveticaBoldCharMetrics = make(map[rune]CharMetrics, len(type1CommonRunes))
|
|
for i, r := range type1CommonRunes {
|
|
helveticaCharMetrics[r] = CharMetrics{Wx: float64(helveticaWx[i])}
|
|
helveticaBoldCharMetrics[r] = CharMetrics{Wx: float64(helveticaBoldWx[i])}
|
|
}
|
|
helveticaObliqueCharMetrics = helveticaCharMetrics
|
|
helveticaBoldObliqueCharMetrics = helveticaBoldCharMetrics
|
|
}
|
|
|
|
// helveticaCharMetrics are the font metrics loaded from afms/Helvetica.afm.
|
|
// See afms/MustRead.html for license information.
|
|
var helveticaCharMetrics map[rune]CharMetrics
|
|
|
|
// helveticaBoldCharMetrics are the font metrics loaded from afms/Helvetica-Bold.afm.
|
|
// See afms/MustRead.html for license information.
|
|
var helveticaBoldCharMetrics map[rune]CharMetrics
|
|
|
|
// helveticaBoldObliqueCharMetrics are the font metrics loaded from afms/Helvetica-BoldOblique.afm.
|
|
// See afms/MustRead.html for license information.
|
|
var helveticaBoldObliqueCharMetrics map[rune]CharMetrics
|
|
|
|
// helveticaObliqueCharMetrics are the font metrics loaded from afms/Helvetica-Oblique.afm.
|
|
// See afms/MustRead.html for license information.
|
|
var helveticaObliqueCharMetrics map[rune]CharMetrics
|
|
|
|
// helveticaWx are the font metrics loaded from afms/Helvetica.afm.
|
|
// See afms/MustRead.html for license information.
|
|
var helveticaWx = []int16{
|
|
667, 1000, 667, 667, 667, 667, 667, 667, 667, 667,
|
|
667, 667, 722, 722, 722, 722, 722, 722, 722, 612,
|
|
667, 667, 667, 667, 667, 667, 667, 667, 667, 722,
|
|
556, 611, 778, 778, 778, 722, 278, 278, 278, 278,
|
|
278, 278, 278, 278, 500, 667, 667, 556, 556, 556,
|
|
556, 556, 833, 722, 722, 722, 722, 722, 778, 1000,
|
|
778, 778, 778, 778, 778, 778, 778, 778, 667, 778,
|
|
722, 722, 722, 722, 667, 667, 667, 667, 667, 611,
|
|
611, 611, 667, 722, 722, 722, 722, 722, 722, 722,
|
|
722, 722, 667, 944, 667, 667, 667, 667, 611, 611,
|
|
611, 611, 556, 556, 556, 556, 333, 556, 889, 556,
|
|
556, 667, 556, 556, 469, 584, 389, 1015, 556, 556,
|
|
278, 260, 334, 334, 278, 278, 333, 260, 350, 500,
|
|
500, 333, 500, 500, 333, 556, 333, 278, 278, 250,
|
|
737, 556, 556, 556, 556, 643, 556, 400, 333, 584,
|
|
556, 333, 278, 556, 556, 556, 556, 556, 556, 556,
|
|
556, 1000, 556, 1000, 556, 556, 584, 556, 278, 333,
|
|
278, 500, 556, 500, 556, 556, 167, 556, 556, 556,
|
|
611, 333, 584, 549, 556, 556, 333, 333, 556, 333,
|
|
333, 222, 278, 278, 278, 278, 278, 222, 222, 500,
|
|
500, 222, 222, 299, 222, 584, 549, 584, 471, 222,
|
|
833, 333, 584, 556, 584, 556, 556, 556, 556, 556,
|
|
549, 556, 556, 556, 556, 556, 556, 944, 333, 556,
|
|
556, 556, 556, 834, 834, 333, 370, 365, 611, 556,
|
|
556, 537, 333, 333, 476, 889, 278, 278, 1000, 584,
|
|
584, 556, 556, 611, 355, 333, 333, 333, 222, 222,
|
|
222, 191, 333, 333, 453, 333, 333, 737, 333, 500,
|
|
500, 500, 500, 500, 556, 278, 556, 556, 278, 278,
|
|
556, 600, 278, 317, 278, 556, 556, 834, 333, 333,
|
|
1000, 556, 333, 556, 556, 556, 556, 556, 556, 556,
|
|
556, 556, 556, 500, 722, 500, 500, 500, 500, 556,
|
|
500, 500, 500, 500, 556,
|
|
}
|
|
|
|
// helveticaBoldWx are the font metrics loaded from afms/Helvetica-Bold.afm.
|
|
// See afms/MustRead.html for license information.
|
|
var helveticaBoldWx = []int16{
|
|
722, 1000, 722, 722, 722, 722, 722, 722, 722, 722,
|
|
722, 722, 722, 722, 722, 722, 722, 722, 722, 612,
|
|
667, 667, 667, 667, 667, 667, 667, 667, 667, 722,
|
|
556, 611, 778, 778, 778, 722, 278, 278, 278, 278,
|
|
278, 278, 278, 278, 556, 722, 722, 611, 611, 611,
|
|
611, 611, 833, 722, 722, 722, 722, 722, 778, 1000,
|
|
778, 778, 778, 778, 778, 778, 778, 778, 667, 778,
|
|
722, 722, 722, 722, 667, 667, 667, 667, 667, 611,
|
|
611, 611, 667, 722, 722, 722, 722, 722, 722, 722,
|
|
722, 722, 667, 944, 667, 667, 667, 667, 611, 611,
|
|
611, 611, 556, 556, 556, 556, 333, 556, 889, 556,
|
|
556, 722, 556, 556, 584, 584, 389, 975, 556, 611,
|
|
278, 280, 389, 389, 333, 333, 333, 280, 350, 556,
|
|
556, 333, 556, 556, 333, 556, 333, 333, 278, 250,
|
|
737, 556, 611, 556, 556, 743, 611, 400, 333, 584,
|
|
556, 333, 278, 556, 556, 556, 556, 556, 556, 556,
|
|
556, 1000, 556, 1000, 556, 556, 584, 611, 333, 333,
|
|
333, 611, 556, 611, 556, 556, 167, 611, 611, 611,
|
|
611, 333, 584, 549, 556, 556, 333, 333, 611, 333,
|
|
333, 278, 278, 278, 278, 278, 278, 278, 278, 556,
|
|
556, 278, 278, 400, 278, 584, 549, 584, 494, 278,
|
|
889, 333, 584, 611, 584, 611, 611, 611, 611, 556,
|
|
549, 611, 556, 611, 611, 611, 611, 944, 333, 611,
|
|
611, 611, 556, 834, 834, 333, 370, 365, 611, 611,
|
|
611, 556, 333, 333, 494, 889, 278, 278, 1000, 584,
|
|
584, 611, 611, 611, 474, 500, 500, 500, 278, 278,
|
|
278, 238, 389, 389, 549, 389, 389, 737, 333, 556,
|
|
556, 556, 556, 556, 556, 333, 556, 556, 278, 278,
|
|
556, 600, 333, 389, 333, 611, 556, 834, 333, 333,
|
|
1000, 556, 333, 611, 611, 611, 611, 611, 611, 611,
|
|
556, 611, 611, 556, 778, 556, 556, 556, 556, 556,
|
|
500, 500, 500, 500, 556,
|
|
}
|