2013-10-08 2 views
0

У меня есть загружаемый файл (только для внутреннего использования), который загрузит 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.

ответ

0

Solved-

Как оказалось, было больше, чем одна проблема под рукой.

1- Установка wkhtmltopdf для Ubuntu через $apt-get install не совсем сделать трюк для того, что я хотел ...

см http://rubykitchen.in/blog/2013/03/17/pdf-generation-with-rails

(там, возможно, также были проблемы с наличием ранее не запускать sudo apt-get install openssl build-essential xorg libssl-dev libxrender-dev , как когда я это сделал, он установил ряд компонентов, которых я раньше не имел.)

2- Файлы HTML, которые я загрузил, содержали код стиля &, который нарушал форматирование. Я установил это с помощью этого ...

def rm_by_line(which = 0, line1 = 0, line2 = 0) 
    h_t = HtmlTranscript.find(which) 
    line_by_line = h_t.html_code.split(' 
') 
    for i in line1..line2 
    line_by_line[i] = '' 
    end 
    line_by_line = line_by_line.join(' 
').strip 

    return line_by_line 
end 

Тогда все, что мне нужно было сделать, это передать, какие строки я хотел удалить. (я должен был разделить с скобки возврата каретки, поскольку '\n' не функционирует должным образом при вызове «сырые» на возвращаемую строку.)

3- wicked_pdf_stylesheet_link_tag и wicked_pdf_image_tag были неопределенными.Мне пришлось встроить форматирование стиля, которое я хотел, в созданный мной макет (получается, что wicked_pdf_stylesheet_link_tag использовал конвейер ресурсов, в котором мои рубины/рельсы не реализовывались, что также означает, что я должен был избавиться от помощников javascript) и создал помощника для wicked_pdf_image_tag, сделав переключатель в макете, для которого будет использоваться тег изображения (image_tag или wicked_pdf_image_tag).

4- Мне нужны оба .html.erb & a .pdf.erb для моих шаблонов, поэтому я сделал оба.

5- Избавился WickedPdf.new.pdf_from_string в пользу увязывания либо HTML или PDF с помощью :format => 'html' или :format => 'pdf' в link_to тега.

 Смежные вопросы

  • Нет связанных вопросов^_^