依赖安装:
go get github.com/adrg/go-wkhtmltopdf
安装wkhtmltopdf:
https://wkhtmltopdf.org/downloads.html
Debian based distributions
sudo apt-get install xfonts-75dpi
sudo dpkg -i wkhtmltox.deb
sudo ldconfig
Fedora
sudo dnf localinstall wkhtmltox.rpm
CentOS
sudo yum localinstall wkhtmltox.rpm
centos 7安装:
wget "https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.centos7.x86_64.rpm"
yum localinstall wkhtmltox-0.12.6-1.centos7.x86_64.rpm
遇到的问题:
error while loading shared libraries: libwkhtmltox.so.0: cannot open shared object file: No such file or directory
[root@VM-0-4-centos tenderBack]# find /usr -name libwkhtmltox.so.0
/usr/local/lib/libwkhtmltox.so.0
[root@VM-0-4-centos tenderBack]# ldd /usr/local/lib/libwkhtmltox.so.0
linux-vdso.so.1 => (0x00007ffda9b06000)
libjpeg.so.62 => /lib64/libjpeg.so.62 (0x00007fd57438f000)
libpng15.so.15 => /lib64/libpng15.so.15 (0x00007fd574164000)
libXrender.so.1 => /lib64/libXrender.so.1 (0x00007fd573f59000)
libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007fd573d17000)
libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007fd573a58000)
libXext.so.6 => /lib64/libXext.so.6 (0x00007fd573846000)
libX11.so.6 => /lib64/libX11.so.6 (0x00007fd573508000)
libssl.so.10 => /lib64/libssl.so.10 (0x00007fd573296000)
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007fd572e33000)
libz.so.1 => /lib64/libz.so.1 (0x00007fd572c1d000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fd572a19000)
librt.so.1 => /lib64/librt.so.1 (0x00007fd572811000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd5725f5000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fd5722ed000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd571feb000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd571dd5000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd571a07000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd577150000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fd5717dc000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007fd5715d7000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fd5713c7000)
libxcb.so.1 => /lib64/libxcb.so.1 (0x00007fd57119f000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fd570f52000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fd570c69000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fd570a65000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fd570832000)
libXau.so.6 => /lib64/libXau.so.6 (0x00007fd57062e000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fd57041e000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fd57021a000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fd570000000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fd56fdd9000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fd56fb77000)
有not found 的依赖 就装
cp /usr/local/lib/libwkhtmltox.so.0 /usr/lib64/
func HtmlToPdf(html []byte) []byte {
// Initialize library.
if err := pdf.Init(); err != nil {
log.Fatal(err)
}
defer pdf.Destroy()
// Create object from file.
//object, err := pdf.NewObject("sample1.html")
//if err != nil {
// log.Fatal(err)
//}
//object.Header.ContentCenter = "[title]"
//object.Header.DisplaySeparator = true
// Create object from URL.
//object2, err := pdf.NewObject("https://google.com")
//if err != nil {
// log.Fatal(err)
//}
//object2.Footer.ContentLeft = "[date]"
//object2.Footer.ContentCenter = "Sample footer information"
//object2.Footer.ContentRight = "[page]"
//object2.Footer.DisplaySeparator = true
// Create object from reader.
//inFile, err := os.Open("sample2.html")
//if err != nil {
// log.Fatal(err)
//}
//defer inFile.Close()
object3, err := pdf.NewObjectFromReader(bytes.NewReader(html))
if err != nil {
log.Fatal(err)
}
object3.Zoom = 1.5
object3.TOC.Title = "Table of Contents"
// Create converter.
converter, err := pdf.NewConverter()
if err != nil {
log.Fatal(err)
}
defer converter.Destroy()
converter.Add(object3)
// Set converter options.
converter.Title = "Sample document"
converter.PaperSize = pdf.A4
converter.Orientation = pdf.Landscape
converter.MarginTop = "1cm"
converter.MarginBottom = "1cm"
converter.MarginLeft = "10mm"
converter.MarginRight = "10mm"
// Convert objects and save the output PDF document.
//outFile, err := os.Create("out.pdf")
//if err != nil {
// log.Fatal(err)
//}
//defer outFile.Close()
var buff bytes.Buffer
// Run converter.
if err := converter.Run(&buff); err != nil {
log.Fatal(err)
}
return buff.Bytes()
}
接口:
func (c *DownloadController) DownloadFilePdf(r *ghttp.Request) {
var buff []byte
buff = HtmlToPdf([]byte("html内容"))
header := r.Response.Header()
header.Add("Content-Type", "application/octet-stream")
header.Add("Content-Disposition", "attachment;filename="+"tender.pdf")
r.Response.Write(buff)
}