[tkined] PostScript can't display in Word97

Vincent Qing Yin (vyin@cs.ubc.ca)
Mon, 14 Sep 1998 16:37:30 -0700 (PDT)

Hi,

After opening a MIB in tkined and save as a postscript file, I
cannot get it to display properly in Microsoft Word 97.

I changed the file suffix to .eps instead of .ps. It displays
nicely in `ghostview' on UNIX. But when I insert that file
as a picture into Word97, it displays something like:

Title:
Window .top0.c
Creator:
Tk Canvas Widget
...

How to fix that?

The file is attached below.

-- 

Q Vincent Yin | Repeat vyin@cs.ubc.ca | delete(next->bug); (604) 876-9096 (H) | Until 0 = 1;

-------------------------------------------------------------

%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Vincent Qing Yin %%Title: Window .top0.c %%CreationDate: Mon Sep 14 14:04:47 1998 %%BoundingBox: 210 368 402 424 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%EndComments

%%BeginProlog 50 dict begin

% This is a standard prolog for Postscript generated by Tk's canvas % widget. % SCCS: @(#) prolog.ps 1.7 96/07/08 17:52:14

% The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript).

/baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def

% Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't).

systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if

% font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book.

/ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end

% I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font.

/Temporary exch definefont } bind def

% StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again.

/StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def

% desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects.

/EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt

% Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def

% width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state.

/StippleFill { % The following code is needed to work around a NeWSprint bug.

/tmpstip 1 index def

% Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale

% Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them.

pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll

% Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position

6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y

gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def

% -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable.

/AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def

% x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text.

/DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def

% First scan through all of the text to find the widest line.

/lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall

% Compute the baseline offset and the actual font height.

0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath

% Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack.

translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate

% Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text.

justify lineLength mul baseline neg translate

% Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it.

strings { dup stringwidth pop justify neg mul 0 moveto stipple {

% The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time.

gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def

%%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%EndSetup

%%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -133 -38 translate 0 76 moveto 266 76 lineto 266 0 lineto 0 0 lineto closepath clip newpath gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 10 66 [ (upcSystem) ] 14 -0 0 0 false DrawText grestore gsave 7 67 moveto 67 0 rlineto 0 -16 rlineto -67 0 rlineto closepath 1 setlinewidth 0 setlinejoin 2 setlinecap 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 170 66 [ (upcEntities) ] 14 -0 0 0 false DrawText grestore gsave 167 67 moveto 68 0 rlineto 0 -16 rlineto -68 0 rlineto closepath 1 setlinewidth 0 setlinejoin 2 setlinecap 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 74 61 moveto 167 61 lineto 1 setlinewidth 0 setlinecap 1 setlinejoin 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 170 46 [ (upcEnable) ] 14 -0 0 0 false DrawText grestore gsave 167 47 moveto 65 0 rlineto 0 -16 rlineto -65 0 rlineto closepath 1 setlinewidth 0 setlinejoin 2 setlinecap 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 74 61 moveto 167 41 lineto 1 setlinewidth 0 setlinecap 1 setlinejoin 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore restore showpage

%%Trailer end %%EOF

--
!! This message is brought to you via the `tkined & scotty' mailing list.
!! Please do not reply to this message to unsubscribe. To subscribe or
!! unsubscribe, send a mail message to <tkined-request@ibr.cs.tu-bs.de>.
!! See http://wwwsnmp.cs.utwente.nl/~schoenw/scotty/ for more information.