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
- 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
- Encryption(protect document with password)
- choose between ARC4-40, ARC4-128, AES-128, AES-256 encryption mode
- Table generator
-
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 gradienttable 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