Skip to content
Golang PDF library for creating and processing PDF files (pure go)
Branch: master
Clone or download

Latest commit

gunnsth Merge pull request #363 from gunnsth/release/v3.7.1
Prepare unipdf release v3.7.1
Latest commit f99c0cd May 26, 2020


Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Stop greeting on PRs as does not work with Actions Mar 9, 2020
.travis Optimizer fix for the CCITTFax Encoder. ISS #243. Fixes JBIG2 i386 ar… Apr 8, 2020
annotator Account for inverted annotation rects when calculation appearance bou… May 20, 2020
common Update version.go May 25, 2020
contentstream Double quote content stream operator fixes (#313) Apr 16, 2020
core Prevent panics (#305) Apr 14, 2020
creator Use page indirect object for internal outline destinations (#359) May 22, 2020
extractor Merge remote-tracking branch 'upstream/development' into release/v3.7.1 May 25, 2020
fdf Address comments on PR Jan 6, 2020
fjson Form fill fixes (#328) Apr 24, 2020
internal Subsetting fixes (#346) May 12, 2020
model Use page indirect object for internal outline destinations (#359) May 22, 2020
ps Address comments on PR Jan 6, 2020
render Double quote content stream operator fixes (#313) Apr 16, 2020
.gitattributes Merge Nov 1, 2018
.gitignore Fix fuzzy problems with crossrefs and add a recursive loop guard in r… Jul 21, 2017
.travis.yml Update .travis.yml Apr 7, 2020 JBIG2 Generic Encoder (#264) Mar 27, 2020 Create Jun 15, 2017 unipdf move updates (#6) May 19, 2019
Gopkg.lock Update go dep file (#100) Jun 25, 2019
Gopkg.toml list dependencies for dep and go modules Nov 28, 2018
Jenkinsfile Adapt Jenkins file to use the examples development branch Sep 7, 2019
LICENSE.AGPL unipdf move updates (#6) May 19, 2019
LICENSE.COMMERCIAL unipdf move updates (#6) May 19, 2019 unipdf move updates (#6) May 19, 2019 Merge pull request #186 from ribice/patch-1 Oct 14, 2019
codecov.yml Update codecov.yml Jan 28, 2019
doc.go unipdf move updates (#6) May 19, 2019
go.mod Prepare release v3.7.1 May 25, 2020
go.sum Prepare release v3.7.1 May 25, 2020
wercker.yml unipdf move updates (#6) May 19, 2019

UniPDF - PDF for Go

UniDoc's UniPDF (formerly unidoc) is a PDF library for Go (golang) with capabilities for creating and reading, processing PDF files. The library is written and supported by, where the library is used to power many of its services.

Build Status GitHub (pre-)release License: AGPL v3 Go Report Card GoDoc


Multiple examples are provided in our example repository

Contact us if you need any specific examples.


With modules:

go get


go get

How can I convince myself and my boss to buy unipdf rather using a free alternative?

The choice is yours. There are multiple respectable efforts out there that can do many good things.

In UniDoc, we work hard to provide production quality builds taking every detail into consideration and providing excellent support to our customers. See our testimonials for example.

Security. We take security very seriously and we restrict access to repository with protected branches and only the founders have access and every commit is reviewed prior to being accepted.

The profits are invested back into making unipdf better. We want to make the best possible product and in order to do that we need the best people to contribute. A large fraction of the profits made goes back into developing unipdf. That way we have been able to get many excellent people to work and contribute to unipdf that would not be able to contribute their work for free.


CLA assistant

All contributors must sign a contributor license agreement before their code will be reviewed and merged.

Support and consulting

Please email us at for any queries.

If you have any specific tasks that need to be done, we offer consulting in certain cases. Please contact us with a brief summary of what you need and we will get back to you with a quote, if appropriate.

Licensing Information

This library (unipdf) has a dual license, a commercial one suitable for closed source projects and an AGPL license that can be used in open source software.

Depending on your needs, you must choose one of them and follow its policies. A detail of the policies and agreements for each license type are available in the LICENSE.COMMERCIAL and LICENSE.AGPL files.

In brief, purchasing a license is mandatory as soon as you develop activities distributing the unipdf software inside your product or deploying it on a network without disclosing the source code of your own applications under the AGPL license. These activities include:

  • offering services as an application service provider or over-network application programming interface (API)
  • creating/manipulating documents for users in a web/server/cloud application
  • shipping unipdf with a closed source product

Please see pricing to purchase a commercial license or contact sales at for more info.

Getting Rid of the Watermark - Get a License

Out of the box - unipdf is unlicensed and outputs a watermark on all pages, perfect for prototyping. To use unipdf in your projects, you need to get a license.

Get your license on

The easiest way to load your license is through environment variables, for example:

export UNIPDF_LICENSE_PATH=/path/to/licenses/UniDoc.txt

Alternatively you can load the license in code, simply do:

licenseKey := "... your license here ..."
customerName := `name of license holder`

err := license.SetLicenseKey(licenseKey, customerName)
if err != nil {
    fmt.Printf("Error loading license: %v\n", err)
You can’t perform that action at this time.