问题描述
我正在使用prawn
生成500页的PDF。大约需要65-70秒钟。我在每一页上都有一张图片。我通过删除图像进行了测试,但是性能时间并没有明显减少。使用wkhtmltopdf
的500页PDF大约需要4-5s。 This link显示大虾比wkhtmltopdf
快。但是在我的情况下,prawn
慢。关于如何减少使用prawn
的生成时间的任何建议?
class PdfGenerateTest < Prawn::Document
def initialize
super :page_size => 'A4',:page_layout => :landscape,:top_margin => 40,:bottom_margin => 30,:left_margin => 20,:right_margin => 10,:compress => true
# font 'app/assets/fonts/ipaexm.ttf'
font_families.update(
'IPAex Mincho' => {
normal: 'app/assets/fonts/ipaexm.ttf'
})
pages = 500
pages.times do |i|
stroke_axis
header(i,pages)
move_down 50
images
if i==0
tables1
tables2
contents
footer
else
tables2
contents
if i+1 != pages
footer
end
end
puts("----#{i}------#{Time.Now}")
end
end
def header(page,pages)
# pdf.font 'app/assets/fonts/ipaexm.ttf' # fontをパスで指定
# 日本語フォントを使用しないと日本語使えません
# pdf.font_families.update('Test' => { normal: 'app/assets/fonts/ipaexm.ttf',bold: 'app/assets/fonts/ipaexg.ttf' })
# pdf.font 'Test'
font 'IPAex Mincho'
draw_text '請 求 書',:at => [350,520],:width => 100,:height => 100,size: 30
line([350,510],[500,510]) #下辺
stroke #描画
draw_text '(1期) 2019/11/01〜2019/11/10',490],size: 10
draw_text '(2期) 2019/11/11〜2019/11/20',475],size: 10
draw_text '(3期) 2019/11/21〜2019/11/30',460],size: 10
# 請求先 会社情報
draw_text '株式会社 サナス 様',:at => [0,500],size: 17
draw_text '〒 123-4567',:at => [5,size: 14
draw_text '鹿児島県 鹿児島市.xxxxxxxxx',size: 14
draw_text 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',445],size: 14
draw_text 'TEL 088-888-9999 FAX 088-888-8888',430],size: 14
# 発行元会社情報
draw_text 'Post Code 890-1234',:at => [550,size: 13
draw_text 'Kagoshima city / Kagoshima pref.xxxxxxxxx',size: 13
draw_text 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',size: 13
draw_text 'TEL 099-999-9999 FAX 099-999-8888',size: 13
draw_text 'ABC Company Co.,ltd.',405],size: 16
# ページ、請求番号、発行日
draw_text "ページ #{page + 1} / #{pages}",540],size: 12
draw_text "請求書番号: 12345-678901234-56789",515],size: 12
draw_text "発効日: #{Time.Now}",size: 12
end
def images
image = "#{Rails.root}/app/assets/images/seal.jpg"
transparent(0.5) do
image image,:at => [700,480],:width => 100
end
end
def tables1
font 'IPAex Mincho'
move_down 100
t = make_table([ ["incoming fee","outgoing fee","keeping","others","total","tax"],["1","2","3","4","5","6"]])
t.draw
move_up 90
end
def tables2
font 'IPAex Mincho'
move_down 140
1.times do |i|
table([ ["品番","品名","諸掛","K","前期残数","数量","重量","単位","単価","小計","金額"],"6","7","8","9","10","11"],],:column_widths => [70,200,50,25,60,40,70],:row_colors => ["F0F0F0","F0FFC0","FFFFCC","FFFFCC"])
end
end
def contents
move_down 10
text 'end of this page'
end
def footer
text "footer"
start_new_page #=> Starts new page keeping current values
end
end
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)