summaryrefslogtreecommitdiff
path: root/contrib/ghostscript
diff options
context:
space:
mode:
authorKurt <kurt.w.jung@gmail.com>2016-02-18 15:48:47 -0500
committerKurt <kurt.w.jung@gmail.com>2016-02-18 15:48:47 -0500
commitb56ba6c31fb6e12aab4bc92b7f823f2b3acb5742 (patch)
treed66265ba55ad477643701a7476dcc69ed9f8bd7b /contrib/ghostscript
parent0d15f36c67d7e7494aa0eb5a1d94cd766835c257 (diff)
Demonstration of PDF size reduction with ghostscript
Diffstat (limited to 'contrib/ghostscript')
-rw-r--r--contrib/ghostscript/ghostscript.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/contrib/ghostscript/ghostscript.go b/contrib/ghostscript/ghostscript.go
new file mode 100644
index 0000000..90f9135
--- /dev/null
+++ b/contrib/ghostscript/ghostscript.go
@@ -0,0 +1,62 @@
+package main
+
+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() {
+ const name = "full.pdf"
+ report(name, newPdf().OutputFileAndClose(name))
+}
+
+func min() {
+ const name = "min.pdf"
+ 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()
+ }()
+ newPdf().Output(inPipe)
+ report(name, <-errChan)
+ } else {
+ report(name, err)
+ }
+}
+
+func main() {
+ full()
+ min()
+}