2014-12-21 32 views
3

我正在嘗試設置一種將HTML文件呈現爲PDF的方式。 HTML文件是動態生成的,並且它們的頁眉和頁腳具有單獨的HTML文件,這些文件需要附加到每個頁面。當使用PhantomJS呈現爲PDF時,是否可以將外部HTML文件包含爲頁眉/頁腳?

我能否讓PhantomJS拿起這些單獨的文件並將其顯示在頁眉和頁腳部分?當我在傳遞給PhantomJS的JavaScript文件中擁有HTML文件時,我可以獲取頁眉和頁腳,就像我包含的示例代碼一樣,但我對HTML,CSS,Javascript(和Node?)不熟悉瞭解是否有明確的方式去做我想做的事。

這是我的時刻:

var page = require('webpage').create(); 

//set the page size and add headers & footers 
page.paperSize = { 
    format: 'A4', 
    margin: '.5cm', 
    header: { 
    height: "1cm", 
    contents: phantom.callback(function(pageNum, numPages) { 
    return "<h1 style='font-size:12.0; font-family:Arial,Helvetica,FreeSans,sans-serif'>Header <span style='float:right'>" + pageNum + "/" + numPages + "</span></h1>"; 
    }) 
    }, 
    footer: { 
    height: "1cm", 
    contents: phantom.callback(function(pageNum, numPages) { 
    return "<h1 style='font-size:12.0; font-family:Arial,Helvetica,FreeSans,sans-serif'>Footer <span style='float:right'>" + pageNum + "/" + numPages + "</span></h1>"; 
    }) 
    } 
} 

//open the page 
page.open('tools.html', function() { 
    page.render('woki2.pdf'); 
    phantom.exit(); 
}); 

它的工作原理,添加頁眉和頁腳,但需要內嵌樣式(我相信我可以these methods得到解決),但我寧願能選取外部HTML文件,以便a)可以使用不同的頁眉和頁腳,具體取決於要轉換的文件的類型;和b)使得HTML文件可以很容易地編輯而不用更改JS文件。

這是頭HTML文件的例子:

<!DOCTYPE html> 
<html> 

<head> 
    <script> 
    function subst() { 
     var vars = {}; 
     var x = window.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', 'date', 'time']; 
     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 style="border:0; margin: 0;" onload="subst()"> 
    <table style="width: 100%"> 
     <tr> 
      <td>Generated by *person* on <span class="date"></span> <span class="time"></span></td> 
      <td style="text-align:right"> 
       Page <span class="page"></span> of <span class="topage"></span> 
      </td> 
     </tr> 
    </table> 
</body> 

</html> 

雖然我知道我也可以達到類似的事情的是與第一例子代表那裏,我寧願有文件分開如果可能的話。

+0

使用它你的意思是外部的自定義模板文件? –

+0

@ArtjomB。我將爲該問題添加一個HTML文件的例子,因爲我可能應該將它包括在內。 – evolutionise

回答

0

有很簡單的方法,只要讀了header.html文件,將其分配給一個變量,並在標題部分

var fs = require('fs'); 
var headerContent = fs.read('header.html'); 
header: {height: "1cm",contents: headerContent} 
相關問題