Prawn PDF:将行适配到边界框

7

如果xy坐标比边界框的高度更大,有没有办法在Prawn PDF中调整xy坐标以适应边界框?

我正在使用gem 'signature-pad-rails'来捕获签名,然后存储以下内容:

[{"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文件中显示签名:

我有以下内容展示如何在我的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

但在某些情况下,签名会超出页面范围,不居中,总体来说就是乱七八糟的。


你能展示一下你目前的输出结果和期望的输出结果的例子(图片)吗? - Gerry
1个回答

1
您的问题比较模糊,所以我猜测您的意思。
为了将一系列坐标点,i = 1..n重新调整大小以适应给定的大小为<宽度,高度>和原点<0,0>的边界框(如Postscript),首先决定是否保留原始图像的纵横比。适合框通常不会这样做。由于您可能不想扭曲签名,因此回答是“是”。


当将图像缩放到保持纵横比的框中时,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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接