Wkhtmltopdf使用
1.windows本地使用
官网地址 https://wkhtmltopdf.org/,直接去里面下载自己想要的版本,这里以windows版本为例


2.golang+windows环境使用
1.安装扩展
javascript
go get -u github.com/SebastiaanKlippert/go-wkhtmltopdf
2.写一段测试代码
javascript
// 写一个测试代码测试一下
package generateFile
import (
"github.com/SebastiaanKlippert/go-wkhtmltopdf"
"strings"
)
func GeneratePDF(title, content string) (res []byte, err error) {
content = `<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
body { font-family: "Microsoft YaHei", SimSun, sans-serif; }
</style>
</head>
<body>
<h1 style="text-align: center;">` + title + `</h1>
` + content + `
</body>
</html>`
// 创建 PDF 生成器
var pdf *wkhtmltopdf.PDFGenerator
pdf, err = wkhtmltopdf.NewPDFGenerator()
if err != nil {
return
}
// 从 HTML 字符串创建页面
page := wkhtmltopdf.NewPageReader(strings.NewReader(content))
// 设置页面选项
page.DisableSmartShrinking.Set(true)
page.Zoom.Set(1.25)
// 将页面添加到生成器
pdf.AddPage(page)
// 设置全局选项
pdf.MarginTop.Set(15)
pdf.MarginBottom.Set(15)
pdf.MarginLeft.Set(15)
pdf.MarginRight.Set(15)
pdf.Dpi.Set(300)
pdf.Orientation.Set(wkhtmltopdf.OrientationPortrait)
pdf.NoPdfCompression.Set(true) // 不压缩PDF以获得更好质量
pdf.PageSize.Set(wkhtmltopdf.PageSizeA4)
// 生成 PDF
err = pdf.Create()
if err != nil {
return
}
res = pdf.Bytes()
return
}
3.apifox调用查看效果

3.golang+docker容器中使用
1.编写 dockerfile
javascript
FROM golang:1.24.2 as builder
ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
WORKDIR /app
COPY . /app
RUN go build -o main
FROM alpine:3.13
RUN apk add tzdata
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
RUN apk del tzdata
RUN apk add --update --no-cache \
libgcc libstdc++ libx11 glib libxrender libxext libintl \
ttf-dejavu ttf-droid ttf-freefont ttf-liberation ttf-ubuntu-font-family
COPY --from=madnight/alpine-wkhtmltopdf-builder:0.12.5-alpine3.10-3660174986 \
/bin/wkhtmltopdf /bin/wkhtmltopdf
WORKDIR /app
COPY --from=builder /app .
//RUN cp /app/assets/fonts/* /usr/share/fonts/TTF
EXPOSE 80/tcp
CMD ["/app/main"]
2.直接代码里面调用就行了效果一样