create pdf

Post Reply
User avatar
Detlef
Posts: 209
Joined: Mon Feb 07, 2022 9:54 pm

create pdf

Post by Detlef »

Hi all,
I modified rpreview.prg because i want to show a print preview to the user.
If the user decides that the preview is okay so he presses a button to save the printout as a pdf file.
I use

Code: Select all | Expand

 TPreview:oDevice:GenHaruPDF( cFile, .f. )
Everything works ok if I code oPrn:say( ... ) in my print.prg

But if I code oPrn:saytext( ... ) my program crashes with
Unrecoverable error 9003: Too many recursive error handler calls

Here a snippet from METHOD GenHaruPDF( cFile, lPreview ) of CLASS TPrinter

Code: Select all | Expand

1905:   for each aCall in ::aCallLog
1906:      oPdf:oPrn   := Self
1907:      HB_ExecFromArray( oPdf, aCall[ 1 ], aCall[ 2 ] )  // here crash when SayText( ... ) was used in my print.prg
1908:   next
 
Could anyone give me some help for this?
Regards, Detlef
User avatar
nageswaragunupudi
Posts: 10691
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: create pdf

Post by nageswaragunupudi »

Could anyone give me some help for this?
1. Please DO NOT modify FWH library code. It is well written.
2. Please let us know your FWH version.
3. If you want the PDF to be generated using HaruPDF, this is all what you need to do:
At the beginning of your application (function Main(), include this code:

Code: Select all | Expand

TPrinter():lUseHaruPDF := .t.
Please make sure you are using FWH libraries WITHOUT ANY MODIFICATIONS.

Now, when the user clicks on the PDF button in Preview, the pdf is generated using HaruPDF.

Once again we request you not to modify any part of FWH libraries
Regards

G. N. Rao.
Hyderabad, India
User avatar
Detlef
Posts: 209
Joined: Mon Feb 07, 2022 9:54 pm

Re: create pdf

Post by Detlef »

Many thanks for your reply, Mr. Rao.
My FWH version is 22.10.

I tried to explain why I modified rpreview.prg.
My concern was to show a very, very simple preview with only 3 buttons for 'save as pdf', 'send as email' and 'exit preview'.
No zoom, no export to Excel and Word just a very basic screen.
And therefor I just modified only the button bar for my needs.
Your advice to code TPrinter():lUseHaruPDF := .t. is what I already do.

I don't want a pdf immediately created but only if the user accepts the preview.
So I had to call METHOD GenHaruPDF() if the user clicks the 'save as pdf file' button.

When printing with oPrn:Say everything works fine.
But print with oPrn:SayText crashes.

Regards, Detlef
User avatar
nageswaragunupudi
Posts: 10691
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: create pdf

Post by nageswaragunupudi »

I tested myself with FWH2210.
This is my test program, with custom buttonbar with only 3 buttons.
This is working correctly for me.

Code: Select all | Expand

#include "fivewin.ch"

function Main()

   local oPrn, nWidth, nHeight, nRow
   local oFont, oBold

   // Before print command
   TPrinter():lUseHaruPdf  := .t.
   TPreview():bButtonBar   := { |oPrv,oWnd| MyBar( oPrv,oWnd ) }

   PRINT oPrn PREVIEW

   DEFINE FONT oFont NAME "CONSOLAS" SIZE 0,-10 OF oPrn
   DEFINE FONT oBold NAME "VERDANA"  SIZE 0,-26 BOLD OF oPrn

   oPrn:SetPage( 9 ) // A4
   nWidth   := oPrn:PageWidth(  "CM" )
   nHeight  := oPrn:PageHeight( "CM" )

   PAGE
      oPrn:Say( 2, nWidth/2, FWVERSION + " oPrn:Say()", oBold, nil, nil, nil, 2, "CM" )
      nRow  := 4
      @ nRow, 2 PRINT TO oPrn TEXT ;
         "oPrn:SayText() : tutor01.prg" + CRLF + CRLF + MEMOREAD( "tutor01.prg" ) ;
         SIZE nWidth - 4, nHeight - nRow - 2 CM FONT oFont LASTROW nRow
      nRow += 2
      @ nRow, 2 PRINT TO oPrn TEXT ;
         "oPrn:SayText() : tutor02.prg" + CRLF + CRLF + MEMOREAD( "tutor02.prg" ) ;
         SIZE nWidth - 4, nHeight - nRow - 2 CM FONT oFont LASTROW nRow

   ENDPAGE
   ENDPRINT

   TPreview():bButtonBar   := nil
   RELEASE FONT oFont, oBold

return nil

static function MyBar( Self, oWnd )

   local cFile := "mytest.pdf"

   DEFINE BUTTONBAR ::oBar OF oWnd SIZE 48,48 2007

   DEFINE BUTTON OF ::oBar RESOURCE FWBitmap( "PDF" ) CENTER ;
      ACTION ::SaveAs( .t., cFile, .t. )

   DEFINE BUTTON OF ::oBar RESOURCE FWBitmap( "email" ) CENTER ;
      ACTION ::SendEmail()

   DEFINE BUTTON OF ::oBar RESOURCE FWBitmap( "Exit2" ) CENTER ;
      ACTION oWnd:End()

return nil
 
Image
The image shows both preview with 3 buttons and also the PDF generated

I advise you to first copy the code to samples folder and run with buildh.bat and test yourself
Regards

G. N. Rao.
Hyderabad, India
User avatar
Detlef
Posts: 209
Joined: Mon Feb 07, 2022 9:54 pm

Re: create pdf

Post by Detlef »

Hello Mr. Rao,

many thanks for your effort.
I'll try this when I'm at home again.

Regards, Detlef
User avatar
Detlef
Posts: 209
Joined: Mon Feb 07, 2022 9:54 pm

Re: create pdf

Post by Detlef »

Hello Mr. Rao,

I tried your code and it's working fine ( as usual ). :)

Could you please, explain me why my version crashes ?
I don't see the reason why.

Code: Select all | Expand

#include "fivewin.ch"
#define   PAD_LEFT  0

function Main()

   local oPrn, nWidth, nHeight, nRow
   local oFont, oBold
   local cBigText := MEMOREAD( "tutor02.prg" )


   // Before print command
   TPrinter():lUseHaruPdf  := .t.
   TPreview():bButtonBar   := { |oPrv,oWnd| MyBar( oPrv,oWnd ) }

   PRINT oPrn PREVIEW

   DEFINE FONT oFont NAME "CONSOLAS" SIZE 0,-10 OF oPrn
   DEFINE FONT oBold NAME "VERDANA"  SIZE 0,-26 BOLD OF oPrn

   oPrn:SetPage( 9 ) // A4
   nWidth   := oPrn:PageWidth(  "CM" )
   nHeight  := oPrn:PageHeight( "CM" )

   PAGE
      oPrn:Say( 2, nWidth/2, FWVERSION + " oPrn:Say()", oBold, nil, nil, nil, 2, "CM" )
      nRow  := 4

/* Lines from Mr. Rao which are working fine
   -----------------------------------------
      @ nRow, 2 PRINT TO oPrn TEXT ;
         cBigText ;
         SIZE nWidth - 4, nHeight - nRow - 2 CM FONT oFont LASTROW nRow
*/

      // this was my code for printing and updating the value of nRow - but crashes
      nRow := oPrn:SayText( nRow, 2, cBigText, 9.5, nHeight - nRow - 2, oFont, PAD_LEFT, nil, nil, "CM" )

      oPrn:Say( nRow, nWidth/2, "nRow after printing big Text", oFont, nil, nil, nil, 2, "CM" )

   ENDPAGE
   ENDPRINT

   TPreview():bButtonBar   := nil
   RELEASE FONT oFont, oBold

return nil

static function MyBar( Self, oWnd )

   local cFile := "mytest.pdf"

   DEFINE BUTTONBAR ::oBar OF oWnd SIZE 48,48 2007

   DEFINE BUTTON OF ::oBar RESOURCE FWBitmap( "PDF" ) CENTER ;
      ACTION ::SaveAs( .t., cFile, .t. )

   DEFINE BUTTON OF ::oBar RESOURCE FWBitmap( "email" ) CENTER ;
      ACTION ::SendEmail()

   DEFINE BUTTON OF ::oBar RESOURCE FWBitmap( "Exit2" ) CENTER ;
      ACTION oWnd:End()

return nil 
User avatar
nageswaragunupudi
Posts: 10691
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: create pdf

Post by nageswaragunupudi »

Do not use PAD_LEFT as 7th parameter when using SayText()
Use 'nil' and test again.
It should work without errors. Please run and let us know
Regards

G. N. Rao.
Hyderabad, India
User avatar
Detlef
Posts: 209
Joined: Mon Feb 07, 2022 9:54 pm

Re: create pdf

Post by Detlef »

nageswaragunupudi wrote:Do not use PAD_LEFT as 7th parameter when using SayText()
Use 'nil' and test again.
It should work without errors. Please run and let us know
Yes, that made the trick.
I didn't see that cAlign was meant as character type and didn't know that it's better to be nil.

Thanks for your clarification, Mr. Rao
User avatar
nageswaragunupudi
Posts: 10691
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: create pdf

Post by nageswaragunupudi »

cAlign is Char type

Default is TL ( topleft )
TR : Top Right
BL, BR -> BottomLeft, BottomRight
"" Center
Regards

G. N. Rao.
Hyderabad, India
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: create pdf

Post by karinha »

Code: Select all | Expand

// C:\FWH...\SAMPLES\DETLEF4.PRG

#Include "FiveWin.ch"

#Define PAD_LEFT            0
#Define PAD_RIGHT           1
#Define PAD_CENTER          2

FUNCTION Main()

   LOCAL oBrushRed, oBrushGrn
   LOCAL oPrn, nWidth, nHeight, nRow
   LOCAL oFont, oBold, cTxt
   LOCAL cBigText := MemoRead( "tutor02.prg" )

   DEFINE BRUSH oBrushRed COLOR CLR_RED
   DEFINE BRUSH oBrushGrn COLOR CLR_HGREEN

   // Before print command
   TPrinter():lUseHaruPdf := .T.
   TPreview():bButtonBar  := {| oPrv, oWnd | MyBar( oPrv, oWnd ) }

   PRINT oPrn PREVIEW MODAL

      DEFINE FONT oFont NAME "CONSOLAS" SIZE 0, - 10      OF oPrn
      DEFINE FONT oBold NAME "VERDANA"  SIZE 0, - 26 BOLD OF oPrn

      oPrn:SetPage( 9 ) ; oPrn:SetPortrait()

      nWidth   := oPrn:PageWidth(  "CM" )
      nHeight  := oPrn:PageHeight( "CM" )

      PAGE

         oPrn:Say( 2, nWidth / 2, FWVERSION + " oPrn:Say()", oBold, NIL, NIL, NIL, 2, "CM" )

         oPrn:SayText( 1000, 400, "DETLEF: THE BIG TEXT IN FWH: ", 4200, 400, oBold, nil, CLR_MAGENTA, nil, "PIXEL" )

         oPrn:SayText( 1300, 400, cBigText, 4200, 4000, oFont, nil, CLR_YELLOW, oBrushRed, "PIXEL" )

         oPrn:SayText( 5700, 400, "Yellow, RedBrush DETLEF", 4200, 400, oBold, nil, CLR_YELLOW, oBrushRed, "PIXEL" )

         oPrn:SayText( 6200, 400, "Default: nil,nil DETLEF", 4200, 400, oBold, nil, nil,        oBrushGrn, "PIXEL" )

         cTxt := "kapiabafwh@gmail.com"

         oPrn:Say( 6700, 1800, cTxt, oBold, , CLR_HRED, , PAD_CENTER )

      ENDPAGE

   ENDPRINT

   TPreview():bButtonBar := nil

   RELEASE FONT oFont, oBold, oBrushRed, oBrushGrn

RETURN NIL

STATIC FUNCTION MyBar( Self, oWnd )

   LOCAL cFile   := "mytest.pdf", oFont, oBtn
   LOCAL nAlpha  := 0x60
   LOCAL nBarClr := RGB( 0, 0x2E, 0x5C )

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14

   DEFINE BUTTONBAR ::oBar OF oWnd SIZE 48, 48 2007

   ::oBar:SetColor( { |l,o| If( l, CLR_BLACK, CLR_WHITE ) }, oWnd:nClrPane )
   ::oBar:bClrGrad := { |lInvert| If( lInvert, nArgb( 96, CLR_WHITE ), nArgb( nAlpha % 256, nBarClr ) ) }

   ::oBar:GoTop()

   DEFINE BUTTON OF ::oBar RESOURCE FWBitmap( "PDF" )   CENTER ;
      ACTION ::SaveAs( .T., cFile, .T. )

   DEFINE BUTTON OF ::oBar RESOURCE FWBitmap( "email" ) CENTER ;
      ACTION ::SendEmail()

   // By master: UWE. ( Ukoenig )
   DEFINE BUTTON oBtn OF ::oBar PROMPT "Color"  FILE "..\bitmaps\colors.bmp"  ;
      ACTION ( nBarClr := ChooseColor( RGB( 0, 0x2E, 0x5C ) ), ::oBar:Refresh() )

   DEFINE BUTTON OF ::oBar RESOURCE FWBitmap( "Exit2" ) CENTER ;
      ACTION oWnd:End()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
 
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
Detlef
Posts: 209
Joined: Mon Feb 07, 2022 9:54 pm

Re: create pdf

Post by Detlef »

karinha,
your message is useless.
As you might see, your defines

Code: Select all | Expand

#Define PAD_LEFT            0
#Define PAD_RIGHT           1
#Define PAD_CENTER          2
are all of type numeric.
Mr. Rao stated that the value of cAlign in Method oPrn:SayText has to be character type value.
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: create pdf

Post by karinha »

DetLef, use whichever is best for you, I'm just showing other ways to use it.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: create pdf

Post by goosfancito »

Como activo para que el PREVIEW este en español? italiano? etc...
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: create pdf

Post by karinha »

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: create pdf

Post by goosfancito »

Gracias!
fuen un error mio el ue no me mostrara en español. Habia entrado a strings.prg (para hacer una modificacion para mi programa) y elimine todas las lineas
que vienen por defecto de aStings.
Me di cuenta y ahora funciona

gracias!
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Post Reply