SUMMARY: converter from PCL to PS

From: Wolfgang Leideck (
Date: Tue Oct 29 1996 - 03:08:10 CST


Follwing was my original question: said:
> Hello. It's probably not the right group but i need a tool which can
> convert pcl-output from a hp laserjet 5si to postscript. Thanks in
> advance Wolfgang

And here is my summary:
The lj2ps converter mentioned in the comp.lang.postscript-faq is the only
free available converter that i have found. Unfortunately it has some limitations.
Here the contents of the enclosed limitations.doc

Program: lj2ps, 1.1 (release)
File: limitations.doc

Author: Christopher Lishka
Organization: Wisconsin State Laboratory of Hygiene
                Data Processing Department

Date: April 25th, 1990
Last modified: June 30th, 1990 by Chris Lishka

This file contains known limitations of the lj2ps program. The
limitations come in two basic varieties: (a) those that exist because
of inherent differences between the LaserJet and LaserWriter; and (b)
those that exist because I do not have enough time to fix them. All
limitations listed should be assumed to belong in the second category
unless otherwise noted.

* As has been mentioned many times in the documentation, I did not
  have time to implement all LaserJet commands in PCL 4 (let alone PCL
  5). Instead, I leave this as an exercise for the reader ;-) I have
  implemented what was needed by my organization, and represents a
  subset of PCL 4 which supports (fairly completely) page motion, page
  setup, and internal and cartridge fonts. Commands which were left
  out include:

  ** Macros

  ** Position stack

  ** Graphics -- patterns and grayshades

  ** Graphics -- bitmaps

  ** Secondary font support

  ** Downloadable fonts

* Although I put a fair amount of work into the Test Suite and Metrics
  Suite, they are by no means complete. They do test a fair amount of
  LaserJet quirks, and proved to be very helpful in fine tuning lj2ps.
  Feel free to add more tests to either suite.

* Tabs do not work exactly like the LaserJet when using proportional
  fonts. This is because a given tab position depends on the current
  location of the cursor, which might be different from the LaserJet
  and LaserWriter. Therefore, when a proportional font is used, tabs
  might end up in the wrong places. However, tabs are not a good
  thing to use with a proportional font anyway. Note that tabs used
  with fixed-width fonts should behave exactly the same way.

* Another problem related to tabs is the mechanism I have used. On
  the LaserJet, tabs are counted out using characters printed. To
  move to the next tab stop, the LaserJet will simply insert enough
  space characters to reach a position which is a multiple of eight
  characters. With proportional fonts, this results in tab stops not
  being in fixed columns, but rather dependent on the width of the
  characters printed before the tab. (I think this method is
  downright foolish, because it renders the purpose of tabs useless
  with proportional fonts). I have chosen to calculate tabs as being
  in columns, with the distance between columns being eight space
  characters in the current font. This allows tabs to be used to line
  up text at each tab stop with proportional fonts. Note that
  although the two schemes give different results with proportional
  fonts, the behaviors match exactly when using fixed-width fonts.

* The HMI command cannot be fully implemented. This is an inherent
  problem with the lj2ps program. The HMI command on the LaserJet
  works in one of two ways:

        (a) If the font is non-proportional, then the HMI command
            adjusts the individual width of each character;

        (b) If the font is proportional, then the HMI command only
            adjusts the width of the *space* character.

  Unfortunately, lj2ps uses a crude font mapping mechanism for
  emulating LaserJet fonts in PostScript. One of the inherent
  limitations is the inability to adjust the individual width of each
  character in the PostScript font. It is for this reason that the
  HMI command cannot be fully implemented. Unfortunately, there is no
  good way to fix this without overhauling the font mapping mechanism.

  The HMI command *does* change lj2ps' notion of the current character
  spacing (in the variable char_width). This is useful for doing
  horizontal tabs using columns. This is why the HMI command has been
  implemented at all.

* The postscript file produced by lj2ps is definitely not suitable as
  encapsulated postscript. One important example is that the
  "initclip" command must be used when resetting the right margin to
  insure that the clip-path can "grow" if the right margin gets

* To effectively emulate LaserJet relative horizontal motion commands
  with the current font mechanism, I had to move horizontal motion
  into the generated PostScript program. Therefore, although
  horizontal motion is tracked in lj2ps, it is only updated every time
  an absolute horizontal motion is performed (including non-command
  motions such as newline). This makes the horizontal cursor position
  in the lj2ps program innaccurate much of the time. The only fix I
  can think of is to replace the font emulation mechanism with
  something better. Note that vertical motion is tracked completely
  in lj2ps, and is of little importance in the generated PostScript


Wolfgang Leideck * University of Mannheim * Dep. PI III
A5, C220 * D 68131 Mannheim  
Phone: +49 621 292 1100 * Fax: +49 621 292 3394

This archive was generated by hypermail 2.1.2 : Fri Sep 28 2001 - 23:11:14 CDT