Swedish characters in postscript files printing as space

Nigel Bennington nigel.bennington at royalskandia.com
Mon Feb 14 01:04:30 PST 2011


Hi,

I've analysed the document, and the only fonts used in it are Courier, Times-Roman and Times-Bold, all of which are installed in the printer. Times-Bold is in force when the swedish characters are invoked.

When we were on Solaris 8, using the base solaris printing, these documents printed fine, to the same printers - Is there any processing involved in printing a ps file with CUPS, or is it just passed directly to the printer? I note there is a pstops filter in 1.4.5, and in 1.1.21, the PPD invoked foomatics-rip. Could this be where the issue lies?

In case I haven't already said by the way, many, many thanks for the assistance.

Cheers,
> Nigel Bennington wrote:
>
> > Actually, they are coded using ISO8859P1, which should be OK, and I
> > thought UTF-8 was the font CUPS preferred? It certainly seems to be the
> > default in everything I've read. Any hints on how to tell CUPS what
> > character set encoding is in use?
> >
> > Bear in mind that the PS files are produced by a third party app, and
> > woked fine on Solaris 8, using standard SUN printing, it;'s only since
> > moving to Solaris 10 and CUPS that the issue has begun.
> >
> >> Nigel Bennington wrote:
> >>
> >> > Apologies for the delayed reply, I have been ill for a couple of days.
> >> >
> >> > I have a copy of one of the postscript files with swedish characters
> >> > in, from which I have redacted all confidential information.
> >> >
> >> > To summarise:
> >> >
> >> > On Solaris 10 (sparc), using CUPS 1,1,21 or CUPS 1.4.5, swedish
> >> > characters do not display.
> >> >
> >> > On Solaris 10 (sparc), using ghostscript to view the file, swedish
> >> > characters do not display.
> >> >
> >> > On Windows XP, using Adobe Acrobat Reader to view the file (via
> >> > conversion to pdf), swedish characters do not display.
> >> >
> >> > On Windows XP, using ghostscript to view the file, swedish characters
> >> > display without a problem.
> >> >
> >> > I can't see an upload mechanism on the forum, how do I upload the file
> >> > for you?
> >> >
> >> > Just in case, I have embedded it below the line of hyphens. below.
> >> >
> >> >
> >>
> -------------------------------------------------------------------------------
> >> >
> >> > %!PS-Adobe-1.0
> >> > % Postscri.str - SQR Postscript startup file
> >> > %
> >> > % Copyright (C) 1994 MITI  All Worldwide Rights Reserved
> >> > %
> >> > % Edit:
> >> > % -----
> >> > % 02-25-93  PAB  (SQR-0194)
> >> > %                 Modifications were made to support the various
> >> > viewers
> >> > %                 available on the market. (e.g. pageview on SUN Sparc)
> >> > % (_V2.5.6_)
> >> > % 05-13-94  GLD  (DEV-1009) - Added 'Worldwide' Rights
> >> > % (_V3.0_)
> >> > % 08-03-94  DAN  (M-023)
> >> > %                 Corrected location of place calculation in hline,
> >> > vline, box.
> >> > %                 Will be in effect on very wide lines.
> >> > %                 Correction made to enable overlapping lines / boxes
> >> > % 08-03-94  JLK  (DEV-3016) Allow for multiple print options
> >> > %                 o Increased dictionary size to 100
> >> > % 09-02-94  EMP  (DEV-3008) Added macros for Grafsmap PS definitions
> >> > % 09-02-94  EMP  (DEV-3009)
> >> > %                 o Added cbox for 'crossed' box when image provided to
> >> > SQR
> >> > %                   is not proper
> >> > %                 o Added epsimg to perform EPS/AI translation and
> >> > scaling
> >> > % 09-08-94  PAB  (DEV-1033)
> >> > %                 o Added ^D at end of file to prevent timeouts
> >> > % (_V3.5_)
> >> > % 07-31-95  PAB  (DEV-4007)
> >> > %                 o Account for minus sign (-) floating into comma
> >> > %                   position when processing SPF_PNUM packet.
> >> > % 08-03-95  PAB  (DEV-4001)
> >> > %                 o Redesigned the /ns macro for to handle alternate
> >> > %                   characters for the money-sign, thousand-separator
> >> > and
> >> > %                   decimal-separator.  It now will work with EBCDIC
> >> > strings.
> >> > %                 o Increased dictionary size to 150.
> >> > % (_V4.0_)
> >> > % 08-13-96  PAB  (OH-1753)
> >> > %                 o Put back the old '/ns' macro under the name '/nsv1'
> >> > for
> >> > %                   older SPF files.
> >> > %                 o Increased dictionary size to 200.
> >> > % 10-01-96  PAB  (OH-1969)
> >> > %                 o Added 'save/restore' to instantiate each page.
> >> > % (_V4.3.2_)
> >> > % 09-01-98  PAB  (TS-4353)
> >> > %                 o Changed comments about GRAPHIC command to
> >> > ALTER-PRINTER. % (_V4.3.5_)
> >> > % 07-14-99  PAB  (OH-8391)
> >> > %                 o The "ns" macro now takes the textual characters for
> >> > the
> >> > %                   thousand and decimal indicators instead of their
> >> > %                   numerical value.
> >> > % (_V6.0_)
> >> > % 11-29-99  PAB  (OH-9346)
> >> > %                 o Added /fillbox and /ebf to support COLOR
> >> > % (_EOH_)
> >> > % Note: The lines beginning '%PROLOG1' and '%PROLOG2' are required.
> >> >
> >> > /server save def   % Save postscript VM stack
> >> > /sqdict 200 dict def
> >> > sqdict begin
> >> >
> >> > /FS {   % pass font scale, name
> >> >     findfont exch scalefont
> >> >     } bind def
> >> >
> >> > /LM 0.5 def
> >> > /TM 0.1 def
> >> > /PS 12.0000 def
> >> > /CS 6.00000 def
> >> > /OR /l def
> >> > /PL 8.50 def
> >> >
> >> > %  Font names:  These may be changed to any fonts that are supported by
> >> > your
> >> > %  		printer.  You may add or delete fonts.  Be careful not to
> >> > %		delete fonts or change font numbers in use by existing
> >> > %		SQR programs.  The Font_default_size is the point size used
> >> > %		when no explicit size is requested.
> >> > %
> >> > %		The Number's assigned below have been initialized to somewhat
> >> > %		emulate the Typeface numbers used by the HP LaserJet
> >> > %		(especially 3,4,5 -- Courier, Helvetica and Times-Roman) so
> >> > %		SQR programs designed for both printers can use the same
> >> > %		font numbers and produce similar results.  If this is not
> >> > %		important to you these font numbers may be reassigned any way
> >> > %		you like.  NOTE: SQR assumes font 3 (Courier) is a monospaced
> >> > %		(not proportional) font.
> >> > %
> >> > %		The first font in the list will be used if a font number is
> >> > %		not found.  The default font number for DECLARE PRINTER is 3.
> >> > %
> >> > %		Up to three point sizes per font are cached.
> >> > %
> >> > %		A boldface font (switched to automatically with the BOLD
> >> > %		qualifier to the PRINT command) must have a number equal to
> >> > %		100 times the font number of its associated lightface font.
> >> > %		Numbers assigned to lightface fonts must be between 1 and 99.
> >> > %
> >> > /Fonts [   % Array of point sizes and font names
> >> > % 				                (leave these as zeros)
> >> > % Number  Name			      Size_A   Size_B  Size_C  ID_A  ID_B  ID_C
> >> > % ------  ----------------	      ------   ------  ------  ----  ----
> >> > ----
> >> >    3      /Courier			0	0	0	0      0     0
> >> >    300    /Courier-Bold			0	0	0	0      0     0
> >> >    4      /Helvetica			0	0	0	0      0     0
> >> >    400    /Helvetica-Bold		0	0	0	0      0     0
> >> >    5      /Times-Roman			0	0	0	0      0     0
> >> >    500    /Times-Bold			0	0	0	0      0     0
> >> >    6      /AvantGarde-Book 		0	0	0	0      0     0
> >> >    8      /Palatino-Roman		0	0	0	0      0     0
> >> >    800    /Palatino-Bold		0	0	0	0      0     0
> >> >    11     /Symbol			0	0	0	0      0     0
> >> >    12     /ZapfDingbats			0	0	0	0      0     0
> >> >    17     /ZapfChancery-MediumItalic	0	0	0	0      0     0
> >> >    18     /Bookman-Light		0	0	0	0      0     0
> >> >    23     /NewCenturySchlbk-Roman	0	0	0	0      0     0
> >> >    2300   /NewCenturySchlbk-Bold	0	0	0	0      0     0
> >> >    30     /Courier-Oblique		0	0	0	0      0     0
> >> >    3000   /Courier-BoldOblique		0	0	0	0      0     0
> >> >    31     /Helvetica-Oblique		0	0	0	0      0     0
> >> >    3100   /Helvetica-BoldOblique	0	0	0	0      0     0
> >> >    32     /Times-Italic			0	0	0	0      0     0
> >> >    3200   /Times-BoldItalic		0	0	0	0      0     0
> >> >    33     /AvantGarde-Demi		0	0	0	0      0     0
> >> >    34     /AvantGarde-BookOblique	0	0	0	0      0     0
> >> >    35     /AvantGarde-DemiOblique	0	0	0	0      0     0
> >> >    36     /Palatino-Italic		0	0	0	0      0     0
> >> >    3600   /Palatino-BoldItalic		0	0	0	0      0     0
> >> >    37     /NewCenturySchlbk-Italic	0	0	0	0      0     0
> >> >    3700   /NewCenturySchlbk-BoldItalic	0	0	0	0      0     0
> >> >    38     /Helvetica-Narrow		0	0	0	0      0     0
> >> >    3800   /Helvetica-Narrow-Bold	0	0	0	0      0     0
> >> >    39     /Helvetica-Narrow-Oblique	0	0	0	0      0     0
> >> >    3900   /Helvetica-Narrow-BoldOblique	0	0	0	0      0     0
> >> >    40     /Bookman-Demi			0	0	0	0      0     0
> >> >    41     /Bookman-LightItalic		0	0	0	0      0     0
> >> >    42     /Bookman-DemiItalic		0	0	0	0      0     0
> >> >     ] def
> >> > /Font_i 8 def   % Items in each Font element
> >> > /Font_default_size 12 def   % Default point size
> >> >
> >> > %  Select font: You can switch from one font to another within a report
> >> > by
> >> > %		using the ALTER-PRINTER command and specifying the font you want:
> >> > %
> >> > %		ALTER-PRINTER FONT=23 POINT-SIZE=14 ! NewCenturySchlbk-Roman, 14
> >> > points. %
> >> > %		Font is setup in printer only first time it is used, for speed.
> >> > %
> >> > /SF {   % Select Font:  Pass number of font as defined in Fonts array,
> >> > % and point size.
> >> >     /psiz exch dup 0 eq {pop Font_default_size} if def
> >> >     /fid exch def
> >> >     /flen Fonts length def
> >> >     % Find location of font number, use 0 if not found
> >> >     /fno 0 def
> >> >     {fno flen ge {/fno 0 def exit} if
> >> >     Fonts fno get fid eq
> >> >     {exit} {/fno fno Font_i add def} ifelse} loop
> >> >     % fno now points to font_number.  Now find matching point size.
> >> >     /fid fno def
> >> >     /fno fno 2 add def
> >> >     /flen fno 2 add def   % Limit for sizes in array
> >> >     {fno flen gt
> >> > {/fno fid 2 add def Fonts fno 3 add 0 put Fonts fno psiz put exit}
> >> >     {Fonts fno get dup psiz eq
> >> > {pop exit} if 0 eq {Fonts fno psiz put exit} if} ifelse
> >> > /fno fno 1 add def} loop
> >> >     % fno now points to location for point size.
> >> >     Fonts fno 3 add get dup 0 eq
> >> > % Font not loaded yet.
> >> > {pop psiz Fonts fid 1 add get FS dup
> >> > Fonts exch fno 3 add exch put} if
> >> >     setfont
> >> >     (w) stringwidth pop (W) stringwidth pop eq
> >> >      {/Font_Is_Fixed 1 def} {/Font_Is_Fixed 0 def} ifelse
> >> >     } bind def
> >> >
> >> > /lmarg LM 72 mul def	% Left margin
> >> > /tmarg TM 72 mul def	% Top margin
> >> > /pglen PL 72 mul def    % Page length
> >> >
> >> > /port   % Setup for portrait
> >> >    {/ypos pglen tmarg sub def
> >> >     initmatrix   % In case preceded by landscape page
> >> >     lmarg ypos moveto} def
> >> >
> >> > /portrait
> >> >   {port
> >> >    /pgtop pglen tmarg sub def
> >> >    /np {   % New-page macro
> >> > showpage
> >> > port
> >> > } def
> >> >     } def
> >> >
> >> > /land   % Setup for landscape
> >> >    {/ypos 612 tmarg sub def
> >> >     initmatrix
> >> >     90 rotate
> >> >     0 -612 translate
> >> >     lmarg ypos moveto} def
> >> >
> >> > /landscape
> >> >   {land
> >> >    /pgtop 612 tmarg sub def
> >> >    /np {   % New-page macro
> >> > showpage
> >> > land
> >> > } def
> >> >     } def
> >> >
> >> > /go {   % Goto location - pass SQR line, col
> >> >     1 sub CS mul lmarg add exch
> >> >     1 sub PS mul pgtop exch sub
> >> >     moveto
> >> >     } bind def
> >> >
> >> > /hline {   % Make horizontal line.
> >> >     % Pass line, col, length, thickness
> >> > % Line goes to right from location indicated
> >> >     /thick exch def thick setlinewidth
> >> >     /len exch CS mul def
> >> >     1 sub CS mul lmarg add exch
> >> >     1 sub PS mul pgtop exch sub
> >> >     PS .15 mul thick .5 mul add sub   % alter y, just below baseline
> >> >     moveto
> >> >     len 0 rlineto stroke
> >> >     } def
> >> >
> >> > /vline {   % Make vertical line.
> >> > % Pass line, col, length, thickness
> >> > % Line goes down from location indicated
> >> >     /thick exch def thick setlinewidth
> >> >     /len exch PS mul def
> >> >     1 sub CS mul lmarg add thick .5 mul sub exch
> >> >     1 sub PS mul pgtop exch sub
> >> >     PS .15 mul sub   % alter y, just below baseline
> >> >     moveto
> >> >     0 len -1 mul rlineto stroke
> >> >     } def
> >> >
> >> > /box {   % Make box.
> >> > % Pass line, col, depth, width, thickness, shading
> >> > % Location passed is upper left corner of box
> >> >     % If shading = 1, then box is not filled, but lines are
> >> >     % stroked using thickness
> >> >     gsave
> >> >     /shading exch def
> >> >     /thick exch def
> >> >     shading 1 eq {thick setlinewidth} {/thick 0 def} ifelse
> >> >     /width exch CS mul def
> >> >     /depth exch PS mul def
> >> >     1 sub CS mul lmarg add
> >> >     exch 2 sub PS mul pgtop exch sub
> >> >     PS .15 mul thick .5 mul add sub   % alter y, just below baseline
> >> >     moveto
> >> >     width 0 rlineto		% Top of box
> >> >     0 depth -1 mul rlineto	% Right edge
> >> >     width -1 mul 0 rlineto	% Bottom
> >> >     closepath 			% Closes box
> >> >     shading 1 eq {stroke} {shading setgray fill} ifelse
> >> >     grestore
> >> >     } def
> >> >
> >> > /fillbox {   % Make box.
> >> > % Pass line, col, depth, width, thickness
> >> > % Location passed is upper left corner of box
> >> >     gsave
> >> >     /thick exch def
> >> >     /width exch CS mul def
> >> >     /depth exch PS mul def
> >> >     1 sub CS mul lmarg add
> >> >     exch 2 sub PS mul pgtop exch sub
> >> >     PS .15 mul thick .5 mul add sub   % alter y, just below baseline
> >> >     moveto
> >> >     width 0 rlineto		% Top of box
> >> >     0 depth -1 mul rlineto	% Right edge
> >> >     width -1 mul 0 rlineto	% Bottom
> >> >     closepath 			% Closes box
> >> >     fill
> >> >     grestore
> >> >     } def
> >> >
> >> > /cbox
> >> > {
> >> > %% SQRx SQRy SQRw SQRh
> >> > gsave
> >> >     %% make box
> >> > 2 index 4 index 2 index 4 index 0.2 1.00 box
> >> > newpath
> >> > 0.2 setlinewidth
> >> > 1 1 go
> >> > 0 PS PS .15 mul sub rmoveto
> >> >     %% Upper left of SQR frame
> >> > 3 index 1 sub CS mul
> >> > 3 index 1 exch sub PS mul rmoveto
> >> >     %% Lower right of SQR frame
> >> > 1 index CS mul
> >> > 1 index 0 exch sub PS mul rlineto
> >> > closepath
> >> > stroke
> >> > pop pop pop pop
> >> > grestore
> >> >     } def
> >> >
> >> > /mtrx matrix def
> >> >
> >> > /epsimg {
> >> >
> >> > %% SQRx SQRy SQRw SQRh EPSx EPSy EPSw EPSh
> >> > 1 1 go
> >> >     %% Upper left of SQR frame
> >> > 7 index 1 sub CS mul
> >> > 7 index 1 exch sub PS mul rmoveto
> >> >     %% Lower left of SQR frame
> >> > 4 index 1 exch sub PS mul
> >> > 0 exch rmoveto
> >> >     %% Translate from currentpoint
> >> > currentpoint translate
> >> >     %% Scale to proper size
> >> > 5 index CS mul
> >> > 2 index div
> >> > 5 index PS mul
> >> > 2 index div
> >> > scale
> >> >     %% Translate from EPS lower left corner
> >> > 3 index 0 exch sub
> >> > 3 index 0 exch sub
> >> > translate
> >> >     %% Pop off items from stack
> >> > pop pop pop pop pop pop pop pop
> >> >     } def
> >> >
> >> > /bu {   % Begin underline or box or shade
> >> >     currentpoint /Uy exch def /Ux exch def
> >> >     } bind def
> >> >
> >> > /eu {   % End underline
> >> >     gsave
> >> >     currentpoint
> >> >     PS 6.75 div sub moveto
> >> >     Ux Uy PS 6.75 div sub lineto
> >> >     PS 16.67 div setlinewidth
> >> >     stroke
> >> >     grestore
> >> >     } bind def
> >> >
> >> > /eb {   % End box or shade.
> >> > % Pass line, col, depth, thickness, shading
> >> > % Calculate width, put it between depth and thickness on stack, and
> >> > % call box.
> >> >     currentpoint pop Ux sub CS div 3 1 roll
> >> >     box
> >> >     } bind def
> >> >
> >> > /ebf {   % End box or shade.
> >> > % Pass line, col, depth, thickness, shading
> >> > % Calculate width, put it between depth and thickness on stack, and
> >> > % call box.
> >> >     currentpoint pop Ux sub CS div 2 1 roll
> >> >     fillbox
> >> >     } bind def
> >> >
> >> > /nsv1  {   % Number set - pass line, col, dollar-sym, string
> >> > % Sets number in fixed character locations - for proportional fonts
> >> > % in string: _ = $ floated into comma, ' = ( floated into comma,
> >> > % ` = blank for width of comma.
> >> >     /str exch def
> >> >     /dlr exch def
> >> >     /col exch def
> >> >     /lin exch def
> >> >     /j 0 def
> >> >     /tchr (a) def
> >> >     /digw (0) stringwidth pop def
> >> >     /comw (,) stringwidth pop def
> >> >     /addw digw def
> >> >     /newcs col 1 sub CS mul lmarg add def
> >> >     /thisln lin 1 sub PS mul pgtop exch sub def
> >> >     str length
> >> > {str j get /tcod exch def
> >> >     tchr 0 tcod put
> >> > /j j 1 add def
> >> > % check for special characters, set up addw
> >> > tcod 95 eq   % _ - convert to $
> >> > {tchr 0 dlr put
> >> > /newcs newcs digw comw sub sub def} if
> >> > tcod 39 eq   % ' - convert to (
> >> > {tchr 0 40 put
> >> > /newcs newcs digw comw sub sub def} if
> >> > tcod 78 eq   % N/A
> >> > {newcs comw sub thisln moveto (N/A) sh exit} if
> >> > tcod 110 eq  % n/a
> >> > {newcs thisln moveto (n/a) sh exit} if
> >> > tcod 96 eq   % ` - convert to space
> >> > {tchr 0 32 put /addw comw def}
> >> > {tcod 44 eq tcod 46 eq or   % , or .
> >> > {/addw comw def} {/addw digw def} ifelse}
> >> > ifelse
> >> > newcs thisln moveto tchr sh
> >> > /newcs newcs addw add def} repeat
> >> >     } bind def
> >> >
> >> > /ns
> >> >   {
> >> >    % Number set: Sets number in fixed character locations for
> >> >    %             proportional fonts.
> >> >    % Arguments:  DecimalSep, ThousandSep, String
> >> >    %
> >> >    % Special     # = Money-Sign (single character) floated into comma
> >> >    %             % = ( floated into comma
> >> >    %             | = blank for width of comma (was * character)
> >> >    %             @ = blank for width of comma
> >> >    %             ! = Start of Money-Sign
> >> >    %             = = - floated into comma
> >> >    %
> >> >   /String       exch def
> >> >   /Seps         exch def
> >> >   /DecimalSep   Seps 0 get def
> >> >   /ThousandSep  Seps 1 get def
> >> >
> >> >   /Dash         (-) 0 get def
> >> >   /Space        ( ) 0 get def
> >> >   /Asterick     (*) 0 get def
> >> >   /PoundSign    (#) 0 get def
> >> >   /Percent      (%) 0 get def
> >> >   /AtSign       (@) 0 get def
> >> >   /VertBar      (|) 0 get def
> >> >   /Bang         (!) 0 get def
> >> >   /Equal        (=) 0 get def
> >> >   /LeftParen    (\() 0 get def
> >> >   /RightParen   (\)) 0 get def
> >> >   /TextChar     (a) def
> >> >
> >> >   Font_Is_Fixed 1 eq
> >> >    {
> >> >    /Index 0 def
> >> >    /Skip 0  def
> >> >    String length
> >> >     {
> >> >     Skip 0 eq
> >> >      {String Index get /TextCode exch def
> >> >       TextChar 0 TextCode put
> >> >       TextCode Equal eq
> >> >        {TextChar 0 Dash put}
> >> >        {TextCode AtSign eq
> >> >          {TextChar 0 Space put}
> >> >          {TextCode Percent eq
> >> >            {TextChar 0 LeftParen put}
> >> >            {TextCode VertBar eq
> >> >              {TextChar 0 Asterick put}
> >> >              if}
> >> >            ifelse}
> >> >          ifelse}
> >> >        ifelse
> >> >      TextCode Bang eq TextCode PoundSign  eq or
> >> >       {MS sh /Skip MS length 1 sub def}
> >> >       {TextChar sh} ifelse
> >> >      }
> >> >      {
> >> >      /Skip Skip 1 sub def
> >> >      } ifelse
> >> >     /Index Index 1 add def
> >> >     } repeat
> >> >    }
> >> >    {
> >> >    /ThousandChar (a) def
> >> >    /DecimalChar  (a) def
> >> >    /DigitWidth   (0) stringwidth pop def
> >> >    /MSChar       (a) def
> >> >    /MSCode        0 def
> >> >
> >> >    /ThoSepWidth ThousandChar 0 ThousandSep put ThousandChar stringwidth
> >> >    pop def /DecSepWidth DecimalChar 0 DecimalSep put DecimalChar
> >> >    stringwidth pop def /Nudge DigitWidth ThoSepWidth sub def
> >> >
> >> >    /MoneySignWidth 0 def
> >> >    /Index 0 def
> >> >    String length
> >> >     {
> >> >     String Index get /TextCode exch def
> >> >     TextCode Bang eq TextCode PoundSign  eq or
> >> >      {/Loop 0 def
> >> >       MS length
> >> >        {
> >> >        MS Loop get /MSCode exch def
> >> >        MSChar 0 MSCode put
> >> >        /Width MSChar stringwidth pop def
> >> >
> >> >        String Index get /TextCode exch def
> >> >        TextCode AtSign eq
> >> >         {/Width Width ThoSepWidth sub def} if
> >> >        /MoneySignWidth MoneySignWidth Width add def
> >> >
> >> >        /Loop Loop 1 add def
> >> >        /Index Index 1 add def
> >> >        } repeat
> >> >       exit
> >> >      } if
> >> >     /Index Index 1 add def
> >> >     } repeat
> >> >
> >> >    %
> >> >    % Get the current line and column coordinates
> >> >    %
> >> >    currentpoint /ThisLine exch def /NewColumn exch def
> >> >
> >> >    %
> >> >    % Remember the current line and column coordinates
> >> >    %
> >> >    /OrigColm NewColumn def
> >> >    /OrigLine ThisLine def
> >> >
> >> >    %
> >> >    % Process each character of the number string
> >> >    %
> >> >    /HadMoneySign 0 def
> >> >    /Index 0 def
> >> >    String length
> >> >     {
> >> >     String Index get /TextCode exch def
> >> >     TextChar 0 TextCode put
> >> >     /Index Index 1 add def
> >> >     TextCode PoundSign  eq
> >> >      {TextChar 0 MS 0 get put
> >> >       /Width MoneySignWidth def
> >> >       /NewColumn NewColumn Nudge sub def}
> >> >      {TextCode Percent eq
> >> >        {TextChar 0 LeftParen put
> >> >         /Width DigitWidth def
> >> >         /NewColumn NewColumn Nudge sub def}
> >> >        {TextCode VertBar eq
> >> >          {TextChar 0 Space put
> >> >           /Width ThoSepWidth def}
> >> >          {TextCode AtSign eq
> >> >            {TextChar 0 Space put
> >> >             /Width ThoSepWidth def}
> >> >            {TextCode Equal eq
> >> >              {TextChar 0 Dash put
> >> >               /Width DigitWidth def
> >> >               /NewColumn NewColumn Nudge sub def}
> >> >              {TextCode Bang eq
> >> >                {HadMoneySign 0 eq
> >> >                 {/HadMoneySign 1 def
> >> >                  /NewColumn NewColumn MoneySignWidth add def} if
> >> >                 /Width 0 def}
> >> >                {TextCode ThousandSep eq
> >> >                  {/Width ThoSepWidth def}
> >> >                  {TextCode DecimalSep eq
> >> >                    {/Width DecSepWidth def}
> >> >                    {TextCode Space eq TextCode RightParen eq or
> >> >                    {TextCode Dash eq or TextCode LeftParen eq or
> >> >                      {/Width DigitWidth def}
> >> >                      {/Width TextChar stringwidth pop def}
> >> >                      ifelse}
> >> >                    ifelse}
> >> >                  ifelse}
> >> >                ifelse}
> >> >              ifelse}
> >> >            ifelse}
> >> >          ifelse}
> >> >        ifelse}
> >> >      ifelse
> >> >
> >> >      Width 0 ne
> >> >       {NewColumn ThisLine moveto TextChar sh
> >> >        /NewColumn NewColumn Width add def
> >> >       } if
> >> >      } repeat
> >> >
> >> >     %
> >> >     % If the string had a Money-Sign in it then we need to put it
> >> >     % in since the above logic simply left enough space for it.
> >> >     %
> >> >     HadMoneySign 1 eq
> >> >      {
> >> >      %
> >> >      % Remember our location
> >> >      %
> >> >      currentpoint /CurrLine exch def /CurrColm exch def
> >> >
> >> >      %
> >> >      % Position to the beginning of the string
> >> >      %
> >> >      OrigColm OrigLine moveto
> >> >
> >> >      %
> >> >      % Process each character (advancing position) until we get to the
> >> >      % start of the Money-String then we simply output the string.
> >> >      %
> >> >      /Index 0 def
> >> >      String length
> >> >       {
> >> >       String Index get /TextCode exch def
> >> >       TextChar 0 TextCode put
> >> >       /Width TextChar stringwidth pop def
> >> >       TextCode Space eq TextCode Dash eq or TextCode LeftParen eq or
> >> >        {/Width DigitWidth def}
> >> >        {TextCode Percent eq
> >> >         {/Width DigitWidth Nudge sub def}
> >> >         {TextCode AtSign eq
> >> >          {/Width ThoSepWidth def}
> >> >          {TextCode Bang eq
> >> >           {MS sh exit}
> >> >          if}
> >> >         ifelse}
> >> >        ifelse}
> >> >       ifelse
> >> >
> >> >       /OrigColm OrigColm Width add def
> >> >       OrigColm OrigLine moveto
> >> >       /Index Index 1 add def
> >> >       } repeat
> >> >      %
> >> >      % Restore our location
> >> >      %
> >> >      CurrColm CurrLine moveto
> >> >      } if
> >> >    } ifelse
> >> >   } bind def
> >> >
> >> > /sh {show} bind def   % show macro
> >> >
> >> > OR /l eq {landscape} {portrait} ifelse   % Choose portrait or landscape
> >> >
> >> > % for Grafsman driver
> >> >
> >> > /master /Times-Roman findfont 1.3 scalefont def
> >> > /n {newpath} def
> >> > /m {moveto} def
> >> > /l {lineto} def
> >> > /s {stroke} def
> >> > /f {gsave fill grestore} def
> >> > /d {setdash} def
> >> > /g {setgray} def
> >> > /c {closepath} def
> >> > /t {dup stringwidth exch -.5 mul exch rmoveto show} def
> >> >
> >> > end   % End sqdict definitions
> >> >
> >> > %%EndProlog
> >> >
> >> > %%Page: 1 1
> >> > sqdict begin save
> >> >
> >> > 3 12 SF
> >> > /MS ($) def
> >> > 3 1 go () sh
> >> > 5 15 SF 9 1 go () sh
> >> > 9 54 go 500 15 SF (INVESTMENT REPORT) sh
> >> > 5 15 SF 5 9 SF 11 10 go (13 02926 625) sh
> >> > 11 25 go (30 September xxxx) sh
> >> > 11 45 go (.,) (000000000) ns
> >> > 5 11 SF 11 54 go 500 11 SF (Mr Björn & Mrs xxxxx-xxxxx xxxxxxx) sh
> >> > 5 11 SF 5 8 SF 13 9 go (Mr Björn & Mrs xxxxx-xxxxx xxxxxxx) sh
> >> > 14 9 go (xxxxxxxxxxxxx x) sh
> >> > 15 9 go (x-xxx xx xxxxxxxx) sh
> >> > 16 9 go (xxxxxx) sh
> >> > 17 9 go ( ) sh
> >> > 18 45 go () sh
> >> > 17 43 go (xxx) sh
> >> > 24 1 go () sh
> >> > 25 1 go () sh
> >> > 5 7 SF 26 1 go () sh
> >> > 28 26 7 81 0.00 0.86 box
> >> > 28 32 go (This statement does not confer any rights distinct from those
> >> > set out in the Policy Terms. The values quoted are for information
> >> > purposes only ) sh 29 32 go (and may not include any quarterly
> >> > Portfolio Fund charges accrued but not yet applied. The value is based
> >> > upon the latest valuation data available ) sh 30 32 go (to us and may
> >> > not reflect any applicable interest or redemption charges which may
> >> > apply in the event of the realisation of an asset. The ) sh 31 32 go
> >> > (surrender/encashment value* will be 100% of the Portfolio Fund value
> >> > reduced by any applicable charges shown in your Charges Schedule. ) sh
> >> > 32 32 go ( The death benefit* on the death of the Relevant Life Assured
> >> > \(not applicable to Redemption Bond contracts\) will be 101% of the
> >> > fund value ) sh 33 32 go (reduced by any applicable charge shown in
> >> > your Charges Schedule unless your Schedule shows a higher amount.
> >> > Please check and advise xxxxx xxxxxxx ) sh 34 32 go (within 1 month
> >> > from the date of the valuation of any discrepancies. * calculated on
> >> > the date stated in your Policy Bond Terms.) sh 37 23 go () sh 37 32 go
> >> > 500 7 SF (An invoice for the Portfolio Fund charges accrued during the
> >> > last quarter will be sent to your Fund Manager. You or your appointed
> >> > fund adviser ) sh 5 7 SF 38 32 go 500 7 SF (may wish to liaise with
> >> > them to ensure that sufficient cash is available to pay the charges.)
> >> > sh 5 7 SF 39 124 go () sh 40 124 go () sh 47 124 go () sh 47 32 go
> >> > (Member of the Association of International Life Offices. Authorised by
> >> > the FSA.xxx.xxxxxxxxxxxx.xxx) sh
> >> > 5 5 SF 50 125 go (Page  1) sh
> >> > 50 129 go (of) sh
> >> > 50 131 go (8) sh
> >> > 50 132 go 5 9 SF np
> >> > restore end
> >> > %%Page: 2 2
> >> > sqdict begin save
> >> > 5 9 SF
> >> > /MS ($) def
> >> > 9 1 go () sh
> >> > 5 15 SF 9 51 go 500 15 SF (VALUATION SUMMARY) sh
> >> > 5 15 SF 5 12 SF 11 38 go 500 12 SF (Policy No) sh
> >> > 5 12 SF 11 48 go 500 12 SF (.,) (000000000) ns
> >> > 5 12 SF 11 78 go 500 12 SF (30 September 0000) sh
> >> > 5 12 SF 5 7 SF 14 38 go 500 7 SF (SECURITY TYPE) sh
> >> > 5 7 SF 14 62 go 500 7 SF (GBP MARKET VALUE) sh
> >> > 5 7 SF 14 89 go 500 7 SF (%VALUE) sh
> >> > 5 7 SF 16 38 go (CASH) sh
> >> > 16 63 go (.,) (   @   @   @ 10,901.32) ns
> >> > 16 83 go (.,) (   @   @   @   @  3.36) ns
> >> > 18 38 go (DEBT INSTRUMENTS) sh
> >> > 18 63 go (.,) (   @   @   @313,574.08) ns
> >> > 18 83 go (.,) (   @   @   @   @ 96.64) ns
> >> > 20 38 go 500 7 SF (TOTAL VALUE) sh
> >> > 5 7 SF 20 63 go (.,) (   @   @   @000,000.00) ns
> >> > 20 91 go 500 7 SF (100.00) sh
> >> > 5 7 SF 5 8 SF 5 5 SF 50 125 go (Page  2) sh
> >> > 50 129 go (of) sh
> >> > 50 131 go (8) sh
> >> > 50 132 go 5 9 SF np
> >> > restore end
> >> > %%Page: 3 3
> >> > sqdict begin save
> >> > 5 9 SF
> >> > /MS ($) def
> >> > 5 15 SF 9 1 go () sh
> >> > 9 51 go 500 15 SF (PORTFOLIO VALUATION) sh
> >> > 5 15 SF 5 12 SF 11 43 go 500 12 SF (Policy No) sh
> >> > 5 12 SF 11 53 go 500 12 SF (.,) (000000000) ns
> >> > 5 12 SF 11 81 go 500 12 SF (30 September 0000) sh
> >> > 5 12 SF 12 1 go () sh
> >> > 5 10 SF 17 1 go () sh
> >> > 12 1 go () sh
> >> > 14 55 go 500 10 SF (DEBT INSTRUMENTS) sh
> >> > 5 10 SF 5 7 SF 16 1 go 500 7 SF (SECURITY) sh
> >> > 5 7 SF 17 1 go 500 7 SF (NUMBER) sh
> >> > 5 7 SF 16 10 go 500 7 SF (COMPANY & STOCK NAME) sh
> >> > 5 7 SF 16 31 go 500 7 SF (CURRENCY) sh
> >> > 5 7 SF 16 42 go 500 7 SF (UNITS) sh
> >> > 5 7 SF 16 51 go 500 7 SF (GBP BK COST) sh
> >> > 5 7 SF 16 62 go 500 7 SF (MKT PRICE) sh
> >> > 5 7 SF 16 73 go 500 7 SF (GBP RATE) sh
> >> > 5 7 SF 16 83 go 500 7 SF (GBP VALUE) sh
> >> > 5 7 SF 16 92 go 500 7 SF (ACCRUED ) sh
> >> > 5 7 SF 17 92 go 500 7 SF (DAYS ) sh
> >> > 5 7 SF 16 92 go () sh
> >> > 16 104 go 500 7 SF (ACCRUED ) sh
> >> > 5 7 SF 17 104 go 500 7 SF (INTEREST ) sh
> >> > 5 7 SF 16 108 go () sh
> >> > 16 116 go 500 7 SF (UNREALISED) sh
> >> > 5 7 SF 16 126 go 500 7 SF (%PROFIT) sh
> >> > 5 7 SF 21 133 go () sh
> >> > 16 133 go () sh
> >> > 18 1 go (0000000) sh
> >> > 18 10 go (xxxxxxxxxxxxx) sh
> >> > 19 10 go (xxxx xxxxxx xx xxx) sh
> >> > 18 33 go (xxx) sh
> >> > 18 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 18 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 18 60 go (.,) (   @ 00.0000000) ns
> >> > 18 71 go (.,) (   @ 00.000000) ns
> >> > 18 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 18 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 18 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 18 126 go (.,) (      0.00) ns
> >> > 23 136 go () sh
> >> > 18 136 go () sh
> >> > 20 1 go (0000000) sh
> >> > 20 10 go (xxxxxxxxxxxxx) sh
> >> > 21 10 go (xxxx xxxxxx xx xxx) sh
> >> > 20 33 go (xxx) sh
> >> > 20 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 20 47 go (.,) (   @   @   @  0,000.00) ns
> >> > 20 60 go (.,) (   @ 00.0000000) ns
> >> > 20 71 go (.,) (   @ 00.000000) ns
> >> > 20 78 go (.,) (   @   @   @  0,000.00) ns
> >> > 20 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 20 111 go (.,) (   @   @   @   @000.00) ns
> >> > 20 126 go (.,) (      0.00) ns
> >> > 25 136 go () sh
> >> > 20 136 go () sh
> >> > 22 1 go (xxxxxxx) sh
> >> > 22 10 go (xxxxxxx xxxxxxxxxx) sh
> >> > 23 10 go (0% xxx/xxx 00/00/00 000 xxxxxxx xxx) sh
> >> > 22 33 go (xxx) sh
> >> > 22 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 22 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 22 60 go (.,) (   @ 00.0000000) ns
> >> > 22 71 go (.,) (   @ 00.000000) ns
> >> > 22 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 22 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 22 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 22 126 go (.,) (     00.00) ns
> >> > 27 136 go () sh
> >> > 22 136 go () sh
> >> > 24 1 go (xxxxxxx) sh
> >> > 24 10 go (xxxxxxx xxxxxxxxxx) sh
> >> > 25 10 go (000 x 00/00/00 000000 xxx) sh
> >> > 24 33 go (xxx) sh
> >> > 24 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 24 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 24 60 go (.,) (   @000.0000000) ns
> >> > 24 71 go (.,) (   @ 00.000000) ns
> >> > 24 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 24 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 24 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 24 126 go (.,) (     00.00) ns
> >> > 29 136 go () sh
> >> > 24 136 go () sh
> >> > 26 1 go (xxxxxxx) sh
> >> > 26 10 go (xxxxxxx xxxxxxxxxx) sh
> >> > 27 10 go (00/00/00 000 x 000000 xxx) sh
> >> > 26 33 go (xxx) sh
> >> > 26 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 26 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 26 60 go (.,) (   @000.0000000) ns
> >> > 26 71 go (.,) (   @ 00.000000) ns
> >> > 26 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 26 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 26 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 26 126 go (.,) (     00.00) ns
> >> > 31 136 go () sh
> >> > 26 136 go () sh
> >> > 28 1 go (xxxxxxx) sh
> >> > 28 10 go (xxx) sh
> >> > 29 10 go (xx 000 x 00/00/00 xxx) sh
> >> > 28 33 go (xxx) sh
> >> > 28 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 28 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 28 60 go (.,) (   @ 00.0000000) ns
> >> > 28 71 go (.,) (   @ 00.000000) ns
> >> > 28 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 28 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 28 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 28 126 go (.,) (      0.00) ns
> >> > 33 136 go () sh
> >> > 28 136 go () sh
> >> > 30 1 go (xxxxxxx) sh
> >> > 30 10 go (xxxx) sh
> >> > 31 10 go (xxxx xxxx xxxxxxxxxxx 000000 xxx) sh
> >> > 30 33 go (xxx) sh
> >> > 30 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 30 47 go (.,) (   @   @   @  0,000.00) ns
> >> > 30 60 go (.,) (   @ 00.0000000) ns
> >> > 30 71 go (.,) (   @ 00.000000) ns
> >> > 30 78 go (.,) (   @   @   @  0,000.00) ns
> >> > 30 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 30 111 go (.,) (   @   @   @   @000.00) ns
> >> > 30 126 go (.,) (      0.00) ns
> >> > 35 136 go () sh
> >> > 30 136 go () sh
> >> > 32 1 go (xxxxxxx) sh
> >> > 32 10 go (xxxxxxx xxxxxxxxxx) sh
> >> > 33 10 go (xxxx xxxx 00/00/00 xxx) sh
> >> > 32 33 go (xxX) sh
> >> > 32 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 32 47 go (.,) (   @   @   @  0,000.00) ns
> >> > 32 60 go (.,) (   @ 00.0000000) ns
> >> > 32 71 go (.,) (   @ 00.000000) ns
> >> > 32 78 go (.,) (   @   @   @  0,000.00) ns
> >> > 32 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 32 111 go (.,) (   @   @   @   @000.00) ns
> >> > 32 126 go (.,) (      0.00) ns
> >> > 37 136 go () sh
> >> > 32 136 go () sh
> >> > 34 1 go (xxxxxxx) sh
> >> > 34 10 go (xxxxxxx xxxxxxxxxx) sh
> >> > 35 10 go (xxxx xxxx xxx) sh
> >> > 34 33 go (xxx) sh
> >> > 34 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 34 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 34 60 go (.,) (   @ 00.0000000) ns
> >> > 34 71 go (.,) (   @ 00.000000) ns
> >> > 34 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 34 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 34 111 go (.,) (   @   @   @   @000.00) ns
> >> > 34 126 go (.,) (      0.00) ns
> >> > 39 136 go () sh
> >> > 34 136 go () sh
> >> > 36 1 go (0000000) sh
> >> > 36 10 go (xxx) sh
> >> > 37 10 go (xxxx 00/00/00 xxx) sh
> >> > 36 33 go (xxx) sh
> >> > 36 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 36 47 go (.,) (   @   @   @  0,000.00) ns
> >> > 36 60 go (.,) (   @000.0000000) ns
> >> > 36 71 go (.,) (   @ 00.000000) ns
> >> > 36 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 36 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 36 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 36 126 go (.,) (     00.00) ns
> >> > 41 136 go () sh
> >> > 36 136 go () sh
> >> > 38 1 go (xxxxxxx) sh
> >> > 38 10 go (xxxx) sh
> >> > 39 10 go (xxxxx 000000 xxx) sh
> >> > 38 33 go (xxx) sh
> >> > 38 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 38 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 38 60 go (.,) (   @ 00.0000000) ns
> >> > 38 71 go (.,) (   @ 00.000000) ns
> >> > 38 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 38 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 38 111 go (.,) (   @   @   @   =000.00) ns
> >> > 38 126 go (.,) (     -0.00) ns
> >> > 43 136 go () sh
> >> > 38 136 go () sh
> >> > 40 1 go (xxxxxxx) sh
> >> > 40 10 go (xxxxxxx xxxxxxxxxx) sh
> >> > 41 10 go (xxxxx 000000 xxx) sh
> >> > 40 33 go (xxx) sh
> >> > 40 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 40 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 40 60 go (.,) (   @000.0000000) ns
> >> > 40 71 go (.,) (   @ 00.000000) ns
> >> > 40 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 40 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 40 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 40 126 go (.,) (     00.00) ns
> >> > 45 136 go () sh
> >> > 40 136 go () sh
> >> > 42 1 go (xxxxxxx) sh
> >> > 42 10 go (xxxxxxx xxxxxxxxxx) sh
> >> > 43 10 go (0% xxx xxx 00/00/0000 xxx ) sh
> >> > 42 33 go (xxx) sh
> >> > 42 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 42 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 42 60 go (.,) (   @000.0000000) ns
> >> > 42 71 go (.,) (   @ 00.000000) ns
> >> > 42 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 42 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 42 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 42 126 go (.,) (     00.00) ns
> >> > 47 136 go () sh
> >> > 42 136 go () sh
> >> > 44 1 go (xxxxxxx) sh
> >> > 44 10 go (xxxxxxx xxxxxxxxxx) sh
> >> > 45 10 go (xxx xxxxx 00/00/0000 xxx) sh
> >> > 44 33 go (xxx) sh
> >> > 44 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 44 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 44 60 go (.,) (   @000.0000000) ns
> >> > 44 71 go (.,) (   @ 00.000000) ns
> >> > 44 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 44 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 44 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 44 126 go (.,) (     00.00) ns
> >> > 5 8 SF 5 5 SF 50 125 go (Page  3) sh
> >> > 50 129 go (of) sh
> >> > 50 131 go (8) sh
> >> > 50 132 go 5 9 SF np
> >> > restore end
> >> > %%Page: 4 4
> >> > sqdict begin save
> >> > 5 9 SF
> >> > /MS ($) def
> >> > 8 136 go () sh
> >> > 7 136 go () sh
> >> > 5 10 SF 8 55 go 500 10 SF (DEBT INSTRUMENTS) sh
> >> > 5 10 SF 5 7 SF 10 1 go 500 7 SF (SECURITY) sh
> >> > 5 7 SF 11 1 go 500 7 SF (NUMBER) sh
> >> > 5 7 SF 10 10 go 500 7 SF (COMPANY & STOCK NAME) sh
> >> > 5 7 SF 10 31 go 500 7 SF (CURRENCY) sh
> >> > 5 7 SF 10 42 go 500 7 SF (UNITS) sh
> >> > 5 7 SF 10 51 go 500 7 SF (GBP BK COST) sh
> >> > 5 7 SF 10 62 go 500 7 SF (MKT PRICE) sh
> >> > 5 7 SF 10 73 go 500 7 SF (GBP RATE) sh
> >> > 5 7 SF 10 83 go 500 7 SF (GBP VALUE) sh
> >> > 5 7 SF 10 92 go 500 7 SF (ACCRUED ) sh
> >> > 5 7 SF 11 92 go 500 7 SF (DAYS ) sh
> >> > 5 7 SF 10 92 go () sh
> >> > 10 104 go 500 7 SF (ACCRUED ) sh
> >> > 5 7 SF 11 104 go 500 7 SF (INTEREST ) sh
> >> > 5 7 SF 10 108 go () sh
> >> > 10 116 go 500 7 SF (UNREALISED) sh
> >> > 5 7 SF 10 126 go 500 7 SF (%PROFIT) sh
> >> > 5 7 SF 12 1 go (xxxxxxx) sh
> >> > 12 10 go (xxxxxxx xxxxxxxxxxxxx) sh
> >> > 13 10 go (0% xxx xxx xxx 00/0000 xxx) sh
> >> > 12 33 go (xxx) sh
> >> > 12 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 12 47 go (.,) (   @   @   @  0,000.00) ns
> >> > 12 60 go (.,) (   @000.0000000) ns
> >> > 12 71 go (.,) (   @ 00.000000) ns
> >> > 12 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 12 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 12 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 12 126 go (.,) (     00.00) ns
> >> > 17 136 go () sh
> >> > 12 136 go () sh
> >> > 14 1 go (xxxxxxx) sh
> >> > 14 10 go (xxxxxxx xxxxxxxxxx) sh
> >> > 15 10 go (0% xxx xxx 00/00/0000 xxx) sh
> >> > 14 33 go (xxx) sh
> >> > 14 34 go (.,) (  @   @   @000,000.00000) ns
> >> > 14 47 go (.,) (   @   @   @ 00,000.00) ns
> >> > 14 60 go (.,) (   @ 00.0000000) ns
> >> > 14 71 go (.,) (   @ 00.000000) ns
> >> > 14 78 go (.,) (   @   @   @ 00,000.00) ns
> >> > 14 96 go (.,) (   @   @   @   @  0.00) ns
> >> > 14 111 go (.,) (   @   @   @  0,000.00) ns
> >> > 14 126 go (.,) (      0.00) ns
> >> > 15 74 go 500 7 SF (TOTAL) sh
> >> > 5 7 SF 15 78 go (.,) (   @   @   @000,000.00) ns
> >> > 5 8 SF 5 5 SF 50 125 go (Page  4) sh
> >> > 50 129 go (of) sh
> >> > 50 131 go (8) sh
> >> > 50 132 go 5 9 SF np
> >> > restore end
> >> > %%Page: 5 5
> >> > sqdict begin save
> >> > 5 9 SF
> >> > /MS ($) def
> >> > 9 1 go () sh
> >> > 5 15 SF 9 43 go 500 15 SF (CASH ACCOUNT SUMMARY) sh
> >> > 5 15 SF 5 12 SF 11 40 go 500 12 SF (Policy No) sh
> >> > 5 12 SF 11 50 go 500 12 SF (.,) (000000000) ns
> >> > 5 12 SF 11 78 go 500 12 SF (00 xxxxxxxxx 0000) sh
> >> > 5 12 SF 12 95 go () sh
> >> > 5 7 SF 14 8 go 500 7 SF (ACCOUNT TYPE) sh
> >> > 5 7 SF 14 28 go 500 7 SF (LOCATION) sh
> >> > 5 7 SF 14 46 go 500 7 SF (REFERENCE) sh
> >> > 5 7 SF 14 65 go 500 7 SF (CURRENCY) sh
> >> > 5 7 SF 14 82 go 500 7 SF (BALANCE) sh
> >> > 5 7 SF 14 93 go 500 7 SF (EXCHANGE RATE) sh
> >> > 5 7 SF 14 117 go 500 7 SF (GBP BALANCE) sh
> >> > 5 7 SF 15 8 go (CURRENT ACCOUNT) sh
> >> > 15 28 go (xxx-x) sh
> >> > 15 46 go (00000 xxx 0-000000) sh
> >> > 15 65 go (xxX) sh
> >> > 15 76 go (.,) (   @   @   @   @-00.00) ns
> >> > 15 96 go (.,) (   @  0.000000) ns
> >> > 15 114 go (.,) (   @   @   @   @-00.00) ns
> >> > 18 136 go () sh
> >> > 15 136 go () sh
> >> > 16 8 go (CURRENT ACCOUNT) sh
> >> > 16 28 go (xxx-x) sh
> >> > 16 46 go (00000 xxx 0-000000) sh
> >> > 16 65 go (xxx) sh
> >> > 16 76 go (.,) (   @   @   @   @  0.00) ns
> >> > 16 96 go (.,) (   @  0.000000) ns
> >> > 16 114 go (.,) (   @   @   @   @  0.00) ns
> >> > 19 136 go () sh
> >> > 16 136 go () sh
> >> > 17 8 go (CURRENT ACCOUNT) sh
> >> > 17 28 go (xxx-x) sh
> >> > 17 46 go (00000 xxx 0-000000) sh
> >> > 17 65 go (xxx) sh
> >> > 17 76 go (.,) (   @   @   @000,000.00) ns
> >> > 17 96 go (.,) (   @ 00.000000) ns
> >> > 17 114 go (.,) (   @   @   @ 00,000.00) ns
> >> > 20 136 go () sh
> >> > 17 136 go () sh
> >> > 18 8 go (CURRENT ACCOUNT) sh
> >> > 18 28 go (xxx-x) sh
> >> > 18 46 go (00000 xxx 0-000000) sh
> >> > 18 65 go (xxX) sh
> >> > 18 76 go (.,) (   @   @   @   @  0.00) ns
> >> > 18 96 go (.,) (   @  0.000000) ns
> >> > 18 114 go (.,) (   @   @   @   @  0.00) ns
> >> > 21 136 go () sh
> >> > 18 136 go () sh
> >> > 20 100 go 500 7 SF (TOTAL) sh
> >> > 5 7 SF 20 114 go (.,) (   @   @   @ 00,000.00) ns
> >> > 5 8 SF 47 90 go 5 5 SF 50 125 go (Page  5) sh
> >> > 50 129 go (of) sh
> >> > 50 131 go (8) sh
> >> > 50 132 go 5 9 SF np
> >> > restore end
> >> > %%Page: 6 6
> >> > sqdict begin save
> >> > 5 9 SF
> >> > /MS ($) def
> >> > 9 1 go () sh
> >> > 5 15 SF 9 47 go 500 15 SF (CASH ACCOUNT TRANSACTIONS) sh
> >> > 5 15 SF 5 12 SF 11 37 go 500 12 SF (Policy No) sh
> >> > 5 12 SF 11 47 go 500 12 SF (.,) (000000000) ns
> >> > 5 12 SF 11 81 go 500 12 SF (00 xxxxxxxxx 0000) sh
> >> > 5 12 SF 5 7 SF 14 5 go 500 7 SF (ACCOUNT CURRENCY  : ) sh
> >> > 5 7 SF 14 24 go (xxx-xxxxx xxxxxxxx) sh
> >> > 15 5 go 500 7 SF (ACCOUNT TYPE      : ) sh
> >> > 5 7 SF 15 24 go (xxxxxxx xxxxxxx-xxx-x) sh
> >> > 16 5 go 500 7 SF (ACCOUNT REFERENCE :) sh
> >> > 5 7 SF 16 24 go (00000 xxx 0-000000) sh
> >> > 18 5 go 500 7 SF (VALUATION DATE) sh
> >> > 5 7 SF 18 23 go 500 7 SF (REFERENCE) sh
> >> > 5 7 SF 18 43 go 500 7 SF (PARTICULARS) sh
> >> > 5 7 SF 18 92 go 500 7 SF (DEBIT) sh
> >> > 5 7 SF 18 106 go 500 7 SF (CREDIT) sh
> >> > 5 7 SF 18 119 go 500 7 SF (BALANCE) sh
> >> > 5 7 SF 5 8 SF 19 23 go (brought forward) sh
> >> > 5 7 SF 19 113 go (.,) (   @   @   @   =000.00) ns
> >> > 20 5 go (00-000-0000) sh
> >> > 20 23 go (xx-xxxxxxx) sh
> >> > 5 8 SF 20 43 go (xx-xxxxxxx:xxxxxxxxxxxxx xxxxxx: xx) sh
> >> > 5 7 SF 20 83 go (.,) (   @   @   @   @ 00.00) ns
> >> > 20 113 go (.,) (   @   @   @   =000.00) ns
> >> > 23 135 go () sh
> >> > 20 135 go () sh
> >> > 21 5 go (00-xxx-0000) sh
> >> > 21 23 go (00-0000000) sh
> >> > 5 8 SF 21 43 go (00-0000000: xxxxxxxxxxxxxxx: xxxxxxxx xxxx xxx) sh
> >> > 5 7 SF 21 98 go (.,) (   @   @   @   @ 00.00) ns
> >> > 21 113 go (.,) (   @   @   @   =000.00) ns
> >> > 24 135 go () sh
> >> > 21 135 go () sh
> >> > 22 92 go 500 7 SF (ACCOUNT TOTAL) sh
> >> > 5 7 SF 22 113 go (.,) (   @   @   @   =000.00) ns
> >> > 5 8 SF 5 5 SF 50 125 go (Page  6) sh
> >> > 50 129 go (of) sh
> >> > 50 131 go (8) sh
> >> > 50 132 go 5 9 SF np
> >> > restore end
> >> > %%Page: 7 7
> >> > sqdict begin save
> >> > 5 9 SF
> >> > /MS ($) def
> >> > 5 15 SF 9 1 go () sh
> >> > 9 47 go 500 15 SF (CASH ACCOUNT TRANSACTIONS) sh
> >> > 5 15 SF 5 12 SF 11 37 go 500 12 SF (Policy No) sh
> >> > 5 12 SF 11 47 go 500 12 SF (.,) (000000000) ns
> >> > 5 12 SF 11 81 go 500 12 SF (00 xxxxxxxxx 0000) sh
> >> > 5 12 SF 5 7 SF 14 5 go 500 7 SF (ACCOUNT CURRENCY  : ) sh
> >> > 5 7 SF 14 24 go (xxx-xxxxx xxxxxxxx) sh
> >> > 15 5 go 500 7 SF (ACCOUNT TYPE      : ) sh
> >> > 5 7 SF 15 24 go (xxxxxxx xxxxxxx-xxx-x) sh
> >> > 16 5 go 500 7 SF (ACCOUNT REFERENCE :) sh
> >> > 5 7 SF 16 24 go (00000 xxx 0-000000) sh
> >> > 18 5 go 500 7 SF (VALUATION DATE) sh
> >> > 5 7 SF 18 23 go 500 7 SF (REFERENCE) sh
> >> > 5 7 SF 18 43 go 500 7 SF (PARTICULARS) sh
> >> > 5 7 SF 18 92 go 500 7 SF (DEBIT) sh
> >> > 5 7 SF 18 106 go 500 7 SF (CREDIT) sh
> >> > 5 7 SF 18 119 go 500 7 SF (BALANCE) sh
> >> > 5 7 SF 5 8 SF 19 23 go (brought forward) sh
> >> > 5 7 SF 19 113 go (.,) (   @   @   @   @  0.00) ns
> >> > 20 5 go (00-xxx-0000) sh
> >> > 20 23 go (000-0000000) sh
> >> > 5 8 SF 20 43 go (000:0000000-0:xxxxxX/xxx at 00.000000) sh
> >> > 5 7 SF 20 98 go (.,) (   @   @   @   @ 00.00) ns
> >> > 20 113 go (.,) (   @   @   @   @ 00.00) ns
> >> > 23 135 go () sh
> >> > 20 135 go () sh
> >> > 21 5 go (00-xxx-0000) sh
> >> > 21 23 go (00-0000000) sh
> >> > 5 8 SF 21 43 go (00-0000000: xxxxxxxxxxxxxxx: xxxxxxxx xx xxx) sh
> >> > 5 7 SF 21 83 go (.,) (   @   @   @   @ 00.00) ns
> >> > 21 113 go (.,) (   @   @   @   @  0.00) ns
> >> > 24 135 go () sh
> >> > 21 135 go () sh
> >> > 22 92 go 500 7 SF (ACCOUNT TOTAL) sh
> >> > 5 7 SF 22 113 go (.,) (   @   @   @   @  0.00) ns
> >> > 5 8 SF 5 5 SF 50 125 go (Page  7) sh
> >> > 50 129 go (of) sh
> >> > 50 131 go (8) sh
> >> > 50 132 go 5 9 SF np
> >> > restore end
> >> > %%Page: 8 8
> >> > sqdict begin save
> >> > 5 9 SF
> >> > /MS ($) def
> >> > 5 15 SF 9 1 go () sh
> >> > 9 47 go 500 15 SF (CASH ACCOUNT TRANSACTIONS) sh
> >> > 5 15 SF 5 12 SF 11 37 go 500 12 SF (Policy No) sh
> >> > 5 12 SF 11 47 go 500 12 SF (.,) (000000000) ns
> >> > 5 12 SF 11 81 go 500 12 SF (00 xxxxxxxxX 0000) sh
> >> > 5 12 SF 5 7 SF 14 5 go 500 7 SF (ACCOUNT CURRENCY  : ) sh
> >> > 5 7 SF 14 24 go (xxx-xxxxxxx xxxxx) sh
> >> > 15 5 go 500 7 SF (ACCOUNT TYPE      : ) sh
> >> > 5 7 SF 15 24 go (xxxxxxx xxxxxxx-xxx-x) sh
> >> > 16 5 go 500 7 SF (ACCOUNT REFERENCE :) sh
> >> > 5 7 SF 16 24 go (33978 SEK 1-369126) sh
> >> > 18 5 go 500 7 SF (VALUATION DATE) sh
> >> > 5 7 SF 18 23 go 500 7 SF (REFERENCE) sh
> >> > 5 7 SF 18 43 go 500 7 SF (PARTICULARS) sh
> >> > 5 7 SF 18 92 go 500 7 SF (DEBIT) sh
> >> > 5 7 SF 18 106 go 500 7 SF (CREDIT) sh
> >> > 5 7 SF 18 119 go 500 7 SF (BALANCE) sh
> >> > 5 7 SF 5 8 SF 19 23 go (brought forward) sh
> >> > 5 7 SF 19 113 go (.,) (   @   @   @000,000.00) ns
> >> > 20 5 go (00-xxx-0000) sh
> >> > 20 23 go (000-0000000) sh
> >> > 5 8 SF 20 43 go (000:0000000-0:xxxxxx/xxx at 00.000000) sh
> >> > 5 7 SF 20 83 go (.,) (   @   @   @  0,000.00) ns
> >> > 20 113 go (.,) (   @   @   @000,000.00) ns
> >> > 23 135 go () sh
> >> > 20 135 go () sh
> >> > 21 92 go 500 7 SF (ACCOUNT TOTAL) sh
> >> > 5 7 SF 21 113 go (.,) (   @   @   @000,000.00) ns
> >> > 5 8 SF 5 5 SF 50 125 go (Page  8) sh
> >> > 50 129 go (of) sh
> >> > 50 131 go (8) sh
> >> > 50 132 go 5 9 SF np
> >> > restore end
> >> >
> >> > % After data:
> >> > %%Trailer
> >> > server restore   % Restore Postscript VM stack
> >> > 
> >> >> Nigel Bennington wrote:
> >> >>
> >> >> > Unfortunately, I can't post the documents, as they are
> >> >> > client-confidential.
> >> >> >
> >> >> > I assume that they are correctly formed, since the exact same
> >> >> > document prints perfectly when printed from a windows machine, using
> >> >> > Adobe Reader.
> >> >> >
> >> >> >> Nigel Bennington wrote:
> >> >> >>
> >> >> >> > Hi guys,
> >> >> >> >
> >> >> >> > I'm hoping you can point me in the right direction here, as I am
> >> >> >> > racking my brains over this one.
> >> >> >> >
> >> >> >> > I am running CUPS 1.1.21 (I think, that's the version string in
> >> >> >> > cupsd.conf) on Solaris 10 - If it helps, it's the CUPS from the
> >> >> >> > 10/04 companion CD.
> >> >> >> >
> >> >> >> > I have all locales installed, and base locale is set to Northern
> >> >> >> > Europe, with ISO8859P1 as the default character set.
> >> >> >> >
> >> >> >> > The problem I have is that postscript or pfd files containing
> >> >> >> > swedish characters are substituting spaces for the swedish
> >> >> >> > characters. They also display as spaces in Ghostscript.
> >> >> >> >
> >> >> >> > If I ftp the same files down to a windows system, they both print
> >> >> >> > and display correctly.
> >> >> >> >
> >> >> >> > Any pointers as to what I am doing wrong?
> >> >> >>
> >> >> >> Please post (an URL to) a sample file (PostScript preferred).
> >> >> >> If the files are created on your system, I guess either the fonts
> >> >> >> installed on your system do not contain the glyphs for the swedish
> >> >> >> characters or the creating applications do not correctly reencode
> >> >> >> the fonts.
> >> >> >>
> >> >> >> Helge
> >> >> >>
> >> >>
> >> >> Well, then, at least, do the following:
> >> >>
> >> >> Open such a file in Adobe Reader, select "properties" from the file
> >> >> menu, go to the "fonts" tab, and post what it tells about the used
> >> >> fonts (at least for some of them).
> >> >>
> >> >> Helge
> >> >>
> >>
> >> Well, as far as I can see, the "swedish characters" are encoded as UTF-8
> >> characters, and PostScript does not support UTF-8 by default. Moreover,
> >> your PS job uses the needed fonts "as is", which means - for Type1 fonts
> >> - the set of accessible glyphs ("characters") is restricted to the one
> >> defined by the "Adobe stadard encoding" (and implies similar restrictions
> >> for TrueType fonts as well).
> >>
> >> To settle the issue, you need to either
> >>
> >> a) recode the text to, say, ISO8849-1 by your application and reencode
> >> the fonts to IsoLatin1Encoding by a PostScript routine,
> >>
> >> or
> >>
> >> b) set up all the needed fonts as CID kyed composite fonts using a
> >> suitable CMap which sets up UTF-8 handling as far as needed.
> >>
> >> Approach a) is suitable only if your text data are restricted to what is
> >> called western european scripts, and approach b) is restricted only by
> >> the glyph sets of the used base fonts but is quite laborious to
> >> implement.
> >>
> >> Helge
> >>
> >>
>
> Well, only when printing plain text and friends (all the document formats
> defined as text/xxxx in mime.types) cups requires UTF-8 encoding.
>
> Postscript and PDF are onother story, the text encoding in PS or PDF files
> is completely independent of cups requirements for plain text.
>
> So if you retain the original encoding (ISO8859P1), it should be OK, but you
> still need to reencode the fonts (short of Symbol) from their native
> encoding to IsoLatn1Encoding and embed the fonts (except if this is the nat
> native encoding of the fonts installed in the printer(s).
>
> Helge
>
>





More information about the cups mailing list