У меня есть загружаемый файл (только для внутреннего использования), который загрузит HTML-документ в двоичный столбец таблицы на моем клиентском веб-сайте. Клиент, стоящий перед сайтом, имеет индекс, который позволяет пользователю просматривать страницу как обычный веб-сайт (используя send_data h_t.html_code, :type => "html", :disposition => "inline"
). Я также хочу дать пользователю возможность загрузить PDF-страницу. Для этого я использую wicked_pdf.Wicked PDF, генерирующий PDF из таблицы базы данных - образы и проблемы стиля
Вся проблема, по-видимому, связана с тем, что данные хранятся в базе данных. Как это ни странно, для бизнес-операций очень важно, чтобы я точно форматировал. Проблема в том, что я не вижу изображения, а теги stylesheets/style не имеют никакого эффекта.
Что я tried-
Gsub-
def show
html = HtmlTranscript.find(params[:id])
html_code = html.html_code.gsub('<img src="/images/bwTranscriptLogo.gif" alt="Logo">','<%= wicked_pdf_image_tag "bwTranscriptLogo.gif" %>')
html_code = html_code.gsub('<link rel="StyleSheet" href="" type="text/css">','<%= wicked_pdf_stylesheet_link_tag "transcripts.css" %>')
transcript = WickedPdf.new.pdf_from_string(html_code)
respond_to do |format|
format.html do
send_data transcript, :type => "pdf", :disposition => "attachment"
end
##### i never could get this part figured out, so if you have a fix for this...
# format.pdf do
# render :pdf => "transcript_for_#{@html.created_at}", :template => "html_transcripts/show.html.erb", :layout => false
# end
end
end
Использование template-
#Controller (above, modified)
html = HtmlTranscript.find(params[:id])
@html_code = html.html_code.gsub('<img src="/images/bwTranscriptLogo.gif" alt="Logo">','<%= wicked_pdf_image_tag "bwTranscriptLogo.gif" %>')
@html_code = @html_code.gsub('<link rel="StyleSheet" href="" type="text/css">','<%= wicked_pdf_stylesheet_link_tag "transcripts.css" %>')
transcript = WickedPdf.new.pdf_from_string(render_to_string(:template => "html_transcripts/show.html.erb", :layout => false))
#view
<!-- tried with stylesheet & image link tags, with wicked_pdf stylesheet & image link tags, with html style & img tags, etc -->
<%= raw(@html_code) %>
И оба будут генерировать transcript-, но ни будет иметь стиль или образ.
Создание initializer-
module WickedPdfHelper
def wicked_pdf_stylesheet_link_tag(*sources)
sources.collect { |source|
"<style type='text/css'>#{Rails.application.assets.find_asset("#{source}.css")}</style>"
}.join("\n").gsub(/url\(['"](.+)['"]\)(.+)/,%[url("#{wicked_pdf_image_location("\\1")}")\\2]).html_safe
end
def wicked_pdf_image_tag(img, options={})
image_tag wicked_pdf_image_location(img), options
end
def wicked_pdf_image_location(img)
"file://#{Rails.root.join('app', 'assets', 'images', img)}"
end
def wicked_pdf_javascript_src_tag(source)
"<script type='text/javascript'>#{Rails.application.assets.find_asset("#{source}.js").body}</script>"
end
def wicked_pdf_javascript_include_tag(*sources)
sources.collect{ |source| wicked_pdf_javascript_src_tag(source) }.join("\n").html_safe
end
end
абсолютно ничего не сделал, и я понятия не имею, что попробовать следующий.
В качестве примечания, код для просмотра HTML версии стенограммы выглядит следующим образом:
def transcript_data
h_t = HtmlTranscript.find(params[:id])
send_data h_t.html_code, :type => "html", :disposition => "inline"
end
Она не требует зрений, как HTML данные хранятся в базе данных, но я получаю изображение, стиль и т. д. Все работает с версией HTML - просто не PDF.
Я на рубине 1.8.7 с рельсами 3.0.20.