[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

/undefined in /iso1dict when using Distiller

From: François Robert
Subject: /undefined in /iso1dict when using Distiller
Date: Mon, 12 Feb 2007 23:06:07 +0100

This is a summary of a Usenet posting :
http://groups.google.com/group/comp.lang.postscript/browse_thread/ thread/d597ea0cb4822418/d28cf90e181a8d7b#d28cf90e181a8d7b

Version : a2ps 4.13
Symptom : Adobe Distiller (or the Mac OS X Preview tool) errors out with %%[ Error: undefined; OffendingCommand: iso1dict ]%%

Reason : The reencode procedure leaves an extra FontInfo dictionary on the operand stack if this dictionnary lacks a /UnderlineThickness key. This in turn causes an off-by-one-operand situation to propagate to the 'def' operator that ends up not assigning the dictionary to the expected /iso1dict name but to some other name, thus effectively leaving 'iso1dict' undefined.

Proposed patch :
The 'reencode' procedure in base.ps could be rewritten as follow :

% reencode the font
% <encoding-vector> <fontdict> -> <newfontdict>
  dup length 5 add dict begin
    { % <vector> <key> <val>
      1 index /FID ne
      { def }{ pop pop } ifelse
    } forall
    /Encoding exch def % -

    % Use the font's bounding box to determine the ascent, descent,
    % and overall height; don't forget that these values have to be
    % transformed using the font's matrix.
% We use `load' because sometimes BBox is executable, sometimes not. % Since we need 4 numbers an not an array avoid BBox from being executed
    /FontBBox load aload pop
    FontMatrix transform /Ascent exch def pop
    FontMatrix transform /Descent exch def pop
    /FontHeight Ascent Descent sub def

    % Get the underline position and thickness if they're defined.
    % Use 1 if they are not defined.
    currentdict /FontInfo 2 copy known
    { get
      /UnderlinePosition 2 copy  % <FontInfo> /UP <FontInfo> /UP
      2 copy known
      { get }{ pop pop 1} ifelse
      0 exch FontMatrix transform exch pop
      def           % <FontInfo>

      /UnderlineThickness 2 copy  % <FontInfo> /UT <FontInfo> /UT
      2 copy known
      { get }{ pop pop 1} ifelse
      0 exch FontMatrix transform exch pop
      def           % <FontInfo>
      pop           % -
    }{ pop pop
    } ifelse


reply via email to

[Prev in Thread] Current Thread [Next in Thread]