Skip to content
PDF document writer, written in nim lang
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
new feature


Build Status (Travis) Windows build status (Appveyor) nimble license

nimPDF is a free PDF writer library, written mostly in nim programming language

nimPDF was heavily inspired by PHP-FPDF but also influenced by jagPDF, libHaru(especially for the demo), PyFPDF, pdfkit

after lodePNG substituted with PNG decoder written in nim, nimPDF become one step closer to 100% pure nim

nimPDF implements the following features(see demo.pdf):

nimPDF version 0.4.0 introduces many breaking changes, see migration guide to help you change your code.

  • images

    • PNG -- use LodePNG, still in C now written in nim
    • JPEG -- use uJPEG (MicroJPEG) -- KeyJ's Small Baseline JPEG Decoder, still in C
    • BMP -- use EasyBMP, already ported to nim, support 1bit, 4bit, 8bit, 16bit, 24bit, and 32bit images
    • beside transparency from original image(such as from PNG), you can adjust individual image transparency as easy as other elements in your document
  • text and fonts

    • support TTF/TTC font subsetting -- use Google sfntly, ported(partially) to nim and modified
    • you can easily tell the library to look for fonts in certain folder(s)
    • you only need to ask for font family name and it's style, the library will try to find the right one for you(if avilable)
    • text encoded in UTF-8 if you use TTF/TTC
    • 14 base font in PDF use Standard,MacRoman,WinAnsi encoding
    • TTF/TTC fonts can be written vertically if they have vertical metrics
  • Path construction

    • straight segments, Bezier curves, elliptical arcs, roundrect
    • join styles and miter limits
    • dash patterns
    • path clipping
    • arbitrary path bounding box calculation(i use it to implement gradient too)
    • construct path from mathematical function - taken from C# GraphDisplay
  • Color spaces

    • Gray, RGB, CMYK
    • alpha channel for text, path, and images too!
    • linear gradient to fill any closed shape
    • radial gradient to fill any closed shape
  • Interactive Features(see demo folder)

    • Page Labels
    • Document Outline
    • Hyperlinks
    • Text annotation
    • Encryption(protect document with password)
    • choose between ARC4-40, ARC4-128, AES-128, AES-256 encryption mode
    • Form Field:
      • TextField
      • Combo Box
      • Radio
      • Push Button
      • List Box
      • Check Box
  • Coordinate Space

    • top-down mode
    • bottom-up mode
    • unit measured in point, inch, and mm
  • others

    • output to file or memory using nim stream module
    • images, fonts, and other resources search path(s)
    • document compression using flate decode(use lodePNG compressor)
    • transformation and graphics state
  • unimplemented features

    • CIE based color space
    • patterns(this can be achieved using PDF primitives and path clipping)
    • encryption
    • annotation
    • hyperlinks
    • other encoding beside UTF-8(nim has encoding module, i will use it someday)
    • basic text formating(will be implemented as separate layer)
    • radial gradient and multi color gradient
    • table generator(as in FPDF)(will be implemented as separate layer)
    • document outline
    • permission
    • digital signature


The documentation is generated using docutils

The documentation provided may not be complete, please help to improve it

Installation and build instructions

nimble install nimPDF

  • build general demo: nim c demo
  • build specific demo: goto nimPDF/demo folder, type nim e build.nims


  • nimBMP
  • nimPNG
  • nimAES
  • nimSHA2
You can’t perform that action at this time.