From bb287515d3b5c5b4ca7665a64a9224e8b6038804 Mon Sep 17 00:00:00 2001 From: Paul Montag Date: Wed, 31 Oct 2018 19:56:01 -0500 Subject: Added Ability to turn template into a byte string --- def.go | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) (limited to 'def.go') diff --git a/def.go b/def.go index d53e627..4b19a06 100644 --- a/def.go +++ b/def.go @@ -18,6 +18,7 @@ package gofpdf import ( "bytes" + "encoding/gob" "io" "time" ) @@ -175,6 +176,101 @@ type ImageInfoType struct { dpi float64 } +func (info *ImageInfoType) GobEncode() ([]byte, error) { + w := new(bytes.Buffer) + encoder := gob.NewEncoder(w) + + err := encoder.Encode(info.data) + if err == nil { + err = encoder.Encode(info.smask) + } + if err == nil { + err = encoder.Encode(info.i) + } + if err == nil { + err = encoder.Encode(info.n) + } + if err == nil { + err = encoder.Encode(info.w) + } + if err == nil { + err = encoder.Encode(info.h) + } + if err == nil { + err = encoder.Encode(info.cs) + } + if err == nil { + err = encoder.Encode(info.pal) + } + if err == nil { + err = encoder.Encode(info.bpc) + } + if err == nil { + err = encoder.Encode(info.f) + } + if err == nil { + err = encoder.Encode(info.dp) + } + if err == nil { + err = encoder.Encode(info.trns) + } + if err == nil { + err = encoder.Encode(info.scale) + } + if err == nil { + err = encoder.Encode(info.dpi) + } + + return w.Bytes(), err +} + +func (info *ImageInfoType) GobDecode(buf []byte) error { + r := bytes.NewBuffer(buf) + decoder := gob.NewDecoder(r) + + err := decoder.Decode(&info.data) + if err == nil { + err = decoder.Decode(&info.smask) + } + if err == nil { + err = decoder.Decode(&info.i) + } + if err == nil { + err = decoder.Decode(&info.n) + } + if err == nil { + err = decoder.Decode(&info.w) + } + if err == nil { + err = decoder.Decode(&info.h) + } + if err == nil { + err = decoder.Decode(&info.cs) + } + if err == nil { + err = decoder.Decode(&info.pal) + } + if err == nil { + err = decoder.Decode(&info.bpc) + } + if err == nil { + err = decoder.Decode(&info.f) + } + if err == nil { + err = decoder.Decode(&info.dp) + } + if err == nil { + err = decoder.Decode(&info.trns) + } + if err == nil { + err = decoder.Decode(&info.scale) + } + if err == nil { + err = decoder.Decode(&info.dpi) + } + return err +} + // PointConvert returns the value of pt, expressed in points (1/72 inch), as a // value expressed in the unit of measure specified in New(). Since font // management in Fpdf uses points, this method can help with line height -- cgit v1.2.1-24-ge1ad From 193187d077554b92944a4757e202d1300e1ed1fb Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 10 Nov 2018 12:06:51 -0500 Subject: Added some comments to new encoding/decoding methods --- def.go | 103 ++++++++++++----------------------------------------------------- 1 file changed, 19 insertions(+), 84 deletions(-) (limited to 'def.go') diff --git a/def.go b/def.go index 3c5fa9d..605cdbc 100644 --- a/def.go +++ b/def.go @@ -158,7 +158,9 @@ func (p PointType) XY() (float64, float64) { return p.X, p.Y } -// ImageInfoType contains size, color and other information about an image +// ImageInfoType contains size, color and other information about an image. +// Changes to this structure should be reflected in its GobEncode and GobDecode +// methods. type ImageInfoType struct { data []byte smask []byte @@ -176,99 +178,32 @@ type ImageInfoType struct { dpi float64 } -func (info *ImageInfoType) GobEncode() ([]byte, error) { +// GobEncode encodes the receiving image to a byte slice. +func (info *ImageInfoType) GobEncode() (buf []byte, err error) { + fields := []interface{}{info.data, info.smask, info.i, info.n, info.w, info.h, info.cs, + info.pal, info.bpc, info.f, info.dp, info.trns, info.scale, info.dpi} w := new(bytes.Buffer) encoder := gob.NewEncoder(w) - - err := encoder.Encode(info.data) - if err == nil { - err = encoder.Encode(info.smask) - } - if err == nil { - err = encoder.Encode(info.i) - } - if err == nil { - err = encoder.Encode(info.n) - } - if err == nil { - err = encoder.Encode(info.w) - } - if err == nil { - err = encoder.Encode(info.h) - } - if err == nil { - err = encoder.Encode(info.cs) - } - if err == nil { - err = encoder.Encode(info.pal) - } - if err == nil { - err = encoder.Encode(info.bpc) - } - if err == nil { - err = encoder.Encode(info.f) - } - if err == nil { - err = encoder.Encode(info.dp) + for j := 0; j < len(fields) && err == nil; j++ { + err = encoder.Encode(fields[j]) } if err == nil { - err = encoder.Encode(info.trns) + buf = w.Bytes() } - if err == nil { - err = encoder.Encode(info.scale) - } - if err == nil { - err = encoder.Encode(info.dpi) - } - - return w.Bytes(), err + return } -func (info *ImageInfoType) GobDecode(buf []byte) error { +// GobDecode decodes the specified byte buffer (generated by GobEncode) into +// the receiving image. +func (info *ImageInfoType) GobDecode(buf []byte) (err error) { + fields := []interface{}{&info.data, &info.smask, &info.i, &info.n, &info.w, &info.h, + &info.cs, &info.pal, &info.bpc, &info.f, &info.dp, &info.trns, &info.scale, &info.dpi} r := bytes.NewBuffer(buf) decoder := gob.NewDecoder(r) - - err := decoder.Decode(&info.data) - if err == nil { - err = decoder.Decode(&info.smask) - } - if err == nil { - err = decoder.Decode(&info.i) - } - if err == nil { - err = decoder.Decode(&info.n) - } - if err == nil { - err = decoder.Decode(&info.w) - } - if err == nil { - err = decoder.Decode(&info.h) - } - if err == nil { - err = decoder.Decode(&info.cs) - } - if err == nil { - err = decoder.Decode(&info.pal) - } - if err == nil { - err = decoder.Decode(&info.bpc) - } - if err == nil { - err = decoder.Decode(&info.f) - } - if err == nil { - err = decoder.Decode(&info.dp) - } - if err == nil { - err = decoder.Decode(&info.trns) - } - if err == nil { - err = decoder.Decode(&info.scale) - } - if err == nil { - err = decoder.Decode(&info.dpi) + for j := 0; j < len(fields) && err == nil; j++ { + err = decoder.Decode(fields[j]) } - return err + return } // PointConvert returns the value of pt, expressed in points (1/72 inch), as a -- cgit v1.2.1-24-ge1ad