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 Cnow 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
- PNG --
-
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)
encryptionannotationhyperlinksother encoding beside UTF-8(nim has encoding module, i will use it someday)- basic text formating(will be implemented as separate layer)
radial gradientand 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
nimble install nimPDF
- build general demo:
nim c demo
- build specific demo: goto nimPDF/demo folder, type
nim e build.nims