******************************************************************************* File: @(#)$Id: README,v 1.10 2001/08/19 08:52:32 Martin Rel $ Contents: Notes on the PPD files in the pcl3 distribution Author: Martin Lottermoser, Greifswaldstrasse 28, 38124 Braunschweig, Germany. E-mail: Martin.Lottermoser@t-online.de. ******************************************************************************* * * * Copyright (C) 2001 by Martin Lottermoser * * All rights reserved * * * ******************************************************************************* Purpose and Format of PPD Files, Document Managers ************************************************** Some PostScript commands (e.g., for duplex printing) are not concerned with what appears on the page but control the way a document is printed independent of its contents. Such commands are usually not created by the application generating the PostScript document but are inserted at the user's request when actually printing the file. In addition, some PostScript interpreters differ in the commands needed to achieve a particular effect, hence a PostScript file might have to be adapted for a certain device if it was orginally generated for a different one. This post-processing of PostScript files is the job of a PostScript "document manager" or "print manager". It obtains its information from a PPD (PostScript Printer Description) file for the printer selected. The most useful kind of document manager is a preprocessor for a spooler. This preprocessor parses the PostScript file to determine its current settings, asks the user which special features (e.g., duplex printing, output quality, stapling, etc.) are desired, extends or modifies the file with commands extracted from the PPD file, and passes the modified file to the spooler. There exist also spooler-integrated document managers where the user interface is detached from the editing component; in these cases the interface passes the information it has collected to the spooling interface in some spooler-specific manner and later a backend inserts appropriate PostScript commands. Primitive document manager implementations don't bother about parsing the PostScript file but merely prepend the new PostScript commands to the file; such commands will not take effect if the file already contains invocations of the same feature. Beware of this in particular in the case of Windows-generated PostScript files which usually contain explicit settings for the resolution. You might consider adding definitions for ghostscript's FIXEDRESOLUTION variable to the *Resolution statements in the PPD file if you have such a document manager. PPD files contain also some information which is relevant for software generating PostScript files. A case in point is the list of supported media sizes: it can be used by PostScript-generating programs to present a user with a list of choices for the document to be composed, and it is also used by the document manager to replace the size's invocation code with the commands required to obtain this size on the printer selected. It can be confusing if you have a PPD-based user interface to a print system which accepts PostScript as well as non-PostScript files and where the interface does not clearly distinguish between these two steps (document composition and printing); you might get the impression that you can alter the page size after the PostScript file has been generated. (A similar case is page orientation.) Actually, PostScript does provide functionality for doing this (PageSize recovery policies), but altering the size selection commands is logically wrong and does not give a usable result in general. The PPD file format is defined by Adobe: Adobe Systems Incorporated "PostScript Printer Description File Format Specification" Version 4.3 9 February 1996 Document ID: PN LPS5003 This specification can be obtained from http://www.adobe.com. The PPD Files for pcl3 ********************** The PPD files distributed with pcl3 are not complete descriptions of the devices implemented by ghostscript with the pcl3 driver. Their main purpose is to provide some essential support for document managers acting as preprocessors. This makes it possible to create printing interfaces which are easier to use than ghostscript's command line interface. As a consequence, you will find no *OpenUI/*CloseUI entries for device parameters like "SendBlackLast" or "PJLLanguage": the values of these parameters are not job-specific but printer-specific properties and should be given as additions in other PPD statements or in the call to ghostscript. PPD files can include other PPD files. For pcl3, the include structure looks like this (inclusion is from top to bottom): gs-pcl3-.ppd | gs-pcl3-common.ppd | gs.ppd | gs-.ppd | gs-common.ppd Several of the files gs-pcl3-.ppd and in particular those where is not an acceptable argument to "-sSubdevice" are valid for several subdevices. If you are unsure which file to select, check the initial comments or the *ModelName statement in a file to discover the subdevices supported by that file. The gs-pcl3-.ppd files assume that the PostScript file generated by the document manager is passed to a ghostscript executable with options selecting pcl3 and the intended subdevice and without altering the default state of the device as far as it is reflected in the PPD file. If this does not agree with your environment, use a local PPD customization file for the necessary adaptations. If you're using CUPS, device and subdevice selection should happen via the *cupsFilter statement and the filter called. The gs-pcl3-.ppd files already contain *cupsFilter statements using the cups-pcl3 filter. If you're using a different filter, modify the statements as needed, otherwise read the initial comments in the file cups-pcl3. Installation of the Files ************************* 1. Create a file called gs.ppd for describing site-specific settings of your ghostscript installation. It should contain at least the following statements: *PPD-Adobe: "4.3" *DefaultPaperDimension: *Include: "gs-.ppd" Replace "" with the default page size configured for your ghostscript installation. Usually, this is either "A4" or "Letter". In the case of A4 you would therefore write: *DefaultPaperDimension: A4 You might also wish to insert other statements here which describe settings which are relevant for a document manager. For example, if your document manager downloads fonts to the PostScript interpreter if it is of the opinion that the latter does not have a particular font used in a document (this is the case for CUPS), you should compose a PPD file with a list of fonts accessible to your ghostscript installation and insert it or an *Include statement for it at this point. You can use the fonts.ppd file in this directory as a model (or as a temporary substitute); it contains a list of ghostscript's usual standard fonts. If the programs accessing the PPD file use it only for determining whether a font is accessible to the interpreter or not, you can also simply use the list of font descriptions resulting from running gs on: /scratch 200 string def (*) { (*Font ) print print (: Standard "\(0.0\)" Standard Disk\n) print } scratch /Font resourceforall (put this into a file and run "gs -q -dBATCH -sDEVICE=bit" on it). This output will contain information which is wrong, but it will list all fonts known to your ghostscript installation. Don't forget to also replace with your ghostscript's version number. If there is no gs-.ppd file for your gs version, use one of the existing gs-.ppd files as a model. 2. The PPD specification distinguishes between printer models (e.g., the HP DeskJet 540) and printer instances (e.g., the second printer in room 12). The PPD file for an instance can be generated by creating a local instance-specific customization file which includes the model's PPD file. If your document manager has an interface for instance installation, it is sufficient to give it the relevant gs-pcl3-.ppd files which describe models. Otherwise you usually have to create a customization file under the name of the instance, containing just *PPD-Adobe: "4.3" *ShortNickName: "" *NickName: "" *Include: "gs-pcl3-.ppd" with describing the printer instance ( should basically have the same content but consist of at most 31 characters) and being replaced to generate the name of the pcl3 PPD file you wish to use for this printer. If you wish to extend or override other settings in the gs-pcl3-.ppd file, add these statements in the customization file between the first and the last statement above. The pcl3 PPD files contain *InputSlot definitions only for those media sources ("Cassette" and "ManualFeed") which are available independent of your "InputAttributes" definitions. If you configure a print queue such that other sources are available as well, read the comments on the *InputSlot entry in gs-pcl3-common.ppd. You can't use local customization files with CUPS up to at least version 1.1.8 because the CUPS PPD scanner (a) does not support the *Include statement and (b) violates the PPD specification in either taking the last occurrence of a keyword as the correct instance or collecting all instances instead of disregarding every except the first. Modify the installed instance files in this case if you need some customization, for example to change the "*NickName" value (which actually CUPS should do when you give it a description for the print queue at creation time). 3. Copy all PPD files needed into a directory where they will be found by your document manager. If your document manager does not support the "*Include" statement, use the script "catppd" for this purpose: catppd The script requires that all the files referenced from must be accessible from the current working directory under the name given in the "*Include" statement. In the case of pcl3's PPD files this means that you must call it from the "ppd" directory. If you are installing model files you may specify any gs-pcl3-*.ppd file for with the exception of gs-pcl3-common.ppd. If you are installing instance files, use catppd only on your customization files. For CUPS up to at least version 1.1.8 you'll have to use catppd and you should copy the files into the .../cups/model directory. You must also remove the second "*OpenUI *MediaType: ... *CloseUI *MediaType" section from the copied gs-pcl3-unspec.ppd file. 4. If you are using the "unspec" or "unspecold" subdevices, check whether the PPD file supports all the features you need. You will also almost certainly find some features or values there which are not supported by your printer. It is probably best to create your own PPD file in this case.