summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc.go4
-rw-r--r--fpdf.go28
-rw-r--r--fpdf_test.go8
3 files changed, 31 insertions, 9 deletions
diff --git a/doc.go b/doc.go
index e93a4b5..2c1ce71 100644
--- a/doc.go
+++ b/doc.go
@@ -26,7 +26,7 @@ Features
• Automatic page breaks, line breaks, and text justification
-• Inclusion of JPEG, PNG and GIF images
+• Inclusion of JPEG, PNG, GIF and basic path-only SVG images
• Colors, gradients and alpha channel transparency
@@ -44,8 +44,6 @@ Features
• Clipping
-• Basic path-only SVG images
-
gofpdf has no dependencies other than the Go standard library. All tests pass
on Linux, Mac and Windows platforms. Like FPDF version 1.7, from which gofpdf
is derived, this package does not yet support UTF-8 source text.
diff --git a/fpdf.go b/fpdf.go
index 7b381a5..f81ef09 100644
--- a/fpdf.go
+++ b/fpdf.go
@@ -34,6 +34,7 @@ import (
"io"
"io/ioutil"
"math"
+ "os"
"path"
"strings"
"time"
@@ -439,9 +440,9 @@ func (f *Fpdf) open() {
}
// Close terminates the PDF document. It is not necessary to call this method
-// explicitly because Output() and OutputAndClose() do it automatically. If the
-// document contains no page, AddPage() is called to prevent the generation of
-// an invalid document.
+// explicitly because Output(), OutputAndClose() and OutputFileAndClose() do it
+// automatically. If the document contains no page, AddPage() is called to
+// prevent the generation of an invalid document.
func (f *Fpdf) Close() {
if f.err == nil {
if f.clipNest > 0 {
@@ -2109,14 +2110,31 @@ func (f *Fpdf) SetXY(x, y float64) {
f.SetX(x)
}
-// OutputAndClose send the PDF document to the writer specified by w. This method will close
-// both f and w, even if an error is detected and no document is produced.
+// OutputAndClose sends the PDF document to the writer specified by w. This
+// method will close both f and w, even if an error is detected and no document
+// is produced.
func (f *Fpdf) OutputAndClose(w io.WriteCloser) error {
f.Output(w)
w.Close()
return f.err
}
+// OutputFileAndClose creates or truncates the file specified by fileStr and
+// writes the PDF document to it. This method will close f and the newly
+// written file, even if an error is detected and no document is produced.
+func (f *Fpdf) OutputFileAndClose(fileStr string) error {
+ if f.err == nil {
+ pdfFile, err := os.Create(fileStr)
+ if err == nil {
+ f.Output(pdfFile)
+ pdfFile.Close()
+ } else {
+ f.err = err
+ }
+ }
+ return f.err
+}
+
// Output sends the PDF document to the writer specified by w. No output will
// take place if an error has occured in the document generation process. w
// remains open after this function returns. After returning, f is in a closed
diff --git a/fpdf_test.go b/fpdf_test.go
index aaf5807..be55031 100644
--- a/fpdf_test.go
+++ b/fpdf_test.go
@@ -124,7 +124,13 @@ func ExampleFpdf_tutorial01() {
pdf.AddPage()
pdf.SetFont("Arial", "B", 16)
pdf.Cell(40, 10, "Hello World!")
- pdf.OutputAndClose(docWriter(pdf, 1))
+ fileStr := filepath.Join(cnGofpdfDir, "pdf/tutorial01.pdf")
+ err := pdf.OutputFileAndClose(fileStr)
+ if err == nil {
+ fmt.Println("Successfully generated pdf/tutorial01.pdf")
+ } else {
+ fmt.Println(err)
+ }
// Output:
// Successfully generated pdf/tutorial01.pdf
}