🐾   [golang] Html 파일을 PDF로 변환 (go-wkhtmltopdf 사용)

엄청난 뻘짓을 했다. 정보를 찾아 찾아 코드를 짰는데… wkhtmltopdf not found 에러가 계속 났다. exe 파일 필요한 것 같은데… 모듈 말고 다른걸 설치해야한다는 생각을 못했다.

#방법

  1. https://wkhtmltopdf.org/downloads.html 에 가서 OS에 따라 다운 받기
  • 참조 여기에서는 맥이 다운 받아지지 않았다
brew install Caskroom/cask/wkhtmltopdf

이걸로 다운을 받았다.

  1. terminal에 모듈 설치
go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf
  1. 환경변수 설정 이름: WKHTMLTOPDF_PATH 값: C:\Program Files\wkhtmltopdf\bin (설치된 장소)

  2. 코드를 작성한다. 나는 처음에 API 호출할 때마다 변환하는 걸로 하려고 했는데 샘플 자료는 메인에 만들었다.

main.go

func main()  {

dataHTML := common.Data{
Name: "YooGenie",
Address: "서울",
Mobile: "000-0000-0000",
}

fileHtmlName, err := html.HtmlTemplate("template/test.html", dataHTML)
if err != nil{
fmt.Println(err)
return
}

fmt.Println("HTML : ", fileHtmlName)

defer os.Remove(fileHtmlName)
filePDFName, err := pdf.HtmlToPdf(fileHtmlName)

if err != nil{
fmt.Println(err)
return
}
fmt.Println("PDF : ", filePDFName)
return
}

html.go (템플릿에 값을 넣는 것)

func HtmlTemplate(filePath string, data interface{}) (string, error) {
root := common.HtmlStruct{RootPath: "file"}

t, err := template.ParseFiles(filePath)
if err != nil {
return "", err
}

fileName := root.RootPath + "/genie.html"

fileWriter, err := os.Create(fileName)
if err != nil {
return "", err
}

if err := t.Execute(fileWriter, data); err != nil {
return "", err
}

return fileName, nil
}

pdf.go (html를 pdf로 변환)

func HtmlToPdf(htmlFile string) (string, error) {
root := common.HtmlStruct{RootPath: "file"}

f, err := os.Open(htmlFile)
if err != nil {
return "", err
}

pdfg, err := wkhtmltopdf.NewPDFGenerator()
if err != nil {
return "", err
}

pdfg.AddPage(wkhtmltopdf.NewPageReader(f))

if err := pdfg.Create(); err != nil {
return "", err
}

fileName :=  root.RootPath + "/genie.pdf"

if err := pdfg.WriteFile(fileName); err != nil {
return "", err
}

return fileName, nil
}

자세한 내용은 GitHub gogo https://github.com/YooGenie/htmlToPdf

# 참조

https://github.com/SebastiaanKlippert/go-wkhtmltopdf

​ ​ ​