POSTSCRIPT_INJECTION Printer Escape function
The POSTSCRIPT_INJECTION printer escape function inserts a block of raw data at a specified point in a PostScript job stream.
A PostScript driver supports this escape function in GDI-centric mode or PostScript-centric mode support, but not in compatibility mode.
To set the PostScript driver's mode, call the POSTSCRIPT_IDENTIFY escape function.
To perform this operation, call the ExtEscape function with the following parameters.
Syntax
int ExtEscape(
_In_ HDC hdc,
_In_ int nEscape,
_In_ int cbInput,
_In_ LPCSTR lpszInData,
_In_ int cbOutput,
_Out_ LPSTR lpszOutData
);
Parameters
hdc [in]
A handle to the printer device context.nEscape [in]
The escape function to be performed.Value Meaning POSTSCRIPT_INJECTION Inserts a block of raw data in a PostScript job stream.
cbInput [in]
The number of bytes of data pointed to by the lpszInData parameter.Set this parameter to
sizeof ( PSINJECTDATA )
plus the size of the raw data to inject.lpszInData [in]
A pointer to the buffer that contains a PSINJECTDATA structure followed by the raw data to inject.cbOutput [in]
The number of bytes of data pointed to by the lpszOutData parameter.For this printer escape function, the value of this parameter is 0.
lpszOutData [out]
A pointer to the structure that receives output from this escape.For this printer escape function, the value of the parameter is NULL.
Return value
The return value is greater than zero if the function is successful and less than zero if not. A return value of zero indicates that the printer does not support this escape.
Remarks
The injection data for a specified injection point is cumulative. In other words, POSTSCRIPT_INJECTION adds the new injection data to any injection data previously specified for the same injection point.
If the job is in EMF data type, you must provide all injection data before StartDoc by using the POSTSCRIPT_INJECTION printer escape function.
If the job is in RAW data type, you must provide the following injection data before the driver needs it, according to the following rules:
Injection data | When to provide |
---|---|
Data for header sections (before first %%Page:) |
Before calling the first StartPage function |
Data for page setup sections when injecting data for one particular page |
Before calling the StartPage function for that particular page |
Data for page setup sections when injecting data for all pages after a specified page |
Before calling StartPage for the specified page |
Data for page trailer sections |
Before calling the EndPage function |
Data for document trailer sections |
Before calling the EndDoc function |
The driver internally caches the injection data and emits it at appropriate points in the output. The cached information is flushed when it is no longer needed. At the latest, it is flushed after the EndDoc call.
In GDI-centric mode, the application can only inject valid DSC block data by using the POSTSCRIPT_INJECTION printer escape function. A valid DSC block must satisfy all of the following conditions:
- It consists of an integral sequence of "lines."
- Each "line" must begin with "%%".
- Each "line" except the last line must end with <CR>, <LF>, or <CR><LF> except for the last line. If the last line does not end with <CR>, <LF>, or <CR><LF>, the driver appends <CR><LF> after the last byte of the injection data.
- Each "line" must be 255 bytes or less including the "%%" but not counting the <CR>/<LF> line termination.
Requirements
Minimum supported client |
Windows 2000 Professional [desktop apps only] |
Minimum supported server |
Windows 2000 Server [desktop apps only] |
Header |
Wingdi.h (include Windows.h) |