mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-01 22:17:29 +08:00
94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package model
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/unidoc/unidoc/common"
|
|
. "github.com/unidoc/unidoc/pdf/core"
|
|
)
|
|
|
|
func init() {
|
|
common.SetLogger(common.NewConsoleLogger(common.LogLevelDebug))
|
|
}
|
|
|
|
var simpleFontDicts = []string{
|
|
`<< /Type /Font
|
|
/BaseFont /Helvetica
|
|
/Subtype /Type1
|
|
/Encoding /WinAnsiEncoding
|
|
>>`,
|
|
`<< /Type /Font
|
|
/BaseFont /Helvetica-Oblique
|
|
/Subtype /Type1
|
|
/Encoding /WinAnsiEncoding
|
|
>>`,
|
|
`<< /Type /Font
|
|
/Subtype /Type1
|
|
/FirstChar 71
|
|
/LastChar 79
|
|
/Widths [ 778 722 278 500 667 556 833 722 778 ]
|
|
/Encoding /WinAnsiEncoding
|
|
/BaseFont /AOMFKK+Helvetica
|
|
>>`,
|
|
`<< /Type /Font
|
|
/Subtype /Type1
|
|
/FirstChar 71
|
|
/LastChar 79
|
|
/Widths [ 778 722 278 500 667 556 833 722 778 ]
|
|
/Encoding /WinAnsiEncoding
|
|
/BaseFont /PETER+Helvetica
|
|
/FontDescriptor <<
|
|
/Type /FontDescriptor
|
|
/Ascent 718
|
|
/CapHeight 718
|
|
/Descent -207
|
|
/Flags 32
|
|
/FontBBox [ -166 -225 1000 931 ]
|
|
/FontName /PETER+Helvetica
|
|
/ItalicAngle 0
|
|
/StemV 88
|
|
/XHeight 523
|
|
/StemH 88
|
|
/CharSet (/G/O)
|
|
%/FontFile3 19 0 R
|
|
>>
|
|
>>`,
|
|
}
|
|
|
|
// TestSimpleFonts checks that we correctly recreate simple fonts that we parse.
|
|
func TestSimpleFonts(t *testing.T) {
|
|
for _, d := range simpleFontDicts {
|
|
objFontObj(t, d)
|
|
}
|
|
}
|
|
|
|
// objFontObj parses `fontDict` to a make a Font, creates a PDF object from the Font and checks that
|
|
// the new PDF object is the same as the input object
|
|
func objFontObj(t *testing.T, fontDict string) error {
|
|
|
|
parser := NewParserFromString(fontDict)
|
|
obj, err := parser.ParseDict()
|
|
if err != nil {
|
|
t.Errorf("objFontObj: Failed to parse dict obj. fontDict=%q err=%v", fontDict, err)
|
|
return err
|
|
}
|
|
font, err := NewPdfFontFromPdfObject(obj)
|
|
if err != nil {
|
|
t.Errorf("Failed to parse font object. obj=%s err=%v", obj, err)
|
|
return err
|
|
}
|
|
|
|
// Resolve all the indirect references in the font objects so we can compare their contents.
|
|
obj1 := FlattenObject(obj)
|
|
obj2 := FlattenObject(font.ToPdfObject())
|
|
|
|
// Check that the reconstituted font is the same as the original.
|
|
if !EqualObjects(obj1, obj2) {
|
|
t.Errorf("Different objects.\nobj1=%s\nobj2=%s\nfont=%s", obj1, obj2, font)
|
|
return errors.New("different objects")
|
|
}
|
|
|
|
return nil
|
|
}
|