Today we are releasing UniDoc version 1.0, a comprehensive open source PDF toolkit written in Go.

Background

At FoxyUtils we have been using various libraries for PDF manipulation over the years and never been completely happy with what we have used. In the last couple of years we have been migrating our code-base to Golang and have completed porting of our existing python code.

In order to use the same libraries as used in python we had to shell out and call external APIs. As a result, we have been developing a PDF toolkit in Go and we are pleased to announce that our baby has been born and is ready for the prime time.

FoxyUtils.com has been updated to entirely use the new library for the following services:

UniDoc is starting out as a PDF toolkit for Go, but will be expanding to a general document processing library with support to read and write PDF, Doc, DocX and more formats. Contribution from the community is crucial to help us achieve our goal.

Installation

go get github.com/unidoc/unidoc/...

Overview and features

  • Read and extract PDF metadata.
  • Merge PDF (example).
  • Split PDF (example).
  • Protect PDF (example).
  • Unlock PDF (example).
  • The library aims to be fast and we process large PDF’s in large quantities.
  • Self contained and depends only on the Go standard library.
  • Developer friendly.

Examples

See the examples repository.

Roadmap

We have big plans to improve it to support a lot of functionality:

  • Compress PDF.
  • JPG to PDF.
  • PDF to JPG.
  • High-level API to create PDF.
  • Search/replace PDFs - Edit functionality.
  • OCR engine to generate searchable PDF from scanned data.
  • Conversions from any format to another that makes sense e.g. PDF to Word, Word to PDF.
  • Create a nice interface for generating reports with export capabilities to PDF and DocX.

We feel we are about to start an exciting journey of bringing the Go community an exciting document manipulation library.

Languages

Go has an excellent toolchain which makes it possible to create language bindings for:

  • Go - The library is written in Go so it works out of the box.
  • Python - We are considering GoPy for this. This will be the first step toward language bindings.
  • Java and C# if there is interest and demand.
  • Ruby if there is interest and demand.
  • Other languages will be considered if there is interest and demand.

Licensing/Pricing

We are releasing this under a dual AGPL/Commercial license as we need to help fund further development to achieve our goals. See pricing.

More information

For information see GitHub and the project website.

Updates

Since the original release of this post the name of the PDF library changed from unidoc to unipdf in release 3.0 and other libraries have been added since.