
Go client for Gotenberg — document conversion service supporting Chromium, LibreOffice, and PDF manipulation engines.
go get github.com/nativebpm/gotenbergFeatures
Chromium: Convert URLs, HTML, and Markdown to PDF
LibreOffice: Convert Office documents (Word, Excel, PowerPoint) to PDF
PDF Engines: Merge, split, and manipulate PDFs
Webhook support: Async conversions with callback URLs
Stream-first: Built on
httpstreamfor efficient multipart uploads
Conversion Engines
Chromium
Convert web content to PDF:
URL → PDF
HTML file → PDF
Markdown → PDF
Supports:
Custom page properties (size, margins, orientation)
Headers & footers with page numbers
Wait strategies (delay, JavaScript expression)
Cookies & custom HTTP headers
Emulated media types (screen/print)
LibreOffice
Convert Office documents:
Word (.docx, .doc) → PDF
Excel (.xlsx, .xls) → PDF
PowerPoint (.pptx, .ppt) → PDF
OpenDocument formats → PDF
PDF Engines
PDF operations:
Merge multiple PDFs
Split pages
Convert images to PDF
Webhook Mode
Async conversions with callbacks:
Returns
204 No ContentimmediatelyUploads result to webhook URL in background
Separate error callback URL
Custom HTTP headers for callbacks
See Gotenberg webhook docs for details.
docker run \
-p 3000:3000 \
--name gotenberg \
--add-host="host.docker.internal:host-gateway" \
gotenberg/gotenberg:8package main
import (
"context"
"io"
"log"
"net/http"
"os"
"time"
"github.com/nativebpm/gotenberg"
)
func main() {
client, err := gotenberg.NewClient(&http.Client{}, "http://localhost:3000")
if err != nil {
log.Fatal(err)
}
// Convert web page from URL to PDF
resp, err := client.
Chromium().
ConvertURL(context.Background(), "https://gotenberg.dev/docs/getting-started/introduction").
PaperSizeA4().
Margins(1, 1, 1, 1).
PrintBackground().
Timeout(30 * time.Second).
Send()
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
f, err := os.Create("converturl-chromium.pdf")
if err != nil {
log.Fatal(err)
}
defer f.Close()
_, err = io.Copy(f, resp.Body)
if err != nil {
log.Fatal(err)
}
log.Println("PDF generated from URL: converturl-chromium.pdf")
}package main
import (
"context"
"io"
"log"
"net/http"
"os"
"strings"
"github.com/nativebpm/gotenberg"
)
func main() {
client, err := gotenberg.NewClient(&http.Client{}, "http://localhost:3000")
if err != nil {
log.Fatal(err)
}
html := strings.NewReader("<html><body><h1>Hello World!</h1></body></html>")
resp, err := client.Chromium().
ConvertHTML(context.Background(), html).
PaperSizeA6().
Margins(0.5, 0.5, 0.5, 0.5).
Send()
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
f, _ := os.Create("out.pdf")
io.Copy(f, resp.Body)
f.Close()
}