FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Print Long Text in multiple pages
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Print Long Text in multiple pages
Posted: Wed May 03, 2023 12:18 AM
Code (fw): Select all Collapse
#include "fivewin.ch"

function Main()

   local oPrn, oFont, oBold, oPen, cText, cRtf, nRow
   local nWidth, nBottom

   cRtf  := MEMOREAD( "testrtf.rtf" )
   cText := MEMOREAD( cFileSetExt( ExeName(), "prg" ) )

   PRINT oPrn PREVIEW

   DEFINE FONT oFont NAME "Consolas" SIZE 0,-10 OF oPrn
   DEFINE FONT oBold NAME "VERDANA"  SIZE 0,-24 BOLD OF oPrn
   DEFINE PEN oPen WIDTH 1 OF oPrn

   oPrn:SetPage( 1 ) // Letter or 4 for A4

   nWidth   := oPrn:PageWidth(  "INCHES" ) - 2 // Margins 1"
   nBottom  := oPrn:PageHeight( "INCHES" ) - 1

   PAGE

   @ ( nRow := 1 ), 1 PRINT TO oPrn TEXT "PRINT TEXT ACROSS PAGES" ;
         SIZE 6,1 INCHES LASTROW nRow FONT oBold ALIGN "TC"
   oPrn:Line( nRow, 1, nRow, nwidth + 1, oPen, "INCHES" )

   nRow  := PrintMultiPage( oPrn, nRow + 0.5, cText, nWidth, 1, nBottom, oFont, oPen )

   oPrn:Line( ( nRow += 0.1 ), 1, nRow, 8, oPen, "INCHES" )

   nRow := PrintMultiPage( oPrn, nRow + 0.5, cRtf, nWidth, 1, nBottom, oFont, oPen )

   oPrn:Line( ( nRow += 0.1 ), 1, nRow, 8, oPen, "INCHES" )

   @ ( nRow += 0.1 ) ,1 PRINT TO oPrn TEXT "*** END OF REPORT ***" SIZE 7,1 INCHES

   ENDPAGE
   ENDPRINT

   RELEASE FONT oFont, oBold
   RELEASE PEN oPen

return nil

static function PrintMultiPage( oPrn, nRow, cText, nWidth, nTopRow, nBottomRow, oFont, oPen )

   @ nRow, 1 PRINT TO oPrn TEXT @cText SIZE nWidth, ( nBottomRow - nRow ) INCHES ;
      FONT oFont LASTROW nRow

   do while !Empty( cText )
      ENDPAGE
      PAGE
      PageNo( oPrn, oFont, oPen )
      @ nTopRow, 1 PRINT TO oPrn TEXT @cText SIZE nWidth, nBottomRow - nTopRow ;
         INCHES FONT oFont LASTROW nRow
   enddo

return nRow

static function PageNo( oPrn, oFont, oPen )

   local nRow

   @ 0.5,1 PRINT TO oPrn TEXT TRANSFORM( oPrn:nPage, "Page : ##" ) ;
      SIZE 6,1 INCHES FONT oFont ALIGN "TR" LASTROW nRow
   oPrn:Line( nRow += 0.1, 1, nRow, 8, oPen, "INCHES" )

return nil
Regards



G. N. Rao.

Hyderabad, India

Continue the discussion