# Directives

WINPRT_SETUP | Windows Printer Setup

## Formats

1. | Read Current Selection: | WINPRT_SETUP [SERVER] READ var$ [,ERR=stmtref]
2. | Read Properties: | WINPRT_SETUP [SERVER] READ PROPERTIES var$ [,ERR=stmtref]
3. | Update Selection: | WINPRT_SETUP [SERVER] WRITE printer$ [,ERR=stmtref]
4. | Update Properties: | WINPRT_SETUP [SERVER] WRITE PROPERTIES settings$ [,ERR=stmtref]
5. | List Available Printers: | WINPRT_SETUP [SERVER] LIST var$ [,ERR=stmtref]
6. | List Printer Names Only: | WINPRT_SETUP [SERVER] DIRECTORY var$ [,ERR=stmtref]
7. | Display Printer Dialogue: | WINPRT_SETUP INPUT var$ [,ERR=stmtref]

Where:

printer$ | String expression to select the current printer by name.
settings$ | String expression for assigning property values.
SERVER | Optional keyword enabling access to printers defined on a Windows server when using WindX.
stmtref | Program line number or statement label to which to transfer control.
var$ | String variable to receive the returned value for printer name(s) or properties.

## Description

Use the WINPRT_SETUP directive to control settings for the currently selected Windows printer and its properties.

## WINPRT_SETUP Properties

The default properties of a printer are determined by the individual printer/driver manufacturers. Some properties (e.g. collate, ordered printing) are not available for all drivers. Others (e.g. font, point size) vary from printer to printer. Default paper size seems to be consistently letter size (8 1/2" x 11", expressed as PAPERSIZE=1 for DMPAPER_LETTER).

See Paper Sizes for a list of PAPERSIZE=num codes.

The properties that can be assigned to your Windows printer (printer/driver dependent) include the following:

| COLLATE=YES | NO | AUTO | PAPERLENGTH=num (in 1/10th of mm)
| COLOR=YES | NO (or COLOUR) | PAPERSIZE=num
| COPIES=num | PAPERWIDTH=num (in 1/10th of mm)
| DUPLEX=num | QUALITY=num
| FILE=+filename | -filename | RANGE=from:to
| FORCE6X10 = YES | NO | RESOLUTION=num:num
| MARGINS=left:top:right:bottom | SCALE=num (%)
| OFFSET=x:y | TITLE=<report title>
| ORIENTATION=LANDSCAPE | PORTRAIT | TRUETYPE=num

Most properties are self-explanatory, such as COPIES=1, and some need a little explanation. For example, the assignment used for the offset property OFFSET=x:y is in thousandths of an inch and is the offset to the print area from the upper left corner of the page. (e.g. OFFSET=750:500 offsets the print area three-quarters of an inch from the left margin and half an inch down from the top margin.)

Valid numeric settings for TRUETYPE=num are:

> 1 | Print TT fonts as graphics
> 2 | Download TT fonts as soft fonts
> 3 | Substitute device fonts for TT fonts

Valid numeric settings for DUPLEX=num (if capable of double-sided printing) are:

> 1 | Duplex is Off
> 2 | Duplex in Portrait
> 3 | Duplex in Landscape

Valid numeric settings for QUALITY=num are:

> -1 | Draft
> -2 | Low Resolution
> -3 | Medium Resolution
> -4 | High Resolution

The TITLE option allows the programmer to specify the Windows Spooler title for the report. If not specified, the system will use the window caption line.

(The TITLE option was added in PxPlus v7.65.)

## FORCE6X10 Option

Normally, when printing a proportional font to a graphical Print device, the system will determine the logical column width based on the average width of the characters for the font requested. This can cause minor problems with output alignment since fonts often vary slightly between operating systems and at different resolutions.

To resolve this problem, the application may include FORCE6X10=YES, which will force the system to set the logical column width as 60% of the line height (which is what is specified in font size specifications). The 6x10 ratio is derived from the fact that historically, printers printed 6 lines to the inch and 10 characters per inch; thus, the character width was 60% the line height. Most common fixed width fonts also adhere to this ratio.

Specifying FORCE6X10=YES will automatically adjust the column width to 60% of the line height given in the FONT specification; thus, outputting to *WINPRT*, *PDF* and *BITMAP*, regardless of the chosen font, will remain consistent in terms of general page layout.

## Margin Control

The MARGINS= property accepts values for left, top, right and bottom in 1000ths of an inch. These values affect both text mode printing (e.g. print (x)"ABC",) and graphical printing (e.g. print (x)'PICTURE(...),).

Example:

The following example indicates a one-inch margin on all sides of the page:

> winprt_setup write properties "MARGINS=1000:1000:1000:1000"

The default values are -1:-1:-1:-1, which is the equivalent of no margin setting. If only two values are given, the right and bottom margins default to the hardware-imposed print margins. A value of -1 indicates that the printer is to use its default physical margin.

The software internally adjusts the top and left margins by any hardware imposed printing offsets. Most laser or ink jet printers impose a margin around the edge of the paper where they cannot print. These values are taken into account by the property settings to assure consistent output positioning regardless of printer type.

#### Note:
Due to printer wear and tear, paper slippage, and other outside factors, the output position is never guaranteed to be 100% correct; however, the PxPlus logic for handling margins is consistent with most other Windows-based software. The alignment will be similar to the output from other programs printed on the same printer using the same operating system and printer drivers.

The keyword MARGIN may be used instead of MARGINS, if preferred; however, WINPRT_SETUP READ PROPERTIES always returns MARGINS= as the property name.

## Paper Sizes

The chart below lists paper sizes according to the Windows system definition file print.h, with the Internal Name followed by the number to use as the PAPERSIZE=num option for the print drivers, followed by a more general description of the paper.

Paper: Internal Name | # | Size/Description
DMPAPER_LETTER | 1 | Letter 8 1/2 x 11 in.
DMPAPER_LETTERSMALL | 2 | Letter Small 8 1/2 x 11 in.
DMPAPER_TABLOID | 3 | Tabloid 11 x 17 in.
DMPAPER_LEDGER | 4 | Ledger 17 x 11 in.
DMPAPER_LEGAL | 5 | Legal 8 1/2 x 14 in.
DMPAPER_STATEMENT | 6 | Statement 5 1/2 x 8 1/2 in.
DMPAPER_EXECUTIVE | 7 | Executive 7 1/4 x 10 1/2 in.
DMPAPER_A3 | 8 | A3 297 x 420 mm
DMPAPER_A4 | 9 | A4 210 x 297 mm
DMPAPER_A4SMALL | 10 | A4 Small 210 x 297 mm
DMPAPER_A5 | 11 | A5 148 x 210 mm
DMPAPER_B4 | 12 | B4 250 x 354
DMPAPER_B5 | 13 | B5 182 x 257 mm
DMPAPER_FOLIO | 14 | Folio 8 1/2 x 13 in.
DMPAPER_QUARTO | 15 | Quarto 215 x 275 mm
DMPAPER_10X14 | 16 | 10x14 in.
DMPAPER_11X17 | 17 | 11x17 in.
DMPAPER_NOTE | 18 | Note 8 1/2 x 11 in.
DMPAPER_ENV_9 | 19 | Envelope #9 3 7/8 x 8 7/8
DMPAPER_ENV_10 | 20 | Envelope #10 4 1/8 x 9 1/2
DMPAPER_ENV_11 | 21 | Envelope #11 4 1/2 x 10 3/8
DMPAPER_ENV_12 | 22 | Envelope #12 4 \276 x 11
DMPAPER_ENV_14 | 23 | Envelope #14 5 x 11 1/2
DMPAPER_CSHEET | 24 | C size sheet
DMPAPER_DSHEET | 25 | D size sheet
DMPAPER_ESHEET | 26 | E size sheet
DMPAPER_ENV_DL | 27 | Envelope DL 110 x 220 mm
DMPAPER_ENV_C5 | 28 | Envelope C5 162 x 229 mm
DMPAPER_ENV_C3 | 29 | Envelope C3 324 x 458 mm
DMPAPER_ENV_C4 | 30 | Envelope C4 229 x 324 mm
DMPAPER_ENV_C6 | 31 | Envelope C6 114 x 162 mm
DMPAPER_ENV_C65 | 32 | Envelope C65 114 x 229 mm
DMPAPER_ENV_B4 | 33 | Envelope B4 250 x 353 mm
DMPAPER_ENV_B5 | 34 | Envelope B5 176 x 250 mm
DMPAPER_ENV_B6 | 35 | Envelope B6 176 x 125 mm
DMPAPER_ENV_ITALY | 36 | Envelope 110 x 230 mm
DMPAPER_ENV_MONARCH | 37 | Envelope Monarch 3.875 x 7.5 in.
DMPAPER_ENV_PERSONAL | 38 | 6 3/4 Envelope 3 5/8 x 6 1/2 in.
DMPAPER_FANFOLD_US | 39 | US Std Fanfold 14 7/8 x 11 in.
DMPAPER_FANFOLD_STD_GERMAN | 40 | German Std Fanfold 8 1/2 x 12 in.
DMPAPER_FANFOLD_LGL_GERMAN | 41 | German Legal Fanfold 8 1/2 x 13 in.
DMPAPER_USER | 256 | (undefined - user custom size)

#### Warning!
The PostScript driver mistakenly uses DMPAPER_ values between * 50 and 56. Do not use this range when defining new paper sizes.

## Format 1

Read Selection

WINPRT_SETUP READ var$[,ERR=stmtref]

Use the WINPRT_SETUP READ format to read the currently selected default printer name. The value returned in var$ will be the operating system name of an existing physical queue.

Example:

> winprt_setup read PRTR$
> ?PRTR$
> HPLaserJet III on \\machine_1\hp

## Format 2

Read Properties

WINPRT_SETUP READ PROPERTIES var$[,ERR=stmtref]

Use the WINPRT_SETUP READ PROPERTIES format to read the current settings of the properties associated with your current printer. The values are returned in a semi-colon separated list.

Example:

> open (1)"*WINPRT*"
> winprt_setup read properties PROP$
> ?PROP$
> RANGE=ALL; COLLATE=NO; COPIES=1; ORIENTATION=PORTRAIT; PAPERSIZE=1; RESOLUTION=300:300; OFFSET=0:0; TRUETYPE=2; DRIVER=WINSPOOL

## Format 3

Update Selection

WINPRT_SETUP WRITE printer$[,ERR=stmtref]

Use the WINPRT_SETUP WRITE format to write or change the currently selected default printer using a string expression to pass the system the name of the printer to use.

Example:

> winprt_setup write "Canon BJC-4300 on \\machine_2\canon"

## Format 4

Update Properties

WINPRT_SETUP WRITE PROPERTIES settings$[,ERR=stmtref]

Use the WINPRT_SETUP WRITE PROPERTIES format to write or change the current properties using a string expression to pass the system the property assignments to use.

Example:

> P$="COPIES=2;ORIENTATION=LANDSCAPE"
> winprt_setup write properties P$

## Format 5

List Available Printers

WINPRT_SETUP LIST var$[,ERR=stmtref]

Use WINPRT_SETUP LIST to obtain a comma-delimited list of all the printers defined in the system. Note that if you use this format on a workstation that does not have printers installed, there will be no value in your string variable, and PxPlus will return an Error #12: File does not exist (or already exists).

Example:

> winprt_setup list choices$
> ? choices$
> HP LaserJet III on \\machine_1\hp,Envoy 7 Driver on EVY:,Canon BJC-4300 on \\machine_2\Canon,Acrobat PDFWriter on LPT1:,Default PostScript Printer on LPT1:,Default PostScript Pri (Copy 1) on LPT1:,Acrobat Distiller 3.0 on LPT1:,Acrobat Distiller 3.0 (Copy 1) on LPT1:,

## Format 6

List Printer Names Only

WINPRT_SETUP DIRECTORY var$

Using the DIRECTORY keyword returns a comma-delimited list of printers with just the printer portion of the names, excluding the ON Device portion.

Example:

> winprt_setup directory choices$
> ? choices$
> HP LaserJet III,Envoy 7 Driver,Canon BJC-4300,Acrobat PDFWriter,Default PostScript Printer,Default PostScript Pri (Copy 1),Acrobat Distiller 3.0, Acrobat Distiller 3.0 (Copy 1),HP LaserJet 2100 Series PCL 6,

## Format 7

Display Printer Dialogue

WINPRT_SETUP INPUT var$[,ERR=stmtref]

Use the WINPRT_SETUP INPUT format to display the Windows Printer Selection dialogue box, allowing the user to select a printer. The string variable returns the name of the printer selected by the user.

Example:

> ? current$ ! Colour inkjet is current setting
> Canon BJC-4300 on \\machine_1\canon
> winprt_setup input current$ ! User changes current selection to laser
> ? current$
> HP LaserJet 2100 Series PCL 6 on \\machine_1\hp

## See Also

*WINPRT* Windows Printing
*WINDEV* Raw Print Mode
*WINPRT* / *WINDEV* Queues
*WINPRT* / *WINDEV* Printing Examples
*PDF* PDF Print Interface