ONLINE HELP
 WINDEVWEBDEV AND WINDEV MOBILE

Help / WLanguage / WLanguage functions / Standard functions / Print functions
  • Origin and physical margins
  • Managing the parameter
  • Combining positions ( parameter)
  • Printing in Java and Android
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Browser code
WINDEV Mobile
AndroidAndroid Widget iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Others
Stored procedures
Allows you to manage the horizontal position (X coordinate) of print cursor in the page. You can:
  • find out the current horizontal position,
  • modify the horizontal position of print cursor.
Remark: When printing a character string, the current vertical position points to the top of the string to print. The bottom print line depends on the height of the fonts used in the printed line.
Example
// Draw vertical lines separated by two millimeters
// across the entire page width
iVLine(0, iPageHeight(), 1) // Draws a line
iXPos(iXPos() + 2)  // Shifts  by 2
iVLine(0, iPageHeight(), 3) // Draws a line
iEndPrinting()
Syntax

Finding out the horizontal position of print cursor Hide the details

<Result> = iXPos()
<Result>: Real
Current horizontal position of cursor (in millimeters).

Modifying the horizontal position of print cursor Hide the details

<Result> = iXPos(<Horizontal position> [, <Immediate calculation>])
<Result>: Character string
Requested horizontal position.
<Horizontal position>: Real
New horizontal position (X-coordinate) of print cursor (in millimeters).
<Immediate calculation>: Optional boolean
  • True (by default) to immediately calculate the horizontal position.
  • False if the horizontal position must be calculated when printing (when nesting positions for example). For more details, see remarks.
Remarks

Origin and physical margins

The origin (0,0) is located in the upper-left corner of the sheet. This origin takes the physical printer margins into account.
Each printer includes physical margins in which no printing is possible. iMargin is used to define the "logical" print margins. If logical margins have been defined, iXPos manages the horizontal position according to these new margins.

Managing the <Immediate Calculation> parameter

When <Horizontal position> is specified in iXPos, the function performs two actions at the same time:
  • Returns a control character string. This control character string modifies the print position when the string is printed.
  • Immediately modifies the position of print cursor
The <Immediate Calculation> parameter is used to retrieve the control character string without modifying the current position of print cursor
sMyTitle is string = "Print title"
iDestination(iViewer)
// --- CASE 1: <Immediate Calculation> is set to True (default)
// Position the cursor at requested location
// Note: The control character string is not retrieved here
iXPos((iPageWidth() - iTextWidth(sMyTitle))/2) 
// Calculation to center the text

// Print at cursor position (defined beforehand)
iPrint(sMyTitle)      // Must be centered
// --- CASE 2: The same code with <Immediate Calculation> set to False
// The control character string is not retrieved here
// And the print cursor is not positioned because 
// <Immediate Calculation> is set to False
// Note: Therefore, this line is not required
iXPos((iPageWidth() - iTextWidth(sMyTitle))/2, False)

// Print at cursor position
// As the previous line of code did not change it 
// the text will be printed at the previous position (at the beginning of line)
iPrint(sMyTitle) //Therefore MUST NOT be centered
// --- CASE 3: A single line of code
// With <Immediate Calculation> set to True or to False
// the result is the same

// The position of the print cursor is modified when 
// running iXPos, and when printing the 
// character string that contains the result returned by iXPos
iPrint(iXPos((iPageWidth() - iTextWidth(sMyTitle))/2, True) + sMyTitle) 
// Must be centered
// The positioning is done twice: a little bit longer
// but the result is the expected one
// --- CASE 3 B
// The position of print cursor IS NOT modified when
// running iXPos, BUT it is modified when
// printing the character string that contains the result
// returned by iXPos
iPrint(iXPos((iPageWidth() - iTextWidth(sMyTitle))/2, False) + sMyTitle)
// Must be centered
// End of print
iEndPrinting()

Combining positions (<Immediate Calculation> parameter)

When combining positions, unexpected results may occur. For example, the following code:
iXPos(50)
iPrint("First part" + iXPos(20) + "Second part")
is not equivalent to:
iPrint(iXPos(50) + "First part" + iXPos(20) + "Second part")
In the first case, the entire character string is printed at horizontal position 20. In this case, iXPos(20) is run when the string is built, before the "First Part" string is printed.
To get the same result, use iXPos with the False parameter: iXPos(20, False) will only be executed when the print job is run.
The same operation can be performed by iYPos.
AndroidAndroid Widget Java

Printing in Java and Android

Printouts can be less precise because the print resolution is set to 72 dpi even if the printer supports higher resolutions.
Consequence: The calculations of points in images and in drawings (lines for example) are rounded during the position calculations when printing, especially for small values. During the print job, calculations are performed in points (depending on the print resolution) instead of mm (or cm).
Example: Printing lines: if the spacing between the lines is set to 0.5 mm, how many points will be found between each line (resolution set to 72 ppp)?
The first line is positioned at 0.5 mm which means (0.5/25.4) inches with a resolution of 72 points per inch (ppp): (0.5/25.4) x 72 = 1.42 point. The point being the base unit, it cannot be divided: the result is automatically rounded to 1 point less or greater according to the case.
This is a succession of lines printed with a spacing set to 05 mm:
  • 0.5 mm --> (1.42) 1 point
  • 1.0 mm --> (2.84) 3 points
  • 1.5 mm --> (4.25) 4 points. Caution: the line found at 1.5 mm is stuck to the line found at 1 mm (no spacing between these two lines)
  • 2.0 mm --> (5.67) 6 points
  • 2.5 mm --> (7.09) 7 points. Caution: the line found at 2.5 mm is stuck to the line found at 2 mm (no spacing between these two lines)
  • 3.0 mm --> (8.50) 9 points
  • 3.5 mm --> (9.92) 10 points. Caution: the line found at 3.5 mm is stuck to the line found at 3 mm (no spacing between these two lines)
  • 4.0 mm --> (11.33) 11 points. Caution: the line found at 4 mm is stuck to the line found at 3.5 mm (no spacing between these two lines)
  • etc.
To get a proper representation (no rounding), the size and/or the position in mm for a resolution set to 72 ppp must be a multiple of 127/360.
1 point --> (1/72) pouces --> (1/72) x 25.4 mm = 127/360 = 0.3527778 mm
Component: wd300prn.dll
Minimum version required
  • Version 9
This page is also available for…
Comments
Click [Add] to post a comment

Last update: 09/06/2023

Send a report | Local help