Merge pull request #2 from hiroxy/render

Render
This commit is contained in:
Peter Williams 2018-07-10 07:23:55 +10:00 committed by GitHub
commit d2998c2183
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 47 additions and 19 deletions

View File

@ -37,12 +37,12 @@ func (font PdfFont) String() string {
// BaseFont returns the font's "BaseFont" field.
func (font PdfFont) BaseFont() string {
return font.fontSkeleton.basefont
return font.basefont
}
// Subtype returns the font's "Subtype" field.
func (font PdfFont) Subtype() string {
subtype := font.fontSkeleton.subtype
subtype := font.subtype
if t, ok := font.context.(*pdfFontType0); ok {
subtype = fmt.Sprintf("%s:%s", subtype, t.DescendantFont.Subtype())
}

View File

@ -1,4 +1,4 @@
package model
package model_test
import (
"errors"
@ -6,6 +6,8 @@ import (
"github.com/unidoc/unidoc/common"
. "github.com/unidoc/unidoc/pdf/core"
"github.com/unidoc/unidoc/pdf/model"
"github.com/unidoc/unidoc/pdf/model/fonts"
)
func init() {
@ -88,6 +90,40 @@ var compositeFontDicts = []string{
>>`,
}
func TestNewStandard14Font(t *testing.T) {
type expect struct {
subtype string
basefont string
fonts.CharMetrics
}
tests := map[string]expect{
"Courier": expect{
subtype: "Type1",
basefont: "Courier",
CharMetrics: fonts.CharMetrics{Wx: 600, Wy: 0}},
}
for in, expect := range tests {
font, err := model.NewStandard14Font(in)
if err != nil {
t.Fatalf("%s: %v", in, err)
}
if font.Subtype() != expect.subtype || font.BaseFont() != expect.basefont {
t.Fatalf("%s: expected BaseFont=%s SubType=%s, but got BaseFont=%s SubType=%s",
in, expect.basefont, expect.subtype, font.BaseFont(), font.Subtype())
}
metrics, ok := font.GetGlyphCharMetrics("space")
if !ok {
t.Fatalf("%s: failed to get glyph metric", in)
}
if metrics.Wx != expect.Wx || metrics.Wy != expect.Wy {
t.Errorf("%s: expected glyph metrics is Wx=%f Wy=%f, but got Wx=%f Wy=%f",
in, expect.Wx, expect.Wy, metrics.Wx, metrics.Wy)
}
}
}
// TestSimpleFonts checks that we correctly recreate simple fonts that we parse.
func TestSimpleFonts(t *testing.T) {
for _, d := range simpleFontDicts {
@ -112,7 +148,7 @@ func objFontObj(t *testing.T, fontDict string) error {
t.Errorf("objFontObj: Failed to parse dict obj. fontDict=%q err=%v", fontDict, err)
return err
}
font, err := NewPdfFontFromPdfObject(obj)
font, err := model.NewPdfFontFromPdfObject(obj)
if err != nil {
t.Errorf("Failed to parse font object. obj=%s err=%v", obj, err)
return err

View File

@ -53,20 +53,17 @@ endobj
obj, err := parser.ParseIndirectObject()
if err != nil {
t.Errorf("Failed to parse indirect obj (%s)", err)
return
t.Fatalf("Failed to parse indirect obj (%s)", err)
}
stream, ok := obj.(*PdfObjectStream)
_, ok := obj.(*PdfObjectStream)
if !ok {
t.Errorf("Invalid object type (%q)", obj)
return
t.Fatalf("Invalid object type (%q)", obj)
}
fun, err := newPdfFunctionFromPdfObject(obj)
if err != nil {
t.Errorf("Failed: %v", err)
return
t.Fatalf("Failed: %v", err)
}
// z = sin(360*x)/2 + sin(360*y)/2
@ -81,23 +78,18 @@ endobj
for _, testcase := range testcases {
outputs, err := fun.Evaluate(testcase.Inputs)
if err != nil {
t.Errorf("Failed: %v", err)
return
t.Fatalf("Failed: %v", err)
}
fmt.Println(testcase)
fmt.Println(outputs)
if len(outputs) != len(testcase.Expected) {
t.Errorf("Failed, output length mismatch")
return
t.Fatalf("Failed, output length mismatch")
}
for i := 0; i < len(outputs); i++ {
if math.Abs(outputs[i]-testcase.Expected[i]) > 0.000001 {
t.Errorf("Failed, output and expected mismatch")
return
t.Fatalf("Failed, output and expected mismatch")
}
}
}
fmt.Printf("%s", stream.Stream)
}