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

如何在Golang本地localhost网页中展示生成的PDF?

解决方案

你的代码有俩关键问题得先修好,才能让浏览器正确展示生成的PDF:

1. 补全bufWriter的Write方法

你自定义的bufWriter没实现io.Writer接口的Write方法,PDF根本没法写入缓冲区。得加上这个方法:

func (b *bufWriter) Write(p []byte) (int, error) {
    b.buf = append(b.buf, p...)
    return len(p), nil
}

2. 正确设置响应头并输出PDF

生成PDF后,得告诉浏览器这是个PDF文件,再把缓冲区里的内容输出给响应。把// Show the pdf on localhost web page.后面的代码调整如下:

首先要声明err变量(你原代码没声明,编译会报错),然后设置响应头,最后写入内容。修改后的完整generatePDF函数:

func generatePDF(w http.ResponseWriter, r *http.Request) {
    pw := new(bufWriter)
    pdf := gofpdf.New("P", "mm", "A4", "")
    fontsize := 12.0

    font := "Arial"

    pdf.SetFont("Arial", "", 6)

    pdf.AddPage()
    pdf.SetMargins(5, 5, 5)
    pdf.SetAutoPageBreak(true, 34)

    pdf.SetFont(font, "B", fontsize)

    pdf.MultiCell(0, 8, "TERMS OF LIVING", "", "C", false)
    pdf.MultiCell(0, 8, "Terms", "", "C", false)

    // Show the pdf on localhost web page.
    err := pdf.OutputAndClose(pw) // 声明err变量
    if err != nil {
        fmt.Println(err)
        http.Error(w, "生成PDF失败", http.StatusInternalServerError) // 给客户端返回错误提示
        return
    }

    // 设置响应头,告诉浏览器这是PDF类型文件
    w.Header().Set("Content-Type", "application/pdf")
    // 让浏览器直接展示PDF而非触发下载(可选,去掉则默认下载)
    w.Header().Set("Content-Disposition", "inline; filename=terms.pdf")
    // 设置内容长度,帮助浏览器优化加载
    w.Header().Set("Content-Length", fmt.Sprintf("%d", len(pw.buf)))

    // 将PDF内容写入HTTP响应
    _, err = w.Write(pw.buf)
    if err != nil {
        fmt.Println("写入PDF响应失败:", err)
        http.Error(w, "提供PDF失败", http.StatusInternalServerError)
        return
    }

    fmt.Println("PDF已成功提供")
}

3. 完整的bufWriter实现

把Write方法放在bufWriter结构体定义的下方(所有函数外部):

type bufWriter struct {
    buf []byte
}

func (b *bufWriter) Write(p []byte) (int, error) {
    b.buf = append(b.buf, p...)
    return len(p), nil
}

改完之后,启动服务器访问http://localhost:3333/pdf,浏览器就会直接渲染生成的PDF。每次修改PDF生成逻辑后,刷新页面就能看到最新效果,实现实时查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:50:29