今、私は:header => {:html => {:template => "layouts/pdf_header.html.erb"}}
物事を設定しています。ドキュメントの最初のページのヘッダーのみを表示するものを渡すことができますか?
フッターに対してもこれを行うことはできますか?ここでは、フッターの長さやページ数が毎回異なる場合に、フッターをページの下部に動的に固定する方法は他に考えられないため、ここではほとんど重要です。
今、私は:header => {:html => {:template => "layouts/pdf_header.html.erb"}}
物事を設定しています。ドキュメントの最初のページのヘッダーのみを表示するものを渡すことができますか?
フッターに対してもこれを行うことはできますか?ここでは、フッターの長さやページ数が毎回異なる場合に、フッターをページの下部に動的に固定する方法は他に考えられないため、ここではほとんど重要です。
いくつかの簡単なJavaScriptでこれを処理できます。wkhtmltopdfの「フッターとヘッダー」の下に配置された定型文に従ってください
これらはそれぞれヘッダーとフッターのテンプレートです。追跡する重要な変数は、URLハッシュから利用できる「ページ」です。ヘッダーは次のようになります。
<div class="headerContent" style="display:none">
...my awesome html
<hr />
</div>
<script type="text/javascript">
var headerCheck = function() {
var x=document.location.search.substring(1).split('&');
for (var i in x) {
if(x[i] == "page=1")
document.getElementsByClassName("headerContent")[0].style.display = "block";
}
}();
</script>
同様に、フッターのコードは次のようになります。
<div class="footerContent" style="display: none">
...awesome footer html
</div>
<script type="text/javascript">
var footerCheck = function() {
var x=document.location.search.substring(1).split('&');
var currentPage = 1;
for (var i in x) {
var z=x[i].split('=',2);
if(z[0] == "page")
currentPage = unescape(z[1]);
if(z[0] == "topage" && currentPage == unescape(z[1]))
document.getElementsByClassName("footerContent")[0].style.display = "block";
}
}();
</script>
PDFをレンダリングするときにレイアウトを追加する
format.pdf do
render :pdf => "my_pdf",
:layout => 'pdf
end
views / layouts / pdf.haml
%html
%head
%body
= render "layouts/header"
= yield
= render "layouts/footer"