Gotenberg 介绍与选型指南

Gotenberg 认知与选型入口篇:基于 Chromium、LibreOffice 与多 PDF 引擎的无状态文档转换 API,含模块架构、功能清单、快速开始示例,以及与 wkhtmltopdf、WeasyPrint、unoconv 的量化选型对比。

GotenbergGotenbergPDF 处理文档转换2026/10/28

Gotenberg 介绍与选型指南

目标:本文是 Gotenberg 的认知与选型入口篇,讲清它「是什么、由什么组成、能做什么、适合谁用」,并与 wkhtmltopdf、WeasyPrint、unoconv 等同类工具做量化对比,帮助读者在文档转换技术选型时快速判断是否应采用 Gotenberg。本文全部信息来源于官方文档与官方仓库(来源与查询日期均已就地标注),未做本地部署实测;部署、配置与 API 实操见本专栏后续篇章。

一、环境信息

本章说明本文的信息来源与适用版本范围,便于读者判断内容时效性。

  • 软件名称:Gotenberg(官方仓库 gotenberg/gotenberg,官网 gotenberg.dev)
  • 查询日期:2026-10-28(本文全部版本号、星数、特性矩阵均以此日期实查为准)
  • 最新稳定版本:v8.39.0(来源:GitHub Releases,shields.io release 徽章实测显示 release: v8.39.0)
  • 主版本线:8.x(官方 Docker 标签 gotenberg/gotenberg:8 即跟随 8.x 最新稳定版)
  • 开源许可:MIT License(来源:仓库 LICENSE 文件,版权人 Julien Neuhart)
  • 社区热度:GitHub Stars 约 13k(来源:shields.io stars 徽章,2026-10-28 实查)
  • 本文性质:认知与选型篇,仅联网溯源,不含本地实测回显

💡 说明:Gotenberg 的名字来源于德国巴伐利亚州的哥廷根(Göttingen)风格的拼法组合,项目作者是法国工程师 Julien Neuhart,2018 年开源至今一直是该领域事实上的标准方案之一。版本线遵循语义化版本,8.x 为主版本线,升级在同一主版本内保持 API 兼容。

二、软件概述

本节回答「Gotenberg 到底是什么」,从一句话定位展开到它的产品形态与边界。

Gotenberg 的官方定义是:一个基于 Docker 的文档转换 API(a Docker-based API for converting documents to PDF,来源:官方简介,2026-10-28 查询)。调用方把文件或网页地址通过 multipart/form-data POST 给它,它返回转换后的 PDF——调用方不需要自己管理 Chromium、LibreOffice、字体、临时文件这些麻烦事。

它的核心特点可以概括为三条:

  1. 无状态 HTTP 服务:Gotenberg 自身不存储任何业务数据,每个请求独立处理、处理完即丢弃中间产物。这使它可以水平扩展——流量大了就多起几个实例放在负载均衡后面,彼此之间没有任何协调开销。
  2. 引擎全家桶集成:单个服务内集成了 Chromium(网页/HTML 渲染)、LibreOffice(Office 文档处理)与多套 PDF 引擎(qpdf、pdfcpu、pdftk、exiftool),调用方一个接口地址就能用到所有引擎能力。
  3. API 优先:没有 Web 管理界面,一切操作走 HTTP 接口,天然适合被其他后端服务调用,而不是被人直接操作。官方为十余种语言提供了客户端库(来源:Clients & SDKs,2026-10-28 查询)。

💡 说明:Gotenberg 官方明确建议「不要把它暴露到公网,要像对待数据库一样把它放在防火墙后面」(来源:官方安装文档)。它是内部基础设施组件而非面向终端用户的产品,这一认知对后续的安全部署很关键。

三、核心架构

本节拆解 Gotenberg 的模块构成,理解了模块划分,路由、配置参数与故障定位都会容易很多。

Gotenberg 使用 Go 语言编写,采用模块化架构,每个模块负责一类能力。根据启动日志的模块清单与官方配置文档(2026-10-28 查询),核心模块如下:

模块职责说明
apiHTTP 服务器HTTP/1 与 HTTP/2 (H2C) 服务,路由分发、超时控制、请求体大小限制、认证(Basic/OIDC)
chromium浏览器转换通过无头 Chromium 把 URL、HTML、Markdown 渲染为 PDF 或截图
libreofficeOffice 转换通过 LibreOffice(配合 unoconv 机制)把 docx/xlsx/pptx 等转为 PDF
pdfenginesPDF 操作汇聚 qpdf、pdfcpu、pdftk、exiftool 等引擎,提供合并/拆分/加密/水印/元数据/PDF-A 等能力
webhook异步回调收到带回调头的请求后先返回 204,转换完成后把结果 POST 到指定回调地址
prometheus指标暴露以固定间隔采集各模块指标,暴露 Prometheus 格式的监控端点

关键架构约束(来源:官方配置文档,2026-10-28 查询):

  • Chromium 并发上限为 6:单个 Gotenberg 实例内一个 Chromium 浏览器最多并行处理 6 个转换任务,超出的请求在队列中排队。高负载下官方建议的方式是横向增加 Gotenberg 实例,而不是调大并发。
  • LibreOffice 不支持并行:受锁机制限制,单个实例内 LibreOffice 的转换是串行的,队列机制与 Chromium 相同。这也是 Office 转换吞吐成为整个服务瓶颈的主要原因。
  • PDF 引擎可按功能选择:合并默认可用 qpdf/pdfcpu/pdftk 三种引擎,可通过配置参数指定每个功能使用哪个引擎及其优先顺序。

💡 技术拓展:文档转 PDF 的引擎选型本质上是「渲染引擎」之争,主流选项对比——

引擎原理优势局限
Chromium 无头浏览器完整浏览器渲染管线,打印为 PDF现代 CSS 全支持、可执行 JS、与浏览器显示效果一致内存开销大、单实例并发有限
LibreOffice办公套件的文档模型导出 PDFOffice 全格式覆盖串行转换、复杂排版与 Office 桌面端存在细微差异
Qt WebKit(wkhtmltopdf 所用)老一代 WebKit 内核轻量引擎陈旧、现代 CSS 支持差、项目已停止维护
CSS Paged Media(WeasyPrint)纯 Python 实现按 CSS 分页规范渲染@page 分页控制精细、纯库无浏览器依赖不执行 JavaScript、非浏览器渲染

Gotenberg 实际采用「Chromium + LibreOffice + 独立 PDF 引擎」的组合:网页类转换交给 Chromium 保证渲染保真度,Office 文档交给 LibreOffice 覆盖格式广度,PDF 后处理则由专门的 PDF 引擎承担,三类引擎通过统一的 multipart 表单 API 对外暴露。

四、功能特性

本节按「转换」与「PDF 操作」两条线梳理功能清单,全部条目来源于官方路由总览页(来源:Routes Overview,2026-10-28 查询)。

转换为 PDF(四条核心路由):

能力路由说明
网页转 PDF/forms/chromium/convert/url传入 URL,由 Chromium 渲染后输出 PDF
HTML 转 PDF/forms/chromium/convert/html上传 HTML 文件(文件名须为 index.html)及可选页眉页脚
Markdown 转 PDF/forms/chromium/convert/markdown上传 HTML 包装模板与 .md 文件,模板中以模板函数引用 Markdown
Office 文档转 PDF/forms/libreoffice/convert支持 docx/xlsx/pptx/odt 等 LibreOffice 兼容格式

截图与 PDF 操作(节选):

能力路由
网页截图(PNG/JPEG/WebP)/forms/chromium/screenshot/url 等
合并 PDF/forms/pdfengines/merge
拆分 PDF/forms/pdfengines/split
转 PDF/A 或 PDF/UA/forms/pdfengines/convert
读/写元数据/forms/pdfengines/metadata/read、/forms/pdfengines/metadata/write
读/写书签/forms/pdfengines/bookmarks/read、/forms/pdfengines/bookmarks/write
加密/forms/pdfengines/encrypt
水印/盖章/forms/pdfengines/watermark、/forms/pdfengines/stamp
旋转/扁平化/优化/forms/pdfengines/rotate、/forms/pdfengines/flatten、/forms/pdfengines/optimize
嵌入附件/forms/pdfengines/embed
Factur-X / ZUGFeRD 电子发票/forms/pdfengines/factur-x

系统能力:健康检查 /health、版本查询 /version、调试路由 /debug(默认关闭)、Prometheus 指标 /prometheus/metrics。

💡 说明:转换类路由接受「同一请求内混用多数 PDF 操作」——比如在 HTML 转 PDF 的同一个请求里顺带写入元数据、加密、加水印,不必再发第二次请求(来源:官方路由总览页的说明)。这能显著减少调用方的编排代码。

五、快速开始(最小可用示例)

本节给出零部署成本的最小可用示例:借助官方提供的在线演示服务体验一次完整的「URL 转 PDF」调用,感受 API 形态。演示服务地址为 demo.gotenberg.dev(来源:官方安装文档 Live Demo,2026-10-28 查询)。

# 调用官方在线演示服务,把示例发票网页转成 PDF
# (演示服务限速:每 IP 每秒 2 次请求、请求体上限 5MB,仅用于体验)
curl \
  --request POST https://demo.gotenberg.dev/forms/chromium/convert/url \
  --form url=https://sparksuite.github.io/simple-html-invoice-template/ \
  -o invoice.pdf

命令要点逐项说明:

  • --request POST:所有转换路由只接受 POST 方法;
  • --form url=...:以 multipart/form-data 表单字段传入目标网页地址;
  • -o invoice.pdf:响应体即 PDF 二进制流,直接落盘。

执行成功后当前目录会得到一个 invoice.pdf,用任意 PDF 阅读器打开即可看到渲染好的发票页面。想转自己的文件时,把表单换成文件字段(如 HTML 转换用 --form index.html=@你的文件.html)并改用 /forms/chromium/convert/html 路由即可。

💡 说明:自建服务的完整部署步骤(Compose 编排、端口规划、健康检查)见 《Gotenberg Docker Compose 部署实战》;全部转换与 PDF 操作路由的真实调用回显见 《Gotenberg 常用命令与运维实战(核心篇)》。

六、适用场景与限制

本节从「什么该用它」与「什么不该指望它」两面给出判断依据。

典型适用场景:

  1. 业务系统电子单据生成:发票、合同、对账单、报告的模板化 PDF 输出——模板即 HTML,前端设计师可以直接参与,浏览器渲染保证所见即所得。
  2. 文档归档与合规存证:把上传的 Office 文档统一转 PDF,并进一步转 PDF/A 长期归档格式(PDF/A 要求字体全嵌入、色彩配置内嵌,Gotenberg 的转换路由直接支持)。
  3. 文档流水线后处理:合并多个 PDF、拆分章节、加密、加水印、写元数据——这些散落在各家 CLI 工具里的能力被统一成一个 API。
  4. 异步大批量转换:利用 Webhook 机制把同步等待改为异步回调,配合队列化重试,适合报表批处理、夜间跑批等场景。
  5. 微服务架构中的独立转换服务:无状态特性使其天然适合放入 Kubernetes 等编排平台按流量伸缩(官方镜像以非 root 用户运行,支持 OpenShift 任意 UID)。

已知限制(来源:官方文档与仓库,2026-10-28 查询):

  • 单实例并发天花板固定:Chromium 最多 6 并发、LibreOffice 串行;提升吞吐的唯一官方推荐方式是多实例横向扩展。
  • LibreOffice 渲染与桌面端存在细微差异:复杂 Word 排版(艺术字、特殊版式)转换后可能有细节偏差,重要文档应逐份核对。
  • 资源占用不可忽视:集成 Chromium 与 LibreOffice 意味着镜像体积较大(官方 full 变体约 2GB 级),运行内存建议至少 512Mi 起(Kubernetes 场景官方建议值)。
  • 无 Web 管理界面:配置全部走命令行参数或环境变量,运营调整需要重启服务生效。
  • 安全边界靠调用方把守:它不做用户体系与业务鉴权(仅提供 Basic/OIDC 接入认证),必须部署在内网并由上层应用做访问控制。

七、同类选型对比

本节把 Gotenberg 放进「HTML/Office 转 PDF 工具」的坐标系中横向对比。对比对象均为主流开源方案:wkhtmltopdf(CLI 工具,WebKit 内核)、WeasyPrint(Python 库,CSS 分页渲染)、unoconv(CLI 工具,LibreOffice 封装)。星数来源均为 shields.io 徽章(2026-10-28 实查);wkhtmltopdf 已停止维护的信息来源于其官方仓库 README 的归档说明。

维度GotenbergwkhtmltopdfWeasyPrintunoconv
定位文档转换 API 服务器命令行 HTML→PDF 工具Python PDF 渲染库/CLI命令行 Office 转换工具
GitHub Stars约 13k约 15k约 9.7k约 2.7k
许可证MITLGPL-3.0BSD-3-ClauseGPL-2.0
渲染引擎Chromium + LibreOfficeQt WebKit(旧)自研 CSS Paged MediaLibreOffice
执行 JavaScript✅(浏览器级)❌(部分老式 JS 支持差)❌❌
现代 CSS(flex/grid)✅ 完整⚠️ 支持有限⚠️ 部分支持(分页属性强)不涉及(Office 格式)
Office 文档转换✅ docx/xlsx/pptx/odt 全覆盖❌❌✅(经 LibreOffice)
PDF 后处理(合并/加密/水印/PDF-A 等)✅ 内置十余种❌⚠️ 有限(PDF 表单/水印)❌
服务形态HTTP API,无状态可水平扩展单次进程调用库/CLI 单次调用CLI 单次调用
异步回调(Webhook)✅❌❌❌
官方容器镜像✅(三种变体)⚠️ 第三方❌(pip 安装)❌
维护状态活跃(8.x 持续发版)已归档停止维护(2023 年官方 README 宣布)活跃低频维护

关键差异与选型建议:

  • 需要「服务化 + 全家桶」(微服务里给多个上游提供转换能力、Office 与网页通吃、还要 PDF 后处理)→ 选 Gotenberg,它是唯一把转换与 PDF 操作做成统一无状态 API 的方案。
  • 只需在脚本里一次性把 HTML 转 PDF、追求极简(无服务化诉求)→ wkhtmltopdf 曾是经典答案但已停更,新项目不建议再引入;可改用 Gotenberg 或 WeasyPrint。
  • 重排版控制、Python 技术栈、内容不含 JS(如报告排版、书籍分页)→ WeasyPrint 的 CSS 分页能力最精细,且以库形态嵌入应用更轻。
  • 只是偶尔把一批 Office 文档转 PDF、可接受命令行→ unoconv/LibreOffice 直接转换即可,无需部署服务;但生产高并发场景仍建议 Gotenberg(它内部同样走 LibreOffice,但解决了队列、并发与远程调用问题)。

💡 说明:Gotenberg 与 unoconv 的关系并非竞争——Gotenberg 的 LibreOffice 转换正是借鉴 unoconv 的机制实现的(来源:官方配置文档 LibreOffice 章节,2026-10-28 查询)。可以理解为:Gotenberg 把 unoconv 这类单机 CLI 的能力「服务化、容器化、可伸缩化」了。

八、参考链接

本章汇总本文引用过的官方与社区资料,便于溯源核对。

  1. Gotenberg 官方网站:https://gotenberg.dev
  2. 官方简介(What is Gotenberg?):https://gotenberg.dev/docs/getting-started/introduction
  3. 官方安装文档(镜像变体/部署形态):https://gotenberg.dev/docs/getting-started/installation
  4. 官方路由总览:https://gotenberg.dev/docs/getting-started/routes
  5. 官方配置文档(命令行参数与环境变量):https://gotenberg.dev/docs/configuration
  6. Webhook 与远程下载文档:https://gotenberg.dev/docs/webhook-download
  7. GitHub 仓库:https://github.com/gotenberg/gotenberg
  8. 客户端与 SDK 列表:https://gotenberg.dev/docs/getting-started/clients
  9. 在线演示服务:https://demo.gotenberg.dev
  10. 版本与星数取证:shields.io 徽章(release: v8.39.0、stars: 13k,查询日期 2026-10-28)