Menu

FAQS

1 - How can I generate a PDF (or any other available type) without opening the preview window ?

2 - The Print Preview Toolbar is visible but all buttons are disabled (not responding) in my Top-Level form report. How to fix that ?

3 - When I run my reports with FoxyPreviewer sometimes asterisks symbols ********************* appear instead of the field. This was originally working, before using FoxyPreviewer

4 - The Search button is not appearing

5 - My VERY BIG report can't run with FoxyPreviewer

6 - Reports characters are appearing very small when printed in a dot-matrix printer

7 - How can I disable FoxyPreviewer?

8 - I can't send emails

9 - During FoxyPreviewer initialization, I get the error "Could not load the FOXYPREVIEWER report factory"

10 - Can I use FoxyPreviewer without SP2 installed in my VFP9 ?

11 - Do I need to Release FoxyPreviewer after every report ?

12 - How can I provide user specific settings using FoxyPreviewer ?

13 - When I click on the "Save" button at the preview toolbar, the file options menu does not appear - (Thanks to Hernan Cano and Jose Antonio Blasco for the find)

14 - When I send a report directly to the printer using "REPORT FORM ... TO PRINTER", without previewing, it does not print with full justification when I add the "<FJ>" tag in the User field of the report

15 - When I run my report some strange text is echoed to the screen as if a mysterious SET TALK ON had been issued.

16 - My PDFs show some strange "open boxes" when there are CRLF characters - CHR(13) + CHR(10) in fields

17 - My PDF is too big!

18 - Images are not appearing in my Excel documents

19 - in Excel documents, some fields are in the wrong column, or misaligned, or missing

20 - How to save my reports as Image files ?

21 - My reports are correctly showing in Preview, but they are not being printed at the desired printer, or are taking too much time to begin printing.

22 - The embedded images in my Project / EXE are not being exported to PDF.

23 - Why do some texts refuse to appear in the report using FoxyPreviewer?




1 - How can I generate a PDF (or any other available type) without opening the preview window ?

    • Simplified Mode
The trick is to use the new "Object Type" 's available. Just change the Object Type value to get different outputs automatically, super fast !
New Object Type's available, after you Initialize FoxyPreviewer with a "DO FOXYPREVIEWER.APP" :
  • 10 = Regular PDF
  • 11 = PDF AS IMAGE, to be used when the report is somehow complicated, with many objects over the others. The rendered PDF document pages are images, that don't allow making searches, with a baz zoom effect
  • 12 = RTF
  • 13 = XLS
  • 14 = HTML (not recommended for people who work with languages with double-byte characters) 
  • 15 = HTML  - Generates simplified HTML outputs. Good to be used in websites, no need of MSXML, faster rendering and Double-byte languages friendly


DO LOCFILE("FoxyPreviewer.App")
* Make PDF
REPORT FORM (_Samples + "\Solution\Reports\Wrapping.frx") ;
   OBJECT TYPE 10 ; && OBJTYPE 10 = PDF , 11 = PDF AS IMAGE , 12 = RTF , 13 = XLS , 14 = HTML
   TO FILE "c:\TestReport.Pdf" ; &&' Destination
   PREVIEW && Open the default PDF viewer


    • Complete (and DEPRECATED) Mode
    The trick is to use the property cDestFile. FoxyPreviewer will generate the output according to the file extension that you pass that property.

    SET PROCEDURE TO LOCFILE("FoxyPreviewer.App") ADDITIVE 
    LOCAL loReport AS "PreviewHelper" OF "FoxyPreviewer.App" 
    loReport = CREATEOBJECT("PreviewHelper") 
    WITH loReport AS ReportHelper 
            .AddReport(_Samples + "\Solution\Reports\percent.frx", "NODIALOG") 
            .cDestFile = "c:\Teste1.pdf"  && Use to create an output without previewing
            .RunReport() 
    ENDWITH 
    loReport = NULL 
    RUN /N Explorer.Exe c:\Teste1.pdf 
    



    2 - The Print Preview Toolbar is visible but all buttons are disabled (not responding) in my Top-Level form report. How to fix that ?


    Unfortunately, there is a known bug in VFP9 SP2, that makes all toolbars inside Top-Level forms not to respond. Fortunately, MS is distributing a hotfix for SP2, that fixes this issue. Please download the latest cumulative hotfix - KB968409 from
    http://http://code.msdn.microsoft.com/KB968409/Release/ProjectReleases.aspx?ReleaseId=2445

    Please follow carefully all the instructions provided in the text file included in the download, and your toolbar will start working as advertised.

    The easiest way to update your VFP9SP2 with the latest hotfixes is to install Woody's runtime installer, that can be found here: Woody's VFP9 SP2 Runtime Installer with all hotfixes (Rev 7423)
    Mirror at Foxpert.com



    3 - When I run my reports with FoxyPreviewer sometimes asterisks symbols ********************* appear instead of the field. This was originally working, before using FoxyPreviewer


    That happens because FoxyPreviewer uses the SET REPORTBEHAVIOR 90 mode, that uses GDI+ to render the texts. Unfortunately there is a slight difference of the size of the strings between these modes. To fix it, just edit your report and enlarge that field !

    You can set the new property - lExpandFields to make the report engine show the field numeric value ignoring the field size.
    Using "lExpandFields", FoxyPreviewer retrieves the value that overflowed and resends it to the report engine with an enlarged field width.

    This is a known issue, and Lisa Slater Nicholls wrote a short blog post regarding it:
    Why do report layouts in VFP9 need wider field/expression controls than in VFP8 and earlier?

    And here's another interesting text from Lisa, that explains the reason for that:
    With REPORTBEHAVIOR=90, the new report engine uses GDI+ to render output, and text string rendering requires more space than plain old GDI.
    The Report Desiginer uses GDI - not GDI+ - to render the report layout components, including all the text strings that you see. So if you visually right-align a label report element, the report designer records the leftmost co-ordinates of the element (the text start position) in the layout.
    The length of the string under GDI+ rendering will most likely be greater than what you would think, based on what you see in the Designer.



    4 - The Search button is not appearing
    I can't see the save as PDF / RTF / XLS options when clicking the save button


    Even if you setup correctly, marking these features to be shown, it may happen that FoxyPreviewer could not manage to load all of its libraries.
    Make sure NOT TO USE the property cDefaultListener. Probably this will make everything to work as desired.
    The cDefaultLIstener is for ADVANCED users only, people who really know how to use reportlisteners. And if you really need it, make sure to be using a subclass of FoxyListener, that is in PR_ReportListener.vcx in the Sources folder.



    5 - My VERY BIG report can't run with FoxyPreviewer


    Unfortunately the VFP9 reporting system has a limit of pages / characters to be rendered. In most cases, reports with more than 3000 pages do not work, raising the error "Insufficient GDI+ resources". This is not a FoxyPreviewer issue. This limitation comes from VFP. Please reduce the scope of your report, or use SET REPORTBEHAVIOR 80 to run that report.



    6 - Reports characters are appearing very small when printed in a dot-matrix printer


    This is a limitation of the VFP9 reporting system. If you are using FoxyPreviewer in the complete mode, you can setup the property lUseListener = .F. for that specific report. This will make FoxyPreviewer run the report in the ReportBehavior 80 mode.
    If you are using FoxyPreviewer in the simplified mode, unfortunately there is nothing to do, except:
    - Using FoxyPreviewer in the complete mode for this specific report 

    * ' Sample showing how to use the Complete mode for Dot-matrix printers
    LOCAL loReport AS "PreviewHelper" OF "FoxyPreviewer.App" 
    loReport = CREATEOBJECT("PreviewHelper") 
    loReport.AddReport(_Samples + "\Solution\Reports\colors.frx") &&' FRX File, Clauses 
    loReport.lUseListener = .F.
    loReport.RunReport() 
    

    or
    - Run this report using SET REPORTBEHAVIOR 80



    7 - How can I disable FoxyPreviewer?


    Sometimes for some specific reason you need to turn off FoxyPreviewer, and reset your report settings to their original status.
    Just run this single line of code:
    DO FOXYPREVIEWER.APP WITH "Release"
    

    Another simple option:
    SET REPORTBEHAVIOR 80
    
    
    





    8 - I can't send emails


    Please check carefully the "Settings options" form.
    In some computers the "MAPI" option does not work, and you should use the "CDOSYS" instead. Check with your SMTP server provider for the correct settings. 



    9 - During FoxyPreviewer initialization, I get the error "Could not load the FOXYPREVIEWER report factory"


    This happens because you are probably using an old version of ReportOutput.App

    At the FoxyPreviewer downloads page you'll find the correct versions for you to download directly. Look for the file called Report.APP VFP9 SP2* at the "Other available downloads" section:



    Another option, you can also get an updated version directly from VFPX, or even get the sources of it directly from MS and recompile it:

    To recompile ReportOutput.App:
    1 - Get the sources of them, the best place is MS Website directly
    http://www.microsoft.com/downloads/en/details.aspx?FamilyId=320B6438-BE76-48C7-A68E-1792E2AA3BF2&displaylang=en
    2 - Get the ZIP, unpack it
    3 - Go to the ReportOutput folder. Open the ReportOutput project
    4 - Recompile that project, following Leonid's suggestions, 
    5 - Use the new App instead of the original.
    Please make sure to be using the latest version, by renaming all the old versions you have in your computer.



    10 - Can I use FoxyPreviewer without SP2 installed in my VFP9 ?


    Yes !!!
    For that, you'll just need to use the latest versions of ReportOutput.App and ReportPreview.App. Please read the previous item to get instructions on how you may get those files.



    11 - Do I need to Release FoxyPreviewer after every report ?


    No !!!
    You need to initialize FoxyPreviewer ONLY ONE TIME, at your startup PRG. After that, all reports from your application will have the benefits of FoxyPreviewer without any code change. If for any reason you need to return to the original behavior, just call SET REPORTBEHAVIOR 80, to tell VFP to return to the old Reporting style. To get back to FoxyPreviewer style, just call SET REPORTBEHAVIOR 90. In fact, when you switch between different REPORTBEHAVIOR settings, FoxyPreviewer keeps loaded in memory, but is not used if you select "80". FoxyPreviewer occupies few resources, so there's no reason to release it all the time.
    If you need a full release, then
    DO FOXYPREVIEWER.APP WITH "Release"
    
    This will restore the SET PROCEDURE, SET CLASSLIB, Extension handler, and PreviewContainer



    12 - How can I provide user specific settings using FoxyPreviewer ?


    There are several ways for you to do that.
    At first run, FoxyPreviewer creates a Settings table that cotains information about the settings chosen by the user, when setting the Preferences window. This file is originally stored at the same folder of the fileFoxyPreviewer.App. So, make save your FoxyPreviewer.app file in a folder that has Read/Write permissions.
    You can also tell FoxyPreviewer the location where you want it to store the Settings file, or the folder where the settings file that you want is stored, by passing the directory as a parameter during the initialization:
    DO FOXYPREVIEWER.APP WITH "c:\myApp\Users\John"
    

    Apart from that, you can also determine which options will be available to each user in the Settings form. Apart from determining if he'll have the settings button available, you can also determine which PgFrame pages will be available, and even what controls will be enabled. Use the _Screen.oFoxyPreviewer.oSettingsDlg object. Use the Intellisense in development mode to see all the available properties or refer to the docs of FoxyPreviewer.

    DO FoxyPreviewer.App
    
    _Screen.oFoxyPreviewer.cLanguage  = "PORTUGUES"
    
    * After initializing FoxyPreviewer, here are some optional properties that you can set:
    * choosing what controls or tabs will be disabled in the settings form
    * This brings you an option to control what functions each user will have available
    WITH _Screen.oFoxyPreviewer.oSettingsDlg
     .lEnableTabPdf        = .F.
     .lEnableLanguage      = .F.
     .lEnableChkSaveasTxt  = .F.
     .lEnableChkSaveasHtml = .F.
    ENDWITH 
    



    13 - When I click on the "Save" button at the preview toolbar, the file options menu does not appear - (Thanks to Hernan Cano and Jose Antonio Blasco for the find)


    First of all, make sure to be using the latest version of FoxyPreviewer. There was a related issue that happened with people who have the "SET KEYCOMP TO DOS" setting enabled. This was fixed since v2.60.
    Apart from that, some incompatibilities with some visual or non visual OLE controls (active-X) may happen. FoxyPreviewer can get confused if these objects maintain the focus during the Report run. Please make sure to remove the focus from any Active-X object, such as the WebBrowser control, the MS TreeView control, etc, and run the REPORT PREVIEW.



    14 - When I send a report directly to the printer using "REPORT FORM ... TO PRINTER", without previewing, it does not print with full justification when I add the "<FJ>" tag in the User field of the report


    The FOXYLISTENER, that is who is responsible for the FullJustify, and other effects is not initialized by default. FoxyPreviewer was created originally to manipulate previews, but there's something that you can still do for direct printing using that Listener:

    DO LOCFILE("FoxyPreviewer.App") && Init FoxyPreviewer
    * Create an instance of the FoxyListener from the class stored in the APP
    LOCAL loListener AS ReportListener 
    loListener = NEWOBJECT("FOXYLISTENER", "PR_REPORTLISTENER.VCX", "FoxyPreviewer.App")
    loListener.ListenerType = 0 && Set the listener to "Printing" mode
    REPORT FORM YourReportWithFJ TO PRINTER OBJECT loListener && Call the report normally
    




    15 - When I run my report some strange text is echoed to the screen as if a mysterious SET TALK ON had been issued.


    Cathy Pountney has already posted about this issue: SET TALK appears to be on when running reports with SP2



    This issue should not appear in the most recent versions of FoxyPreviewer, because it fixes the original VFP9 report engine. If for any reason you need to use a deprecated version, make sure to use the most recent versions of the Report.App files at the FoxyPreviewer downloads pageThere you'll find the correct versions for you to download directly. 



    16 - My PDFs show some strange "open boxes" when there are CRLF characters - CHR(13) + CHR(10) in fields




    This is a known issue in the PDF library, external to FoxyPreviewer. To avoid this issue, make sure to set the property "lEmbedFonts = .F."




    17 - My PDF is too big!


    Try setting the property "lEmbedFonts = .F."




    18 - Images are not appearing in my Excel documents


    The Worksheets engine uses the Excel XML format, that unfortunately does not support images.




    19 - in Excel documents, some fields are in the wrong column, or misaligned, or missing


    The issue is related to the original alignment of the FRX. Make sure to align the title labels with the fields below them, that contain the values.

    Open your report, and change the "x" cordinate position of the label titles, and make new tests with the XLS output, and you'll probably find a good position.
    In fact, there is no missing values, but they are not aligned.
    The best to do is to use the menu "Format-Align", to make sure all the needed fields are correctly aligned.



    How to set a password to my PDF document?


    You need to setup at least 3 properties: 'lPDFEncryptDocument = .T.' , 'cPdfMasterPassword = "YourPwd1", 'cPDFUserPassword = "YourPwd2" . To encrypt a document, you ALWAYS need to setup 2 different passwords! One for the "Master", and the other for the "User" passwords. Check the related properties in the documentation for more details.

    DO FoxyPreviewer.app
    _Screen.oFoxyPreviewer.lPDFEncryptDocument = .T.
    _Screen.oFoxyPreviewer.cPDFUserPassword = "pwdmaster"
    _Screen.oFoxyPreviewer.cPDFMasterPassword = "pwduser"
    REPORT FORM (ADDBS(_Samples) + "SOLUTION\REPORTS\PERCENT.FRX") OBJECT TYPE 10 TO FILE "c:\Test1.pdf" PREVIEW
    



    20 - How to save my reports as Image files ?


    DO Foxypreviewer.App
    LOCAL loListener AS ReportListener
    loListener = CREATEOBJECT("FoxyListener")
    loListener.ListenerType = 3
    REPORT FORM (ADDBS(_Samples) + "Solution\Reports\colors.FRX") OBJECT loListener
    
    LOCAL lnFileType
       && 100 - EMF
       && 101 - TIFF
       && 102 - JPEG
       && 103 - GIF
       && 104 - PNG
       && 105 - BMP
    lnFileType = 104 && PNG
    
    FOR lnPage = 1 TO loListener.PageTotal 
       loListener.OutputPage(lnPage, "c:\Test" + ALLTRIM(STR(lnPage)) + ".png", lnFileType)
    ENDFOR 
    loListener = NULL
    

    Language flags by DoubleJDesign




    21 - My reports are correctly showing in Preview, but they are not being printed at the desired printer, or are taking too much time to begin printing.


    Make sure to UNMARK the option “Save Printer Environment” of your reports. If marked, the printing engine will force the printing to that Printer environment. If that printer is not available, the report will not print.

    From VFP9 Help file: "Sometimes you design a report always to be printed in a single environment, requiring settings specific to a single printer. In this case, you can opt to save the Printer Environment with your report. Even in such a case, however, it is often better practice to omit the printer environment settings from the report or label definition file (frx or lbx)."







    22 - The embedded images in my Project / EXE are not being exported to PDF.


    That happens because "FoxyPreviewer.APP" is an external library, and cannot access the files embedded in your EXE. In this case, you have 2 options:

    OPTION #1 - Store the image files outside your EXE, in a drive location, that can be passed with the full address, so that FoxyPreviewer.App can "see" these files and include them in your desired output.

    OPTION #2 - To make these images appear automatically, without the need of removing the image files from your project.
    - First of all, make sure to be using the latest version of FoxyPreviewer.
    - Include the program "FOXYGETIMAGE.PRG" in your EXE project. This file is found at the "Sources" folder of FoxyPreviewer. This file will provide access to FoxyPreviewer to get the needed images from the executable. Please note that this may bring some security issues to your EXE, because this program will allow FoxyPreviewer and other programs to access the embedded images of your EXE. I recommend you to open this file, and analyze it. You can make any changes you find necessary to it, for example to make it allow only some specific files to be accessed. Right now, FOXYGETIMAGE.PRG allows accessing only image files, with the extensions: "BMP", "GIF", "PNG", "JPG", "JPEG", "TIFF", "TIF", "EMF".





    23 - Why do some texts refuse to appear in the report using FoxyPreviewer?


    FoxyPreviewer relies on SET REPORTBEHAVIOR 90, that uses GDI to generate the outputs. Unfortunately, not all fonts are compatible with GDI. By definition, a font needs to be "TrueType", but there still remain some cases when some fonts will not work.

    The best to do when testing your reports is to try replacing the font with another well known, such as Tahoma, Arial or Courier New.

    You can also check if a font is compatible with GDI+ by using the script below:



    LOCAL lcFontName, llAllowed
    lcFontName = GETWORDNUM(GETFONT(),1,",")
    llAllowed  = IsGdipFont(lcFontName)
    MESSAGEBOX("The font " + lcFontName + " is " + IIF(llAllowed, "", "NOT ") + ;
         "compatible with GDI+ !")
    

    ... and here's the function:

    FUNCTION IsGdipFont
    
    LPARAMETERS tcFont
    * The Gdi+ API declarations were "Aliased" to avoid problems with other possible Gdi+ classes 
    * working at the same time
    * GDI+ Initialization and Shutdown
    DECLARE LONG GdiplusStartup IN GDIPLUS.DLL ;
       AS FBC_GdiplusStartup ;
       LONG @ token, STRING @ INPUT, LONG @ OUTPUT
    
    DECLARE LONG GdiplusShutdown IN GDIPLUS.DLL ;
       AS FBC_GdiplusShutdown ;
       LONG token
    
    
    * FontFamily functions
    DECLARE INTEGER GdipCreateFontFamilyFromName IN GDIPLUS.DLL ;
       AS FBC_GdipCreateFontFamilyFromName ;
       STRING familyname, INTEGER FontCollection, INTEGER @FontFamily
    
    DECLARE INTEGER GdipDeleteFontFamily IN GDIPLUS.DLL ;
       AS FBC_GdipDeleteFontFamily ;
       INTEGER FontFamily
    
    LOCAL lcStartupInput, lcGdipToken
    lcStartupInput = CHR(1) + REPLICATE(CHR(0), 15) && GdiplusStartupInput structure (sizeof = 16)
    * Initialize GDI+
    lcGdipToken = 0
    IF FBC_GdiplusStartup(@lcGdipToken, @lcStartupInput, 0) != 0
       RETURN .F. && Could not initialize Gdi+
    ENDIF
    
    LOCAL lnStatus, lhFontFamily, llCanUse
    lhFontFamily = 0
    
    lnStatus = FBC_GdipCreateFontFamilyFromName(STRCONV(tcFont,5), 0, @lhFontFamily)
    
    llCanUse = lhFontFamily <> 0
    IF llCanUse
       * Clear the Gdi+ FontFamily created
       lnStatus = FBC_GdipDeleteFontFamily(lhFontFamily)
    ENDIF 
    
    * Clear the Gdi+ handle
    lnStatus = FBC_GdiplusShutdown(lcGdipToken)
    
    RETURN llCanUse