Printers

Are there any good code examples available for using the printer routine libraries in a managed cobol program?

  • What is it that you are trying to achieve?

    There are some examples in our knowledgebase (searchable from the Search field above) or on the Net Express forum. if you look for terms like "print" then you will find some specific examples of how to perform various tasks but I could not find a generic example that showed how to use all of the functionality.

    Printing in .NET can also be achieved by using the PrintDocument and other classes.

    I tried to create a program that would demonstrate how to get the Printer name and properties from the PrintDialog and then set them using PC_PRINTER_DEFAULT_NAME and PC_PRINTER_DEFAULT_PROPERTIES so that they would work with printer redirection and I discovered that some of the properties such as print orientation are being ignored so I wrote this up as a bug.

    I am including the program here anyways. The following will attempt to set the orientation and the number of copies. You must set the tunable printer_redirection on order for this to work properly.

          $set ilusing"System.Windows.Forms"
           identification division.
           program-id. manProgram1.
    
           environment division.
           configuration section.
               select print-file assign to PRINTER
                                 file status is file-status.
           data division.
           file section.
           fd print-file.
           01 print-rec  pic x(20).
           working-storage section.
           78  DMORIENT-PORTRAIT  value 1.
           78  DMORIENT-LANDSCAPE value 2.
           78 P-PAPERSIZE   value 1.
           78 P-PAPERLENGTH value 2. 
           78 P-PAPERWIDTH  value 4.
           78 P-SCALE       value 8.
           78 P-COPIES      value 16.
           78 P-PAPERTRAY   value 32.
           78 P-PRINTQUALITY value 64.
           78 P-COLOR        value 128.
           78 P-DUPLEX       value 256.
           78 P-ORIENTATION  value 512.
           78 P-YRESOLUTION  value 1024.
    
           01 file-status       pic x(2) value spaces.
           01 flags             pic x(4) comp-5.
           01 status-code       pic x(4) comp-5  value zeroes.
           01 printer-properties.
              03 pp-len         pic x(2) comp-5. 
              03 pp-papersize   pic s9(4) comp-5. 
              03 pp-paperlength pic s9(4) comp-5. 
              03 pp-paperwidth  pic s9(4) comp-5. 
              03 pp-scale       pic s9(4) comp-5. 
              03 pp-copies      pic s9(4) comp-5. 
              03 pp-papertray   pic s9(4) comp-5. 
              03 pp-printquality pic s9(4) comp-5. 
              03 pp-color       pic s9(4) comp-5. 
              03 pp-duplex      pic s9(4) comp-5. 
              03 pp-orientation pic s9(4) comp-5. 
              03 pp-yresolution pic s9(4) comp-5. 
    
           01 printer-default-name.
              03 pd-printer-name-len    pic x(2) comp-5.
              03 pd-printer-name        pic x(128).
              
           01 Printer-RetCode         pic 9(4) comp-5.
                     
           78 SET-DEFAULT-PRINTER     value h"0001".
           78 BROWSE-DEFAULT-PRINTER  value h"0002".
           01 name-len                 pic x(2) comp-5 value zeroes.
           procedure division.
               declare myprintdialog as type PrintDialog = new PrintDialog
               if myprintdialog::ShowDialog not = type DialogResult::OK
                   stop run
               end-if
               
               move myprintdialog::PrinterSettings::PrinterName to pd-printer-name
               move myprintdialog::PrinterSettings::PrinterName::Length to pd-printer-name-len
               move length of printer-properties to pp-len
               compute flags = p-copies   p-orientation
               move myprintdialog::PrinterSettings::Copies to pp-copies
               if myprintdialog::PrinterSettings::DefaultPageSettings::Landscape = true
                  move dmorient-landscape to pp-orientation
               else
                  move dmorient-landscape to pp-orientation
               end-if
    
               call "PC_PRINTER_DEFAULT_NAME"
                  using by value 1
                        by reference printer-default-name
                  returning    status-code
               end-call
           
               if status-code not = 0
                  display "Unable to set a default printer = " status-code
                  stop run
               end-if
    
               call "PC_PRINTER_DEFAULT_PROPERTIES"
                  using by value flags
                        by reference printer-properties
                  returning    status-code
               end-call
               if status-code not = 0
                  display "Unable to set printer props = " status-code
                  stop run
               end-if
    
               open output print-file
               display file-status
               move all "A" to print-rec
               write print-rec
               display file-status
               close print-file
               
               goback.