Print to a file using reports
How can I print directly to a file such as PDF or Postscript?
Using capabilities of your report engine
Some report engines that are often used with Visual DataFlex have native support for generating the report as a file using the PDF format. Examples are:
- Crystal Reports can save a report to a PDF file
- VPE has this capability
- List&Label includes a PDF engine
Using WinPDF Pro
The example below uses WinPDF Pro printer driver for the PDF generation, Winprint (or at least the report object in VDF) for the reporting and MAPI for sending the mails directly. Note that each invoice in this example is printed individually.
Pardon the jumbled looking code, but with Win2PDF pro you can do the following:
function JumpStartReport string sInvoice boolean bEmail string sEmailAddress returns boolean
boolean bExists bMailed
integer iToPrinter iRepObj iHr iMn iRetval
string sVal sDateTime sHr sMn sSetupFile sPath sFilename
string sKey sSubKey sOldRegRoot sOldRegBranch sCurrentDevice sMessage
handle hoMapiSession
dWord dWWSecurityOptions dWWFileOptions dRetVal
date dToday
//
get Report_Object_Id To iRepObj
//
set pSelStart1 of iRepObj To sInvoice
set pSelStop1 of iRepObj To sInvoice
//
if (bEmail) ;
set OutPut_Device_Mode to PRINT_TO_PRINTER_NO_DIALOG
else ;
set OutPut_Device_Mode to PRINT_TO_PRINTER
//
if (bEmail) begin
move ("Please find attached your invoice" * sInvoice + ".") to sMessage
get DFGetCurrentDevice of iRepObj to sCurrentDevice
send DFSetDevice of iRepObj "Win2PDF"
//
get psHome of (phoWorkspace(ghoApplication)) to sPath
move (sPath + "Documents\") to sPath
move ("Invoice_" + sInvoice + ".pdf") to sFilename
Get_Registry_Root to sOldRegRoot sOldRegBranch
move "Dane Prairie Systems" to sKey
move "Win2PDF" to sSubKey
Set_Registry_Root to HKEY_LOCAL_MACHINE "SOFTWARE"
Set_Foreign_Profile_String sKey sSubKey "PDFFileName" to (sPath + sFilename)
Set_Foreign_Profile_String sKey sSubKey "PDFTitle" to ("Invoice " + sInvoice)
Set_Foreign_Profile_String sKey sSubKey "PDFAuthor" to "Calendar Invoicing"
Set_Foreign_Profile_String sKey sSubKey "PDFSubject" to ("Calendar Invoice")
Set_Registry_Root to sOldRegRoot sOldRegBranch
//Get CheckFileExists sFileName to bExists
//If (bExists) Set pbOrgCopyPrinted to TRUE
end // if (bEmail) begin
//
send Run_Report to iRepObj
//
if (NOT(bEmail)) procedure_return
// restore the print device
send DFSetDevice of iRepObj sCurrentDevice
// gotta have it
move oMapiSession to hoMapiSession
//showln hoMapiSession
if (NOT(hoMapiSession > 0)) begin
send Stop_Box "Unable to email invoice."
procedure_return
end
send DoInit of hoMapiSession
set psMessageSubject of hoMapiSession to ("Daffie Duck Invoice" * sInvoice)
set psMessageText of hoMapiSession to sMessage
send DoAddReceiver of hoMapiSession MAPI_TO (trim(sEmailAddress)) "" "" 0
send DoAddAttachment of hoMapiSession (sPath + sFilename) sFilename
get Logon of hoMapiSession "" "" 0 to iRetval
//showln iRetval
get SendMail of hoMapiSession (MAPI_NEW_SESSION IOR MAPI_LOGON_UI) TRUE to iRetval
//
showln (sInvoice * trim(sEmailAddress) * string(iRetval))
move (iRetval = 0) to bMailed
//
get Logoff of hoMapiSession to iRetval
//
function_return bMailed
end_function // JumpStartReport
Using VB.net
Not VDF code, but a VB.net code sample that you can use to model against (or use it by wrapping it in a small .net binary)
Using Acrobat
Acrobat Reader is the original product for reading PDF documents. The product for creating PDF documents is distiller.
If you want to use the Reader component to print an existing document, then beware that it has been reported that the activeX control doesn't get properly released from memory. Last version that did this properly was version 4. Unfortunately newer versions are getting more bloated with each release.
Using xpdf
Over at http://www.glyphandcog.com you can find the xpdfprint component. The xpdf engine is one of the more common ways of rendering your PDF documents on unix/linux environment. This is a stable component for print and for 'overlaying' text on print time (so without ammending the PDF)
Using List&Label
List and Label can be used as your Report Engine in VDF, see also www.combit.net
L&L includes a royalty free designer that you can distribute with your app and which is able to write to a variety of file formats including PDF, Excel and HTML as well as printing directly to your printer (of course)
Using PDFCreator
You may also want to take a look at PDFCreator -- a freeware PDF printer app that works great, and although I haven't done so, I believe it could be incorporated for use from a vdf program
AloahaPDF Studio
AloahaPDF Studio can be used for amending protected PDF's. Also for signing PDF's
PDFSplitMerge
PDFSplitMerge from Guangming Software can be used for splitting and merging of PDF documents.
CutePDF
Starting with a PDF that has form fields, for example created with Adobe Live Cycle Designer.
You can do the following with a VDF14 program: 1. Create an XML file (or stream) with the data for the form 2. Imports the data into the PDF form shell producing a new filled and flattened PDF form (uses CutePDF SDK u$250 per server)
CutePDF can also be used to export data to XML or XFDF or FDF