Home General
New Blog Posts: Merging Reports - Part 1 and Part 2

Memo and DotMatrix

edited June 2003 in General
I am creating a receipt using ReportBuilder, and so far have been able to
solve all my problems. Though I have a strange problem with dbMemos. All
regions and memo's on the report is set to "stretch=true". The printer uses
a generic text driver and the 17 cpi font. When printing the memo does not
print empty lines correctly. I can adjust this by using the leading
property. But sometimes in the text lines the line does not print correctly.
In a hex dump on the printer char $0C is printed instead of CRLF. The
receipt can print correctly one time, then restarting the application and
printing again causes the problem. I am sure that the problem somehow is
related to the 8 LPI where the memo field doesn't calculate linespacing
according to the correct LPI. All regions and bands use a height that
matches the printers LPI.

What could be the problem? How can I make a stretching report that will
print correctly on a 8 LPI DotMatrix printer?

Tia,
Bjarne Nielsen
Retail Planit A/S

Comments

  • edited June 2003
    Bjarne,

    Try generating your report to a text file and making sure the text file
    looks correct before sending the text file to the printer. Below are a
    couple articles that could be helpful.


    -----------------------------------------------
    Article: Printing to Dot Matrix Printers
    -----------------------------------------------

    Dot matrix printers are natively line and character based. Most dot matrix
    printers can emulate graphical (i.e. pixel based) printing, but there is
    additional overhead which degrades printing speed.

    Some options for maximizing performance:

    1. Use native printer fonts.

    Each dot matrix printer normally has some built-in fonts. You can choose
    these fonts when using the ReportBuilder Report Designer. Choose File |
    PageSetup and select the dot matrix printer (or optionally use the object
    inspector to set Report.Printersetup.PrinterName). The fonts displayed in
    Report Designer's font drop down list located on the format toolbar will
    display the printer native fonts (indicated by a special printer icon next
    to the font name).

    2. Vertically position and size objects in 1/6 inch increments.

    A standard dot matrix printer can print 66 lines per 11 inch portrait page.
    This translates to a line height of 1/6 inch. Therefore the height of each
    band should be a multiple of 1/6 as should the size of the margins, the
    vertical position of each object etc.

    Tip: When designing the report, use the PrinterSetup property to specify a
    printer that contains 600 dpi. Then set Report.Units to PrinterPixels. Now
    100 pixes = 1/6 of inch when specifying the positions of objects in the
    layout.


    3. Keep the layout simple, avoid using graphics of any kind.

    Alternatives to using the dot matrix printer driver:

    1. Use the generic text printer driver.

    When using the generic text printer you will need to use the courier or
    courier new font and apply the layout techniques described above.

    2. Use ReportBuilder's ReportTextFile device output format.

    This ReportTextFile device can exports the report to a .txt file which you
    can then send to the printer. Demo dm0107.pas in the main reports demo app
    shows an example of printing a report to a .txt file and previewing the
    results.



    -----------------------------------------------
    Tech Tip: Send TextFile to Printer
    -----------------------------------------------

    I designed a application that exports the report to a .txt
    file using ReportTextFile device.

    How can I Send the text file to the printer?

    The following procedure will send the .txt file to
    the printer using Delphi's TPrinter object.



    uses
    Printers;


    procedure SendTextFileToPrinter(aFileName: String);
    var
    lsLines: TStringList;
    lOutputFile: TextFile;
    liIndex: Integer;
    begin

    lsLines := TStringList.Create;

    try
    lsLines.LoadFromFile(aFileName);

    AssignPrn(lOutputFile);
    Rewrite(lOutputFile);

    for liIndex := 0 to lsLines.Count-1 do
    Writeln(lOutputFile, lsLines[liIndex]);

    CloseFile(lOutputFile);

    finally
    lsLines.Free;
    end;


    end;

    --
    Best Regards,

    Nico Cizik
    Digital Metaphors
    http://www.digital-metaphors.com
This discussion has been closed.