For Programmers: Free Programming Magazines  


Home > Archive > PostScript > March 2008 > Possible bug in Mac Distiller's charpath?









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Possible bug in Mac Distiller's charpath?
jdaw1

2008-02-16, 7:21 pm

Please consider the following code, also available at
www.jdawiseman.com/papers/bugs/20080216_charpath.ps
%!

% Julian D. A. Wiseman, 16th February 2008, www.jdawiseman.com

/FontSize 100 def
/Times-Roman FontSize selectfont
0 setgray 0.24 setlinewidth 1 setlinecap 1 setlinejoin [] 0
setdash

72 72 FontSize 6 mul add moveto
(0) true charpath
(2) true charpath
stroke

72 72 FontSize 4.5 mul add moveto
FontSize 2 div FontSize rlineto FontSize 2 div FontSize neg rlineto
stroke

72 72 FontSize 3 mul add moveto
(0) true charpath
FontSize 2 div FontSize rlineto FontSize 2 div FontSize neg rlineto
(2) true charpath
stroke

showpage



GhostScript correctly outputs www.jdawiseman.com/papers/bugs/2008...Ghostscript.pdf

But Mac Distiller (Professional, 8.1.0, 10/23/06) outputs
www.jdawiseman.com/papers/bugs/2008...acDistiller.pdf
which is missing the lines drawn by the two linetos (though not the
positioning affect). Mac Preview is very similar to the Distiller:
www.jdawiseman.com/papers/bugs/2008...ath_Preview.pdf

-- Please, am I doing something wrong?
-- Please, is there a workaround?
-- How can I nag Adobe to fix it? (The bug-submission page on Adobe
doesn't work!)
abeddie@hotmail.com

2008-02-18, 10:26 pm

On Feb 16, 6:17 pm, jdaw1 <jdawise...@gmail.com> wrote:
> Please consider the following code, also available atwww.jdawiseman.com/papers/bugs/20080216_charpath.ps
> %!
>
> % Julian D. A. Wiseman, 16th February 2008,www.jdawiseman.com
>
> /FontSize 100 def
> /Times-Roman FontSize selectfont
> 0 setgray 0.24 setlinewidth 1 setlinecap 1 setlinejoin [] 0
> setdash
>
> 72 72 FontSize 6 mul add moveto
> (0) true charpath
> (2) true charpath
> stroke
>
> 72 72 FontSize 4.5 mul add moveto
> FontSize 2 div FontSize rlineto FontSize 2 div FontSize neg rlineto
> stroke
>
> 72 72 FontSize 3 mul add moveto
> (0) true charpath
> FontSize 2 div FontSize rlineto FontSize 2 div FontSize neg rlineto
> (2) true charpath
> stroke
>
> showpage
>
> GhostScript correctly outputswww.jdawiseman.com/papers/bugs/20080216_charpath_Ghostscript.pdf
>
> But Mac Distiller (Professional, 8.1.0, 10/23/06) outputswww.jdawiseman.com/papers/bugs/20080216_charpath_MacDistiller.pdf
> which is missing the lines drawn by the two linetos (though not the
> positioning affect). Mac Preview is very similar to the Distiller:www.jdawiseman.com/papers/bugs/2008...ath_Preview.pdf
>
> -- Please, am I doing something wrong?
> -- Please, is there a workaround?
> -- How can I nag Adobe to fix it? (The bug-submission page on Adobe
> doesn't work!)


Try a string false charpath. False is for stroking and true
is for filling or clipping.

Ed
jdaw1

2008-02-18, 10:26 pm

> Try a string false charpath. False is for stroking and true
> is for filling or clipping.


Not quite.
-- The boolean is only relevant when the characters are for stroking.
Times-Roman is for filling.
-- If that were the problem, why would it affect the intervening
linetos but not the character paths themselves?
-- More convincingly, when tested, changing the boolean makes no
difference.

Also, the problem isn't caused by the 'hand drawn' path being open, as
adding currentpoint closepath moveto to the end of the rlineto lines
doesn't fix it either.

I'm stuck on this odd problem. Please could someone tell what happens
with PC distiller?
jdaw1

2008-02-25, 7:16 pm

Bumping this as I'm sure that somebody will have a solution.
ken

2008-02-25, 7:16 pm

In article <4a93619f-78c4-46a2-9e44-
b8e64b67cd5c@o77g2000hsf.googlegroups.com>, jdawiseman@gmail.com says...
> Bumping this as I'm sure that somebody will have a solution.
>


Solution in what sense ? I agree that the result appears incorrect, and
is the same using Distiller 8 under Windows.

All the PostScript RIPs I have available to test with (Ghostscript, Jaws
and Harlequin) agree that the PDF produced is incorrect. Those which can
produce PDF output (Jaws and GS) produce 'correct' PDFs.

I don't have a copy of CPSI to test with, and the only person I know who
has one has quite an old copy. Amusingly, a version we already know has
a problem with charpath...

So it seems your only recourse is to use something other than Distiller,
or get Adobe to accept the bug (or explain why it isn't a bug ;-)

Can't help you with tha I'm afraid.


Ken
sjprouty

2008-02-25, 7:16 pm

If you are just looking for a work around, here is a way to restructure the
code that seems to work:

72 72 FontSize 3 mul add moveto
(0) true charpath
currentpoint stroke moveto
FontSize 2 div FontSize rlineto FontSize 2 div FontSize neg rlineto
currentpoint stroke moveto
(2) true charpath
stroke

Thanks
Scott Prouty


--
Message posted using http://www.talkaboutprogramming.com...ang.postscript/
More information at http://www.talkaboutprogramming.com/faq.html

deedubman@gmail.com

2008-02-25, 7:16 pm

Yes, you can stroke the path in three sections but that doesn't help
if there are line joining issues or you want to use the whole path for
clipping.

Note how adding clipping makes it REALLY different from Ghostscript:

%!PS-Bug
72 72 FontSize 3 mul add moveto
(0) true charpath
FontSize 2 div FontSize rlineto FontSize 2 div FontSize neg rlineto
currentpoint moveto
(2) true charpath clip clippath initclip
stroke

showpage

I've seen this problem before and assumed it was related to "charpath
security" i.e. preventing the unauthorized extracting of copyrighted
font outlines. As such, a possible solution would be to use the
"superexec" operator with that magic number Adobe published in the
little black book to enable the use of "pathforall" on the character
outlines to extract all the lineto's and curveto's and then draw them
as a regular path (not a charpath).

-David W.
jdaw1

2008-02-26, 7:22 pm

> Yes, you can stroke the path in three sections but that doesn't help if ... you want to use the whole path for clipping.

Alas I do want to use it for clipping, so stroking in pieces doesn't
work.



> a possible solution would be to use the "superexec" operator with that magic number Adobe published in the little black book to enable the use of "pathforall" on the character outlines to extract all the lineto's and curveto's and then draw them as a re

gular path (not a charpath).

That might help. Thank you for the clue. An online search reveals code
using
1183615869 internaldict /superexec get exec
The only documentation I can find, at www.tinaja.com/glib/pssecrets.pdf,
says:
> Here's how to activate superexec: First, you do a 1183615869 internaldict begin. From that point on, a {forall} superexec or a {get} superexec will often override and ignore any possible invalidaccess errors. This greatly expands your abilities to custo

mize PostScript code and operations.

Please, is there fuller documentation anywhere? E.g., what does
"often" mean? This seems very useful.
jdaw1

2008-02-26, 7:22 pm

superexec is also mention in www.tinaja.com/glib/atg2.pdf (a set of
reprints of Computer Shopper series from November 1987 to December
1989!).

> The 1183615869 internaldict begin command will activate superexec for your use. For instance, if a gives you an error, a often will not. The same trick will often work for {get} superexec.

jdaw1

2008-02-26, 10:16 pm

http://pages.cs.wisc.edu/~ghost/doc....41_Interpreter
(a history of Ghostscript versions 3.n) says at the end of the section
entitled "30.7 Interpreter":

> Adds superexec, an undocumented operator that is equivalent to exec but

suppresses all invalidaccess checks. NOT COMPLETED YET; currently
superexec
is equivalent to exec. (zcontrol.c)

Which suggests that it doesn't work in GhostScript.

PS: I'm adding these links to this thread so that my code can contain
a single reference leading to everything.
% groups.google.com/group/comp.lang.postscript/browse_thread/thread/
8599a22cfa270e5f/
deedubman@gmail.com

2008-02-28, 10:18 pm

On Feb 26, 7:09=A0pm, jdaw1 <jdawise...@gmail.com> wrote:
> http://pages.cs.wisc.edu/~ghost/doc....41_Interpreter
> (a history of Ghostscript versions 3.n) says at the end of the section
> entitled "30.7 Interpreter":
>
>
> suppresses all invalidaccess checks. =A0NOT COMPLETED YET; currently
> superexec
> is equivalent to exec. =A0(zcontrol.c)
>
> Which suggests that it doesn't work in GhostScript.
>
> PS: I'm adding these links to this thread so that my code can contain
> a single reference leading to everything.
> % groups.google.com/group/comp.lang.postscript/browse_thread/thread/
> 8599a22cfa270e5f/


You know what, now it seems that superexec isn't necessary.
Maybe that restriction was removed a long time ago and I'm just
showing my age?

Note the line I have added between the 'charpath' and the 'stroke'
below:

%!PS-Bug
/FontSize 100 def
/Times-Bold FontSize selectfont

72 72 FontSize 3 mul add moveto
(0) true charpath
FontSize 2 div FontSize rlineto FontSize 2 div FontSize neg rlineto
currentpoint moveto
(2) true charpath

mark{/moveto load}{/lineto load}{/curveto load}{/closepath load}
pathforall ] newpath cvx exec

stroke

showpage

-----------------------
One more word of warning: if Distiller attempts to do font
substitution and you get the message "Font cannot be embedded", then
it doesn't work. At least, that happened to me. When I used Times-Bold
as you did, I got the substitution message and bad outlines. When I
used TimesNewRomanPS-BoldMT (which is available on my Windows system)
then it works. Also, if it's a really unknown font name, like
CrazyTimes-Wacko, then Distiller just uses Courier and it works
(albeit with Courier outlines).


-David W.
jdaw1

2008-03-17, 4:41 am

It seems to me that the

mark{/moveto load}{/lineto load}{/curveto load}{/closepath load}
pathforall ] newpath cvx exec

just recreates the path. Please, how is that useful? (Aside: to
facilitate text editor bracket matching, I'd commence it with a "["
rather than a "mark".)
deedubman@gmail.com

2008-03-17, 10:14 pm

On Mar 16, 8:00=A0pm, jdaw1 <jdawise...@gmail.com> wrote:
> It seems to me that the
>
> mark{/moveto load}{/lineto load}{/curveto load}{/closepath load}
> pathforall ] newpath cvx exec
>
> just recreates the path. Please, how is that useful? (Aside: to
> facilitate text editor bracket matching, I'd commence it with a "["
> rather than a "mark".)


Well, it is useful because it fixed the bug for me (Distiller 8.1.0 on
Windows). Did you try it?
If I comment out those two lines, the path does not draw completely.

Adobe attaches a nasty attribute of some kind to the internal path
data structure if it involves a character outline. Whatever this
attribute is, it causes a bug when you try to do certain things with
the path. So by regenerating the path using only moveto, lineto,
curveto and closepath, you create a new, clean path data structure
that the interpreter thinks does not involve character outlines
(because it was not built using 'charpath'), so it does not have the
nasty attribute, so it does not have the bug when you stroke it.

-David W.
Aandi Inston

2008-03-18, 4:37 am

deedubman@gmail.com wrote:

>Adobe attaches a nasty attribute of some kind to the internal path
>data structure if it involves a character outline. Whatever this
>attribute is, it causes a bug ...


I think that's right. Ignoring the bug, I think it is trying to do
something desirable: to recognise sequences like

charpath fill
charpath stroke
charpath gsave fill grestore stroke

and, rather than leaving them as a collection of outlines, distilling
into filled and/or stroked references to a real font.
----------------------------------------
Aandi Inston
Please support usenet! Post replies and follow-ups, don't e-mail them.

jdaw1

2008-03-18, 7:20 pm

Very logical, thank you. I will experiment.

OOI, why use

[ {/moveto load} {/lineto load} {/curveto load} {/closepath load}
pathforall ] newpath cvx exec

rather than a simpler

[ {moveto} {lineto} {curveto} {closepath} pathforall ] newpath cvx
exec
jdaw1

2008-03-18, 7:20 pm

> [ {moveto} {lineto} {curveto} {closepath} pathforall ] newpath cvx
> exec


Please ignore that question: very foolish.
Aneseburanlo09

2008-03-31, 1:35 pm

Hot amateur videos
http://amateur-video-sharing.com/watch?v=218571
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com