Я использую 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>
Другие идеи также приветствуются;) – levitas111
Вы пробовали использовать его в консоли JS? (например, Chrome Dev Tools на F12) –
yes и window.print(); работал на консоли – levitas111