📄 ps2ai.ps
字号:
%!
% 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 + -