Postscript布局从上到下

时间:2014-09-08 14:30:27

标签: ghostscript postscript

您好我有一个postscript文件,从左到右排列图像。

%%% Temporary
/Fix_long 4.2 cm def
/Fix_short 3.2 cm def
%%% Set Image Scale
/SetFixScale { 2 copy gt { Fix_long Fix_short }{ Fix_short Fix_long  }ifelse scale } bind def

%%% Set put coordinate
/SetXAdjust { 2 copy gt 
{ X_Step Fix_long sub 2 div floor }
{ Fix_long Fix_short sub 2 div} ifelse /XAdjust exch def 
} bind def
 /YAdjust 1.0 cm def
%%% Temporary
/Row 4 def
/Column 5 def
/X_Step urx llx sub Row div floor def
/Y_Step ury lly sub Column div floor  def
/Row_pos 0 def
/Column_pos 1 def
/SetPutPosition { 
llx X_Step Row_pos mul add 
ury Y_Step Column_pos mul sub translate
DrawFrame
DrawFileName
XAdjust YAdjust translate
Row 1 sub Row_pos eq { /Row_pos 0 def /Column_pos Column_pos 1 add def }{ /Row_pos Row_pos 1 add def } ifelse  
Column_pos Column gt { /Column_pos 1 def } if
} bind def

我尝试更改postscript以从上到下排列图像。我可以从上到下布局图像,但我只能把它放在第一列。

/SetPutPosition { 
llx X_Step Row_pos mul add 
ury Y_Step Column_pos mul sub translate
DrawFrame
DrawFileName
XAdjust YAdjust translate
Row 1 sub Row_pos eq { /Row_pos 0 def /Column_pos Column_pos 1 add def }{ /Column_pos Column_pos 1 add def } ifelse  
Column_pos Column gt { /Row_pos 1 def } if
} bind def

1 个答案:

答案 0 :(得分:0)

并非所有程序都被给出,例如llx,lly,urx和ury未定义。所以不可能重现你在做什么......

行和列的定义对我来说也很奇怪,因为行在x方向上递增而列在y方向递减。

我假设程序在循环中运行(也未示出)。在循环的每次迭代中,它将页面上的位置设置为:

x = llx +(X_Step * Row_pos) y = ury - (Y_Step * Column_pos)

然后程序然后从Row中减去1并与Row_pos进行比较。如果它们是相同的,那么我们重置行,否则我们向Row_pos添加1。实际上,我们将Row_pos递增,直到我们到达Row-1。

现在,如果我们重置行,那么我们将Row_pos设置为0,并将1添加到column_pos。

最后,我们比较Column_pos和Column,如果Column_pos大于Column,那么我们将Column_pos重置为1.由于我们还要在前面的控制块中重置Row_pos,这实际上是一个完整的页面重置,并从初始值。

您的代码首先通过再次针对Row检查Row_pos(当检查Column_pos对列时)。如果Row_pos没有到达Row,那么您将1添加到Column_pos。然后根据Column检查Column_pos,如果更大则重置Row_pos。

请注意,如果Row_pos等于Row - 1

,则可以改变Row_pos的唯一方法

如果是,则将Row_pos重置为0.之后,除非Row为1,否则无法增加Row_pos。

基本上你的逻辑被打破了。

您希望将Column_pos与Column进行比较 - 1.当它们相等时,您希望将Column_pos设置为1并增加Row_pos,否则您希望增加Column_pos。最后,如果Row_pos大于Row,则要重置Row_pos top 0。

因此,请记住,我无法对此进行测试,因为并非所有代码都存在,例如:

/SetPutPosition { 
llx X_Step Row_pos mul add 
ury Y_Step Column_pos mul sub translate
DrawFrame
DrawFileName
XAdjust YAdjust translate
Column 1 sub Column_pos eq { /Column_pos 1 def /Row_pos Row_pos 1 add def }{ /Column_pos Column_pos 1 add def } ifelse  
Row_pos Row gt { /Row_pos 0 def } if
} bind def