.NET
•  Greatis •  Security •  AppDatabase •  Utilities •  Delphi/CB • Visual Basic •  just4fun
.NET Software
.NET Components for Visual Studio .NET, Delphi 8, Delphi 2005 and Delphi 2006
Detailed information
Get Started
  • How To Use It?
  • How To Print ... ?
  • How It Works?

    Technical Details
  • Components
  • Architecture
  • Internal Calls
  • Features
  • Screenshots
  • Documentation

    Common Information
  • License Agreements
  • Recommended Licenses
  • Detailed Order Form

    Powered by Print Suite .Net
  • Poster It!

    See also
    Related products
    Nostalgia .NET new!
    Print Suite .Net
    Form Designer .Net
    Gradient Controls .Net
    iGrid Plotter
    Convay's Life .Net

    Related links
    MegaDetailed.NET
    Win32.hlp online version
    Delphi Tips
    Delphi to C#
    just4fun

    Special
    Free Software Promotion
    Offers for Resellers

    Follow us
    LinkedIn Blogspot Twitter Facebook

    Share this page
    Home Documentation License Download Order Support  
    Print Suite .NET
    News

    October 09 2010 12:38:52
    CHM help file is compiled, web help is created and is available from Print Suite .Net's webpages. Welcome.

    October 05 2010 11:42:74
    XML documentation is finished, now it's time to finalize release and making the install kits. By the way, the new How To Use It page is added.

    September 28 2010 21:55:47
    During creating example for RichTextBoxProvider, I had to create some documentation for RTF example, so now we have all the Print Suite .Net's web pages. Ordering is not available yet, but you can see complete pricing information.

    August 13 2010 11:43:12
    Last addition: draft printing in DocumentDesigner. New DraftPrint property allows you to choose between usual mode and draft mode, when each page contains reduced images for up to 100 pages on one page. And looks like the main coding is finished. Now I have to create examples, documentation, and so on. It's simple. :)

    August 08 2010 14:04:41
    Just a word about virtualization...
    All the functionality in all the provider classes uses the same 3-level model.

    public event SomethingEventHandler Something;
    
    public void CallSomething(SomethingArgs args)
    {
      if (Something != null) Something(args);
      else OnSomething(args);
    }
    
    public virtual void OnSomething(SomethingArgs args)
    {
      // functionality here
    }
    
    The Call* method is used for external calling from DocumentDesigner or ProviderToDocument components. It's not virtual. There is another On* method, it's virtual and it can be overriden in derived classes to implement new functionality. In the Call* method we check the appropriate event, and if it is assigned, we call it instead of On* method, so we can change everything in behavior of any provider components by events with easy. Of course, we can call On* in the event handler code for accessing base functionality. This allows us to implement our special functionality both in the application code by event handlers and in the new derived components by code in overriden On* methods.

    August 08 2010 13:59:22
    Well, TextGridProvider is done. And even more... DataGridViewProvider, derived from TextGridProvider is implemented too. All you need is to link it with you DataGridView control and this provider will obtain everything you want from it. You can get the data only, but you can get all the layout too, so you can have the same paddings, colors, fonts, alignments as you have in DataGridView - with no manual coding! I think I have to implement ListViewProvider too...

    August 01 2010 18:23:21
    OMG, I forgot... :)
    Just noticed, that I have implemented clipping, margins and so on... But I've forgot about borders. What do you think about table without borders? ;)

    August 01 2010 11:48:57
    Just finished new class - AbstractGridProvider. This provider supports multipage grid printing with variable columns widths and rows heights, with cell spans, with... and so on. I hope it contains all we need in future specialized descendants. See the screenshot:

    Print Suite .Net grid printing test

    Note the features:

  • Table are splitted both by columns and by rows. We don't split it in the code manually. All we need is to measure our columns and rows. Both, columns and rows have variable width. See the code:
    private void abstractGridProvider1_MeasureColumn(object sender, MeasureColumnEventArgs e)
    {
      e.Width = 100 + e.Column * 10;
      e.HasMoreColumns = e.Column < 9;
    }
    private void abstractGridProvider1_MeasureRow(object sender, MeasureRowEventArgs e)
    {
      e.Height = 50 + e.Row * 10; ;
    }
    
  • The orange cells have span settings. As you can see, if the spanned cell (orange) cross the page border, it continues on the next page (there is another mode, when span is clipped by the page border). Spanned cells have additional SpanColumnPortion and SpanRowPortion parameters, which are shown the horizontal and vertical portion index. For non-spanned cells this values are always -1. See the code:
    private void abstractGridProvider1_PrintCell(object sender, PrintCellEventArgs e)
    {
      using (Font f = new Font("Arial", 34))
      {
        Brush b;
        string s;
        // spanned cells
        if (e.SpanRowPortion != -1)
        {
          b = new SolidBrush(Color.FromArgb(255, 128, 0));
          s = string.Format("{0}.{1}/{2}.{3}", e.Column, e.Row, e.SpanColumnPortion, e.SpanRowPortion);
        }
        // generic cells
        else
        {
          int c = 56 + r.Next(200);
          b = new SolidBrush(Color.FromArgb(c, c, c));
          s = string.Format("{0}.{1}", e.Column, e.Row);
        }
        e.Graphics.FillRectangle(b, e.CellBounds);
        e.Graphics.DrawString(s, f, Brushes.Black, e.CellBounds.Left, e.CellBounds.Top);
        e.HasMoreRows = e.Row < 19; ;
      }
    }
    
  • Span defines with easy using special event, that is called for each cell before painting. See the code:
    private void abstractGridProvider1_CellSpan(object sender, CellSpanEventArgs e)
    {
      if (e.Column == 3 && e.Row == 7)
      {
        e.RowSpan = 5;
        e.ColSpan = 4;
      }
      if (e.Column == 3 && e.Row == 3)
      {
        e.ColSpan = 6;
        e.RowSpan = 2;
      }
    }
    
  • Also note the additional custom "Test P2D" button in the toolbar. Of course, you can edit, rearrange and delete default buttons of PreviewToolbar as well as add your own buttons.

    Well, now I have to add advanced columns and rows measurement and to create another grid providers...

    August 01 2010 11:33:12
    New month - new features. At this moment the following new components are implemented:

    TextBoxProvider
    Provider for TextBox content printing
    ListBoxProvider
    Provider for ListBox content printing
    TextBoxProvider
    Provider for ComboBox drop-down list content printing
    RichTextBoxProvider
    Provider for RichTextBox content printing
    ImageProvider
    Base provider for image printing
    PictureBoxProvider
    Provider for printing PictureBox content
    ControlImageProvider
    Provider for printing control image snapshot
    ScreenshotProvider
    Provider for screenshot printing
    ImageListProvider
    Provider for multipage printing of ImageList content

    July 21 2010 20:43:28
    All the base thing are implemented, and now I'm creating the real printing components. The following components are done:

    IndentProvider
    Provider that allows to create content indent from any page side (can be different on the odd and even pages)
    PageNumberProvider
    IndentProvider descendant, that makes indent and place the page number in teh indent area
    WatermarkProvider
    Provider for page background printing
    TextProvider
    Provider for printing plain text.

    Next will be ImageProvider and some abstract grid provider, that will be used as base for database printing and so on... To be continued...

    June 22 2010 22:11:43
    OK, now document designer has Document property - a collection of document sections, each section has two areas: Page (for something that must be printed on each page of document section, like headers, page numbers and so on) and Content (real content), each area can contain print providers compnents from your form. So if you want to have page numbers at the bottom of each page just add appropriate provider into Page area. The editor for Document property looks like this:

    Greatis.PrintSuite.DocumentDesigner.Document

    Of course, drag and drop in the Document Structure tree is working.

    June 10 2010 9:02:58
    Have spent a month thinking about base architecture and now I know anything what I need. DocumentDesigner will have dynamic list of the document sections (partitions? chapters?) for different parts (cover, title, index, main content and so on). Each part will have two provider lists: for decoration (repeated on each page and used for page numbers, and so on) and for real content.

    May 12 2010 20:36:56
    Holidays over... at last... and I have an idea about some decoration providers lists. One for document designer and one for each content provider. Document designer's decoration providers will print something on each page of the document (or one some selected - we can analyze counters and skip decoration for selected providers or for selected page). Provider's decoration will print something before content (borders, fills, watermarks and so on). The main idea is to split serial content (content provider) and something which can be repeated on each page, each provider or each content part (decoration provider). Also we can add some enum (for instance, ContentType) for flag that can be returned by content provider. For instance, if the content provider returns ContentType.Cover or ContentType.Endpaper, page number decoration provider will skip page number printing. It's just an idea, and I have to think a little bit more before implementing.

    May 06 2010 22:23:12
    I'm stupid. Why we need separated lists for document top and bottom (covers, etc), when we can add some special content provider for it into common content list? Looks like we need list of content providers only, because document top and bottom are content too.

    May 06 2010 22:10:58
    Now DocumentDesigner supports DocumentTop and DocumentBottom areas. The new version is available for download.

    May 06 2010 15:03:46
    There is no sense in the PageTop and PageBottom areas, because we can need to print something at the left, right and event at the center of each page (watermarks, for instance), so we need one Page area with content providers which must print something on each document page.

    May 06 2010 13:52:20
    Forgot to tell, that no problem to implement entire document in one content provider, exactly like in our classical Print Suite for VCL, but this is not the best way if we have repeated parts in the document, which can be implemented once in separated content provider. Our desination is mouse-designed printout in Lego style without coding.

    May 06 2010 1:34:05
    Just understood, that we need additional counters: DocumentArea (as enum, I guess), AreaPage, AreaProvider and AreaContent.

  • Must-have .Net Products
    Nostalgia .Net Nostalgia .Net
    Power of Win32 API in convenient .Net classes and components. The easiest way to expand your possibilities without Win32 skill. Full source codes incliuded. More »


    Print Suite .Net Print Suite .Net
    Set of components for easy printing texts, images and grids from your WinForms applications. Also Greatis Print Suite .Net offers the advanced DocumentDesigner component that allows creating complex print jobs from simple separated print content providers. More »


    Greatis Software Greatis | Security | AppDatabase | Utilities | Delphi/CB | Visual Basic | .NET | just4fun

    Contacts | Add to Favorites | Recommend to a Friend | Privacy Policy | Copyright © 1998-2012 Greatis Software

    eXTReMe Tracker