You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Golang实现HTML转PDF,无需依赖Chrome、WKHTMLTOPDF等预装工具

有两类符合要求的Golang实现方案,均不需要预装完整Chrome浏览器,也不需要依赖WKHTMLTOPDF:

方案1:基于WebKit内核的go-webkit2绑定

该方案直接调用系统WebKitGTK内核完成HTML渲染和PDF导出,不需要安装完整Chrome浏览器,仅需要依赖轻量的webkit2gtk运行库,大部分Linux发行版默认预装,Windows/macOS也可以很方便部署运行库,完全符合你接受webkit内核的要求。
核心实现代码参考:

package main

import (
	"github.com/gotk3/gotk3/glib"
	"github.com/gotk3/gotk3/gtk"
	"github.com/gotk3/gotk3/webkit2"
)

func main() {
	gtk.Init(nil)

	// 初始化webkit2渲染视图
	webView := webkit2.WebViewNew()
	// 加载本地HTML文件,替换为你的实际文件路径
	webView.LoadURI("file:///path/to/your/template.html")

	// 监听页面加载完成事件
	webView.Connect("load-changed", func(_ *webkit2.WebView, event webkit2.LoadEvent) {
		if event == webkit2.LOAD_FINISHED {
			// 配置PDF导出参数
			printOp := webkit2.PrintOperationNew(webView)
			printOp.SetPrintBackgrounds(true)
			// 导出PDF到指定路径
			printOp.PrintToPdf("report.pdf", nil, nil, nil, nil)
			// 导出完成后退出进程
			glib.IdleAdd(gtk.MainQuit)
		}
	})

	gtk.Main()
}
方案2:基于chromedp打包内嵌无头Chrome

该方案本质还是使用Chrome内核,但不需要用户手动预装Chrome浏览器,你可以在编译部署时将静态编译的无头Chrome二进制和你的Golang程序打包在一起,用户侧无感知不需要额外安装任何浏览器工具,生成的PDF效果和你之前用Chrome命令行生成的结果完全一致。
核心实现代码参考:

package main

import (
	"context"
	"os"

	"github.com/chromedp/cdproto/page"
	"github.com/chromedp/chromedp"
)

func main() {
	// 初始化无头Chrome上下文,自动匹配你打包的内嵌Chrome二进制
	ctx, cancel := chromedp.NewContext(context.Background())
	defer cancel()

	var pdfBuf []byte
	err := chromedp.Run(ctx,
		// 加载本地HTML文件,替换为你的实际文件路径
		chromedp.Navigate("file:///path/to/your/template.html"),
		// 等待页面渲染完成
		chromedp.WaitReady("body"),
		// 执行PDF生成操作
		chromedp.ActionFunc(func(ctx context.Context) error {
			var err error
			pdfBuf, _, err = page.PrintToPDF().
				WithPrintBackground(true).
				WithPaperWidth(8.27).  // 标准A4纸宽度
				WithPaperHeight(11.69). // 标准A4纸高度
				Do(ctx)
			return err
		}),
	)
	if err != nil {
		panic(err)
	}

	// 将生成的PDF内容写入本地文件
	if err := os.WriteFile("report.pdf", pdfBuf, 0644); err != nil {
		panic(err)
	}
}

两个方案的选型建议:

  • 如果你追求更轻量的依赖,优先选WebKit2方案,完全匹配你指定webkit内核的要求
  • 如果你需要和原Chrome生成的PDF效果100%对齐,优先选chromedp内嵌方案

内容的提问来源于stack exchange,提问作者gokul656

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:54:03