Subject Re: Printing to pdf
From Bernard Mouille <mouille258@orange.fr>
Date Tue, 11 Dec 2018 09:45:00 -0500
Newsgroups dbase.getting-started
Attachment(s) Test.txt

Hello Charlie,

You can try the basic sample with PDFCreator.
Regards,
Bernard.

Charlie Wrote:

> Hi.. I\'m trying to print a report to pdf using a pdf converter.  (It shows up in the printer options).  I\'m using output 1 which is to printer.  Should I be using another output option?  It seems to print and creates a pdf file but the file is blank.
>
> Thanks much for any help!!!




/* Example : print a report.


dBase version      : dBASE PLUS 9.51 Runtime  b2426 (11/24/2014-EN141124)
Windows version    : Microsoft Windows 7 Professionnel  build 7601 32 bits
PDFCreator version : PDFCreator Free v3.3.0 Build 2468

*/

local cError
local PDFCreatorQueue
local fullPath
local printJob
local appPrinterName
local r

//set procedure to \_Programmes\dBase\_Lib\_Lib.cc additive

cError          = "OK"
PDFCreatorQueue = null
fullPath        = set( "directory" ) + "\_Result.pdf"
printJob        = null
r               = null

bd_ferase( fullPath )
bd_ferase( "_Result.txt" )
set alte to _Result.txt
set alte on
? "dBase version   :", Version( 1 )
? "Windows version :", bd_WindowsVersion()
?
? "Directory       :", set( "directory" )
? "_app.printer    :", _app.printer.printerName
? "Default Printer :", bd_GetDefaultPrinter()
?

appPrinterName = _app.printer.printerName
_app.printer.printerName = "PDFCreator"



PDFCreatorQueue := bd_CreateObject( "PDFCreator.JobQueue" )
if PDFCreatorQueue == null
   return
endif

? "Initializing PDFCreator queue..."
PDFCreatorQueue.Initialize()
? "Printing a report."

r = new TestReport()
r.output = 1
r.pagetemplate1.textlabel1.text = "Test print a report in pdf wirh PDRCreator."
r.render()

? "Waiting for the job to arrive at the queue..."
if not PDFCreatorQueue.WaitForJob( 30 )
   ? "*** The print job did not reach the queue within 30 seconds."
   cError := "The print job did not reach the queue within 30 seconds."
endif

if cError == "OK"
   ? "Currently there are " + bd_lstr( PDFCreatorQueue.Count() ) + " job(s) in the queue."
   ? "Getting job instance."
   printJob := PDFCreatorQueue.NextJob()
   printJob.SetProfileByGuid( "DefaultGuid" )
   ? 'Converting under "DefaultGuid" conversion profile'
   printJob.ConvertTo( fullPath )
   if not printJob.IsFinished() or not printJob.IsSuccessful()
      ? "*** Could not convert the file : " + fullPath
      cError := "Could not convert the file : " + fullPath
   endif
endif

if cError == "OK"
   MsgBox( "Job finished successfully." )
else
   MsgBox( cError )
endif

? "Releasing the PDFCreator object."
if PDFCreatorQueue <> null
   PDFCreatorQueue.ReleaseCom()
endif

// Restore the dBase printer default.
_app.printer.printerName = appPrinterName

?
? "Directory       :", set( "directory" )
? "_app.printer    :", _app.printer.printerName
? "Default Printer :", bd_GetDefaultPrinter()
?
set alte off
set alte to

PDFCreatorQueue := null
printJob        := null
r               := null

return

class TestReport of REPORT

    with (this.printer)
       printerSource = 2
       duplex = 1
       orientation = 1
       printerName = "PDFCreator"
       paperSource = 15
       paperSize = 9
       resolution = 0
       color = 2
       trueTypeFonts = 3
    endwith

    this.PAGETEMPLATE1 = new PAGETEMPLATE(this)
    with (this.PAGETEMPLATE1)
       height = 16837.0
       width = 11905.0
       marginTop = 1080.0
       marginLeft = 1080.0
       marginBottom = 1080.0
       marginRight = 1080.0
       gridLineWidth = 0
    endwith

    this.PAGETEMPLATE1.STREAMFRAME1 = new STREAMFRAME(this.PAGETEMPLATE1)
    with (this.PAGETEMPLATE1.STREAMFRAME1)
       height = 11592.0
       left = 360.0
       top = 1365.0
       width = 9360.0
       form.STREAMFRAME1 = form.pagetemplate1.streamframe1
    endwith

    this.PAGETEMPLATE1.TEXTLABEL1 = new TEXTLABEL(this.PAGETEMPLATE1)
    with (this.PAGETEMPLATE1.TEXTLABEL1)
       height = 300.0
       left = 855.0
       top = 630.0
       width = 1080.0
       text = "Textlabel1"
       form.TEXTLABEL1 = form.pagetemplate1.textlabel1
    endwith

    this.firstPageTemplate = this.form.pagetemplate1
    this.form.pagetemplate1.nextPageTemplate = this.form.pagetemplate1

endclass

// Tools functions.

// Open an Ole COM program.
function bd_CreateObject( cOle, lMsgBox )
   local oOle
   if argcount() < 2
      lMsgBox = true
   endif
   try
      oOle = new OLEAutoClient( cOle )
   catch ( Exception e )
      if lMsgBox
         msgbox( "Fail Ole COM : " + cOle, "Open an Ole COM", 16 )
      endif
      return null
   endtry
   return oOle

// Erase a file.
procedure bd_fErase( cFile )
   if new file().exists( cFile )
      new file().delete( cFile )
   endif
   return

// Get the default printer.
function bd_GetDefaultPrinter()
   local oLocator
   local Items
   local oWMI
   local cReturn
   local i
   oLocator = new OleAutoClient( "WbemScripting.SWbemLocator" )
   oWMI     = oLocator.ConnectServer( ".", "root\cimv2" )
   Items    = oWMI.ExecQuery( 'Select * from Win32_Printer' )
   cReturn = ""
   for i = 0 to Items.count - 1
      if Items[ i ].Default
         cReturn := Items[ i ].Name
         exit
      endif
   endfor
   oLocator := null
   Items    := null
   oWMI     := null
   return cReturn

// Convert a number in string without space before.
function bd_lstr( nNum, nInt, nDec )
   if argcount() < 2
      nInt := 16
   endif
   if argcount() < 3
      nDec := 0
   endif
   return ltrim( str( nNum, nInt, nDec ) )

// Return the Windows version in a string.
function bd_WindowsVersion()
   local oLocator
   local oSys
   local oWMI
   local cReturn
   oLocator  = new OleAutoClient( "WbemScripting.SWbemLocator" )
   oWMI      = oLocator.ConnectServer( ".", "root\cimv2" )
   oSys      = oWMI.ExecQuery( 'Select * from Win32_OperatingSystem' )
   cReturn   = oSys[ 0 ].Caption + " build " + oSys[ 0 ].BuildNumber
   oLocator := null
   oSys     := null
   oWMI     := null
   return cReturn