PDF to PDF Go Examples

Complete Go examples for common PDF to PDF 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.

Merging

Add PDFs in the order they should appear in the merged document. Choose file, in-memory, or output-stream handling for the result. The stream example uses a binary file stream as its destination.

Merge PDF files

Merge first.pdf and second.pdf in that order.

Save to a file

package main

import (
    "log"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    client.AddPdfFile("first.pdf")
    client.AddPdfFile("second.pdf")
    err := client.ConvertToFile("merged.pdf")
    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.NewPdfToPdfClient("demo", "demo")

    client.AddPdfFile("first.pdf")
    client.AddPdfFile("second.pdf")
    pdf, err := client.Convert() // []byte
    checkError(err)
    fmt.Println(len(pdf))
}

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.NewPdfToPdfClient("demo", "demo")

    client.AddPdfFile("first.pdf")
    client.AddPdfFile("second.pdf")
    output_stream, err := os.Create("merged.pdf")
    checkError(err)
    err = client.ConvertToStream(output_stream)
    closeErr := output_stream.Close()
    checkError(err)
    checkError(closeErr)
}

func checkError(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

Merge raw PDF bytes

Read first.pdf and second.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.NewPdfToPdfClient("demo", "demo")

    pdf_data_1, err := os.ReadFile("first.pdf") // []byte
    checkError(err)
    pdf_data_2, err := os.ReadFile("second.pdf") // []byte
    checkError(err)
    client.AddPdfRawData(pdf_data_1)
    client.AddPdfRawData(pdf_data_2)
    err = client.ConvertToFile("merged.pdf")
    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.NewPdfToPdfClient("demo", "demo")

    pdf_data_1, err := os.ReadFile("first.pdf") // []byte
    checkError(err)
    pdf_data_2, err := os.ReadFile("second.pdf") // []byte
    checkError(err)
    client.AddPdfRawData(pdf_data_1)
    client.AddPdfRawData(pdf_data_2)
    pdf, err := client.Convert() // []byte
    checkError(err)
    fmt.Println(len(pdf))
}

func checkError(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

Merge bytes with a file

Add the bytes from first.pdf, followed by second.pdf, and save the result to merged.pdf.

package main

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

func main() {
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    pdf_data_1, err := os.ReadFile("first.pdf") // []byte
    checkError(err)
    client.AddPdfRawData(pdf_data_1)
    client.AddPdfFile("second.pdf")
    err = client.ConvertToFile("merged.pdf")
    checkError(err)
}

func checkError(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

PDF operations

Add a watermark

Apply watermark.pdf to proposal.pdf and save company_offer.pdf.

package main

import (
    "log"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    client.SetPageWatermark("watermark.pdf")
    client.AddPdfFile("proposal.pdf")
    err := client.ConvertToFile("company_offer.pdf")
    checkError(err)
}

func checkError(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

Linearize a PDF

Optimize not_linearized.pdf for progressive loading in a browser and save it as linearized.pdf.

package main

import (
    "log"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    client.SetLinearize(true)
    client.AddPdfFile("not_linearized.pdf")
    err := client.ConvertToFile("linearized.pdf")
    checkError(err)
}

func checkError(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

Extract pages

Extract page 3 and pages 7 through the end of 13_pages.pdf into output.pdf.

package main

import (
    "log"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    client.SetAction("extract")
    client.SetPageRange("3,7-")
    client.AddPdfFile("13_pages.pdf")
    err := client.ConvertToFile("output.pdf")
    checkError(err)
}

func checkError(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

Delete pages

Remove pages 1–3 and page 10 from 13_pages.pdf and save the remaining pages to output.pdf.

package main

import (
    "log"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    client.SetAction("delete")
    client.SetPageRange("1-3,10")
    client.AddPdfFile("13_pages.pdf")
    err := client.ConvertToFile("output.pdf")
    checkError(err)
}

func checkError(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

Split a PDF

Split 13_pages.pdf into two documents: pages 1–10 in pages1-10.pdf, and the remaining pages in pages11-end.pdf.

package main

import (
    "log"
    "github.com/pdfcrowd/pdfcrowd-go"
)

func main() {
    client := pdfcrowd.NewPdfToPdfClient("demo", "demo")

    client.AddPdfFile("13_pages.pdf")
    client.SetAction("extract")
    client.SetPageRange("1-10")
    err := client.ConvertToFile("pages1-10.pdf")
    checkError(err)
    client.SetPageRange("11-")
    err = client.ConvertToFile("pages11-end.pdf")
    checkError(err)
}

func checkError(err error) {
    if err != nil {
        log.Fatal(err)
    }
}