Genealogical Reporting
For my YAGP project, I want to provide report capabilities. YAGP is for genealogical research, so reports could include pedigree charts, descendant charts, fan charts, family group sheets, and tables of people, locations, marriages, etc. Reports need to be viewable, print/preview-able, ideally customizable, and possibly exported.
My first attempt at a "visually interesting" report was the
individual pedigree. I implemented four-generation and five-
generation variants using GDI+, a PictureBox
, and drawing to
a Document for print/preview. A screen shot can be seen below.
While researching ways to implement the "Family Group" report,
I discovered Microsoft's WebBrowser
control. Said control
allows displaying a web page in the application. Said web page
can be a URL from the Interwebs, or in my case, HTML generated
by the application.
Screen shots are below for the current iteration of the family group report, and a 4-generation pedigree. I haven't got very far with the 5-generation HTML pedigree yet. Both are implemented using the HTML TABLE, with some CSS to draw lines.
So What's the Dilemma?
This is a crossroads point for me. For the desktop, I'm convinced that Windows has won and Linux/Mac are low priority. Mono support is now a lower priority, with WINE as a possible cross-platform solution. On the other hand, using HTML opens up the possibility of going the web route: web server or web site generation. Maybe even Mobile?
I started looking into HTML because I was unhappy at the available choices for print/previewing WinForm grids. Stumbling into the WebBrowser control suggested HTML Tables, and the control provides the print/preview solution.
HTML isn't "natural" to me - I spend a lot of time with Google to find details on tags and css. But I also recall a lot of struggle getting the GDI pedigree "just right", researching tricks for GetTextSize, and no easy way to extend it with additional details (e.g. dropping occuption, adding military service, etc). I still need to do work to add said support to the HTML generation, but the HTML table takes care of the resizing etc.
A 'big question' for me is how to draw graphics in a web page, initially for fan charts. Another one is how to navigate by clicking on the HTML (without adding hyperlinks or javascript). At least for tables, pedigrees and family groups, HTML is a very good solution.
Pros and Cons
Here are some of the pros and cons for each approach which I've considered. Your needs and priorities may vary. GDI+ Pros:
- Complete control over appearance
- Works in Mono (?)
- Can use any system-installed font
- Easy to navigate by clicking on the chart
- Known process for graphics (e.g. fan chart)
- Coding required for additional customization
- Difficult to adjust for changes in data size/amount
- Additional coding for multi-page print/preview
- Difficult/limited export
- Automatically adjusts for changes in data size/amount
- Built-in print/preview support with options
- Could export to HTML / generate web site
- Tweaking CSS provides some easy customization
- In theory, user-customization by editing css/html
- Uses IE: some limitations or IE specific HTML required.
- Effectively limited to web-friendly fonts.
- Uncertain if can 'remember' print options
- Alternative control required for Mono; status uncertain
- Unknown: drawing graphics (e.g. fan chart)
- Unknown: navigation by clicking in the chart
Screen Shots
Not shown for the HTML is how the font family or font size can easily be selected. Also not shown is the grey and green themes. Neither of these options are available for the GDI version ...