7

同様の質問が以前にここで回答されていることは承知しています。

...しかし、彼らは私の特定の問題に直接答えていないので、もう一度尋ねてみます。

 

2 つのポストスクリプト ファイルをオーバーレイする方法を知りたいです。1 つはロゴです。

... もう一方の上に - グラフィック背景:

.... Linux でコマンド ライン アプローチを使用します。

 

ここで重要なのは、グラフィック背景が元の内容を可能な限り保持することです。したがって、元の 2 つの PostScript ファイルの内容を変更せずに何らかの方法で連結できれば幸いです (以下を参照) ghostscript

 

問題 - PCB .ps プリントアウトの上のロゴ

問題の詳細は次のとおりです。PCB ボード プリントの上にロゴを追加したいと考えています。kicad私は PCB プリントの開発に使用します。完了したら、個々のレイヤーを含む Postscript ドキュメントをエクスポートします。通常、前面の銅層を「ミラーリング」したいと考えています。.ps 出力をたとえば にロードしてinkscapeから、そこでミラーリングを試みることをよく試しました。そこにロゴを簡単に追加できるので、使用inkscapeも便利でした(そして、印刷物とロゴを一緒にミラーリングします)。

ただし、inkscapeポストスクリプト出力を処理するために使用するのは費用のかかる操作です (ロード、ミラーリング、および保存に時間がかかるためinkscape)... ただし、ここでの主なショー ストッパーは次のとおりです: 処理後、ディメンションの一部出力ファイルでわずかに変更される可能性がありますinkscape(ターゲットが幅 1 mm 未満のトラックの印刷である場合、大きな違いが生じます)。

 

したがって、kicad「プロット」コマンドにミラーリングのオプションがあることを考えると、もちろん、kicad「プロット」コマンドから直接レイヤー印刷を「ミラーリング」する方がはるかに優れています。出力は再びポストスクリプト ファイルです。tmp-Front.psは、そのような (ミラー化された) Postscript ファイルの例です。通常、「銅」の部分は黒で塗りつぶされていることに注意してください。基本的には、その上に白いロゴを配置したいと考えています。

さて、この印刷物はすでに「鏡像化」されているので、その上にロゴを追加したい場合は、ロゴも鏡像化したほうがよいでしょう。だから私は発火しinkscapeます。と:

  • ロゴのテキストを追加します。
  • ドキュメント プロパティを介して設定します。
    • ドキュメントのサイズがロゴのサイズと一致していること、および
    • ドキュメントの背景が黒であること
  • 次に、ロゴ テキストを変更して塗りつぶしを白にします。
  • ロゴ テキストで Object/Flip Horizo​​ntal を実行します。その後
  • ファイル/コピーを保存します。
    • 出力として PostScipt (*.ps) を選択します。
    • ダイアログで PostScript レベル 2 を選択し、
    • エクスポートする前に「テキストをパスに変換」を選択します。

これは、logo.ps上記のリンクが生成された方法です (注: この種の小さなロゴの場合: 「パスへのテキスト」を使用しない場合、.ps ファイル (フォントを含む) は最大 20 kB になる可能性があります。パスのみの場合は 5 kB です)。

ただし、問題の 1 つは、postscript が「ドキュメントの背景」の色のようなものを実際にサポートしていないことです。塗りつぶされた四角形を自分で定義する必要があるようです。

...したがって、開いlogo.psても何も表示されません。白い背景に白い文字が含まれているためです。

視聴者

の場合logo.ps、行は;1 gに置き換えられます。0.5 gロゴは灰色になり(表示されます)、ここではevincegs生のビューア、およびの下でレンダリングされgvます。

view-logo.png

の同じ比較を次に示しtmp-Front.psます。

view-tmp-Front.png

特に、未加工のghostscriptビューアはバウンディング ボックスとページの向きを無視します。さらに問題は、ネットブックで Ubuntu Gnome を使用している場合、上部と下部のバーがghostscriptビューア ウィンドウを少しカットする可能性があることです。コーナーは見えません。また、「... 生の Ghostscript ビューア gs ... には実際のユーザー インターフェイスがない」ためgs、ロゴが切り抜かれた状態で起動したウィンドウを後で表示するように設定することはできません。

 

オーバーレイ用の .ps ファイルの内容の連結

これらの参照を見ると:

... 原則として、2 つの PostScript ファイルのファイル内容を連結することは可能であるべきだと思います。マージされたファイルにコマンドが1 つしかない場合はshowpage、原則として、2 つのコマンドのオーバーレイ (?!) を取得する必要があります。しかし、私はそれを試しましたが、実際には機能しません。

これが可能であれば、どうにかして Postscript ファイルの内容をコピー/貼り付けして (ドキュメントの寸法/サイズ/解像度に関する問題を回避)、translatepostscript コマンド ( Gnuplot での Postscript Editing を参照) を使用して調整したいと思います。ロゴの位置。「オーバーレイされた」(マージされた) .ps を で開くと、テキスト エディタでパラメータが変更されるevinceたびにドキュメントの表示が更新translateされるため、ロゴの配置をそのように処理するのは比較的簡単なはずです。

 

ただし、ここでもいくつかの問題を予測できます。その 1 つは、グラフィック ( tmp-Front.ps) に次のものが含まれていることです。

%%BoundingBox: 0 0 596 843
%%DocumentMedia: A4 595 842 0 () ()
...
0.0072 0.0072 scale
...
30085 54415 moveto
...

...がlogo.ps含まれています:

%%BoundingBox: 0 0 31 13
...
%%DocumentMedia: 11x4mm 31 13 0 () ()
...
25.539 9.536 m(oveto) ...
...

... したがって、2 つの主な違いがあります。

  • ファイルのドキュメント サイズが同じではない
  • スケール(または解像度/座標系)も同じではありません

ファイル コンテンツの連結をまったく機能させることができなかったので、これらの違いがオーバーレイに影響を与えるかどうかはよくわかりません...どうにかしてそれらが独立してレンダリングされることを願っています。translate相対位置を適切に設定するのに役立ちます:)

 

では、postscript ファイルの内容を連結してオーバーレイを実現したい場合、どうすればよいでしょうか。それが面倒な場合はghostscript、オーバーレイを設定するために、(またはその他の) などのツールをどのように使用できますか?

 

ご回答ありがとうございます。
乾杯!

 


参考までに、前述の PostScript ファイルのコピーを次に示します (サイズが大きすぎないため)。

tmp-Front.ps :

%!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

ロゴ.ps :

%!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

編集: Re: luser droogの答え; combo.psに書かれているように開こうとするとevince、次のようになります。

$ evince combo.ps
invalidfileaccess -9

これはおそらく#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

私も実行してみました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
4

3 に答える 3

2

runKenS の場合と同様のアプローチは、「構成」コードを単一のファイルに入れ、オペレーターでコンポーネント ファイルを呼び出すことです。それは同じことになりますが、シェルワークが少し少なくなります。制限は、-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
于 2012-03-23T03:41:54.620 に答える
2

2 つのファイルを「連結」するには、「showpage」オペレータを無効にする必要があります。無効にしないと、両方のファイルが別々にページを出力してしまいます。ただし、最終的なドキュメントを発行できるように、元の定義を維持する必要があります。いくつかの嘘:

/Oldshowpage showpage load def
/showpage {} def

...
file1
...
...
file2
...
Oldshowpage

したがって、再定義をファイルに保存し、最終的な実行を別のファイルに保存した場合、cat 'prolog.ps file1.ps file2.ps epilog.ps'

どちらのファイルもメディア リクエストを実行しません (%% 行は無視できます。これらはコメントのみです)。

ただし、当然のことながら、スケーリングと変換をジョブ間で持続させたくありません。そのため、グラフィックスの状態を保存して復元する必要があります。したがって、この場合、「中間」ファイルも必要です。

含まprolog.psれています:

/Oldshowpage showpage load def
/showpage {} def
gsave

middle.ps含む

grestore

およびepilog.ps含む

Oldshowpage

5 つのファイルすべてを一緒に cat すると、動作するはずです。それは私にとって賢明なことですが、あなたの「logo.ps」がGhostscriptとAdobe Distillerで空のページを生成することを言及する必要があります。

于 2012-03-22T15:29:18.150 に答える
1

わかりました、 @luserdroog's answer のおかげで、変更されていないファイルで、「直接」にevince.

まず、ディレクトリ内の と @luserdroog (以下に変更) を取得tmp-Front.pslogo.psますcombo.ps。最初の問題は、にevince遭遇すると%%EOF、次に来るものの解析が停止することです。tmp-Front.psしたがって、最初にand内のこれらのディレクティブを取り除きたいlogo.ps:

sed -i 's/%%EOF/% %EOF/' logo.ps
sed -i 's/%%EOF/% %EOF/' tmp-Front.ps

第 2 に、最初に および類似のディレクティブにevince遭遇しない場合、(元のように) ドキュメントを横向きに表示しません。したがって、これらのディレクティブを から抽出し、 -の先頭に追加して、すべてを新しいファイルとして保存する必要があります。%%Orientationtmp-Front.pstmp-Front.pscombo.pscombopg.ps

cat <(echo '%!') <(grep '%%Pages\|%%PageOrder\|%%BoundingBox\|%%DocumentMedia\|%%Orientation' tmp-Front.ps) <(echo) combo.ps > combopg.ps

ここでは、 の次の変更を使用しますcombo.ps

/Oldshowpage /showpage load def
/showpage {} def
gsave
    (tmp-Front.ps) run
grestore
    %additional scaling and translation to place the graphic?
    1 1 scale
    300 300 translate
    0 0 moveto

    (logo.ps) run
Oldshowpage

最後に、はディレクティブをevince認識しないため、psinc.plのこの変更を使用して、ファイルの内容を「インクルード」します。runpsinc

cat combopg.ps | perl ./psinc.pl > combopgout.ps

 

これで、最終的にテキスト エディターで開くことができます。combopgout.ps同時にevince、行を探すことができます300 300 translate。これらの引数をテキスト エディターで編集してファイルを保存するとevince、.ps ファイルが再読み込みされ、最新の位置が表示されます。デフォルトでは次のようになります。

comppgout.ps.png

(ロゴは横方向に回転することに注意してください)

 

まあ、これで解決すると思います-答えてくれてありがとう!!

于 2012-03-25T18:08:24.280 に答える