summaryrefslogtreecommitdiff
path: root/vendor/github.com/jung-kurt/gofpdf/contrib/ghostscript/ghostscript.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jung-kurt/gofpdf/contrib/ghostscript/ghostscript.go')
-rw-r--r--vendor/github.com/jung-kurt/gofpdf/contrib/ghostscript/ghostscript.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/vendor/github.com/jung-kurt/gofpdf/contrib/ghostscript/ghostscript.go b/vendor/github.com/jung-kurt/gofpdf/contrib/ghostscript/ghostscript.go
new file mode 100644
index 0000000..3196c34
--- /dev/null
+++ b/vendor/github.com/jung-kurt/gofpdf/contrib/ghostscript/ghostscript.go
@@ -0,0 +1,68 @@
+package main
+
+// This command demonstrates the use of ghotscript to reduce the size
+// of generated PDFs. This is based on a comment made by farkerhaiku:
+// https://github.com/jung-kurt/gofpdf/issues/57#issuecomment-185843315
+
+import (
+ "fmt"
+ "os"
+ "os/exec"
+
+ "github.com/jung-kurt/gofpdf"
+)
+
+func report(fileStr string, err error) {
+ if err == nil {
+ var info os.FileInfo
+ info, err = os.Stat(fileStr)
+ if err == nil {
+ fmt.Printf("%s: OK, size %d\n", fileStr, info.Size())
+ } else {
+ fmt.Printf("%s: bad stat\n", fileStr)
+ }
+ } else {
+ fmt.Printf("%s: %s\n", fileStr, err)
+ }
+}
+
+func newPdf() (pdf *gofpdf.Fpdf) {
+ pdf = gofpdf.New("P", "mm", "A4", "../../font")
+ pdf.SetCompression(false)
+ pdf.AddFont("Calligrapher", "", "calligra.json")
+ pdf.AddPage()
+ pdf.SetFont("Calligrapher", "", 35)
+ pdf.Cell(0, 10, "Enjoy new fonts with FPDF!")
+ return
+}
+
+func full(name string) {
+ report(name, newPdf().OutputFileAndClose(name))
+}
+
+func min(name string) {
+ cmd := exec.Command("gs", "-sDEVICE=pdfwrite",
+ "-dCompatibilityLevel=1.4",
+ "-dPDFSETTINGS=/screen", "-dNOPAUSE", "-dQUIET",
+ "-dBATCH", "-sOutputFile="+name, "-")
+ inPipe, err := cmd.StdinPipe()
+ if err == nil {
+ errChan := make(chan error, 1)
+ go func() {
+ errChan <- cmd.Start()
+ }()
+ err = newPdf().Output(inPipe)
+ if err == nil {
+ report(name, <-errChan)
+ } else {
+ report(name, err)
+ }
+ } else {
+ report(name, err)
+ }
+}
+
+func main() {
+ full("full.pdf")
+ min("min.pdf")
+}