2010-10-17 37 views
5

Tôi đang tạo một tập lệnh nhỏ với ruby ​​tạo tệp PDF có lịch biểu tuần, sử dụng Prawn làm thư viện PDF và tôi đang gặp khó khăn trong việc tạo kiểu cho bảng. Tôi muốn thiết lập một chiều rộng tĩnh cho tất cả các cột trong bảng sao cho chiều rộng sẽ không phụ thuộc vào nội dung của các ô.Đặt chiều rộng ô/cột trên bảng Prawn

Tôi đã đọc tài liệu (rất nhiều chỗ để cải thiện) từ trang dự án Prawn và googled trong vài giờ, nhưng tôi bị mất cách đặt chiều rộng cho cột hoặc ô trong bảng hoặc cách để tạo kiểu cho các cột/ô theo bất kỳ cách nào. Tôi nhận được một tập tin PDF trong đó có một bố trí lưới mặc dù, các tế bào chỉ khác nhau về kích thước rất nhiều, mà không nhìn gọn gàng.

này đã không làm việc:

Prawn::Document.generate(@filename, :page_size => 'A4', :page_layout => :landscape) do 
    table(course_matrix, :headers => HEADERS, :border_style => :grid, :row_colors => ['dddddd', 'eeeeee'], :column_widths => 50) 
end 

Dưới đây là phiên bản hiện tại của phương pháp của tôi để tạo PDF, nhưng nó không stylize tế bào hoặc:

def produce_pdf 
    course_matrix = DataParser.new.parse_for_pdf 

    Prawn::Document.generate(@filename, :page_size => 'A4', :page_layout => :landscape) do 
    table(course_matrix, :headers => HEADERS, :border_style => :grid, :row_colors => ['dddddd', 'eeeeee']) do |table| 
     table.cells.style { |cell| cell.width = 50 } 
    end 
    end 
end 
+2

Nếu bạn không hài lòng với tài liệu của Prawn, hãy đóng góp. – Tass

Trả lời

11

tôi làm điều gì đó như thế này :

pdf = Prawn::Document.new(
    :page_size => 'A4', 
    :page_layout => :landscape, 
    :margin => [5.mm]) 
    .... 
    .... 
    pdf.table(tbl_data) do 
    row(0).style(:background_color => 'dddddd', :size => 9, :align => :center, :font_style => :bold) 
    column(0).style(:background_color => 'dddddd', :size => 9, :padding_top => 20.mm, :font_style => :bold) 
    row(1).column(1..7).style(:size => 8, :padding => 3) 
    cells[0,0].background_color = 'ffffff' 
    row(0).height = 8.mm 
    row(1..3).height = 45.mm 
    column(0).width = 28.mm 
    column(1..7).width = 35.mm 
    row(1..3).column(6..7).borders = [:left, :right] 
    row(3).column(6..7).borders = [:left, :right, :bottom] 
    .... 
pdf.render() 

Thông tin thêm here.

0

Để thiết lập chiều rộng tĩnh cho tất cả các cột tôi làm điều gì đó như thế này:

REPORT_FIELDS = %w[DESCRIPTION PRICE DATE NOTE].freeze 
A4_SIZE = 200.freeze 

data = [] 
data << REPORT_FIELDS 
... things happen ... 
table(data, column_widths: (A4_SIZE/REPORT_FIELDS.size).mm)) 

Trong trường hợp này tôi muốn thiết lập các bảng để phù hợp với trang đầy đủ và với các tế bào với chiều rộng tương tự.

Các vấn đề liên quan