многострочный нижний колонтитул в PDF-файле Prawn

StackOverflow https://stackoverflow.com/questions/4206942

  •  25-09-2019
  •  | 
  •  

Вопрос

У меня есть текст нижнего колонтитула, который может состоять из нескольких строк. Длина текста будет зависеть от имени пользователя и компании, в которой он работает.Как и все нижние колонтитулы, он должен отображаться под нижней границей документа, чтобы он не смешивался с основным содержимым 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-файле, но нет доступной опции :width или возможности переносить текст на вторую строку, если это необходимо. :

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

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

Это было полезно?

Решение 2

В итоге я написал свою собственную небольшую процедуру для обработки нескольких строк в нижнем колонтитуле.Было бы неплохо, если бы 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

Другие советы

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

Но мне удалось получить многострочный нижний колонтитул, используя стандартный метод 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]

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top