2014-10-21 2 views
1

Я использую wicked_pdf для рендеринга PDF-файла. Веб-приложение работает в хромированном режиме с киоск-режимом (--kiosk -kiosk-printing). Проблема в том, что я должен открыть диалог печати при рендеринге PDF, чтобы PDF-файл автоматически печатался через киоск.RoR визуализировать PDF и распечатывать его автоматически

Я пробовал это с помощью Javascript-функции window.print(); в моем PDF-/HTML-шаблон. Но функция не выполняется и диалог печати не открывается.

Вот мой контроллер-метод (materials_stocks_controller.rb):

def create 
@material = Manufacturer::MaterialsStock.new(params[:manufacturer_materials_stock]) 

respond_to do |wants| 
    if @material.save 
    @materials = Manufacturer::MaterialsStock.ordered_collection 
    wants.js { render :layout => false } 
    wants.pdf { 

     render :pdf => "Material-Barcode", 
      :template => 'manufacturer/material_info', 
      :show_as_html => !params[:debug].blank?, 
      :page_height => 62, 
      :page_width => 110, 
      :margin => { 
       :top  => 3, 
       :bottom => 3, 
       :left => 0, 
       :right => 3 
      }, 
      :use_xserver => false, 
      :print_media_type => true, 
      "load-error-handling"=> "ignore" 
    } 
    else 
    raise "Unable to create material in stock" 
    end 
end 
end 

Вид (material_info.pdf.erb):

<html> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <script> 
    function printing_dialog() { 
     window.print(); 
    } 
    </script> 

</head> 
<body onload="printing_dialog()"> 

    <!-- stuff ... --> 

</body> 
</html> 

Кто-нибудь представление о том, как открыть печать -dialog?

Спасибо! :)


Update:

я полностью заменил шаблонный код страницы-номер-JS-кода от wicked_pdf-доку и JS не работает хорошо:

новый Код в material_info.pdf.erb (для тестирования):

<html> 

<head> 
    <script> 
     function number_pages() { 
      var vars={}; 
      var x=document.location.search.substring(1).split('&'); 
      for(var i in x) {var z=x[i].split('=',2);vars[z[0]] = unescape(z[1]);} 
      var x=['frompage','topage','page','webpage','section','subsection','subsubsection']; 
      for(var i in x) { 
       var y = document.getElementsByClassName(x[i]); 
       for(var j=0; j<y.length; ++j) y[j].textContent = vars[x[i]]; 
      } 
     } 
    </script> 
</head> 
<body onload="number_pages()"> 
Page <span class="page"></span> of <span class="topage"></span> 
</body> 
</html> 
+0

Другие идеи также приветствуются;) – levitas111

+0

Вы пробовали использовать его в консоли JS? (например, Chrome Dev Tools на F12) –

+0

yes и window.print(); работал на консоли – levitas111

ответ

2

Так вот мое решение:

Новый обычный HTML-файл (create.html.erb) со следующим кодом:

<html> 
<head> 

    <%= javascript_include_tag "http://code.jquery.com/jquery-1.10.0.min.js" %> 
    <%= javascript_include_tag "http://code.jquery.com/ui/1.10.3/jquery-ui.min.js" %> 

    <script> 
     $(document).ready(function() { 
      pdf = document.getElementById('pdf_source'); 
      pdf.focus(); 

      setTimeout(function(){ 
       pdf.contentWindow.print(); 
      }, 3000); 

     }); 
    </script> 

</head> 
<body> 


<% url = "#{request.protocol}#{request.host_with_port}/admin/printing_manufacturer_materials_stock?file=#{@file_name}" %> 
<iframe id ="pdf_source" src="<%=url %>" style="width:700px;height:500px;"></iframe> 


</body> 
</html> 

В контроллере я создал PDF и сохранили его. Метод печати отправляет сохраненный файл (send_file) в зависимости от файла param:.

0

window.print(); будет работать

Но браузер должен поддерживать pdf-файлы.

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

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