2015-10-07 1 views
2

Я хочу указать столбцы в разных точках документа PDF.Схема сетки из креветок: динамическое содержимое сталкивается с последующими строками

Пример: три столбца для этого раздела, один столбец для этого раздела, два столбца для этого другого раздела.

Я не хочу, чтобы строки привязывались к физическому местоположению в pdf-документе, потому что у меня есть динамический текст с разной длиной, поэтому я не могу предсказать, сколько контента находится в определенной области. Случается, что если слишком много текста для поля [column, row], оно просто переполняется в следующую строку, сталкиваясь с текстом там.

Похоже, что сетка макета в креветках заставляет меня указывать количество строк.
Было бы неплохо, если бы я мог динамически определять строки, например, с помощью бутстрапа. Таким образом, содержимое в строке не начинается, пока предыдущая строка не займет все необходимое пространство.

Вот как я понимаю, вы должны определить сетку макета в Prawn:

pdf.define_grid(columns: 12, rows: 12, gutter: 10) 

Так сказать, что я что-то вроде этого:

pdf.grid([0,0]).bounding_box do 
    pdf.text "Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Maecenas faucibus mollis interdum." 
end 

pdf.grid([1,0]).bounding_box do 
    pdf.text "some text" 
end 

Очевидно, что текст в ограничивающей поле [0,0] собирается чтобы столкнуться с текстом в ограничительном поле [1,0], потому что в [0,0] слишком много содержимого, поэтому оно переполняется в строки под ним.

Поскольку бутстрап не застревает в сетке макетов физических столбцов/строк, Bootstrap позволяет содержимому в [0,0] занимать столько места, сколько необходимо, а затем начинается [1,0].

Проблема заключается в том, что сетка макета креветок, по-видимому, применяется непосредственно к физическому расположению pdf-документа, но я не хочу, чтобы это было сделано.

Надеюсь, это имеет смысл. Возможно ли это в креветке? В противном случае я предвижу, что мне приходится отказываться от столбцов для моих PDF-файлов, что создавало бы тонну пустого пространства.

Prawn PDF manual, расположение Информация на странице 74

ответ

1

С креветкой столом, это может нравится, как это:

require 'prawn' 
require 'prawn/table' 

Prawn::Document.generate("junk4.pdf") do 

    font "Helvetica" 

    text "Test Table", :style => :bold_italic 
    stroke_horizontal_rule 

    move_down 20 

    table([ ["short", "short", "loooooooooooooooooooong "*30], 
      ["short", "loooooooooooooooooooong "*15, "short"], 
      ["loooooooooooooooooooong "*10, "short", "short"] ]) 

end 
0

Я думаю, что сетка для таблиц. Column_box больше подходит для вашей проблемы:

column_box([0, cursor], :columns => 2, :width => bounds.width) do 
    text("a bunch of text ...") 
end 
+0

Дело в том, что, хотя я не хочу содержание из одной колонки потока в другой колонке. Я хочу, чтобы колонки полностью разделялись, и пусть каждый столбец занимает столько места, сколько необходимо.Пример column_box показывает только один столбец, текущий в следующий столбец. – Neil

+2

А, я вижу. Для этого, возможно, Prawn Table - это всего лишь билет для вас: https://github.com/prawnpdf/prawn-table –

0

Надеюсь, я правильно вас понимаю.

Я бы использовал таблицу креветок для этого, как предложено в первом ответе. Для этого добавьте Gem «креветки стол» и использовать такой код:

pdf = Prawn::Document.new 

# First section with two columns 
pdf.table([['column_text_1', 'column_text_2']]) 

# Second section with three columns 
pdf.table([['column_text_1', 'column_text_2', 'column_text_3']]) 

Если вам нужно что-то более продвинутым Вы можете обратиться к драгоценному камню documentation или оставить комментарий здесь.

Смежные вопросы