Guest User

Untitled

a guest
Feb 19th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.45 KB | None | 0 0
  1. require "ruport"
  2. require "pdf/writer"
  3. module Ruport
  4.  
  5. class Format::Engine::Order < Format::Engine
  6.  
  7. # company header
  8. attribute :company_data
  9.  
  10. # order meta data
  11. attribute :comments
  12. attribute :custcode
  13. attribute :custref
  14. attribute :date
  15. attribute :email
  16. attribute :name
  17. attribute :phone
  18. attribute :ref
  19.  
  20. renderer do
  21. build_company_header
  22. build_order_header
  23. render_order
  24. end
  25.  
  26. alias_engine Order, :order_engine
  27. Format.build_interface_for Order, :order
  28.  
  29. end
  30.  
  31. class Format::Plugin::PDFPlugin < Format::Plugin
  32.  
  33. attribute :pdf
  34. self.pdf = PDF::Writer.new( :paper => "A4")
  35.  
  36. renderer :order do
  37. require "pdf/writer"
  38. require "pdf/simpletable"
  39. return unless defined? PDF::Writer
  40.  
  41. pdf.start_page_numbering(500, 20, 8, :right)
  42. #Report Title
  43. pdf.text "Order", :font_size => 28, :justification => :right
  44.  
  45.  
  46. # order contents
  47. pdf.y = 620
  48.  
  49. PDF::SimpleTable.new do |table|
  50. table.width = 450
  51. table.orientation = :center
  52. table.data = data
  53. table.show_lines = :outer
  54. table.column_order = data.fields
  55. table.render_on(pdf)
  56. table.font_size = 12
  57. end
  58.  
  59.  
  60. # footer
  61. pdf.open_object do |footer|
  62. pdf.save_state
  63. pdf.stroke_color! Color::Black
  64. pdf.stroke_style! PDF::Writer::StrokeStyle::DEFAULT
  65.  
  66. pdf.add_text_wrap(50, 20, 200, "Printed at " + Time.now.strftime("%H:%M %d/%m/%Y"), 8)
  67.  
  68. pdf.restore_state
  69. pdf.close_object
  70. pdf.add_object(footer, :all_pages)
  71. end
  72.  
  73. pdf.stop_page_numbering(true, :current)
  74. pdf.render
  75. end
  76.  
  77. # Company Information in top lefthand corner
  78. helper(:build_company_header) { |eng|
  79.  
  80. if eng.company_data.class == Array
  81.  
  82. PDF::SimpleTable.new do |table|
  83. @values = []
  84. eng.company_data.each do |line|
  85. @values << { "value" => line}
  86. end
  87. table.data = @values
  88. table.column_order = ["value"]
  89. table.show_headings = false
  90. table.font_size = 10
  91. table.show_lines = :outer
  92. table.shade_rows = :none
  93. table.width = 200
  94. table.position = :left
  95. table.orientation = :right
  96. table.render_on(pdf)
  97. end
  98. end
  99. }
  100.  
  101. # Order details
  102. helper(:build_order_header) { |eng|
  103.  
  104. pdf.add_text_wrap(310, 750, 80, "Date:", 12)
  105. pdf.add_text_wrap(310, 730, 80, "Ref:", 12)
  106. pdf.add_text_wrap(310, 710, 80, "Customer:", 12)
  107. pdf.add_text_wrap(310, 690, 80, "Cust Ref:", 12)
  108. pdf.add_text_wrap(310, 670, 80, "Phone:", 12)
  109. pdf.add_text_wrap(310, 650, 80, "Email:", 12)
  110.  
  111. pdf.add_text_wrap(390, 750, 200, eng.date.to_s, 12) unless eng.date.nil?
  112. pdf.add_text_wrap(390, 730, 200, eng.ref, 12)
  113. pdf.add_text_wrap(390, 710, 200, eng.name, 12)
  114. pdf.add_text_wrap(390, 690, 200, eng.custref, 12)
  115. pdf.add_text_wrap(390, 670, 200, eng.phone, 12)
  116. pdf.add_text_wrap(390, 650, 200, eng.email, 12)
  117. }
  118.  
  119. register_on :order_engine
  120. end
  121. end
  122.  
  123. report = Ruport::Format.order_object :plugin => :pdf, :data => [[1,2],[3,4]].to_ds(%w[a b])
  124. report.ref = "WED"+2.to_s
  125.  
  126. puts report.ref
  127. report.render
Add Comment
Please, Sign In to add comment