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

Nepage without printing an empty page?

edited March 2013 in General
Hello,

is it possible to tell the printer to add/skip a new page for duplex print without sending a *blank* page? One of my customers uses a printing system where the printed pages are count and printing blank pages are counted pages.

At the moment I publish the pages to a device and add an empty page to the device where I have to skip a page - but this leads to the wrong counted pages. Here a "SkipPage" method would be great.

Thank you,
Michael

Comments

  • edited March 2013
    Hi Michael,

    There is no built-in way with ReportBuilder to add a page but skip
    counting it (PageCount). You might be able to create your own count
    variable that keeps manual track of the actual printed pages sent to the
    printer.

    Best Regards,

    Nico Cizik
    Digital Metaphors
    http://www.digital-metaphors.com
  • edited March 2013
    Hello Nico,

    thank you for your reply! I think, I did not express myself very well. I need to tell the device letting the printer skip an empty page so that a new page of my report starts on a new sheet of paper on a duplex enabled printer.

  • edited March 2013
    In a duplex situation, a "page" is simply one side of a piece of paper.
    In ReportBuilder it would be possible to manually add blank TppPage
    objects to the list after each normal page is generated effectively
    removing the duplex feature.

    The effect you are after would also be solved by simply setting the
    PrinterSetup.Duplex to dpNone.

    Take a look at the following article which shows some of the concepts
    you would need to employ to add a blank page after each report page.
    Steps 1,2,3, and 5 are necessary. Step 2 would be where the empty
    page(s) are added to the list.

    http://www.digital-metaphors.com/rbWiki/Delphi_Code/Layouts/How_To...Create_a_Spread_Sheet_Style_Report

    Best Regards,

    Nico Cizik
    Digital Metaphors
    http://www.digital-metaphors.com
  • edited March 2013


    Yes. To fully print a sheet of paper I need to print two pages. One of my customers leases a printer which is payed by *printed* pages. So each single page costs. Regardless if it is a black page or a white page. When I *print* a page, it generates costs. Additionally the printer is a duplex printer. Some pages have to start on an even page number (= new sheet of paper). To get to the new sheet of paper I have to print an empty page or tell the reporting system to skip a printer page.
    Now I am looking for a command telling the printer to "skip the page because it will be empty anyway". This would not cause the printer to increase the print count and the costs. My customer prints several hundreds of tousands pages a year ...

    Best regards,
    Michael
  • edited March 2013
    Sending PCL commands to the printer would be worth a try. Here is the link
    to a good PCL command reference. Search for Eject.

    http://www.pclviewer.com/resources/reference/

    The OnPrinterDeviceStateChange event can be used to send printer escape
    codes. For details on using this event, access the RBuilder help, select the
    TppProducer topic and then navigate to the OnPrinterDeviceStateChange
    event.

    The ppPCL.pas unit contains static classes that encapsulate many common PCL
    commands. However we do not currently have the Eject command defined. This
    is something we can add for a future release.

    -
    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com

    Best regards,

    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com
  • edited April 2013
    I have exactly the same situation as OP - a requirement to be in duplex
    mode, but to eject a page instead of reloading and printing a 'blank'
    sheet on 'even' side.

    I only have spurious access to the actual printers (stupidly expensive
    colour devices with fickle drivers), so need to get some ideas before
    testing...

    Will the 'eject' be interpreted as 'page was printed'?

    That is, if in OnPrinterDeviceStateChange I test for:

    if (
    (aStateChange = dsBeforeStartPage) and
    (NeedToEjectThisPage)
    )
    then ppReport1.Printer.SendEscape('eject escape code here');

    Is there anything else that needs to be sent to ppReport to inform it
    that the page is complete?

    I'm concerned it will eject, then just print the blank on next page
    anyway..

    If the ejected 'blank' is part of a subReport - how might I detect that
    the given printed page is from the subReport? (is there a way, or am I
    setting flags in 'OnStartPage' and/or BeforePrint?).

    Thanks!

    EdB


  • edited April 2013
    I would try sending the escape at dsBeforeEndPage or dsAfterEndPage for the
    page that is printing on the front side. ReportBuilder is just generating
    pages for the report - the same pages you see in preview. Each page when
    drawn to the printer uses a Printer.StartPage/EndPage Win API command. When
    duplexing, the printer will print Page 1 on one side and Page 2 on the other
    side, rather than print Page 1 eject paper, Page 2 eject paper, etc.


    -
    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com

    Best regards,

    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com
This discussion has been closed.