As described on wkhtmltopdf Google group
(http://code.google.com/p/wkhtmltopdf/issues/detail?id=162), I have a
problem generating a PDF while using popen and wkhtmltopdf.
wkhtmltopdf takes HTML code as input and ouputs a PDF file. Here is what
I''m doing:
command = ''"C:\Program Files\wkhtmltopdf\wkhtmltopdf.exe"
- - -q''
IO.popen(command, ''r+'') do |f|
# Writing the html previously rendered in a string
f.write(html_output)
f.close_write
# Reading the ouput and closing
pdf = f.readlines
f.close
# Returning the pdf data
pdf
end
This code results in a corrupted PDF file. I checked the PDF itself
which shows some differences with a valid PDF file, like some missing
closing tags (endstream) - but I''m not an expert of that format.
Well, my question is the following: am I doing it wrong, using a wrong
method, missing something, or wkhtmltopdf is more likely to be the
problem?
I attached the corrupted file.
If you have a look at it, you''ll notice that a PDF EOF symbol is there,
which tends to say that the generation was not interrupted in any way.
Any idea?
Thanks for your help!
- Nicolas
Attachments:
http://www.ruby-forum.com/attachment/4453/corrupted.pdf
--
Posted via http://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Hi Nicolas,
Whenever I generate pdfs from a rails app using wkhtmltopdf (or
princexml), I usually call wkhtmltopdf using an app_url (ie
wkhtmltopdf hits the web app to get the html/css/imgs/... to be used
to gen the pdf), something like the following:
# in some controller ....
require ''timeout''
..
TIMEOUT_SECS = 5
...
def gen_pdf
url_to_pdf = .... # the url to gen the pdf from.
fname = .... # the name of the resulting pdf.
ftype = "application/pdf"
# combat shell injection?
app_url =
app_url.to_s.gsub(/["''\s`$;><&\|\(\)\\\[\]]/,
'''')
s = nil
# valid url?
unless (app_url =~ URI::regexp).nil?
begin
timeout(TIMEOUT_SECS) do
# gen pdf from url.
s = `wkhtmltopdf -q "#{app_url}" -`.chomp
end
rescue Exception => e
... # log, render/redirect err msg, ...
end
end
# invalid pdf?
if not s.to_s =~ /^%PDF/
... # log, render/redirect err msg, ....
end
send_data(s, :type=>ftype, :filename=>fname); return
end
...
Jeff
On Feb 1, 8:14 pm, Nicolas Rimbeau
<li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org>
wrote:> As described on wkhtmltopdf Google group
> (http://code.google.com/p/wkhtmltopdf/issues/detail?id=162), I have a
> problem generating a PDF while using popen and wkhtmltopdf.
>
> wkhtmltopdf takes HTML code as input and ouputs a PDF file. Here is what
> I''m doing:
>
> command = ''"C:\Program
Files\wkhtmltopdf\wkhtmltopdf.exe" - - -q''
> IO.popen(command, ''r+'') do |f|
>
> # Writing the html previously rendered in a string
> f.write(html_output)
> f.close_write
>
> # Reading the ouput and closing
> pdf = f.readlines
> f.close
>
> # Returning the pdf data
> pdf
>
> end
>
> This code results in a corrupted PDF file. I checked the PDF itself
> which shows some differences with a valid PDF file, like some missing
> closing tags (endstream) - but I''m not an expert of that format.
>
> Well, my question is the following: am I doing it wrong, using a wrong
> method, missing something, or wkhtmltopdf is more likely to be the
> problem?
>
> I attached the corrupted file.
>
> If you have a look at it, you''ll notice that a PDF EOF symbol is
there,
> which tends to say that the generation was not interrupted in any way.
>
> Any idea?
>
> Thanks for your help!
>
> - Nicolas
>
> Attachments:http://www.ruby-forum.com/attachment/4453/corrupted.pdf
>
> --
> Posted viahttp://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
(reposted due to typo... )
Hi Nicolas,
Whenever I generate pdfs from a rails app using wkhtmltopdf (or
princexml), I usually call wkhtmltopdf using an app_url (ie
wkhtmltopdf hits the web app to get the html/css/imgs/... to be used
to gen the pdf), something like the following:
# in some controller ....
require ''timeout''
..
TIMEOUT_SECS = 5
...
def gen_pdf
app_url = .... # the url to gen the pdf from.
fname = .... # the name of the resulting pdf.
ftype = "application/pdf"
# combat shell injection?
app_url =
app_url.to_s.gsub(/["''\s`$;><&\|\(\)\\\[\]]/,
'''')
s = nil
# valid url?
unless (app_url =~ URI::regexp).nil?
begin
timeout(TIMEOUT_SECS) do
# gen pdf from url.
s = `wkhtmltopdf -q "#{app_url}" -`.chomp
end
rescue Exception => e
... # log, render/redirect err msg, ...
end
end
# invalid pdf?
if not s.to_s =~ /^%PDF/
... # log, render/redirect err msg, ....
end
send_data(s, :type=>ftype, :filename=>fname); return
end
...
Jeff
On Feb 1, 8:14 pm, Nicolas Rimbeau
<li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org>
wrote:> As described on wkhtmltopdf Google group
> (http://code.google.com/p/wkhtmltopdf/issues/detail?id=162), I have a
> problem generating a PDF while using popen and wkhtmltopdf.
>
> wkhtmltopdf takes HTML code as input and ouputs a PDF file. Here is what
> I''m doing:
>
> command = ''"C:\Program
Files\wkhtmltopdf\wkhtmltopdf.exe" - - -q''
> IO.popen(command, ''r+'') do |f|
>
> # Writing the html previously rendered in a string
> f.write(html_output)
> f.close_write
>
> # Reading the ouput and closing
> pdf = f.readlines
> f.close
>
> # Returning the pdf data
> pdf
>
> end
>
> This code results in a corrupted PDF file. I checked the PDF itself
> which shows some differences with a valid PDF file, like some missing
> closing tags (endstream) - but I''m not an expert of that format.
>
> Well, my question is the following: am I doing it wrong, using a wrong
> method, missing something, or wkhtmltopdf is more likely to be the
> problem?
>
> I attached the corrupted file.
>
> If you have a look at it, you''ll notice that a PDF EOF symbol is
there,
> which tends to say that the generation was not interrupted in any way.
>
> Any idea?
>
> Thanks for your help!
>
> - Nicolas
>
> Attachments:http://www.ruby-forum.com/attachment/4453/corrupted.pdf
>
> --
> Posted viahttp://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Thanks for your answer Jeff. I''ll give it a try in my own app and see whether it''s working or not. I''ll keep you posted! Cheers, - Nicolas -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.