Pregunta

Tengo texto del pie que puede ser más de una línea, la longitud del texto variará dependiendo del nombre del usuario y la empresa para la que trabajan. Al igual que todos los pies de página, que debe ser visualizado debajo de la base del documento atado para que no quede entremezcla con el contenido principal de la PDF.

El problema es que la única razón por la que he encontrado en la gamba para obtener el texto impreso debajo de la base del documento encuadernado es mediante el uso #draw_text. Este es el mismo método que number_pages usos para obtener su texto aparezca debajo de la base del documento encuadernado. Sin embargo, la única salvedad de utilizar #draw_text parece ser su incapacidad para ajuste de texto a una segunda línea.

he encontrado muchos métodos que me permiten ajustar el texto a una segunda línea como #text_box, #bounding_box, etc. pero la advertencia de estos métodos es que no le permiten imprimir cualquier cosa por debajo del límite inferior del documento .

Por ejemplo, lo siguiente no imprime nada en el documento, ya que estaría por debajo del límite inferior del documento:

text_box "Generated by Tom Cruise for Universal Studios", :at => [bounds.left, 0], :width => 200

A continuación se imprime en el documento, ya que se encuentra dentro de la parte inferior del documento encuadernado, pero también se imprimirá en la parte superior de cualquier contenido que ya existe allí:

text_box "Generated by Tom Cruise for Universal Studios", :at => [bounds.left, bounds.bottom - 20], :width => 200

Y por último el siguiente imprimirá debajo de la base del documento encuadernado asegurar que no se está impreso en la parte superior de cualquier contenido existente en el PDF, pero no hay ninguna: opción anchura o la capacidad de tener el ajuste de texto a un segundo línea si es necesario:

draw_text "Generated by Tom Cruise for Universal Studios", :at => [bounds.left, 0]

¿Hay una manera de obtener lo mejor de ambos mundos? Una forma de imprimir debajo de la base del documento encuadernado y hacer cumplir una anchura máxima con el ajuste de línea?

¿Fue útil?

Solución 2

terminé de escribir mi propia rutina poco para manejar múltiples líneas en el pie de página. Sería bueno si gambas apoyado algo como esto fuera de la caja, todavía estoy un poco desconcertado por qué algunas cosas no se pueden mostrar por debajo del fondo atado, mientras que otras cosas pueden ser. También sería bueno que todos los diferentes tipos de métodos de texto apoyaron el atributo: ancho con el ajuste de línea ... pero estoy divagando, aquí está el código que terminé usando:

line_wrapper = Prawn::Core::Text::LineWrap.new

repeat :all do
  str = "Generated on " + Time.zone.now.strftime("%m/%d/%y at %I:%M:%S %p %Z") + " by #{user.full_name} at #{user.company.name}"
  starting_position = 0
  while !str.blank?
    single_line = line_wrapper.wrap_line(str, :width => 470, :document => pdf)
    draw_text(single_line, :at => [bounds.left, starting_position])
    starting_position -= 10
    str.slice!(single_line)
  end
end

Otros consejos

Sospecho que necesita para hacer el ajuste de línea manualmente (por ejemplo, calcular cuándo romper).

Pero yo era capaz de conseguir un pie de página de varias líneas utilizando el método estándar y number_pages la siguiente:

pdf.number_pages "Copyright #{Time.now.year} Company.", [pdf.bounds.left, 0]
pdf.number_pages "Profile generated on #{Time.now.strftime('%B %d, %Y')}.", [pdf.bounds.left, 10]

Es eso lo que está buscando?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top