Printer Driver Configurations: .pltcfg versus .plt

In this post I'm going to try to answer some of the commonly asked questions concerning the .pltcfg files that were introduced in MicroStation 8.9.3, and the removal of the default .plt files in MicroStation 8.11.

To begin with, it's important to understand the difference between a printer driver and a printer driver configuration file.  A printer driver is the executable code within MicroStation that knows how to convert geometry produced by the internal graphical display system into appropriate plotter commands.  A printer driver configuration file, which can be in either the .plt or .pltcfg format, is a text file containing a set of properties that that influence how the printer driver performs its job.

Inaccurate usage of term printer driver to refer to a printer driver configuration file is unfortunately fairly common.  This is even true in places inside the MicroStation documentation, although Bentley has been making an effort to correct this.

The jpeg.pltcfg and png.pltcfg files are good examples of this terminology distinction.  In both cases, these printer driver configuration files are associated with the Bentley LORIP printer driver.

The printer driver executable code usually changes between product releases in response to innovations and fixes, so it is normal for print output to change between releases even when using the same printer driver configuration file.  When using the same MicroStation release, switching between similar .plt and .pltcfg printer driver configuration files typically does not result in printing through a different printer driver.  In that case, no print output changes would be expected unless the property values within the printer driver configuration files were different.

Why was the .pltcfg format created?

The .pltcfg printer driver configuration format was introduced to eliminate the difficult and often error-prone task of manually editing .plt files in a standard text editor.  Countless customers had voiced their opinion that MicroStation needed a graphical user interface to display all of the available printer driver configuration properties in a logical arrangement, and allow modification of those properties without the user having to worry about the file syntax.  The .plt file format was too loosely organized to permit lossless programmatic round-tripping of data, so a new XML format  was created.  A secondary benefit was that the new .pltcfg file extension avoided confusion with the widespread usage of the .plt extension to refer to plotter language files.

How do I edit .pltcfg files?

The .pltcfg graphical user interface is referred to as the Printer Driver Configuration Editor.  It can be invoked from the MicroStation Print dialog's File / Edit Printer Driver Configuration menu item, when a .pltcfg file is currently is in use.  Note that if a .plt file is in use, the Print dialog invokes Windows Notepad instead. 

 .pltcfg versus .plt

Documentation for the Printer Driver Configuration Editor, along with explanations of all the printer driver configuration properties, can be found in the product documentation under "Working With Complete Designs / Printing / Printer Driver Configuration Files".

What is the difference between the .plt and .pltcfg formats?

Both .plt and .pltcfg are text files.  The .plt syntax consists of a series of property records, with different formatting conventions per record.  The .pltcfg format is standard XML.  The .plt syntax for each property is described in the product documentation.  The syntax and XML schema for .pltcfg files are not documented, as it is not intended for users to manually edit them.  However, the format is straightforward and understanding of .pltcfg files outside the Printer Driver Configuration Editor should not prove difficult anyone familiar with XML.

Note: there are some quirks involving tri-state property values in the .pltcfg schema.  Values of "0" and "1" may not mean "False" and "True" in many cases where you might otherwise expect a boolean property value.  If in doubt, stick with the Printer Driver Configuration Editor to modify .pltcfg files.

Are there any functional differences between the .plt and .pltcfg formats?

For the most part, .plt and .pltcfg files are functionally equivalent.  Any properties that may be defined in a .pltcfg file may also be defined in a .plt file, although I cannot guarantee that will be true indefinitely.

There are some advanced capabilities of the .plt format, such as %include and certain pen mapping constructs, that are not possible in the .pltcfg format.  These have been considered acceptable and unavoidable tradeoffs in order to provide the benefit of an easy-to-use graphical printer driver configuration editor.

Why did MicroStation 8.9.3 and 8.9.4 include both default .plt and .pltcfg files?

For two releases, MicroStation delivered equivalent .plt and .pltcfg files in order to advertise the .pltcfg format while at the same time continuing to support existing workflows that depended on non-customized default .plt files in the Workspace/system/plotdrv folder.

What happened to the .plt files in MicroStation 8.11?

In MicroStation 8.11, the default .plt files were removed, and the Workspace/system/plotdrv folder renamed to Workspace/system/pltcfg.  MicroStation now only delivers default .pltcfg files.  As always, you are encouraged to copy the files you wish to use to your own workspace directory (or Workspace/Standards/pltcfg ) before customizing them.

Can I still use my old .plt files?

Yes, all existing customized .plt files may continue to be used in MicroStation 8.11, and Bentley has no plans to discontinue this support.  However, documentation for the .plt syntax is not guaranteed to be included in the product documentation indefinitely.

How do I convert my .plt file to a .pltcfg file?

Existing .plt files may be converted to .pltcfg format by opening them in the Printer Driver Configuration Editor.  To do that, first select a .pltcfg file in the Print dialog then select "File / Edit Printer Driver Configuration".  Inside the Printer Driver Configuration Editor, open your .plt file.  It will be loaded in read-only mode, as the Editor does not support writing .plt files.  When you save from the Editor, you'll be prompted to specify the name for a new .pltcfg file.

Does the .pltcfg format support a hierarchical system using %include statements?

No, the .pltcfg format does not support separating property values across multiple .pltcfg files.  Bentley recognizes that some customers have developed hierarchical systems of .plt files relying on the %include feature, and that this concept cannot be carried forward into the .pltcfg files.  However, adding an 'include' feature to the .pltcfg format would add a tremendous amount of complexity to the Printer Driver Configuration Editor, defeating the purpose for which it was conceived.

Except in a few very uncommon workflows, the primary use of %include statements I have seen involve sharing weight-to-width and pen color/width assignments across multiple .plt files.  A different, arguably better, way to accomplish this is to define your weight/color mappings in a pen table instead (via the pen table's pen color and weight maps).  The functionality between .plt pen/weight_strokes and pen table color/weight maps is identical.  Conceptually, it makes sense to define your print resymbolization in one pen table, and use that pen table regardless of which printer driver configuration you are printing to.  Default pen tables can be associated with .pltcfg files, providing the same level of convenience as .plt pen and weight_strokes lines.

Do I need to recreate my printer driver configuration files for every new MicroStation release?

In general, no, printer driver configuration files do not need to be recreated for each new MicroStation release.  The legacy .plt record-based format, and the new .pltcfg XML format, are designed to be forward compatible for future product releases.  However, there have been instances in the past where .plt parsing defects in the product have forced customers to edit old .plt files, and product innovations over time have made it a good practice to periodically discard old .plt files and start afresh by customizing new .plt files based upon the new delivered default ones.

One reason it has been a good idea to recreate .plt files is that comments embedded in the files become misleading or inaccurate in the context of new product releases.  The .pltcfg format does not provide for this type of commenting, making this problem moot.  In addition, ancient .plt files are frequently full of obsolete, ignored properties that can be distracting.  When displaying an older .pltcfg file, the Printer Driver Configuration Editor solves this problem by not showing properties that are not relevant for the current product release (while preserving their existence in the file in case you are sharing the .pltcfg file with older releases).

MS_PLTCFG_PATH

While not directly related to a .pltcfg versus .plt discussion, there have been some notable changes in MicroStation 8.11 concerning the location of printer driver configuration files that I want to highlight here.

MicroStation 8.11 introduces a new printer driver configuration file search path: MS_PLTCFG_PATH.  This variable specifies the search path for printer driver configuration files as well as dependent files such as prefix, suffix, and PostScript prolog files.  By default, MS_PLTCFG_PATH is defined in msfiles.cfg to be Workspace/system/pltcfg followed by Workspace/standards/pltcfg.

If MS_PLTCFG_PATH is defined, the first directory in its value is used as the initial directory in the printer configuration file picker dialogs.  Therefore, you should change the value of this variable to point to where your customized .pltcfg and/or .plt files are stored in your environment.

Prior to MicroStation 8.11, the MS_PLTR configuration variable served multiple, somewhat incompatible roles.  (1) MS_PLTR was used to specify the initial printer driver configuration file, if the most-recently-used value was undefined.  (2) If the most-recently-used value was defined, the filename component of the variable value was ignored, but the directory was used as a search path to find dependent files, such as the PostScript prolog file.  (3) Finally, applications and macros looked at MS_PLTR to determine the resolved location of the currently selected printer driver configuration file.

The most significant problems with this design were (1) MS_PLTR in msfiles.cfg appeared to specify the printer driver configuration the Print dialog should use, but in fact its filename component was ignored most of the time.  (2) A common complaint was that the Print dialog would fail to load a .plt file if it had been copied to another directory without its dependent files.  The only search path available was the directory component of MS_PLTR.

The MS_PLTCFG_PATH configuration variable replaces MS_PLTR in msfiles.cfg, and MS_PLTR has been removed from the workspace configuration dialog.  MS_PLTR now behaves more like a print accounting variable; it is automatically defined by MicroStation whenever a printer driver configuration is loaded -- it contains the fully-qualified filename for that .pltcfg or .plt file.

The initial printer driver configuration file selected by the Print dialog continues to be automatically determined following the procedure described in the documentation.  However, dependent files are no longer constrained to be located in the same directory as the selected .pltcfg or .plt file.  They can stored anywhere in the MS_PLTCFG_PATH search path.