🐾 [golang] Html 파일을 PDF로 변환 (go-wkhtmltopdf 사용)
엄청난 뻘짓을 했다. 정보를 찾아 찾아 코드를 짰는데… wkhtmltopdf not found 에러가 계속 났다. exe 파일 필요한 것 같은데… 모듈 말고 다른걸 설치해야한다는 생각을 못했다.
#방법
- https://wkhtmltopdf.org/downloads.html 에 가서 OS에 따라 다운 받기
- 참조 여기에서는 맥이 다운 받아지지 않았다
brew install Caskroom/cask/wkhtmltopdf
이걸로 다운을 받았다.
- terminal에 모듈 설치
go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf
-
환경변수 설정 이름: WKHTMLTOPDF_PATH 값: C:\Program Files\wkhtmltopdf\bin (설치된 장소)
-
코드를 작성한다. 나는 처음에 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