https://github.com/jangko/nimpdf
  
  
    PDF document writer, written in nim lang 
    https://github.com/jangko/nimpdf
  
nim pdf pdf-generation pdf-producer
        Last synced: 8 months ago 
        JSON representation
    
PDF document writer, written in nim lang
- Host: GitHub
 - URL: https://github.com/jangko/nimpdf
 - Owner: jangko
 - License: other
 - Created: 2015-05-05T05:04:01.000Z (over 10 years ago)
 - Default Branch: master
 - Last Pushed: 2021-12-01T09:43:45.000Z (almost 4 years ago)
 - Last Synced: 2025-01-05T14:48:40.381Z (10 months ago)
 - Topics: nim, pdf, pdf-generation, pdf-producer
 - Language: Nim
 - Size: 25.8 MB
 - Stars: 172
 - Watchers: 12
 - Forks: 10
 - Open Issues: 13
 - 
            Metadata Files:
            
- Readme: readme.md
 - License: LICENSE.TXT
 
 
Awesome Lists containing this project
- awesome-nim - nimpdf - PDF document writer, written in Nim. (Multimedia / Documents)
 
README
          # nimPDF
[")](https://travis-ci.org/jangko/nimpdf)
[")](https://ci.appveyor.com/project/jangko/nimpdf)



nimPDF is a free PDF writer library, written mostly in nim programming language
nimPDF was heavily inspired by PHP-[FPDF](http://www.fpdf.org) but also influenced by  [jagPDF](http://www.jagpdf.org), [libHaru](http://www.libharu.org)(especially for the demo), [PyFPDF](https://code.google.com/p/pyfpdf), [pdfkit](http://devongovett.github.io/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](https://github.com/jangko/nimpdf/blob/master/demo/demo.pdf)):
nimPDF version 0.4.0 introduces many breaking changes, see [migration guide](migration.md) to help you change your code.
* **images**
  - PNG -- ~~use [LodePNG](lodev.org/lodepng), still in C~~ now written in nim
  - JPEG -- use [uJPEG (MicroJPEG) -- KeyJ's Small Baseline JPEG Decoder](http://keyj.emphy.de/nanojpeg), still in C
  - BMP -- use [EasyBMP](http://easybmp.sourceforge.net), 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](code.google.com/p/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](http://www.codeproject.com/Articles/58280/GraphDisplay-a-Bezier-based-control-for-graphing-f)
* **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](http://nim-lang.org/docs/encodings.html) 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
# Documentation
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`
# Dependencies
* 
* 
* 
* 