У меня есть метод, который сканирует строку HTML и вид форматирует его prawnpdf:Rails: добавление к последнему объекту, если условия встретились
def format_for_prawn(pdf, string, colour)
body = Nokogiri::HTML::DocumentFragment.parse(string)
result = body.xpath('./*|./text()')
result.each do |breaker|
if breaker.name == "h3"
pdf.fill_color colour
pdf.text breaker.text.to_s, :size => 16
pdf.move_down 5
else
pdf.fill_color '#444444'
pdf.text breaker.text.to_s, :size => 10, :leading => 1
pdf.move_down 10
end
end
end
Он отлично работает для <h3>
с. Если обнаружены теги середины абзаца <b>
(или аналогичные), он начинает новый абзац, потому что именно там Nokogiri сломал строку - это правильное поведение.
Как я могу добавить выделенную строку к последней функции pdf.text
вместо вызова нового pdf.text
, который приводит к новому абзацу?
Я думал о создании массива из всего этого, но тогда он будет неисправен с <h3>
.
Любая помощь будет оценена по достоинству.
Большое спасибо за ваш вдумчивый ответ. Разумное звучит хорошо, я не знал, как его выполнить. Я действительно получаю текст неопределенного метода 'для #
На самом деле, я просто понял, что это никогда не сработает. Я не могу отформатировать текст по-разному в одной строке без разрыва креветок. Вернемся к чертежной доске. Inline форматирование, похоже, работает только с жирным шрифтом, и ничего больше –
Да, есть ошибка, 'map {| node | node.text.to_s} 'должен быть' map {| part | part [: node] .text.to_s} '. Что же касается полужирного шрифта, я не понял, что вы хотите его сохранить (не будет ли более подходящим решением html2pdf, например wicked_pdf, в этом случае?), Но вы можете воспользоваться опцией «: inline_format» креветки. Редактирование для всего этого. –