Highlighted
Absent Member.
Absent Member.
342 views

Printers

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

0 Likes
1 Reply
Highlighted
Micro Focus Expert
Micro Focus Expert

RE: Printers

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.

0 Likes
The opinions expressed above are the personal opinions of the authors, not of Micro Focus. By using this site, you accept the Terms of Use and Rules of Participation. Certain versions of content ("Material") accessible here may contain branding from Hewlett-Packard Company (now HP Inc.) and Hewlett Packard Enterprise Company. As of September 1, 2017, the Material is now offered by Micro Focus, a separately owned and operated company. Any reference to the HP and Hewlett Packard Enterprise/HPE marks is historical in nature, and the HP and Hewlett Packard Enterprise/HPE marks are the property of their respective owners.