feat (generate-file): not tested yet
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package filehelper
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
// const DEFAULT_EXPIRY_FILES = time.Hour * 24 * 7
|
||||
|
||||
func PathAgreement(medicalNumber string) (string, error) {
|
||||
outputPath := fmt.Sprintf("./public/patient/%s", medicalNumber)
|
||||
err := os.MkdirAll(outputPath, os.ModePerm)
|
||||
return outputPath, err
|
||||
}
|
||||
|
||||
func PathToSaveFile(outputPath string) (string, error) {
|
||||
err := os.MkdirAll(outputPath, os.ModePerm)
|
||||
return outputPath, err
|
||||
}
|
||||
|
||||
func RenameFile(srcPath, dstPath string) error {
|
||||
return os.Rename(srcPath, dstPath)
|
||||
}
|
||||
|
||||
func DeleteFolder(path string) error {
|
||||
return os.RemoveAll(path)
|
||||
}
|
||||
|
||||
func PathToUrl(fileName string) *string {
|
||||
fileUrl := filepath.ToSlash(fmt.Sprintf("%c%s", os.PathSeparator, fileName))
|
||||
return &fileUrl
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
package pdfhelper
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"html/template"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/SebastiaanKlippert/go-wkhtmltopdf"
|
||||
)
|
||||
|
||||
// pdf requestpdf struct
|
||||
type RequestPdf struct {
|
||||
body string
|
||||
}
|
||||
|
||||
// new request to pdf function
|
||||
func NewRequestPdf(body string) *RequestPdf {
|
||||
return &RequestPdf{
|
||||
body: body,
|
||||
}
|
||||
}
|
||||
|
||||
// parsing template function
|
||||
func (r *RequestPdf) ParseTemplate(templatePath string, data interface{}) error {
|
||||
f := strings.Split(templatePath, "/")
|
||||
fileName := f[len(f)-1]
|
||||
funcs := template.FuncMap{
|
||||
"nl2br": func(text string) template.HTML {
|
||||
return template.HTML(strings.Replace(template.HTMLEscapeString(text), "\n", "<br>", -1))
|
||||
},
|
||||
}
|
||||
t, err := template.New(fileName).Funcs(funcs).ParseFiles(templatePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
buf := new(bytes.Buffer)
|
||||
if err = t.Execute(buf, data); err != nil {
|
||||
return err
|
||||
}
|
||||
r.body = buf.String()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *RequestPdf) GenerateByCommand(pdfPath string, templatePath string) (bool, error) {
|
||||
// wkhtmltopdf -L 0 -R 0 -B 0 -s Legal --enable-local-file-access resultAntigen2.html out.pdf
|
||||
t := time.Now().Unix()
|
||||
|
||||
if _, err := os.Stat("cloneTemplate/"); os.IsNotExist(err) {
|
||||
errDir := os.Mkdir("cloneTemplate/", 0777)
|
||||
if errDir != nil {
|
||||
log.Fatal(errDir)
|
||||
}
|
||||
}
|
||||
htmlName := strconv.FormatInt(int64(t), 10) + ".html"
|
||||
err := os.WriteFile("cloneTemplate/"+htmlName, []byte(r.body), 0644)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
cmd := exec.Command("wkhtmltopdf", "--enable-local-file-access", "-L", "0", "-R", "0", "-B", "0", "-s", "A4", "cloneTemplate/"+htmlName, pdfPath)
|
||||
|
||||
if err := cmd.Run(); err != nil {
|
||||
return false, err
|
||||
}
|
||||
dir, err := os.Getwd()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer os.RemoveAll(dir + "/cloneTemplate")
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// generate pdf function
|
||||
func (r *RequestPdf) GeneratePDF(pdfPath string) (bool, error) {
|
||||
t := time.Now().Unix()
|
||||
|
||||
if _, err := os.Stat("cloneTemplate/"); os.IsNotExist(err) {
|
||||
errDir := os.Mkdir("cloneTemplate/", 0777)
|
||||
if errDir != nil {
|
||||
log.Fatal(errDir)
|
||||
}
|
||||
}
|
||||
err1 := os.WriteFile("cloneTemplate/"+strconv.FormatInt(int64(t), 10)+".html", []byte(r.body), 0644)
|
||||
if err1 != nil {
|
||||
panic(err1)
|
||||
}
|
||||
|
||||
f, err := os.Open("cloneTemplate/" + strconv.FormatInt(int64(t), 10) + ".html")
|
||||
if f != nil {
|
||||
defer f.Close()
|
||||
}
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
pdfg, err := wkhtmltopdf.NewPDFGenerator()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
pdfg.AddPage(wkhtmltopdf.NewPageReader(f))
|
||||
|
||||
pdfg.PageSize.Set(wkhtmltopdf.PageSizeA4)
|
||||
|
||||
pdfg.Dpi.Set(300)
|
||||
|
||||
err = pdfg.Create()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
err = pdfg.WriteFile(pdfPath)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
dir, err := os.Getwd()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
defer os.RemoveAll(dir + "/cloneTemplate")
|
||||
|
||||
return true, nil
|
||||
}
|
||||
Reference in New Issue
Block a user