Adobe 一个.ps文件赢得';t在任何软件I'中打开;我试过了-文件语法可能有什么问题?

Adobe 一个.ps文件赢得';t在任何软件I'中打开;我试过了-文件语法可能有什么问题?,adobe,preview,postscript,Adobe,Preview,Postscript,我有一个postscript文件无法在Adobe或Preview中打开。此.ps文件是以下内容的输出: 在名为“Knotscape”的软件中绘制结(例如5-1) 将图形另存为postscript文件 我猜我的ps文件中有一个语法问题,Adobe或Prview的最新版本将不再接受。如果有人能帮我指出问题所在,或者如何纠正,我将不胜感激 以下是此.ps文件的代码: %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Van Pham

我有一个postscript文件无法在Adobe或Preview中打开。此.ps文件是以下内容的输出:

  • 在名为“Knotscape”的软件中绘制结(例如5-1)
  • 将图形另存为postscript文件
  • 我猜我的ps文件中有一个语法问题,Adobe或Prview的最新版本将不再接受。如果有人能帮我指出问题所在,或者如何纠正,我将不胜感激

    以下是此.ps文件的代码:

    %!PS-Adobe-3.0 EPSF-3.0
    %%Creator: Tk Canvas Widget
    %%For: Van Pham
    %%Title: Window .drawing0.c
    %%CreationDate: Wed Jan  8 14:05:32 2020
    %%BoundingBox: 306 396 308 398
    %%Pages: 1
    %%DocumentData: Clean7Bit
    %%Orientation: Portrait
    %%EndComments
    
    %%BeginProlog
    /CurrentEncoding [
    /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/quotesingle
    /parenleft/parenright/asterisk/plus/comma/hyphen/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
    /grave/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
    /space/space/space/space/space/space/space/space
    /space/space/space/space/space/space/space/space
    /space/exclamdown/cent/sterling/currency/yen/brokenbar/section
    /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
    /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
    /cedilla/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
    
    50 dict begin
    % This is a standard prolog for Postscript generated by Tk's canvas
    % widget.
    % RCS: @(#) $Id$
    
    % 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
    
    
    /cstringshow {
        {
        dup type /stringtype eq
        { show } { glyphshow }
        ifelse
        }
        forall
    } bind def
    
    
    
    /cstringwidth {
        0 exch 0 exch
        {
        dup type /stringtype eq
        { stringwidth } { 
            currentfont /Encoding get exch 1 exch put (\001) stringwidth 
            }
        ifelse 
        exch 3 1 roll add 3 1 roll add exch
        }
        forall
    } bind def
    
    % font ISOEncode font
    % This procedure changes the encoding of a font from the default
    % Postscript encoding to current system encoding.  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 CurrentEncoding 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 {
        cstringwidth 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 cstringwidth 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
            {
            dup type /stringtype eq {
                % This segment is a string.
                {
                    char 0 3 -1 roll put
                    currentpoint
                    gsave
                    char true charpath clip StippleText
                    grestore
                    char stringwidth translate
                    moveto
                } forall
            } {
                % This segment is glyph name
                % Temporary override
                currentfont /Encoding get exch 1 exch put
                currentpoint
                gsave (\001) true charpath clip StippleText
                grestore
                    (\001) stringwidth translate
                moveto
            } ifelse
            } forall
            grestore 
        } {cstringshow} ifelse
        0 spacing neg translate
        } forall
    } bind def
    
    %%EndProlog
    %%BeginSetup
    /CL 2 def
    %%EndSetup
    
    %%Page: 1 1
    save
    306.0 396.0 translate
    1.001 1.001 scale
    0 0 translate
    0 1 moveto 1 1 lineto 1 0 lineto 0 0 lineto closepath clip newpath
    restore showpage
    
    %%Trailer
    end
    %%EOF
    

    您的PostScript程序声称与EPS兼容:

    %!PS-Adobe-3.0 EPSF-3.0
    
    但不包括%%BoundingBox注释,这对EPS是不合法的,并且会严重混淆任何试图将其视为EPS的解释器

    程序中实际执行任何操作(与定义功能性相反)的部分如下:

    为了保存当前状态,将原点(0,0)从介质的左下角移动到306、306。因此,所有后续的协调操作将从媒体上的该位置开始。它几乎精确地将CTM缩放1。再次转换原点,但这次转换为0,0,因此它没有效果(不,它不会将原点向后移动到左下角,这些操作是累积的)

    然后创建一个路径1单位正方形,并将其作为剪辑区域。位于该区域之外的所有后续绘图操作都将被剪裁,而不是绘制

    然后将状态恢复到程序开始时的状态

    最后,它呈现页面内容

    正如你可能已经注意到的,它实际上并没有画任何东西。所以这个程序没有什么问题,它只是毫无意义:-)


    你需要回到该程序的作者那里,从他们那里找出为什么它会发出一种不会画任何东西的PostScript。

    你的PostScript程序声称它符合EPS:

    %!PS-Adobe-3.0 EPSF-3.0
    
    但不包括%%BoundingBox注释,这对EPS是不合法的,并且会严重混淆任何试图将其视为EPS的解释器

    程序中实际执行任何操作(与定义功能性相反)的部分如下:

    为了保存当前状态,将原点(0,0)从介质的左下角移动到306、306。因此,所有后续的协调操作将从媒体上的该位置开始。它几乎精确地将CTM缩放1。再次转换原点,但这次转换为0,0,因此它没有效果(不,它不会将原点向后移动到左下角,这些操作是累积的)

    然后创建一个路径1单位正方形,并将其作为剪辑区域。位于该区域之外的所有后续绘图操作都将被剪裁,而不是绘制

    然后将状态恢复到程序开始时的状态

    最后,它呈现页面内容

    正如你可能已经注意到的,它实际上并没有画任何东西。所以这个程序没有什么问题,它只是毫无意义:-)

    你需要回到这个程序的作者那里,从他们那里找出为什么它会发出没有任何内容的PostScript