MORE INFORMATION
Troubleshooting: Windows Print Server Modifies Client Print Jobs
There are five common job alteration problems:
- LPR Client Print Jobs Include PCL or PostScript Code, Include
Incorrectly Printed Extended Characters, or Print in the Print Device's
Default Font.
- Last Page of a Microsoft Network-Based Client Print Job Does Not Print
- Extra Page Prints After a Microsoft Network-Based Client Print Job
- Microsoft Network-Based Client Print Jobs Include PCL or PostScript
Code, Include Incorrectly Printed Extended Characters, or Print in the
Print Device's Default Font
- PostScript Print Jobs Sent From Macintosh Clients Do Not Print in Color,
Print at a Lower Resolution, or Fail
NOTE: The article frequently refers to "Microsoft network-based clients."
These clients send print jobs over server message blocks (SMBs). They
include:
- Microsoft LAN Manager client software
- Microsoft Network Client for MS-DOS
- Windows for Workgroups
- Windows NT (when printing to a universal naming conversions (UNC) name
LPR Client Print Jobs Include PCL or PostScript Code, Include Incorrectly
Printed Extended Characters, or Print in the Print Device's Default Font
When you send a job from a line printer remote (LPR) client, one of the
following happens:
- Printer-language code (Printer Control Language [PCL] or
PostScript code) is printed.
- Extended characters in text print jobs print incorrectly.
- Text jobs print in the print device factory-default font, even if
you change the print device default font.
This problem occurs when the LPR client sends commands to the Windows
TCP/IP Print Server (usually called LPD, after the UNIX term Line Printer
Daemon) that responds by assigning the print job the TEXT datatype.
To work around this problem, reconfigure the LPR client to send different
commands so that Windows assigns the job the RAW datatype.
Last Page of a Microsoft Network-Based Client Print Job Does Not Print
When you send print jobs from a Microsoft network-based client to a PCL
print device, and the last page of the job does not print until the next
print job arrives, or until you manually force a form-feed.
This problem occurs when client applications do not append form-feed
commands to their print jobs and the Print Manager default datatype is RAW.
To work around this problem, set the default datatype value to RAW [FF
Auto] or [RAW FF Appended], or reconfigure the client application to append
a form feed to print jobs.
Extra Page Prints After a Microsoft Network-Based Client for MS-DOS Print
Job
When you send a print job from a computer running a Microsoft Network-Based
Client to a PCL print device, and an extra page prints.
This problem occurs when client applications append form-feed characters to
their print jobs and the Print Manager default datatype is
RAW [FF Appended] or RAW [FF Auto]. Print jobs from Windows-based
applications always appended with have form-feed characters; print jobs
from MS-DOS-based applications often do not have form-feeds at the end.
To work around this problem:
- If all client print jobs sent to the print share already have form-feed
commands, set the default datatype to RAW.
- If some client print jobs include form-feed commands but others do not,
set the default datatype to RAW [FF Auto].
- Reconfigure the applications to prevent them from adding the form-
feed command to print jobs.
A Microsoft Network-Based Client Print Jobs Include PCL or PostScript Code,
Include Incorrectly Printed Extended Characters, or Print in the Print
Device's Default Font
When you send a job from a computer running a Microsoft Network-Based
Client, one of the following happens:
- Printer-language code (Printer Control Language [PCL] or
PostScript code) is printed.
- Extended characters in text print jobs print incorrectly.
- Text jobs print in the print device factory-default font, even if
you change the print device default font.
This problem occurs when the Print Manager default datatype is TEXT.
To work around this problem, set the default datatype value to RAW.
PostScript Print Jobs Sent From Macintosh Clients Do Not Print in Color,
Print at a Lower Resolution, or Fail
When you send a PostScript print job from a Macintosh client, one of the
following happens:
- Color print jobs print in black and white.
- Right resolution print jobs print at 300 DPI.
- Although Level 1 PostScript print jobs print correctly, Level 2
PostScript print jobs fail.
This problem occurs because the Windows Services for
Macintosh Raster Image Processor (RIP) assigns
the print job the PSCRIPT1 datatype if the target print device is not a
PostScript device. This causes the spooler to converts the client
PostScript print job into the print device native language. The conversion
software only supports Level 1 PostScript, it does not support color, and
it does not produce output at resolutions above 300 DPI.
To work around this problem:
- Run Print Manager and reconfigure the printer to use a PostScript
printer driver.
- Send print jobs directly to the print device instead of sending them
to the Windows print server.
- Purchase a third-party replacement for the Windows Services for
Macintosh raster image processor (RIP).
Client Type Affects How Windows Print Servers Modify Client Print Jobs
When a client sends a print job to a Windows print server, a server
service receives it and passes it to the Windows spooler service for
processing. Different services receive and process the print job depending
on the client used to sent the print job. For example, when you print from
a Microsoft network client (such as Windows for Workgroups or Microsoft
Network Client for MS-DOS, version 3.0), the Windows Server service
receives the job and submits it to the spooler. When you print from an LPR
client, the Windows LPD service receives the job and submits it to the
spooler.
The service that submits the print job decides whether the spooler should
alter the print job, how to alter the print job, and assigns the print job
the corresponding datatype value. The service can also leave the datatype
blank and let the spooler apply the default value. Each of the services
supplied with Windows uses different logic to determine how the job
should be altered. The sections below detail the logic for each of these
clients, and describe how to change that logic.
Microsoft Network-Based Clients
The Server service receives jobs from Microsoft network-based clients. The
Server service does not set the datatype when it submits the job to the
spooler, so the spooler uses the datatype listed in the Print Manager
default datatype.
To change the way the spooler alters jobs from Microsoft network-based
clients, change the Default Datatype value:
- Run Print Manager.
- Select the printer you want to configure.
- From the Printer menu, choose Properties.
- Choose Details.
The Default Datatype box lists all of the datatypes defined on the system.
If you select "NT JNL 1.000" or "PSCRIPT1" the spooler will ignore your
choice and use the RAW datatype. For more information about specific data
types, see the "Data Type Affects the Print Spooler's Modification of
Client Print Jobs" section below.
LPR Client
LPR Overview
Although LPR clients are often UNIX-based, LPR software exists for most
operating systems, including Windows. The Windows TCP/IP Print
Server (LPD) receives jobs from LPR clients and submits them to the
spooler. LPR clients always send a control file containing
administrative information with each print job. The Windows LPD
service assigns a datatype based on the control file commands. If the
client sends the "f", "o", or "p" control command, LPD assigns the job the
TEXT datatype. Otherwise, LPD assigns the print job the RAW datatype.
The control commands are documented in the LPR specification, RFC1179, in
sections 7.17 through 7.29. (The text of RFC1179 is available in the
Windows NT Knowledgebase.)
Because the LPD service assigns a datatype explicitly, the Print Manager
default datatype has no effect on print jobs that arrive via LPD. To change
the LPD service behavior, reconfigure the LPR client to send a different
control command.
Configuring UNIX LPR Software
Different UNIX LPR clients often have different configuration options. For
example, to change the control command, you may need to change a value in
a printcap file, change a model script, modify an LP or LPR command line,
or change settings through a graphical interface.
Some UNIX LPR clients are not configurable. For example, the IBM AIX LPR
client always sends the "f" control command.
Configuring Windows LPR Software
There are two ways to send print jobs from Windows using LPR; each has a
different default control command and different configuration procedure.
The Windows Print Manager LPR Port monitor software sends the "l"
control command by default (because most jobs sent through Print Manager
come from Windows-based applications). Because Windows-based applications
use a Windows printer driver to fully render the print job, the "l"
control command is used to indicate that the LPD server should pass the job
through unaltered.
You can configure the control command by editing the registry:
WARNING: Using Registry Editor incorrectly can cause serious, system-wide
problems that may require you to reinstall Windows to correct them.
Microsoft cannot guarantee that any problems resulting from the use of
Registry Editor can be solved. Use this tool at your own risk.
- Run Registry Editor (REGEDT32.EXE).
- From the HKEY_LOCAL_MACHINE subtree, go to the following key:
\System\CurrentControlSet\Control\Print\Monitors\LPR Port\Ports\portname
- From the Edit menu, choose Add Value.
- Add the following:
Value Name: PrintSwitch
Date Type: REG_SZ
String: This value is the single character that you to be sent as a control command
- Choose OK and quit Registry Editor.
The Windows LPR.EXE command line utility sends the "f" control command
by default because most people who use this utility are sending
text jobs. The "f" control command indicates that the LPD server should
reformat the print job as necessary. You can override this default on
individual print jobs with the "-o" switch.
The "-o" switch exists in both Windows NT 3.5 and 3.51, but was not
properly documented in 3.5. Add the control command that you want to send
to the end of the "-o" switch. For example, to send the "l" control command
instead of the default "f" control command, use:
LPR -S <servername> -P <printername> -ol <filename>
NOTE: Both the command line switches and the control commands are case
sensitive.
For more information about specific data types, see the "Data Type Affects
the Print Spooler's Modification of Client Print Jobs" section below.
Macintosh Clients
The Macintosh Print Server service assigns the RAW datatype to all jobs
sent to PostScript printers, and assigns the PSCRIPT1 datatype to all
jobs sent to non-PostScript print devices. There is no way to override
this. For more information about specific data types, see the PSCRIPT1
topic in the "Data Type Affects the Print Spooler's Modification of Client
Print Jobs" section below.
MS-DOS Applications Running Locally
If you print from an MS-DOS application that is running locally, or from a
Windows command line utility that sends data to a printer port, NTVDM
receives the print job. NTVDM queries the redirector to determine if the
redirector is managing the target port (you run NET USE LPT1:
\\SERVER\SHARE) or if the spooler is managing the port.
If the redirector is managing the target port, the redirector takes control
of the print job, and none of the spooler options are used. If the
redirector is not managing the port, but a printer defined in Print
Manager is printing to that port, the print job goes to the printer, and
the printer's default datatype and spooling options are used. If neither
the redirector nor any printers are managing the port, then the job goes to
the port device driver, unaltered.
For example, one printer in Print Manager prints to COM1, none of the
printers in Print Manager print to LPT1, and you issue a NET USE command to
redirect output from LPT2 to a network print share. If an MS-DOS-based
application prints to LPT2, the print job goes to the network print share.
If the application prints to COM1, NTVDM submits the print job to the
printer that prints to COM1, and used that printer's default datatype. If
the application prints to LPT1, NTVDM submits the job directly to the
parallel port device driver; no alteration occurs.
Third Party Services
Third-party software vendors may create other Windows services that can
submit jobs to the spooler. These services may implement any logic they
choose in deciding what datatype to assign each job, or whether to assign
a datatype at all.
Data Type Affects the Print Spooler's Modification of Client Print Jobs
Windows defines six datatypes (RAW, RAW [FF Appended] RAW, RAW [FF
Auto], TEXT, PSCRIPT1, and NT JNL 1.000) to implement six different print
job alterations. Third-party software vendors can create their own
datatypes to implement custom alterations.
RAW
The RAW datatype indicates the spooler should not alter the job. If a
client assigns this datatype, the spooler passes the print job through
without altering it. When you create a printer in Print Manager, the
default datatype is initially set to RAW. So, most jobs from Microsoft
network-based clients are assigned the RAW datatype.
RAW [FF Appended]
The RAW [FF Appended] datatype indicates the spooler should assume the job
is from an application that does not append a form-feed character (0x0C) to
the end of each print job. Without a trailing form-feed, the last page of
the job will not print when sent to a PCL print device. To prevent this
problem, the spooler appends a form-feed character to the end of the print
job, but makes no other alterations. Although none of the Windows
applications assign this datatype, you can make this datatype the system
default so that it affects jobs from Microsoft network-based clients.
RAW [FF Auto]
The RAW [FF Auto] datatype indicates the spooler should check for a form-
feed character at the end of the job and add one if one is not already
present. The spooler makes no other changes. Although none of the Windows
applications assign this datatype, you can make this datatype the system
default so that it affects jobs from Microsoft network-based clients.
TEXT
The TEXT datatype indicates that the job consists of ANSI text. The spooler
uses the current printer driver to create a new print job that prints the
text of the original job using the print device's factory default font, and
uses the form, orientation, resolution, set in Print Manager.
This is useful when the client application print job consists of simple
text, but the target print device cannot interpret simple text jobs
(for example, PostScript print devices). Most datatype problems result from
print jobs that are assigned the TEXT datatype when you expect them to be
assigned the RAW datatype. There are two common symptoms:
PSCRIPT1
The PSCRIPT1 datatype is only available on Windows NT Advanced Server and
Windows NT Server when Services for Macintosh (SFM) is installed. This
datatype indicates that the job is Level 1 PostScript code from a Macintosh
client, but the target printer is not a PostScript printer. The spooler
sends the PostScript code through a TrueImage raster image processor (RIP),
supplied with Services for Macintosh. The TrueImage RIP creates a series of
one-page, monochrome bitmaps at up to 300 DPI. The spooler sends the RIP
bitmaps to the target printer driver, and the driver returns a print job
that prints the bitmaps.
Because the RIP bitmaps are monochrome and not more than 300 DPI, the
target printer driver produces final output that is monochrome and not
more than 300 DPI, even if the target printer driver supports color or
supports higher resolutions. Similarly, the Windows PostScript driver
is a Level 2 driver, but the RIP does not rely on the PostScript driver to
generate its bitmaps. In short, the RIP's restrictions (and therefore the
PSCRIPT1 restrictions) are in the RIP software itself, not in the Windows
printer drivers.
These restrictions should not affect most business users. However, several
third-party, Win32 RIP packages are commercially available for Windows,
for customers who need a more full-featured RIP.
NT JNL 1.000
The NT JNL 1.000 datatype (usually called "Journal") indicates that the job
is being sent from a Windows-based application (either 16-bit or 32-
bit) running on the Windows print server. It also indicates that the
target printer was established in Print Manager using the Create Printer
option. In this case, the application uses GDI commands to describe the
output. The Windows GDI32 component and the printer driver partially
rendered the print job using device driver interface (DDI) commands and
then return control to the application. As a result, the application
finishes its print operation faster than normal. GDI32 then submits the DDI
commands (a "journal file") to the spooler (in the background), with the
datatype set to "NT JNL 1.000." The spooler calls GDI32 to finish rendering
the job into printer language commands.
Third-Party Print Processor Software
Third-party software vendors can create their own print processor
software to supply new data types.