PDF to PDF Go Examples

These examples demonstrate common PDF to PDF API workflows in Go.


Basic examples

Multiple PDFs to PDF file

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.AddPdfFile("/path/to/cover.pdf")
    client.AddPdfFile("/path/to/proposal.pdf")
    client.AddPdfFile("/path/to/price.pdf")
    client.AddPdfFile("/path/to/contact.pdf")

    // Run the conversion and save the result to a file.
    err := client.ConvertToFile("offer.pdf")

    // Check for the conversion error.
    handleError(err)
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

Multiple PDFs to in-memory PDF

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.AddPdfFile("/path/to/cover.pdf")
    client.AddPdfFile("/path/to/proposal.pdf")
    client.AddPdfFile("/path/to/price.pdf")
    client.AddPdfFile("/path/to/contact.pdf")

    // Run the conversion and store the result in the `pdf` variable.
    pdf, err := client.Convert()

    // Check for the conversion error.
    handleError(err)

    // at this point the "pdf" variable contains PDF raw data and
    // can be sent in an HTTP response, saved to a file, etc.
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

Multiple PDFs to PDF stream

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.AddPdfFile("/path/to/cover.pdf")
    client.AddPdfFile("/path/to/proposal.pdf")
    client.AddPdfFile("/path/to/price.pdf")
    client.AddPdfFile("/path/to/contact.pdf")

    // Create an output stream for the conversion result
    outputStream, err := os.Create("offer.pdf")

    // Check for a file creation error.
    handleError(err)

    // Close the output stream.
    defer outputStream.Close()

    // run the conversion and write the result to the output stream.
    err = client.ConvertToStream(outputStream)

    // Check for the conversion error.
    handleError(err)
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

Multiple in-memory PDFs to PDF file

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
    "io/ioutil"
)

func readFile(fileName string) []byte {
    content, err := ioutil.ReadFile(fileName)
    handleError(err)
    return content
}

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.AddPdfRawData(readFile("/path/to/cover.pdf"))
    client.AddPdfRawData(readFile("/path/to/proposal.pdf"))
    client.AddPdfRawData(readFile("/path/to/price.pdf"))
    client.AddPdfRawData(readFile("/path/to/contact.pdf"))

    // Run the conversion and save the result to a file.
    err := client.ConvertToFile("offer.pdf")

    // Check for the conversion error.
    handleError(err)
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

Join 2 in-memory PDFs together with 2 local PDF files to PDF file

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
    "io/ioutil"
)

func readFile(fileName string) []byte {
    content, err := ioutil.ReadFile(fileName)
    handleError(err)
    return content
}

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.AddPdfRawData(readFile("/path/to/cover.pdf"))
    client.AddPdfFile("/path/to/proposal.pdf")
    client.AddPdfRawData(readFile("/path/to/price.pdf"))
    client.AddPdfFile("/path/to/contact.pdf")

    // Run the conversion and save the result to a file.
    err := client.ConvertToFile("offer.pdf")

    // Check for the conversion error.
    handleError(err)
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

Watermark a PDF file

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.AddPdfFile("/path/to/proposal.pdf")
    client.SetPageWatermark("/path/to/watermark.pdf")

    // Run the conversion and save the result to a file.
    err := client.ConvertToFile("company_offer.pdf")

    // Check for the conversion error.
    handleError(err)
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

Linearize a PDF file

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.AddPdfFile("/path/to/not_linearized.pdf")
    client.SetLinearize(true)

    // Run the conversion and save the result to a file.
    err := client.ConvertToFile("linearized.pdf")

    // Check for the conversion error.
    handleError(err)
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

Get info about the current conversion

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
    "io/ioutil"
)

func readFile(fileName string) []byte {
    content, err := ioutil.ReadFile(fileName)
    handleError(err)
    return content
}

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.SetDebugLog(true)
    client.AddPdfRawData(readFile("/path/to/cover.pdf"))
    client.AddPdfRawData(readFile("/path/to/proposal.pdf"))

    // Run the conversion and save the result to a file.
    err := client.ConvertToFile("offer.pdf")

    // Check for the conversion error.
    handleError(err)
    
    // print URL pointing to the debug log for this request.
    fmt.Println("Debug log url:", client.GetDebugLogUrl())
    
    // print number of conversion credits remaining in your account.
    fmt.Println("Remaining credit count:", client.GetRemainingCreditCount())
    
    // print number of credits consumed for this conversion.
    fmt.Println("Consumed credit count:", client.GetConsumedCreditCount())
    
    // print unique identifier assigned to this conversion job.
    fmt.Println("Job id:", client.GetJobId())
    
    // print total number of pages in the output document.
    fmt.Println("Page count:", client.GetPageCount())
    
    // print size of the output data in bytes.
    fmt.Println("Output size:", client.GetOutputSize())
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

PDF manipulation examples

Extract page 3 and all pages from 7 to the end from the PDF file

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.AddPdfFile("/your-path-to/pdfs/13_pages.pdf")
    client.SetAction("extract")
    client.SetPageRange("3,7-")

    // Run the conversion and save the result to a file.
    err := client.ConvertToFile("output.pdf")

    // Check for the conversion error.
    handleError(err)
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

Delete the first 3 pages and the 10th page from the PDF file

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    // Create an API client instance.
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    // Configure the conversion.
    client.AddPdfFile("/your-path-to/pdfs/13_pages.pdf")
    client.SetAction("delete")
    client.SetPageRange("1-3,10")

    // Run the conversion and save the result to a file.
    err := client.ConvertToFile("output.pdf")

    // Check for the conversion error.
    handleError(err)
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}

Split the PDF file into two separate files at the 10th page

package main

import (
    "os"
    "fmt"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")
    client.AddPdfFile("/your-path-to/pdfs/13_pages.pdf")
    client.SetAction("extract")
    client.SetPageRange("1-10")
    client.ConvertToFile("pages1-10.pdf")
    client.SetPageRange("11-")
    err := client.ConvertToFile("pages11-end.pdf")
    handleError(err)
}

func handleError(err error) {
    if err != nil {
        why, ok := err.(pdfcrowd.Error)
        if ok {
            os.Stderr.WriteString(fmt.Sprintf("PDFCrowd Error: %s\n", why))
        } else {
            os.Stderr.WriteString(fmt.Sprintf("Generic Error: %s\n", err))
        }

        panic(err.Error())
    }
}