-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtopdf.go
100 lines (82 loc) · 2.09 KB
/
topdf.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package main
import (
"fmt"
"os"
"runtime"
"github.com/SebastiaanKlippert/go-wkhtmltopdf"
"html/template"
"bytes"
"bufio"
"net/url"
"github.com/gorilla/schema"
"io/ioutil"
"log"
)
var decoder = schema.NewDecoder()
type tplVars struct {
Title string `schema:"title"`
}
func getBinaryPath() string {
dir, err := os.Getwd()
if err != nil {
panic(err)
}
if runtime.GOOS == "darwin" {
return dir + "/bin/wkhtmltopdf_macOs"
}
return dir + "/bin/wkhtmltopdf_linux_amd64"
}
func billToPDF(paramsString url.Values) []byte {
var vars tplVars
// turning GET params into template varables
err := decoder.Decode(&vars, paramsString)
if err != nil {
log.Println("Error in GET parameters : ", err)
}
// set wkhtmltopdf binary path
wkhtmltopdf.SetPath(getBinaryPath())
fmt.Printf("Using path: %v\n", wkhtmltopdf.GetPath())
pdf, _ := wkhtmltopdf.NewPDFGenerator()
pdf.PageSize.Set(wkhtmltopdf.PageSizeA4)
text, _ := ioutil.ReadFile("templates/bill.html")
tpl, err := template.New("template pdf").Parse(string(text))
if err != nil {
panic(err)
}
var b []byte
buf := bytes.NewBuffer(b)
tpl.Execute(buf, vars)
r := bufio.NewReader(buf)
page := wkhtmltopdf.NewPageReader(r)
page.NoImages.Set(true)
page.DisableJavascript.Set(true)
page.DisableExternalLinks.Set(true)
page.DisableInternalLinks.Set(true)
pdf.AddPage(page)
//fmt.Printf("args: %v\n", pdf.Args())
if err := pdf.Create(); err != nil {
panic(err)
}
//ioutil.WriteFile("out/result.pdf", result, 0777)
return pdf.Bytes()
}
func toPDF(fileData []byte) []byte {
// set binary path
wkhtmltopdf.SetPath(getBinaryPath())
fmt.Printf("Using path: %v\n", wkhtmltopdf.GetPath())
pdf, _ := wkhtmltopdf.NewPDFGenerator()
pdf.PageSize.Set(wkhtmltopdf.PageSizeA4)
buf := bytes.NewBuffer(fileData)
r := bufio.NewReader(buf)
page := wkhtmltopdf.NewPageReader(r)
//page.NoImages.Set(true)
page.DisableJavascript.Set(true)
page.DisableExternalLinks.Set(true)
page.DisableInternalLinks.Set(true)
pdf.AddPage(page)
fmt.Printf("args: %v\n", pdf.Args())
if err := pdf.Create(); err != nil {
panic(err)
}
return pdf.Bytes()
}