From fa9ac473a0d590dc05c559d783fbbd3ec4240c9c Mon Sep 17 00:00:00 2001 From: Gunnsteinn Hall Date: Mon, 13 May 2019 19:50:07 +0000 Subject: [PATCH] Support Encoding dictionaries with type not explicitly set (#455) --- pdf/model/font_simple.go | 7 +++---- pdf/model/font_test.go | 31 ++++++++++++++++++++++++++++++ pdf/model/testdata/font/diff1.obj | Bin 0 -> 1580 bytes 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 pdf/model/testdata/font/diff1.obj diff --git a/pdf/model/font_simple.go b/pdf/model/font_simple.go index a5f0a892..b444406e 100644 --- a/pdf/model/font_simple.go +++ b/pdf/model/font_simple.go @@ -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) diff --git a/pdf/model/font_test.go b/pdf/model/font_test.go index 073c3601..01be2ff1 100644 --- a/pdf/model/font_test.go +++ b/pdf/model/font_test.go @@ -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. diff --git a/pdf/model/testdata/font/diff1.obj b/pdf/model/testdata/font/diff1.obj new file mode 100644 index 0000000000000000000000000000000000000000..3544246d3d5454639dc52904d6c1ba4e04d11ffe GIT binary patch literal 1580 zcmXptRWMMpI73RnUktu3UWaZmws?bYHk=vVMt{` zssdOZq`N4ypd`Nts6Hn#y;#B6h)X{LYK)1w1;iL9r~C?qXafaZBO@aPb4wEia}$GD zh?HMqF3>EG2$#svU~T7&)SQykyo|)$;F1(wACOyg-Hc4Mfp&V9B<5r$JLaVW9R%b$ z!dwmXC(wgnZIQHJI z_4wO`62e<`Jq~1X%YEa2{f;@pSS+zu=7p8BMy=3ykC41K0Pm^Xo zWSafpu4KX7z58mOUsYR?_xK01?Twq_QPLS34`$o$yK2iKb7LCY*}S-I5%2A}_e~S5 zIVrO)J%f$;a)kMVtZG($QK#k4H-9@YtA5%Zb-lOqFNJDd?pPS7x2b$3Fn+Cd<-ZsW$KK{)rT}x&X{md+_cHT#xN-Cq0iCcc%;SYvhvl=PbMszEu<~jB z`0j7A-C=pccb%U_^4mSW`|v;5Xt#f-W&7&K;fJgj=a!1ivN8mwip-+o66cJ>B2YX#B^IZG5+X541d%KuNehuU6~IXzn1o&P zfGHs}FI@qYnLuX41@yx+^BnVvGhqT;`YxGiX{kl2dC958ptP%>40J|OevWIfvw|U< z7aS6yV1(dB`Y9O0c}~F!CUA~(kb)_k3rd3eA^D+snV`g}Ubxpi4H-o1L-w22hxT>z2?S1z9rCH zLx^rOV+A9yO+dSVrdSvQ)tUj-f?NTV1JTCDrV7Ru=3uvg#7xXVr4R_37+Yf4h;RW& j4+tYfP+9ooP*n~z4-|sPZUBWKG9SbSh7>p