From 3da37926268f1057e411f5f5a1cff94fc55329ed Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 10 Nov 2016 12:33:16 -0500 Subject: Support standard tiff images --- contrib/tiff/tiff.go | 71 +++++++++++++++++++++++++++++++++++++++++++++++ contrib/tiff/tiff_test.go | 22 +++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 contrib/tiff/tiff.go create mode 100644 contrib/tiff/tiff_test.go (limited to 'contrib') diff --git a/contrib/tiff/tiff.go b/contrib/tiff/tiff.go new file mode 100644 index 0000000..c2880d6 --- /dev/null +++ b/contrib/tiff/tiff.go @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2016 Kurt Jung (Gmail: kurt.w.jung) + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +package tiff + +import ( + "bytes" + "fmt" + "image" + "image/png" + "io" + "os" + + "github.com/jung-kurt/gofpdf" + "golang.org/x/image/tiff" +) + +// RegisterReader ... +func RegisterReader(fpdf *gofpdf.Fpdf, imgName string, options gofpdf.ImageOptions, r io.Reader) (info *gofpdf.ImageInfoType) { + var err error + var img image.Image + var buf bytes.Buffer + if fpdf.Ok() { + if options.ImageType == "tiff" || options.ImageType == "tif" { + img, err = tiff.Decode(r) + if err == nil { + err = png.Encode(&buf, img) + if err == nil { + options.ImageType = "png" + info = fpdf.RegisterImageOptionsReader(imgName, options, &buf) + } + } + } else { + err = fmt.Errorf("expecting \"tiff\" or \"tif\" as image type, got \"%s\"", options.ImageType) + } + if err != nil { + fpdf.SetError(err) + } + } + return +} + +// RegisterFile ... +func RegisterFile(fpdf *gofpdf.Fpdf, imgName string, options gofpdf.ImageOptions, tiffFileStr string) (info *gofpdf.ImageInfoType) { + var f *os.File + var err error + + if fpdf.Ok() { + f, err = os.Open(tiffFileStr) + if err == nil { + info = RegisterReader(fpdf, imgName, options, f) + f.Close() + } else { + fpdf.SetError(err) + } + } + return +} diff --git a/contrib/tiff/tiff_test.go b/contrib/tiff/tiff_test.go new file mode 100644 index 0000000..28163a0 --- /dev/null +++ b/contrib/tiff/tiff_test.go @@ -0,0 +1,22 @@ +package tiff_test + +import ( + "github.com/jung-kurt/gofpdf" + "github.com/jung-kurt/gofpdf/contrib/tiff" + "github.com/jung-kurt/gofpdf/internal/example" +) + +func ExampleTiff() { + pdf := gofpdf.New("L", "mm", "A4", "") + pdf.SetFont("Helvetica", "", 12) + pdf.SetFillColor(200, 200, 220) + pdf.AddPageFormat("L", gofpdf.SizeType{Wd: 200, Ht: 200}) + opt := gofpdf.ImageOptions{ImageType: "tiff", ReadDpi: false} + _ = tiff.RegisterFile(pdf, "sample", opt, "../../image/golang-gopher.tiff") + pdf.Image("sample", 0, 0, 200, 200, false, "", 0, "") + fileStr := example.Filename("Fpdf_Contrib_Tiff") + err := pdf.OutputFileAndClose(fileStr) + example.Summary(err, fileStr) + // Output: + // Successfully generated ../../pdf/Fpdf_Contrib_Tiff.pdf +} -- cgit v1.2.1-24-ge1ad