Go PDF Generation SDK
The official cloudlayerio-go package provides Go PDF generation with context support and zero external dependencies. Convert HTML to PDF, capture URLs as documents, and render templates — using only the Go standard library.
- Go Package: github.com/cloudlayerio/cloudlayerio-go
- Source Code: github.com/cloudlayerio/cloudlayerio-go
Installation
go get github.com/cloudlayerio/cloudlayerio-go
Requirements: Go 1.21+, zero external dependencies
Setup
Get your API key by creating a free account at cloudlayer.io. Your account comes with free API credits for testing.
import cloudlayer "github.com/cloudlayerio/cloudlayerio-go"
client, err := cloudlayer.NewClient("YOUR-API-KEY", cloudlayer.V2)
The SDK requires you to choose an API version:
| v1 | v2 | |
|---|---|---|
| Default mode | Synchronous (returns binary) | Asynchronous (returns Job) |
| Sync response | Raw binary (PDF/image bytes) | JSON Job object |
| Binary access | Direct from result.Data | Via DownloadJobResult() |
URL to PDF
v2 (recommended)
v2 returns a Job object. Use DownloadJobResult() to get the binary:
result, err := client.URLToPDF(ctx, &cloudlayer.URLToPDFOptions{
URLOptions: cloudlayer.URLOptions{
URL: cloudlayer.StringPtr("https://example.com"),
},
})
if err != nil {
log.Fatal(err)
}
// Wait for the job to complete
job, err := client.WaitForJob(ctx, result.Job.ID)
if err != nil {
log.Fatal(err)
}
// Download the PDF binary
data, err := client.DownloadJobResult(ctx, job)
if err != nil {
log.Fatal(err)
}
os.WriteFile("output.pdf", data, 0644)
v1 (legacy)
v1 returns raw binary directly:
client, _ := cloudlayer.NewClient("YOUR-API-KEY", cloudlayer.V1)
result, err := client.URLToPDF(ctx, &cloudlayer.URLToPDFOptions{
URLOptions: cloudlayer.URLOptions{
URL: cloudlayer.StringPtr("https://example.com"),
},
})
if err != nil {
log.Fatal(err)
}
os.WriteFile("output.pdf", result.Data, 0644)
HTML to PDF
result, err := client.HTMLToPDF(ctx, &cloudlayer.HTMLToPDFOptions{
HTMLOptions: cloudlayer.HTMLOptions{
HTML: cloudlayer.EncodeHTML("<h1>Hello World</h1><p>Generated by cloudlayer.io</p>"),
},
PDFOptions: cloudlayer.PDFOptions{
Format: &cloudlayer.FormatA4,
PrintBackground: cloudlayer.BoolPtr(true),
},
})
Template to PDF
result, err := client.TemplateToPDF(ctx, &cloudlayer.TemplateToPDFOptions{
TemplateOptions: cloudlayer.TemplateOptions{
TemplateID: cloudlayer.StringPtr("professional-invoice"),
Data: map[string]interface{}{
"invoiceNumber": "INV-2024-001",
"companyName": "Acme Corp",
"items": []map[string]interface{}{
{"name": "Widget A", "quantity": 10, "price": 25.00},
},
"total": 250.00,
},
},
})
Error Handling
All errors are concrete types supporting errors.As:
result, err := client.HTMLToPDF(ctx, opts)
if err != nil {
var authErr *cloudlayer.AuthError
if errors.As(err, &authErr) {
log.Fatal("Invalid API key")
}
var rateLimitErr *cloudlayer.RateLimitError
if errors.As(err, &rateLimitErr) {
log.Printf("Rate limited, retry after %ds", *rateLimitErr.RetryAfter)
}
log.Fatal(err)
}
| Error Type | When |
|---|---|
*AuthError | Invalid or missing API key (401/403) |
*RateLimitError | Rate limit exceeded (429) |
*APIError | Other API errors |
*ValidationError | Invalid input parameters |
*NetworkError | Connection failures |
All Conversion Methods
| Method | Description |
|---|---|
URLToPDF() | Convert a URL to PDF |
URLToImage() | Screenshot a URL |
HTMLToPDF() | Convert HTML to PDF |
HTMLToImage() | Convert HTML to image |
TemplateToPDF() | Render template as PDF |
TemplateToImage() | Render template as image |
DOCXToPDF() | Convert DOCX to PDF |
DOCXToHTML() | Convert DOCX to HTML |
PDFToDOCX() | Convert PDF to DOCX |
MergePDFs() | Merge multiple PDFs |
Data Management
// List recent jobs
jobs, _ := client.ListJobs(ctx)
// Get account usage
account, _ := client.GetAccount(ctx)
// Configure custom storage
client.AddStorage(ctx, &cloudlayer.StorageParams{
Title: "My S3 Bucket",
Bucket: "my-pdfs",
Region: "us-east-1",
AccessKeyID: "AKIA...",
SecretAccessKey: "...",
})