2013-03-04 1 views
2

У меня есть драгоценный камень креветки, установленный в моем рельсе 3 приложения.Нижний колонтитул на каждой странице не работает (Prawn PDF) в рельсах 3.2

Интересно, почему мой нижний колонтитул не работает на каждой странице.

Он работает только в конце последней страницы.

Вот мой код:

(Я новичок в Prawn)

Так, пожалуйста, медведь со мной.

Любые обходные пути будут очень высоко

require 'prawn' 
require 'rubygems' 
require 'date' 

pdf = Prawn::Document.new(:page_layout => :landscape,:skip_page_creation => true,:margin => [5,5,5,5]) do 
    start_new_page 
    pdf.font "Helvetica"  
end 


pdf.text "Project Procurement Management Plan (PPMP)", :size=> 12, :spacing => 4, :align=> :center 

pdf.move_down 400 


pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 
pdf.text "Text" 


# This is the footer code 

pdf.bounding_box([pdf.bounds.right - 59, pdf.bounds.bottom - -20], :width => 60, :height => 20) do 

    pagecount = pdf.page_count 
    pdf.text "Page #{pagecount}" 
end 

Решено!

Посмотрите, что я узнал ниже.

ответ

3

Привет, я уже нашел ответ.

Для тех, кто возникли проблемы, как это:

pdf.repeat :all do 

    pdf.bounding_box [pdf.bounds.left, pdf.bounds.bottom + 25], :width => pdf.bounds.width do 
    pdf.stroke_horizontal_rule 
    pdf.move_down(5) 
    pdf.text "#{current_user.first_name}", :size => 10 
end 
end 
+1

Ха-ха хорошо, чтобы услышать, я поздно post..haha Но рад, что вы нашли его. – ksugiarto

0

Попробуйте это:

pdf.repeat(:all) do 
    pdf.stroke do 
    pdf.horizontal_line 0, 540, :at => 10 
    end 

    pdf.number_pages "(<page>/<total>)", :size => 9, :at => [500, 0] 
end 

Так что я понимаю, что мне нужно использовать эту number_pages, чтобы создать его, в основном то, что я do не был чистым и правильным, потому что для создания заголовка и нижнего колонтитула я использую все с number_pages, но я работаю, так как с его помощью мы можем свободно назначить его позицию, и это просто.

1

Если вам не нужно отображать разделитель горизонтальной линии, то это минимальное решение, поскольку pdf.number_pages работает даже без pdf.repeat(:all):

options = { 
     :at => [pdf.bounds.right - 150, 0], 
     :width => 150, 
     :align => :right, 
     :start_count_at => 1 
} 
pdf.number_pages "Page <page> of <total>", options 
3

Я пытался генерировать левый/центральный/правый - содержание на каждой странице, за пределами нижнего поля.
number_pages только генерирует один блок.
Несколько заявлений:

a. используйте repeat и text_box. Важным здесь является то, что text_box нужна высота eplicit будет отображаться вне границ:

repeat :all do 
    text_box "title: some text", at: [bounds.left, -20], height: 20 
    text_box "printet at #{Time.now}", height: 20, width: 200, align: :right, at: [bounds.right-200,-20] 
end 

б. вы можете позвонить number_pages несколько раз в конце поколения PDF. Вам не нужно указывать шаблоны номеров страниц. number_pages может генерировать текст вне границ (он устанавливает heigth внутренне):

number_pages "title: some text", at: [bounds.left, -20] 
number_pages "page <page> of <total>", at: [300,-20] 
number_pages "printed at #{Time.now}", at: [bounds.right-200,-20], width: 200, align: :right 
1

Попробуйте

pdf.page_count.times do |i| 
    pdf.go_to_page(i+1) 
    pdf.bounding_box([0, pdf.bounds.bottom + 25], :width => pdf.bounds.width) { 
    pdf.line_width(3) 
    pdf.stroke_horizontal_rule 
    pdf.move_down(5) 
    pdf.draw_text "Page #{i+1}" ,:at => [240, pdf.bounds.height - 20] 
    pdf.draw_text "#{Time.now.strftime("%B %d, %Y")}" ,:at => [455, pdf.bounds.height - 20] 
    } 
end