2011-11-29 81 views
2

我有一個模板,它有一些Javascript用於在瀏覽器中生成圖形。我希望使用相同的模板創建PDF並作爲電子郵件中的附件發送。在這種情況下,將不存在瀏覽器/客戶端交互。Play Framework:從使用Javascript繪製圖形的模板生成PDF

我正在使用Play網站上提供的PDF模塊,並設法使PDF呈現工作。唯一的問題是圖表不會顯示在PDF中,但所有其他靜態文本都會顯示。我假設圖表沒有出現在PDF中,因爲在生成PDF之前沒有執行Javascript。

有沒有人有任何想法如何解決這個問題?

回答

1

由於您使用的是Play框架,最簡單的方法很可能是使用Rhino。 http://www.mozilla.org/rhino/這就是Mozilla在JVM上運行的Javascript實現,這是Play框架運行的。您可能必須對Javascript進行一些更改,例如,如果它使用瀏覽器Canvas API,則必須創建一個Facade對象,將這些繪圖命令發送到PDF繪圖對象而不是屏幕。或者如果這是你想要的,可以到兩個地方。

如果您提供有關Javascript圖形代碼的更多信息,可能會得到更詳細的答案。

+0

我們使用呈現爲SVG的hicharts庫(highcharts.com)。 – digiarnie

+0

而人們正在使用Rhino在服務器上運行highcharts http://highslide.com/forum/viewtopic.php?f=9&t=6971&start=15 –

+0

@Michael我是你提到的「人」,我們放棄了犀牛爲highCharts。我們對(0,0,0,0)SVG元素的邊界框有很多位置相關的問題,迫使我們重新實現Highcharts服務器端。我們使用wkhtmltopdf來代替 – Grooveek

0

如果您找不到更好的選擇,請考慮直接使用itext。這是pdf-plugin中使用的pdf渲染庫。您必須根據pdf生成手動重寫模板,但您將完全控制結果。

0

我不知道這是否對你有幫助,但這對我來說真的很快。

我改變了帆布與一個PNG:

var datastring = document.getElementById('myCanvas').toDataURL("image/png"); 

然後,我發送了datastring到服務器,以便播放生成PDF和我傳遞的變量爲PDF生成器

public static void reportPDF(String graphData){ 
    PDF.renderPDF(graphData); 
} 

我的pdf代碼如下所示:

<body> 
     <img width="100%" src="${graphData}"/> 
    </body>