PDF to Text Go Examples
Complete Go examples for common PDF to Text 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 text 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 invoice.pdf file.
Save to a file
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") err := client.ConvertFileToFile("invoice.pdf", "invoice.txt") 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.NewPdfToTextClient("demo", "demo") text_bytes, err := client.ConvertFile("invoice.pdf") // []byte checkError(err) fmt.Println(len(text_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.NewPdfToTextClient("demo", "demo") output_stream, err := os.Create("invoice.txt") checkError(err) err = client.ConvertFileToStream("invoice.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.NewPdfToTextClient("demo", "demo") err := client.ConvertUrlToFile( "https://your-server.com/invoice.pdf", "invoice.txt", ) 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.NewPdfToTextClient("demo", "demo") text_bytes, err := client.ConvertUrl("https://your-server.com/invoice.pdf") // []byte checkError(err) fmt.Println(len(text_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.NewPdfToTextClient("demo", "demo") output_stream, err := os.Create("invoice.txt") 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 invoice.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.NewPdfToTextClient("demo", "demo") pdf_data_1, err := os.ReadFile("invoice.pdf") // []byte checkError(err) err = client.ConvertRawDataToFile(pdf_data_1, "invoice.txt") 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.NewPdfToTextClient("demo", "demo") pdf_data_1, err := os.ReadFile("invoice.pdf") // []byte checkError(err) text_bytes, err := client.ConvertRawData(pdf_data_1) // []byte checkError(err) fmt.Println(len(text_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.NewPdfToTextClient("demo", "demo") pdf_data_1, err := os.ReadFile("invoice.pdf") // []byte checkError(err) output_stream, err := os.Create("invoice.txt") 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 invoice.pdf as a binary input stream and save the result to invoice.txt.
package main import ( "log" "os" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") input_stream, err := os.Open("invoice.pdf") checkError(err) err = client.ConvertStreamToFile(input_stream, "invoice.txt") closeErr := input_stream.Close() checkError(err) checkError(closeErr) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Decode extracted text
Convert a PDF URL, decode the returned bytes as UTF-8, and print the resulting string.
package main import ( "fmt" "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") text_bytes, err := client.ConvertUrl("https://your-server.com/invoice.pdf") // []byte checkError(err) text := string(text_bytes) fmt.Println(text) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Customize text extraction
These examples upload extraction.pdf, a three-page document with a two-column article, wrapped paragraphs, and invoice fields.
Extract selected pages
Extract pages 1 and 3 of extraction.pdf into excerpt.txt.
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") client.SetPrintPageRange("1,3") err := client.ConvertFileToFile("extraction.pdf", "excerpt.txt") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Extract text without layout spacing
Extract the article on page 1 into article.txt without spacing that recreates the PDF's columns. For tables, the default layout mode usually preserves column alignment better.
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") client.SetNoLayout(true) client.SetPrintPageRange("1") err := client.ConvertFileToFile("extraction.pdf", "article.txt") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Reconstruct wrapped paragraphs
Extract page 2 into paragraphs.txt, joining wrapped lines with paragraph detection and removing line-end hyphens. For example, infor- followed by mation becomes information. Paragraph detection depends on the document's layout.
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") client.SetParagraphMode("bounding-box") client.SetPrintPageRange("2") client.SetRemoveHyphenation(true) err := client.ConvertFileToFile("extraction.pdf", "paragraphs.txt") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Extract text from a page region
Crop away the headers and footers on every page, or extract only the customer, invoice, and reference fields on page 3.
The coordinates below match a 612 × 792 point (US Letter) page. Measure X and Y from the top-left corner; 72 points equal one inch. Adjust the regions for your PDF.
Exclude headers and footers
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") client.SetCropAreaHeight(648) client.SetCropAreaWidth(540) client.SetCropAreaX(36) client.SetCropAreaY(72) err := client.ConvertFileToFile("extraction.pdf", "body.txt") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Extract an invoice field block
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") client.SetCropAreaHeight(70) client.SetCropAreaWidth(300) client.SetCropAreaX(36) client.SetCropAreaY(290) client.SetPrintPageRange("3") err := client.ConvertFileToFile("extraction.pdf", "fields.txt") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Keep page boundaries
The default output has no page separators. Insert form-feed characters (\f) for processing text by page, or add a visible --- PAGE BREAK --- marker on its own line.
Use form-feed separators
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") client.SetPageBreakMode("default") err := client.ConvertFileToFile("extraction.pdf", "pages.txt") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }
Use visible separators
package main import ( "log" "github.com/pdfcrowd/pdfcrowd-go" ) func main() { client := pdfcrowd.NewPdfToTextClient("demo", "demo") client.SetCustomPageBreak(` --- PAGE BREAK --- `) client.SetPageBreakMode("custom") err := client.ConvertFileToFile("extraction.pdf", "separated.txt") checkError(err) } func checkError(err error) { if err != nil { log.Fatal(err) } }