golang wkhtmltopdf HTML转PDF

在CentOS系统中安装wkhtmltopdf时,用户遇到了libwkhtmltox.so.0:cannotopensharedobjectfile:Nosuchfileordirectory的错误。通过查找库文件发现libwkhtmltox.so.0位于/usr/local/lib/。通过`ldd`命令显示了缺失的依赖项,解决方法是将库文件复制到系统库路径,例如`cp/usr/local/lib/libwkhtmltox.so.0/usr/lib64/`。此外,文章还展示了使用Go语言调用wkhtmltopdf进行HTML转PDF的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖安装:

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)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值