Landscape printing directly under Windows

Ladies and Gentlemen,

I have used cobconfig.cfg Environment Variable and the output was just OK in a A4 style sheet.

But now I have got to print a report in the landscape style.

Any hints and tips.

Thanks a lot in advance.

Cheers.

Rui Natal

  • Can you please provide some more detail as to how you are printing and whether this is managed code or native code?

    You can look at some of the Printer Library routines in the docs here:

    Routines that let you set orientation include:

    PC_PRINT_FILE
    PC_PRINTER_OPEN
    PC_PRINTER_DEFAULT_PROPERTIES

    You can change the current default printer using PC_PRINTER_DEFAULT_NAME.

    Thanks.

  • We've had a number of problems trying to print in landscape in Visual COBOL. This was brought to the attention of Microfocus support who decided, in their wisdom, that there was a problem in doing so and we've received a note to say that a 'fix' for printing in landscape would be forthcoming in VisCobol 2.1. Unless of course anyone knows different?

  • We've had a number of problems trying to print in landscape in Visual COBOL. This was brought to the attention of Microfocus support who decided, in their wisdom, that there was a problem in doing so and we've received a note to say that a 'fix' for printing in landscape would be forthcoming in VisCobol 2.1. Unless of course anyone knows different?

  • Verified Answer

    There is a known problem in Visual COBOL when trying to set landscape mode using PC_PRINTER_OPEN in managed code.
    It will be ignored.

    This has been fixed but will not be available until Visual COBOL 2.2, not 2.1.

    The problem only exists in managed code as it prints in landscape mode fine in native code.

    Also, I have found a workaround for the problem by calling PC_PRINTER_SET_DEFAULTS to change the orientation to landcape mode before the PC_PRINTER_OPEN call is done.

    This assumes that the printer you are opening in PC_PRINTER_OPEN is the current default printer. If it is not then you can change it to be the default printer by using PC_PRINTER_DEFAULT_NAME.

    Example of workaround for setting printer to landcape mode in managed code:

          id division.
          program-id.   testorient.
          working-storage section.
          01 printer-handle pic x(4) comp-5.
          01 document-title.
             05 pn-name-length    pic x(2) comp-5 value 29.
             05 pn-name           pic x(100)
                value "HP Officejet Pro L7500 Series".
          01 flags                    pic x(4) comp-5 value 8.
          01 window-handle    pic x(4) comp-5 value 0.
          01 status-code         pic x(4) comp-5.
          01 print-buffer          pic x(20) value "this is a test".
          01 print-buffer-len    pic x(4) comp-5 value 20.
          01 def-flags             pic x(4) comp-5 value 512.
          01 properties.
             05 cblte-pp-len     pic x(2) comp-5.
             05 cblte-pp-papersize     pic s9(4) comp-5.
             05 cblte-pp-paperlength   pic s9(4) comp-5.
             05 cblte-pp-paperwidth    pic s9(4) comp-5.
             05 cblte-pp-scale         pic s9(4) comp-5.
             05 cblte-pp-copies        pic s9(4) comp-5.
             05 cblte-pp-papertray     pic s9(4) comp-5.
             05 cblte-pp-printquality  pic s9(4) comp-5.
             05 cblte-pp-color         pic s9(4) comp-5.
             05 cblte-pp-duplex        pic s9(4) comp-5.
             05 cblte-pp-orientation   pic s9(4) comp-5 value 2.
             05 cblte-pp-yresolution   pic s9(4) comp-5.
          procedure division.
               move length of properties to cblte-pp-len
               call "PC_PRINTER_DEFAULT_PROPERTIES"
                  using by value def-flags
                        by reference properties
                  returning status-code
               end-call
               call "PC_PRINTER_OPEN"
                  using printer-handle
                        document-title
                        by value  flags
                        by value  window-handle
                  returning status-code
               end-call
               call "PC_PRINTER_WRITE"
                  using printer-handle
                        print-buffer
                        by value  print-buffer-len
                  returning status-code
               end-call
               call "PC_PRINTER_CLOSE" using printer-handle
                                       returning status-code
               stop run.