반응형
엄청난 뻘짓을 했다. 정보를 찾아 찾아 코드를 짰는데...
wkhtmltopdf not found 에러가 계속 났다. exe 파일 필요한 것 같은데...
모듈 말고 다른걸 설치해야한다는 생각을 못했다.
1) https://wkhtmltopdf.org/downloads.html 에 가서 OS에 따라 다운 받기
참조: 여기에서는 맥이 다운 받아지지 않았다
brew install Caskroom/cask/wkhtmltopdf
이걸로 다운을 받았다.
2) terminal에 모듈 설치
go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf
3) 환경변수 설정
이름: WKHTMLTOPDF_PATH 값: C:\Program Files\wkhtmltopdf\bin (설치된 장소)
4) 코드를 작성한다. 나는 처음에 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
# 참조
반응형
'Study > Go 언어' 카테고리의 다른 글
[golang] XORM에서 like문 사용할 때 % 처리하는 방법 (0) | 2021.12.16 |
---|---|
[Golang] JSON에서 원하는 값만 추출해 오기 (0) | 2021.12.13 |
[golang] DB안에 JSON 객체를 넣는 방법(jsonb 사용) (0) | 2021.06.22 |
구조체 (0) | 2021.06.14 |
VSCode로 코드 실행하기 (0) | 2021.06.07 |