2017-04-21 21 views
7

ボックスの高さよりも大きい場合、Prawn PDFのバウンディングボックス内に収まるようにxy座標を調整する方法はありますか?Prawn PDFのバウンディングボックスへのフィット

私は、次を格納署名をキャプチャする宝石「署名パッド・レール」を使用しています:

[{"lx":98,"ly":23,"mx":98,"my":22},{"lx":98,"ly":21,"mx":98,"my":23},{"lx":98,"ly":18,"mx":98,"my":21}, ... {"lx":405,"ly":68,"mx":403,"my":67},{"lx":406,"ly":69,"mx":405,"my":68}] 

私は私のPDFファイルに署名を表示するのフォローがあります

bounding_box([0, cursor], width: 540, height: 100) do 
     stroke_bounds 
     @witness_signature.each do |e| 
     stroke { line [e["lx"], 100 - e["ly"]], 
         [e["mx"], 100 - e["my"] ] } 
     end 
    end 

しかし、場合によっては署名がページからはみ出し、中央ではなく一般的にamuckで実行されます。

+0

は、あなたが希望の出力を使用して、現在の出力の一例(画像)と別のものを表示できます。そして、ここに

は、擬似コードの再スケールをするためのポイントボックスに合わせているのですか? – Gerry

答えて

1

あなたの質問はかなり漠然としているので、私はあなたが意味するものを推測しています。第1の原画像のアスペクト比を維持するかどうかを決定し、ポストスクリプトのように原点(0,0)とサイズ(width, height)の所定のバウンディングボックスに収まるように座標(x[i], y[i]), i = 1..nのシーケンスを再スケーリングする

。箱に入れることは一般的にそれをしません。あなたはおそらく署名を歪めたくないので、答えは「はい」と言います。

イメージを縦横比を保持するボックスにスケーリングするとき、ボックスがイメージのアスペクトを正確に持つ場合を除いて、x軸またはy軸のいずれかが倍率を決定します。次に、代替軸上の「余分なスペース」をどうするかを決定します。例えば。イメージがバウンディングボックスと比較して背が高くて薄い場合、余分なスペースはx軸になります。短く太っている場合はy軸です。

余分なスペースの中にイメージを配置します。それは署名にふさわしいと思われる。

x_min = y_min = +infty, x_max = y_max = -infty 
for i in 1 to n 
    if x[i] < x_min, x_min = x[i] 
    if x[i] > x_max, x_max = x[i] 
    if y[i] < y_min, y_min = y[i] 
    if y[i] > y_max, y_max = y[i] 
end for 
dx = x_max - x_min 
dy = y_max - y_min 
x_scale = width/dx 
y_scale = height/dy 
if x_scale < y_scale then 
    // extra space is on the y-dimension 
    scale = x_scale 
    x_org = 0 
    y_org = 0.5 * (height - dy * scale) // equal top and bottom extra space 
else 
    // extra space is on the x_dimension 
    scale = y_scale 
    x_org = 0.5 * (width - dx * scale) // equal left and right extra space 
    y_org = 0 
end 
for i in 1 to n 
    x[i] = x_org + scale * (x[i] - x_min) 
    y[i] = y_org + scale * (y[i] - y_min) 
end 
関連する問題