sda*_*aau 7 linux command-line postscript kicad
我知道之前已经回答过类似的问题:
......但是,由于他们没有直接回答我的具体问题,我会再试一次.
我想知道,我如何覆盖两个postscript文件:一个 - 一个徽标:
...在另一个之上 - 图形背景:
....在Linux中使用命令行方法.
在此重要的是,图形背景最大程度地保留其原始内容.因此,如果我能以某种方式连接两个原始的postscript文件内容(见下文),我可能会感到最开心 - 但除此之外,我想知道命令行工具如何ghostscript
用于此目的.
这是更详细的问题 - 我想在PCB板印刷的顶部添加徽标.我kicad
用来开发PCB打印; 完成后,我导出一个带有各个图层的postscript文档.通常,我希望前面的铜层"镜像"; 我经常尝试将.ps输出加载到,比方说,inkscape
然后尝试在那里进行镜像.使用inkscape
也很方便,因为可以在那里轻松添加徽标(然后将打印和徽标一起镜像).
然而,使用inkscape
处理postscript输出是一个昂贵的操作(因为它需要一段时间inkscape
来加载,并进行镜像和保存)...虽然,这里的主要显示停止是:处理后,一些维度可能会在输出文件中略微改变inkscape
(当目标是打印小于1毫米宽的轨道时,它会产生很大的不同).
因此,假设kicad
s"Plot"命令有一个镜像选项 - 当然,对于我来说,直接从kicad
s"Plot"命令"镜像"图层打印要好得多; 输出再次是postscript文件.tmp-Front.ps
是这样一个(镜像的)postscript文件的示例.请注意,通常情况下,"铜"部分填充黑色 - 我基本上喜欢在它上面有一个白色徽标.
现在,因为这个打印已经"镜像" - 如果我想在它上面添加一个徽标,我最好还要镜像徽标.所以我开火了inkscape
; 和:
这就是logo.ps
上面链接的生成方式(请注意 - 对于这些小徽标:没有'text to paths',.ps文件(带字体)最高可达20 kB;而不是仅5 KB用于路径).
但是,一个问题是postscript并不真正支持像"文档背景"颜色这样的东西 - 显然你需要自己定义一个填充的矩形:
...因此,如果你打开logo.ps
,你将看不到任何东西 - 因为它在白色背景上包含白色字母.
如果在logo.ps
,1 g
则换行0.5 g
; 徽标变为灰色(并且可见),并且在此处呈现evince
,gs
原始查看器和gv
:
以下是相同的比较tmp-Front.ps
:
值得注意的是,原始ghostscript
查看器忽略了边界框和页面方向 - 更有问题的是,如果您在上网本上使用Ubuntu Gnome,那么顶部和底部栏可能会切割一些ghostscript
查看器窗口 - 足以使左下角的徽标角落是看不见的; 并且由于" ...原始的ghostscript viewer gs ...没有真正的用户界面 " gs
,因此无法设置一个以标记裁剪开始的窗口,以后显示它.
通过查看这些参考:
...我猜,原则上应该可以连接两个postscript文件的文件内容; 如果showpage
合并文件中只有一个命令 - 那么,原则上,应该获得两者的叠加(?!).但是,我试过了,我真的无法让它发挥作用.
如果这是可能的,我想以某种方式复制/粘贴postscript文件内容(从而避免文档尺寸/尺寸/分辨率的任何问题) - 然后可能使用translate
postscript命令(参见Gnuplot中的Postscript Editing)来调整徽标的位置.打开"覆盖"(合并).ps后evince
,每次translate
在文本编辑器中更改参数时都会刷新文档显示- 因此以这种方式处理徽标定位应该相对容易.
但是,我也可以预见到一些问题:例如,graphic(tmp-Front.ps
)包含:
%%BoundingBox: 0 0 596 843
%%DocumentMedia: A4 595 842 0 () ()
...
0.0072 0.0072 scale
...
30085 54415 moveto
...
Run Code Online (Sandbox Code Playgroud)
... logo.ps
包含:
%%BoundingBox: 0 0 31 13
...
%%DocumentMedia: 11x4mm 31 13 0 () ()
...
25.539 9.536 m(oveto) ...
...
Run Code Online (Sandbox Code Playgroud)
......因此有两个主要区别:
由于我无法将文件内容连接起来工作 - 我不确定这些差异是否会对叠加层产生影响......我当然希望它们以某种方式独立呈现; 而translate
只会有助于正确设置它们的相对位置:)
那么 - 如果我想通过连接postscript文件内容来实现叠加,我将如何进行?如果这太麻烦了 - 我怎么能使用诸如ghostscript
(或任何其他)之类的工具来设置叠加?
非常感谢任何答案,
干杯!
作为参考,这里是所提及的postscript文件的副本(因为它们不是太大):
%!PS-Adobe-3.0
%%Creator: PCBNEW-PS
%%CreationDate: Thu Mar 22 09:50:52 2012
%%Title: /tmp-Front.ps
%%Pages: 1
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 843
%%DocumentMedia: A4 595 842 0 () ()
%%Orientation: Landscape
%%EndComments
%%Page: 1 1
/line {
newpath
moveto
lineto
stroke
} bind def
/cir0 { newpath 0 360 arc stroke } bind def
/cir1 { newpath 0 360 arc gsave fill grestore stroke } bind def
/cir2 { newpath 0 360 arc gsave fill grestore stroke } bind def
/arc0 { newpath arc stroke } bind def
/arc1 { newpath 4 index 4 index moveto arc closepath gsave fill grestore stroke } bind def
/arc2 { newpath 4 index 4 index moveto arc closepath gsave fill grestore stroke } bind def
/poly0 { stroke } bind def
/poly1 { closepath gsave fill grestore stroke } bind def
/poly2 { closepath gsave fill grestore stroke } bind def
/rect0 { rectstroke } bind def
/rect1 { rectfill } bind def
/rect2 { rectfill } bind def
/linemode0 { 0 setlinecap 0 setlinejoin 0 setlinewidth } bind def
/linemode1 { 1 setlinecap 1 setlinejoin } bind def
/dashedline { [50 50] 0 setdash } bind def
/solidline { [] 0 setdash } bind def
gsave
0.0072 0.0072 scale
linemode1
82670 0 translate 90 rotate
60 setlinewidth
60 setlinewidth
newpath
30085 54415 moveto
30085 52585 lineto
31915 52585 lineto
31915 54415 lineto
30085 54415 lineto
poly1
newpath
87950 54930 moveto
32094 54930 lineto
32094 54474 lineto
32094 54415 lineto
32094 52525 lineto
32071 52470 lineto
32029 52428 lineto
31974 52406 lineto
31915 52406 lineto
30025 52406 lineto
29970 52429 lineto
29928 52471 lineto
29906 52526 lineto
29906 52585 lineto
29906 54475 lineto
29929 54530 lineto
29971 54572 lineto
30026 54594 lineto
30085 54594 lineto
31975 54594 lineto
32030 54571 lineto
32072 54529 lineto
32094 54474 lineto
32094 54930 lineto
28300 54930 lineto
28300 17800 lineto
87950 17800 lineto
87950 54930 lineto
poly1
100 setlinewidth
newpath
87950 54930 moveto
32094 54930 lineto
32094 54474 lineto
32094 54415 lineto
32094 52525 lineto
32071 52470 lineto
32029 52428 lineto
31974 52406 lineto
31915 52406 lineto
30025 52406 lineto
29970 52429 lineto
29928 52471 lineto
29906 52526 lineto
29906 52585 lineto
29906 54475 lineto
29929 54530 lineto
29971 54572 lineto
30026 54594 lineto
30085 54594 lineto
31975 54594 lineto
32030 54571 lineto
32072 54529 lineto
32094 54474 lineto
32094 54930 lineto
28300 54930 lineto
28300 17800 lineto
87950 17800 lineto
87950 54930 lineto
poly0
1 1 1 setrgbcolor
60 setlinewidth
31000 53500 170 cir1
0 0 0 setrgbcolor
showpage
grestore
%%EOF
Run Code Online (Sandbox Code Playgroud)
%!PS-Adobe-3.0
%%Creator: cairo 1.10.2 (http://cairographics.org)
%%CreationDate: Thu Mar 22 10:07:46 2012
%%Pages: 1
%%BoundingBox: 0 0 31 13
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%DocumentMedia: 11x4mm 31 13 0 () ()
%%EndComments
%%BeginProlog
/languagelevel where
{ pop languagelevel } { 1 } ifelse
2 lt { /Helvetica findfont 12 scalefont setfont 50 500 moveto
(This print job requires a PostScript Language Level 2 printer.) show
showpage quit } if
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
%%Page: 1 1
%%BeginPageSetup
%%PageMedia: 11x4mm
%%PageBoundingBox: 0 0 31 13
%%EndPageSetup
q 0 0 31 13 rectclip q
1 g
25.539 9.536 m 25.539 7.567 l 27.227 7.567 l 27.227 3.817 l 27.227
3.055 27.211 2.606 27.18 2.473 c 27.152 2.348 27.078 2.243 26.961 2.161
c 26.848 2.087 26.707 2.052 26.539 2.052 c 26.324 2.052 25.992 2.13
25.555 2.286 c 25.336 0.364 l 25.922 0.118 26.574 -0.011 27.289 -0.011
c 27.738 -0.011 28.145 0.063 28.508 0.208 c 28.863 0.36 29.125 0.559
29.289 0.802 c 29.457 1.04 29.574 1.364 29.633 1.77 c 29.688 2.048
29.711 2.63 29.711 3.505 c 29.711 7.567 l 30.852 7.567 l 30.852 9.536 l
29.711 9.536 l 29.711 11.395 l 27.227 12.833 l 27.227 9.536 l h
18.535 3.177 m 16.082 2.77 l 16.395 1.864 16.898 1.169 17.582 0.692 c
18.262 0.223 19.117 -0.011 20.145 -0.011 c 21.77 -0.011 22.969 0.52
23.738 1.583 c 24.355 2.434 24.66 3.509 24.66 4.802 c 24.66 6.352
24.262 7.567 23.457 8.442 c 22.648 9.313 21.621 9.755 20.379 9.755 c
18.996 9.755 17.902 9.294 17.098 8.38 c 16.297 7.462 15.914 6.055
15.941 4.161 c 22.129 4.161 l 22.121 3.43 21.926 2.86 21.551 2.458 c
21.168 2.052 20.688 1.848 20.113 1.848 c 19.73 1.848 19.406 1.95 19.145
2.161 c 18.875 2.368 18.672 2.708 18.535 3.177 c h
18.395 5.677 m 18.418 6.391 18.605 6.934 18.957 7.302 c 19.312 7.673
19.742 7.864 20.238 7.864 c 20.781 7.864 21.227 7.665 21.566 7.27 c
21.922 6.884 22.098 6.352 22.098 5.677 c h
15.02 2.864 m 12.535 3.255 l 12.434 2.774 12.219 2.407 11.895 2.161 c
11.574 1.911 11.125 1.786 10.551 1.786 c 9.906 1.786 9.422 1.899 9.098
2.13 c 8.891 2.294 8.785 2.512 8.785 2.786 c 8.785 2.97 8.844 3.13
8.957 3.255 c 9.082 3.368 9.359 3.477 9.785 3.583 c 11.777 4.016 13.039
4.419 13.566 4.786 c 14.309 5.282 14.676 5.989 14.676 6.895 c 14.676
7.696 14.359 8.372 13.723 8.927 c 13.078 9.477 12.09 9.755 10.754 9.755
c 9.477 9.755 8.527 9.544 7.91 9.13 c 7.289 8.712 6.855 8.095 6.613
7.286 c 8.941 6.848 l 9.047 7.212 9.242 7.489 9.52 7.677 c 9.793 7.872
10.188 7.973 10.707 7.973 c 11.355 7.973 11.82 7.884 12.098 7.708 c
12.285 7.571 12.379 7.403 12.379 7.208 c 12.379 7.028 12.297 6.876
12.129 6.755 c 11.914 6.587 11.145 6.352 9.832 6.052 c 8.523 5.759
7.598 5.391 7.066 4.958 c 6.559 4.52 6.301 3.907 6.301 3.13 c 6.301
2.274 6.664 1.532 7.379 0.911 c 8.09 0.294 9.148 -0.011 10.551 -0.011 c
11.824 -0.011 12.828 0.247 13.566 0.77 c 14.309 1.29 14.793 1.989 15.02
2.864 c h
0.066 9.536 m 0.066 7.567 l 1.754 7.567 l 1.754 3.817 l 1.754 3.055
1.738 2.606 1.707 2.473 c 1.68 2.348 1.605 2.243 1.488 2.161 c 1.375
2.087 1.234 2.052 1.066 2.052 c 0.852 2.052 0.52 2.13 0.082 2.286 c
-0.137 0.364 l 0.449 0.118 1.102 -0.011 1.816 -0.011 c 2.266 -0.011
2.672 0.063 3.035 0.208 c 3.391 0.36 3.652 0.559 3.816 0.802 c 3.984
1.04 4.102 1.364 4.16 1.77 c 4.215 2.048 4.238 2.63 4.238 3.505 c 4.238
7.567 l 5.379 7.567 l 5.379 9.536 l 4.238 9.536 l 4.238 11.395 l 1.754
12.833 l 1.754 9.536 l h
0.066 9.536 m f
Q Q
showpage
%%Trailer
%%EOF
Run Code Online (Sandbox Code Playgroud)
编辑:回复:luser droog的回答; 如果我尝试打开combo.ps
写在evince
,我得到:
$ evince combo.ps
invalidfileaccess -9
Run Code Online (Sandbox Code Playgroud)
这可能与#414002相关- gs -dSAFER:/ invalidfileaccess with"run"operator-Debian Bug report logs ...如果我尝试%!
在开始时添加PostScript标题" ",我得到:
$ nano combo.ps # added %! at start
$ evince combo.ps
undefined -21
undefined -21
Run Code Online (Sandbox Code Playgroud)
我也试过跑ps2ps
- 这是出来的:
$ ps2ps combo.ps comboB.ps
Error: /undefined in --load--
Operand stack:
Oldshowpage
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1910 1 3 %oparray_pop 1909 1 3 %oparray_pop 1893 1 3 %oparray_pop 1787 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval--
Dictionary stack:
--dict:1159/1684(ro)(G)-- --dict:0/20(G)-- --dict:77/200(L)--
Current allocation mode is local
Current file position is 30
GPL Ghostscript 9.02: Unrecoverable error, exit code 1
Run Code Online (Sandbox Code Playgroud)
与 KenS 类似的方法是将“组合”代码放入单个文件中,并使用run
运算符调用组件文件。这相当于同样的事情,但外壳工作少了一些。一个限制是 -dSAFER 选项(在大多数 Distiller 安装中默认为 ON)会禁用run
操作员。
组合.ps:
/Oldshowpage /showpage load def
/showpage {} def
gsave
(tmp-Front.ps) run
grestore
%additional scaling and translation to place the graphic?
(logo.ps) run
Oldshowpage
Run Code Online (Sandbox Code Playgroud)