Skip to content

Latest commit

 

History

History
48 lines (39 loc) · 2.16 KB

README.md

File metadata and controls

48 lines (39 loc) · 2.16 KB

Form8sn

Generate PDF based templates, and fill them in from data objects

The general plan:

  1. Someone with a form does a Print to PDF with all the spaces blank
  2. They get a data structure (schema) from another app or API
  3. Both the PDF and the data are loaded into the Form8sn UI, and they:
    • Place boxes on the PDF page surfaces
    • Add rules to partition the data and repeat PDF pages (plus running totals and the like)
  4. This is exported to a command file embedded in a modified version of the PDF
  5. A programmer can then pass the command file and data to the Form8sn SDK to get back a finished PDF

The PDF generation phase should be as fast as possible. If we can, it should be a streaming process so we don't need to load the whole PDF template or output into memory.

Components

  • PDFSharp - A modified version of the main project (so I can add or specialise bits)
  • PortableGdi - A minimal version of System.Drawing to support PDFSharp. Based on GNU Portable.Net base libraries.
  • BasicImageFormFiller - GUI app to take scanned paper forms (in JPEG) and fill them in from arbitrary data, based on examples.
  • TestApp - Console app scratch space
  • PdfSharp.Charting - Currently unused.
  • Form8snCore - File formats and filtering to produce PDFs from project files
  • WebFormFiller - .Net MVC website and JS app for editing Form8sn projects

To-do:

  • Write some documentation
  • Ensure the core PDFsharp and Form8snCore don't use GDI+ (important)
    • Portable system.drawing
    • JPEG reading and writing ( Portable.Drawing.Imaging.ImageFormats.JpegReader.Load )
    • Font reading & metrics ( PdfSharp.Drawing.XFontSource.GetOrCreateFromFile )
    • Remove defunct platform specific calls in PDFsharp.
  • Handle PDFs as input
  • Decode PDF forms so we can use existing 'boxes'
  • Embed Form8sn instructions in PDF files and handle those? (not important)
  • Web-based form editor?
  • Full suite of tests

Useful pointers

To add new prefixes, see Form8snCore.DataExtraction.MappingActions.GetDataAtPath and Form8snCore.HelpersAndConverters.DataPickerBuilder