Ruby Ruportʵ¼ù—ÖÐÎÄPDF±¨±íÖ®PRAWN
FPDFÄÜÖ§³ÖPDFµÄÖÐÎÄ´òÓ¡£¬È»¶øÈ´´æÔÚ²»ÉٵIJ»ÈçÒâÖ®´¦£¬¾ÝÎÒĿǰµÄʹÓã¬×ܽá³ö¼¸µã£º
1£©FPDFÌṩµÄPdf_Chinese×ÖÌ壬½«GBÕâÖÖ×ÖÌåдÈëÁË´úÂëÖУ¬ÈôÎÒÃÇÏ£ÍûÒýÈëÆäËûµÄÖÐÎÄ×ÖÌ壬Ôò²»ÄÜ·½±ãµØÊ¹ÓÃ
2£©FPDFÊä³öµÄÊý×Ö²¢²»ÃÀ¹Û£¬²»ÈçRuport::Formatter::PDF×Ô´øµÄ×ÖÌå
3£©FPDFÌṩµÄ·½·¨²¢²»¶à£¬¶ÔÓÚÒ»°ãµÄ±¨±í´òÓ¡£¬ÓõÄ×î¶àµÄÒ²ÐíÊÇ Cell·½·¨£¬µ«Èç¹ûÁ¬Ò»¸öÆÕͨµÄ±¨±í´òÓ¡¶¼ÐèÒªÄܹý´úÂë¿ØÖÆ»»ÐС¢»Ö±Ïß¡¢Ð´µ¥Ôª¸ñ£¬ÄǾÍÌ«²»·½±ãÁË
PrawnÒ²ÊǺôÉù½Ð¸ßµÄÒ»ÖÖRuby PDF±¨±í¹¤¾ß£¬¶ÔÓÚËüºÍ FPDF µ½µ×˸üÓÅÐ㣬Õâ¾ÍÒªÒòÈ˶øÒìÁË£¬FPDFÊÇÓÃPHP±àдµÄPDF¿âµÄÒÆÖ²£¬¶øPRAWNÔò²»ÊÇ Prawn£ºÊ¹ÓÃRubyÉú³ÉPDF¸ü¼ò½Ý ÖÐÓмòµ¥µÄ½éÉÜ
ÏÂÃæÀ´¿´¿´PRAWNÊÇÈçºÎʵÏÖPDFµÄ´òÓ¡µÄ£¨»ù±¾µÄʵÏֲο¼ Ruby Ruportʵ¼ù—¼òµ¥±¨±íϵͳ£©
Ò»¡¢°²×°Prawn
gem install prawn
¶þ¡¢ÐÞ¸Äenviroment.rb
Ìí¼ÓÈçÏÂÒýÓãº
require "prawn"
require 'prawn/layout'
Èý¡¢ÒýÈëºÏÊʵÄÖÐÎÄ×ÖÌå
PrawnÖ§³ÖÍⲿÒýÈëÖÐÎÄ×ÖÌ壬ÀýÈç“¿¬Ìå”
´ÓC:\Windows\FontsϽ«±¾»úÖ§³ÖµÄ×ÖÌåÎļþ(*.ttf)¸´ÖƵ½
%RUBY_HOME%\lib\ruby\gems\1.8\gems\prawn-core-0.8.4\data\fonts
ÔÚ´úÂëÖÐͨ¹ý
@pdf_writer.font"#{::Prawn::BASEDIR}/data/fonts/simkai.ttf"
Ö¸¶¨ÐèÒªÒýÓõÄ×ÖÌå
ËÄ¡¢ÐÞ¸ÄReportOutputController.rb
Ìæ»»Pdf<Ruport::Formatter::PDFΪÈçÏ´úÂ룺
class Ruport::Formatter::PRAWN< Ruport::Formatter::PDF
def pdf_writer
unless @pdf_writer
@pdf_writer = ::Prawn::Document.new
@pdf_writer.font"#{::Prawn::BASEDIR}/data/fonts/simkai.ttf"
end
return @pdf_writer
end
def render_pdf
output<<pdf_writer.render
end
end
class Pdf<Ruport::Formatter::PRAWN
renders :pdf, :for => ReportOutputController
build :data_sheet do
eval(options[:outputContent])
end
end
Îå¡¢±£´ærepoert_templates
¶ÔÓÚtemplate_contentµÄÄÚÈݱ£´æÎªÈçÏ£º
pdf_writer.text ("²úÆ·Áбí",
:align=>:center,:size=>15)
pdf_writer.image ("public/images/ruport.jpg",
:at => [0,730],
:height=>50,
:width=>100)
pheader=%w[Àà±ð Ãû³Æ ¼Û¸ñ]
pdata=[]
for i in 0..data.length-1 do
temp=[data[
Ïà¹ØÎĵµ£º
require 'open-uri'
$NAME_CHARS= (?a..?z).to_a+(?0..?9).to_a
def is_name_used(name)
str=open('http://passport.csdn.net/UserExist.aspx?UserName='+name)
str=str.read
#str=str.encode('GBK','utf-8')
return true if str[/Red/]
end
def enum_names(len=2)
return if len<2
f=File.open(' ......
require 'curses'
module Curses
def self.program
main_scr=init_screen
noecho
cbreak
curs_set(0)
main_scr.keypad=true
yield main_scr
end
end
Curses.program do |scr|
max_x=scr.maxx
max_y=scr.maxy
100.times do
scr.setpos(rand(max_y),rand(max_x))
......
RuportÊÇÒ»¸öÃâ·ÑµÄRuby±¨±í¹¤¾ß£¬Ëü¿ÉÒÔÁîµ½ÖÆ×÷±¨±íÈí¼þ±äµÃ¼òµ¥Ò»Ð©¡£RuportÖ§³Ö´ÓÎļþ»òÕßÊý¾Ý¿â»ñµÃÊý¾Ý£¬Ìṩ¹¤¾ß²Ù×÷Êý¾Ý¡£¶îÍâµØ£¬RuportÖ§³Ö¸ßÀ©Õ¹µÄ¸ñʽ»¯Èí¼þ£¬Ä¿Ç°Äܹ»Ö§Ô®HTML¡¢PDF¡¢CSVºÍÎı¾Êä³ö¡£
Ruport¿ÉÄÜÊÇRubyĿǰΨһµÄ±¨±í¹¤¾ß£¬Ä¿Ç°ÔÚ³ÖÐø¿ª·¢ÖУ¬¸ü¶àµÄÐÂÌØÐÔÕýÔÚÌí¼Ó¡£
°²×°·½·¨£º
gem instal ......
Prepare
1. Download 'OCI 1.x.x.rb' (it's VERY important - execution MUST be *.rb)
2. Download 'oci8lib.so'
Install
1. Copy 'OCI8.rb' to .../ruby/lib/ruby/site_ruby/1.8/DBD/OCI8
2. Copy 'oci8.rb' to .../ruby/lib/ruby/site_ruby/1.8
3. Copy 'oci8lib.so' to .../ruby/lib/ruby/site_ruby/1.8/i386-msv ......
ÓÐÒ»¸öȫеÄÏîÄ¿£¬ÒòΪ¿¼Âǵ½½«À´µÄÊý¾ÝÀ©Õ¹ÐÔÄÜ£¬ËùÒÔ¿¼ÂÇÓÃCassandra×öÊý¾Ý´æ´¢£¬Ç°¶ËÓÃLighttpd + FastCGI + Rails¡£ÔÚʹÓÃCassandraµÄʱºò£¬¾õµÃÓÐһЩ¶«Î÷¿ÉÄÜ´ó¼Ò¶¼ÐèÒª£¬¾ÍдÁËÒ»¸ö¼òµ¥µÄÖ¸ÄÏ¡£ÒòΪÄÚÈݱȽϳ¤£¨16Ò³£©£¬¾ÍŪÁ˸öPDFÎļþ¸ø´ó¼ÒÏÂÔØ¡£
Cassandra in Action with Twitter's Ruby Client.pdf
Èç¹ûÏÂÔ ......