PDF to HTML Go Examples
Complete Go examples for common PDF to HTML tasks. See the Go SDK guide for installation and result handling.
You can run the examples below with the displayed API credentials. Update the input URLs and filenames as needed. Each Go example can be copied and run independently.
Basic examples
Choose file, in-memory, or output-stream handling for the HTML result. Stream examples use a binary file stream as their destination.
The memory variants return UTF-8 bytes. Decode them when your application needs a text string.
Convert a PDF file
Upload an existing logo.pdf file.
Save to a file
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") err := client.ConvertFileToFile("logo.pdf", "logo.html") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Keep in memory
package main import ( "log" "fmt" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") html_bytes, err := client.ConvertFile("logo.pdf") // []byte checkError(err) fmt.Println(len(html_bytes)) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Write to a stream
package main import ( "log" "os" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") output_stream, err := os.Create("logo.html") checkError(err) err = client.ConvertFileToStream("logo.pdf", output_stream) closeErr := output_stream.Close() checkError(err) checkError(closeErr) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Convert a URL
Fetch a PDF from its URL.
Save to a file
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") err := client.ConvertUrlToFile( "https://your-server.com/invoice.pdf", "invoice.html", ) checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Keep in memory
package main import ( "log" "fmt" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") html_bytes, err := client.ConvertUrl("https://your-server.com/invoice.pdf") // []byte checkError(err) fmt.Println(len(html_bytes)) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Write to a stream
package main import ( "log" "os" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") output_stream, err := os.Create("invoice.html") checkError(err) err = client.ConvertUrlToStream( "https://your-server.com/invoice.pdf", output_stream, ) closeErr := output_stream.Close() checkError(err) checkError(closeErr) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Convert raw PDF bytes
Read logo.pdf as binary data. In an application, pass the bytes you already hold in memory instead.
Save to a file
package main import ( "log" "os" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") pdf_data_1, err := os.ReadFile("logo.pdf") // []byte checkError(err) err = client.ConvertRawDataToFile(pdf_data_1, "logo.html") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Keep in memory
package main import ( "log" "os" "fmt" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") pdf_data_1, err := os.ReadFile("logo.pdf") // []byte checkError(err) html_bytes, err := client.ConvertRawData(pdf_data_1) // []byte checkError(err) fmt.Println(len(html_bytes)) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Write to a stream
package main import ( "log" "os" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") pdf_data_1, err := os.ReadFile("logo.pdf") // []byte checkError(err) output_stream, err := os.Create("logo.html") checkError(err) err = client.ConvertRawDataToStream(pdf_data_1, output_stream) closeErr := output_stream.Close() checkError(err) checkError(closeErr) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Read from an input stream
Open logo.pdf as a binary input stream and save the result to logo.html.
package main import ( "log" "os" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") input_stream, err := os.Open("logo.pdf") checkError(err) err = client.ConvertStreamToFile(input_stream, "logo.html") closeErr := input_stream.Close() checkError(err) checkError(closeErr) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Customize the HTML output
These examples upload report.pdf, a document with text, images, and vector graphics.
Convert selected pages
Convert pages 1 and 3 of report.pdf into excerpt.html.
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") client.SetPrintPageRange("1,3") err := client.ConvertFileToFile("report.pdf", "excerpt.html") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Export HTML with separate assets
Save the HTML, stylesheets, fonts, and images in report.zip. Extract the archive and serve its HTML with the accompanying files, preserving their relative paths.
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") client.SetCssMode("separate") client.SetFontMode("separate") client.SetForceZip(true) client.SetImageMode("separate") err := client.ConvertFileToFile("report.pdf", "report.zip") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Customize the document preview
Scale pages to 75% and change the background, page spacing, and corners in preview.html. Use !important to override the generated background and margin rules.
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") client.SetCustomCss( "#page-container { background: #eaf0f6 !important; } .page { margin: 24px auto !important; border-radius: 8px; }", ) client.SetScaleFactor(75) err := client.ConvertFileToFile("report.pdf", "preview.html") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Avoid naming conflicts
Prefix generated IDs, CSS classes, and font names with report_ in namespaced.html. This helps avoid naming conflicts when integrating the converted content into another page; adjust the surrounding layout separately.
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") client.SetHtmlNamespace("report_") err := client.ConvertFileToFile("report.pdf", "namespaced.html") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Reduce image resolution
Render page graphics at 72 DPI instead of the default 144 DPI and save smaller.html. Lower resolution can reduce file size at the cost of image detail; text remains HTML text.
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") client.SetDpi(72) err := client.ConvertFileToFile("report.pdf", "smaller.html") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Preserve vector graphics with SVG
Use SVG for page graphics in vector.html, preserving vector shapes when zooming. Raster images in the PDF remain raster images within the SVG.
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToHtmlClient("demo", "demo") client.SetImageFormat("svg") err := client.ConvertFileToFile("report.pdf", "vector.html") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }