Generuj PDF z Rails
Ruby on Rails Wiki wymienia kilka bibliotek , które ułatwiają Generowanie PDF w Rails . Muszę wydrukować etykiety adresowe (w formacie literowym, czyli 12-15 adresów na stronę) i nie mogę zdecydować, który z nich użyć. Jakieś zalecenia?
10 answers
Najlepsze jakie do tej pory widziałem to krewetki:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-11 16:52:54
Krewetka z krewetką na pewno. DSL to prawdziwa uczta, podobnie jak prostota bycia w stanie traktować PDF jak każdy inny format w bloku formatu respond_to:
respond_to do |format|
format.pdf { render :layout => false }
Jest tutorial video o krewetkach tutaj :
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-15 19:33:55
Jest też RTeX . To działa dobrze, jeśli chcesz najpierw przetłumaczyć na LaTeX. LaTeX to bardzo dobry sposób na przechowywanie oznakowanych dokumentów. To zależy tylko od tego, jak statyczny jest każdy dokument. Jeśli większość dokumentu jest dynamiczna, możesz zrobić lepiej z Prawn lub PDF:: Writer. Jeśli większość z nich jest statyczna, z kilkoma zamiennikami tekstu dla każdego, LaTeX może być lepszym wyborem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-11 18:20:54
Jeśli nie robisz nic zbyt skomplikowanego, możesz również użyć HTMLDOC, który konwertuje podstawowy HTML na PDF. Zapobiega to konieczności poznawania bardziej zastrzeżonej składni układu (jak w przypadku krewetek). To może oszczędzić Ci bólów głowy:)
Oto link do ruby gem dla HTMLDOC:
Również, oto dobry przewodnik do renderowania widoku w rails do pdf przy użyciu HTMLDOC:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-22 23:28:19
Istnieje również PDFKit . To też całkiem interesujące.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-02 14:41:00
Użyłem zarówno PDF:: Writer, jak i krewetki i uważam krewetkę za znacznie przyjemniejszą w użyciu. Sprawdź Ruby Mendicant dla Porównanie które demonstruje radości krewetki w/R/T PDF::Writer.
Właściwie, po prostu sprawdź Ruby Mendicant i tak dla świetnego wzorca projektowego dla right livelihood jako programista.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-02 09:14:05
Krewetka to najlepszy sposób. Teraz z etykietami krewetek, które są naprawdę łatwe do zrobienia.
Zobacz README projektu tutaj:Https://github.com/jordanbyron/prawn-labels#readme
Jest to bardzo prosty przykład użycia w sterowniku Rails. Nie zapomnij dodać gem 'prawn-labels'
do swojego Gemfile.
names = %w{Jordan Kelly Greg Bob}
labels = Prawn::Labels.render(names, :type => "Avery5160") do |pdf, name|
pdf.text name
end
send_data labels, :filename => "names.pdf", :type => "application/pdf"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-28 12:22:58
Choć nie do końca ruby, możesz użyć OpenOffice .ODT do generowania plików PDF poprzez połączenie serenity i docsplit.
Http://github.com/kremso/serenity
Http://documentcloud.github.com/docsplit/
LUB możesz użyć clamsy gem, który używa odt i cups-pdf do generowania pliku PDF.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-29 07:27:33
Jeśli chodzi o Twój przypadek użycia, zgadzam się z większością innych odpowiedzi, które prawn
jest właściwym wyborem, ponieważ potrzebujesz kontroli na poziomie pikseli nad wyjściem.
Do generowania raportów PDF z wbudowanymi (opiniowanymi) stylami tabel, nagłówkami itp., możesz użyć report
gem-sprawdź Generuj pdf z Rails 3 - Jakie narzędzie wybrać? na przykład jak używać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:24
Użyłem latającego spodka do generowania plików pdf z html. Jest to biblioteka java, ale możesz użyć Ruby-Java Bridge gem, aby uzyskać do niej dostęp w aplikacji rails. Jest zgodny z css 2.1 i ma kilka dodatków z css3, aby umożliwić dodatkową kontrolę nad stronicowaniem. Polecam go, ponieważ nie wymaga umieszczania "kodu pdf" w html, możesz użyć tych samych widoków i częściowych do wyświetlania w przeglądarce, tak jak do generowania plików PDF.
Latający Spodek: https://github.com/flyingsaucerproject/flyingsaucer
Ruby Java Bridge: http://rjb.rubyforge.org/
Używam tego kodu modułu do generowania plików PDF
require 'rubygems'
require 'rjb'
module Html2Pdf
def self.included(controller)
controller.send :helper_method, :create_pdf
end
def create_pdf(options = {})
itext = "#{RAILS_ROOT}/lib/html2pdf/jars/iText-2.0.8.jar"
core_renderer = "#{RAILS_ROOT}/lib/html2pdf/jars/core-renderer.jar"
xerces = "#{RAILS_ROOT}/lib/html2pdf/jars/xml-apis-xerces-2.9.1.jar"
joinchar = (RUBY_PLATFORM.include? 'mswin') ? ';' : ':'
classpath = [itext, core_renderer, xerces].join(joinchar)
Rjb::load(classpath, jvmargs=['-Djava.awt.headless=true'])
if options[:htmlstring].nil?
options[:layout] ||= false
options[:template] ||= File.join(controller_path,action_name+".pdf.erb")
html_string = render_to_string(:template => options[:template], :layout => options[:layout])
else
html_string = options[:htmlstring]
end
# Make all paths relative, on disk paths...
html_string.gsub!(".com:/",".com/") # strip out bad attachment_fu URLs
html_string.gsub!( /src=["']+([^:]+?)["']/i ) { |m| "src=\"file:///#{RAILS_ROOT}/public/" + $1 + '"' } # re-route absolute paths
html_string.gsub!( /url\(["']+([^:]+?)["']/i ) { |m| "url\(\"file:///#{RAILS_ROOT}/public/" + $1 + '"' } # re-route absolute paths
# Remove asset ids on images with a regex // tbh i can't remember what this line is for but i'm sure it did something awesome
html_string.gsub!( /src=["'](\S+\?\d*)["']/i ) { |m| 'src="' + $1.split('?').first + '"' }
filename = "#{RAILS_ROOT}/public/pdfs/"+options[:filename]+".pdf"
fileOutputStream = Rjb::import('java.io.FileOutputStream')
iTextRenderer = Rjb::import('org.xhtmlrenderer.pdf.ITextRenderer')
renderer = iTextRenderer.new
renderer.setDocumentFromString(html_string)
os = fileOutputStream.new(filename)
renderer.layout()
renderer.createPDF(os)
os.close()
end
end
Wywołanie go kodem w ten sposób:
def generate_pdf
htmlsrc = render_to_string(:partial => 'invoice', :layout => false)
rnd = Time.now.to_s(:datentime).gsub!(/[\/ \.:]/,'')
filename = "docstore/tmp_#{rnd}"
create_pdf(:htmlstring => htmlsrc, :filename => filename)
contents = open("#{RAILS_ROOT}/public/pdfs/#{filename}.pdf", "rb") { |io| io.read }
File.delete("#{RAILS_ROOT}/public/pdfs/#{filename}.pdf")
respond_to do | wants |
wants.html { render :text => contents, :content_type => 'application/pdf' }
end
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-10 10:14:06