% 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/20080216_charpath_Ghostscript.pdf
But Mac Distiller (Professional, 8.1.0, 10/23/06) outputs
www.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/20080216_charpath_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
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?
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
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/group/comp.lang.postscript/
More information at http://www.talkaboutprogramming.com/faq.html
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.
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 regular 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 customize PostScript code and operations.
Please, is there fuller documentation anywhere? E.g., what does
"often" mean? This seems very useful.
> 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.
> 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/
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.
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.
>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.
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
Please ignore that question: very foolish.