Support Encoding dictionaries with type not explicitly set (#455)

This commit is contained in:
Gunnsteinn Hall 2019-05-13 19:50:07 +00:00 committed by GitHub
parent 07ba42176d
commit fa9ac473a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 4 deletions

View File

@ -325,10 +325,9 @@ func (font *pdfFontSimple) getFontEncoding() (baseName string, differences map[t
case *core.PdfObjectName:
return string(*encoding), nil, nil
case *core.PdfObjectDictionary:
if typ, ok := core.GetNameVal(encoding.Get("Type")); ok && typ == "Encoding" {
if base, ok := core.GetNameVal(encoding.Get("BaseEncoding")); ok {
baseName = base
}
baseenc, ok := core.GetName(encoding.Get("BaseEncoding"))
if ok {
baseName = baseenc.String()
}
if diffObj := encoding.Get("Differences"); diffObj != nil {
diffList, ok := core.GetArray(diffObj)

View File

@ -11,6 +11,8 @@ import (
"io/ioutil"
"testing"
"github.com/stretchr/testify/require"
"github.com/unidoc/unidoc/common"
"github.com/unidoc/unidoc/pdf/core"
"github.com/unidoc/unidoc/pdf/model"
@ -821,7 +823,36 @@ endobj
t.Fatalf("Mismatch for char code %d (%X), font has: %q and expected is: %q (StandardEncoding)", code, code, fontrune, rune)
}
}
}
func TestLoadSimpleFontWithDifferences(t *testing.T) {
testcases := []struct {
Path string
FontObjNumber int64
BaseEncodingName string
}{
{"./testdata/font/diff1.obj", 53, "WinAnsiEncoding"},
}
for _, tcase := range testcases {
data, err := ioutil.ReadFile(tcase.Path)
require.NoError(t, err)
objects, err := testutils.ParseIndirectObjects(string(data))
require.NoError(t, err)
font, err := model.NewPdfFontFromPdfObject(objects[tcase.FontObjNumber])
require.NoError(t, err)
require.NotNil(t, font)
encoder := font.Encoder()
require.NotNil(t, encoder)
stdEncoder, ok := encoder.(textencoding.SimpleEncoder)
require.True(t, ok)
require.Equal(t, tcase.BaseEncodingName, stdEncoder.BaseName())
}
}
// newStandandTextEncoder returns a simpleEncoder that implements StandardEncoding.

BIN
pdf/model/testdata/font/diff1.obj vendored Normal file

Binary file not shown.