⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2ai.ps

📁 GhostScript的源代码
💻 PS
📖 第 1 页 / 共 2 页
字号:
%!
%    Copyright (C) 1994 Aladdin Enterprises.  All rights reserved.
% 
% This file is part of Aladdin Ghostscript.
% 
% Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
% or distributor accepts any responsibility for the consequences of using it,
% or for whether it serves any particular purpose or works at all, unless he
% or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
% License (the "License") for full details.
% 
% Every copy of Aladdin Ghostscript must include a copy of the License,
% normally in a plain ASCII text file named PUBLIC.  The License grants you
% the right to copy, modify and redistribute Aladdin Ghostscript, but only
% under certain conditions described in the License.  Among other things, the
% License requires that the copyright notice and this notice be preserved on
% all copies.

% $Id: ps2ai.ps $
%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
%
%   ps2ai.ps - a postscript to editable adobe illustrator file filter
%
/vers {2.13} def                  %                    April 25, 1994  
%
%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
%
% needs a postscript level 2 interpreter, like gnu ghostscript, to work
%
%      Usage:   gs -q -dNODISPLAY ps2ai.ps file.ps > file.aips
%                              or (see below)
%               gs -q -dNODISPLAY ps2ai.ps file.ps
%                              or
%               cat ps2ai.ps file.ps | lpr  (then look in log file)
%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
%                            Options
%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
%   Output Options: directly to a file or standard out
%
/jout false def            % true=file  false=stdout (default=false)
/joutput (ps2ai.out.aips) def      % Name of Output file
%
%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
%
%              Other Options
%
/jtxt3 true def           % output text in AI3 form (false=ai88)
                          % for coreldraw/photoshop readable output
/joutln false def         % use font outline  instead of font
/jerr false def            % use error handling (ie die gracefully)
/jbiterr false def         % attempt to handle bitmap fonts (kludge)
/jMacGS false def         % true if using MacGS (not fully implemented yet)
/jMacfix true def         % convert filled boxes to lines (only usefull with
                          % laserwriter 8 postscript input)
%
%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
%                    No options below here
%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
%
%         - Notes -
%  ai uses cmykcolor, so level 1 interpreters don't work
%  ai doesn't use image/imagemask - so bitmaps don't work correctly
%  the output file has a header so it is viewable/printable/reconvertable
%
% Comments, suggestions, bug-fixes, etc send to:
%
%        Jason Olszewski (olszewsk@splash.princeton.edu)
%
% anonymous ftp: toby.princeton.edu /pub/olszewsk/ps2ai.ps
%       URL ftp://toby.princeton.edu/pub/olszewsk
%
%         - Fix History -
%  2.13 check for bitmap fonts, work better with TeX,WinPS,etc
%  2.12 fixed initclip to US letter size page
%  2.11 added header support for *u/*U compound paths
%  2.1  option of font outline instead of text(gwhite@trevnx.bio.dfo.ca)
%  2.0  major change to complex path handling
%  1.9  fixed text leaking ascii (,),\
%  1.85 added default font to handle no setfont (Courier)
%  1.84 added even-odd fill/clip (D)
%  1.83 undefined PPD PageSize printer specific info
%  1.82 added kludge to save clipping status through a restore
%  1.81 added custom color/gray support to header (x/X, g/G)
%  1.8  added newpath if clippath is not consumed correctly(amiga)
%  1.79 eliminated scientific notation of numbers less than 0.0001
%  1.78 fixed transposed h & H
%  1.77 made laserwriter 8 fixes optional
%  1.76 added margin fix for unix AI (brown@wi.extrel.com)
%  1.75 added kludge to handle bitmap font errors (TeX, Windows.ps)
%  1.74 made grestore a little smarter
%  1.73 included header handle encoded fontname (/_fontname)
%  1.72 fixed problem with restore/clip info - (not enough Qs problem)
%  1.71 filter font names to remove previous encoding (|,_,etc)
%  1.7  change text format to AI3, works better with PS & CD
%  1.67 deal with weird makefonts 
%  1.66 handle to many bad stroke/fills (s s s w/o paths)
%  1.65 more useable with non-gs interpreters (defaultmatrix fix)
%  1.64 fixed "smart grestore" repeat bug
%  1.63 fixed ashow/awidthshow bug
%  1.62 check if cmykcolor is understood otherwise rgb
%  1.61 made grestore smarter (only print if different)
%  1.6  add better compatibility to CorelDraw and PhotoShop
%  1.53 make it more gs-backward compatible (clarke@lsl.co.uk)
%  1.52 handle clipping paths a little better (Posted)
%  1.51 improve mac lw8 output (lines instead of filled boxes)
%  1.5 handle some level 2 stuff (mac lw8)
%  1.4 fixed scaling of linewidth and dash
%  1.31 made trailer more AI88 friendly
%  1.3 add ablity to output to file directly
%  1.21 print matrix cleaner
%  1.2 fix rotated fonts, thanks to G.Cameron (g.cameron@biomed.abdn.ac.uk)
%  1.1 fix stroke/fill color difference (k vs K)
%  1.0 posted to comp.lang.postscript
%
%         - To Do List -
%  find real %%BoundingBox: llx lly urx ury
%  make MacGS friendly (line-endings)
%  handle eps w/o showpage:(append to end)
%  write out image data to external file
%
%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
%                  Nothing of Interest below here
%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
matrix identmatrix setmatrix %   make ctm [1 0 0 1 0 0]
/oldgsave {} def /oldgrestore {} def
/initgraphics {} def /initmatrix {} def 
% undefine PPD PageSizes to be more printer independant
/letter {} def /legal {} def /a4 {} def /b5 {} def /lettersmall {} def
/setpagedevice { pop } def % for level 2 PPD PageSizes
/Courier findfont 12 scalefont setfont % handle no setfont
/initclip {0 0 moveto 0 792 lineto 612 792 lineto 612 0 lineto closepath
           clip newpath } def
/xdef {exch def} def
/trx {transform exch} def
/cbdef {cvx bind def} def
/jltz {dup abs 0.0001 lt {pop 0} if} def % get rid of scientific notation bug
/clstate false def        % closepath state
/dpth false def           % destroy path (ie newpath)
/fclp false def           % first paint after clip
/kscl {1.0} def           % default current scale X-factor
/gcnt {1} def             % graphics state counter
/spth {1} def             % multiple paths on stack
/jeol (\n) def            % default end-of-line
/jnump {0} def            % number of paths on stack
/jx {0} def /jy {0} def /j_ax {0} def
/j3ftxt true def
/clarry 10 array def
0 1 9 {clarry exch false put} for % initilize no clipping path
%
% handle cmyk color on level 1 interpreters
/setcmykcolor where {pop}
 {/setcmykcolor {
   /blk exch def /yel exch def /mag exch def /cyan exch def
   /ccomp {add dup 1 gt {pop 1} if} def
   /red {1 cyan blk ccomp sub} def
   /green {1 mag blk ccomp sub} def
   /blue {1 yel blk ccomp sub} def
   red green blue setrgbcolor
  } def
} ifelse
/currentcmykcolor where {pop}
 {/currentcmykcolor {
   currentrgbcolor /bval xdef /gval xdef /rval xdef
   /rawC 1 rval sub def /rawM 1 gval sub def /rawY 1 bval sub def
   rawC rawM ge { rawY rawM ge { /blk rawM def} if } if
   rawC rawY ge { rawM rawY ge { /blk rawY def} if } if
   rawY rawC ge { rawM rawC ge { /blk rawC def} if } if
   rawY rawC eq { rawM rawC eq { /blk rawC def} if } if
   /cyan  rawC blk sub  def
   /mag  rawM blk sub  def
   /yel  rawY blk sub  def
   /blk blk def
   cyan mag yel blk
  } def
} ifelse
% If using Mac Ghostscript 
jMacGS { 
%        /jeol {(\r) jp} def
        /jout true def
        (%%Note: Loading ps2ai.ps\n) print
       } if
/jstr 40 string def
jout {joutput (w) file /joutput xdef} if
%
%              Output
%
jout {/jp { joutput exch writestring } bind def }{/jp {print}bind def} ifelse
/jpnum {jltz ( ) jp =string cvs jp } bind def
/jpmat { dup /jarry exch def length 1 sub /j_num exch def
 (\[) jp 0 1 j_num {jarry exch get jpnum} for (\]) jp } def
%
%              Stack to Paths converters
%
/ckpnt { % check which paint and clipping to use
   dpth {  % if there are multiple paths on the stack
  clarry gcnt get fclp and {clstate {(h W\n) jp }{(H W\n) jp } ifelse} if
  spth 0 eq {clstate {(n\n) jp }{(N\n) jp } ifelse} if
  spth 1 eq {clstate {(s\n) jp }{(S\n) jp } ifelse} if
  spth 2 eq {clstate {(f\n) jp }{(F\n) jp } ifelse} if
     } if
} def
/jpm {
  ckpnt
  /dpth true def
  transform 2 copy /yst xdef /xst xdef exch jpnum jpnum ( m\n) jp } bind def
/jpl { trx jpnum jpnum ( l\n) jp } bind def
/jpc {  6 4 roll trx jpnum jpnum 4 2 roll trx jpnum jpnum trx
    jpnum jpnum ( c\n) jp } bind def
/jpp {xst jpnum yst jpnum ( l\n) jp /clstate true def} def
/cntpaths { % count paths on stack
  oldgsave
  {pop pop /jnump jnump 1 add def} {pop pop} {6 {pop} repeat}{} pathforall
  oldgrestore
} def
/ppforall {
 cntpaths % find out how many paths are on the stack
 jnump 1 gt { (*u\n) jp } if
 {jpm}{jpl}{jpc}{jpp} pathforall 
  ckpnt
 jnump 1 gt { (*U\n) jp } if
 /jnump 0 def /clstate false def /dpth false def /fclp false def
  oldnewpath
} bind def
%
%              Painting Operators
%
/oldnewpath [/newpath load] cbdef
/newpath { (\n) jp /spth 0 def ppforall} def 
/stroke { (\n) jp /spth 1 def ppforall } def 
/fill   {(\n) jp /spth 2 def ppforall } def 
/eofill {(1 D\n) jp fill (0 D\n) jp} def
/clip {clarry gcnt get {(Q\nq\n) jp}{(q\n) jp} ifelse 
                   /fclp true def clarry gcnt true put} def
/eoclip {(1 D\n) jp clip (0 D\n) jp} def
%
%               Text Operators
%
/oldshow [/show load] cbdef
/curpt {stringwidth pop jx add jy} def 
/jNN {dup 0 eq {pop oldgsave currentfont /FontMatrix get setmatrix kscl
                oldgrestore} if
} def
/curftmatrix {
 currentfont /FontMatrix get dup 0 get jNN abs /norm exch def 
 dup 0 get norm div exch dup
 1 get norm div exch dup 2 get norm div exch dup 3 get norm div exch dup
 4 get exch 5 get 6 array astore matrix currentmatrix matrix concatmatrix
} def
% AI does not support negitive font sizes
/curftsize {currentfont /FontMatrix get 0 get jNN abs 1000 mul} def
/hstr (X) def
/vbar (|) 0 get def /undsc (_) 0 get def
/ftnamefix { % handle font names with |,_ (previously encoded)
jstr cvs
{ %forall
        dup vbar eq {pop}{ %ifelse
            dup undsc eq {pop}{ %ifelse
                    hstr exch 0 exch put hstr jp
            } ifelse
        } ifelse
   } forall   flush
} bind def
%/curftname {currentfont /FontName get ftnamefix}def
/curftname { currentfont /FontName known {currentfont /FontName get}
           { (Times-Roman)} ifelse ftnamefix } def
/lftpar (\() 0 get def
/rhtpar (\)) 0 get def
/bckslsh (\\) 0 get def
/handft { % handle strings with (,),\
   (\() jp
   { %forall
        dup lftpar eq { (\\\() jp }{ %ifelse

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -