многострочный нижний колонтитул в Prawn PDF - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть текст нижнего колонтитула, который может быть более одной строки, длина текста будет варьироваться в зависимости от имени пользователя и компании, в которой он работает. Как и все нижние колонтитулы, он должен отображаться ниже нижней границы документа, чтобы он не смешивался с основным содержимым PDF.

Проблема в том, что единственная причина, по которой я нашел в Prawn текст для печати под нижней границей документа, заключается в использовании #draw_text. Это тот же метод, который использует number_pages, чтобы текст отображался под нижней границей документа. Однако единственным предостережением использования #draw_text является невозможность переноса текста во вторую строку.

Я нашел много методов, которые позволяют мне переносить текст во вторую строку, таких как #text_box, #bounding_box и т. Д., Но предостережение этих методов в том, что они не позволяют вам печатать что-либо ниже нижней границы документа ,

Например, следующее ничего не напечатает на документе, потому что оно будет ниже нижней границы документа:

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

Следующие документы печатаются на документе, поскольку он находится внутри нижней границы документа, но также будет напечатан поверх любого содержимого, которое там уже существует:

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

И, наконец, ниже будет напечатана нижняя граница документа, гарантирующая, что он не будет печататься поверх любого существующего содержимого в PDF, но при этом недоступен параметр: ширина или возможность переноса текста на секунду. строка при необходимости:

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

Есть ли способ получить лучшее из обоих миров? Способ печати ниже нижней границы документа И применения максимальной ширины с переносом строк?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Я закончил тем, что написал свою собственную маленькую подпрограмму для обработки нескольких строк в нижнем колонтитуле. Было бы хорошо, если бы Prawn поддерживал что-то подобное из коробки, я все еще немного озадачен, почему некоторые вещи не могут отображаться ниже нижней границы, в то время как другие вещи могут быть. Также было бы неплохо, если бы все различные типы текстовых методов поддерживали атрибут: width с переносом строк ... но я отступаю, вот код, который я в итоге использовал:

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
1 голос
/ 17 ноября 2010

Я подозреваю, что вам нужно будет выполнить перенос строк вручную (например, рассчитать, когда нужно разбить).

Но мне удалось получить многострочный нижний колонтитул, используя стандартный метод number_pages и следующее:

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]

Это то, что вы ищете?

...