2010-04-15 76 views
5

我正在使用jQuery/FLOT繪製圖形,我希望用戶能夠下載圖形的PDF版本。我正在使用ColdFusion編寫PDF。創建圖之後,我通過ajax將圖div的html發送到使用cfdocument編寫pdf的CF腳本。問題是,在PDF中,它只顯示軸和標籤,而不是實際的圖形數據。有人知道一種方法來獲取在畫布上動態創建的實際圖像嗎?FLOT數據作爲圖像寫入PDF

+0

他們通過對下一個版本(0.8)畫布文本插件添加了該支持。您可以使用該測試版:http://www.flotcharts.org/blog/2013/03/06/announcing-flot-08-beta/執行此操作後,您需要直接訪問plot canvas元素並獲取它作爲圖像,然後將圖像上傳到服務器並將其添加到您的PDF。 – Hoffmann 2013-03-14 16:50:48

+0

您可以檢查此答案:http://stackoverflow.com/a/30811190/1953178 – 2015-06-12 20:11:13

回答

2

退房CutyCapt(http://cutycapt.sourceforge.net/),似乎與海軍報工作。

2

你也可以把你的canvas的快照使用toDataURL()和替代品在img元素,PDF轉換器應該能夠處理:

var canvas = $("canvas.base")[0]; 
var tmpimg = canvas.toDataURL("image/png"); 
//console.log(tmpimg); 
$("body").append('<img src="'+tmpimg+'"/>'); 

注意,產生的圖像是只是canvas內容(即圖形本身)並且不包括軸或圖例。您可能必須在flot佔位符中對圖像進行一些棘手的替換/對齊操作,但它會爲您提供一個可用的圖像。

這只是對this question的接受答案的輕微重新工作,我認爲這裏有人可能會發現它有用。

3

您可以使用像phantomJS(WebKit引擎)這樣的無頭瀏覽器在服務器上呈現圖表。

您只需要一個腳本獲取URL並將輸出呈現爲控制檯流的Base64編碼字符串或寫入圖像。

據我所知,這是唯一的半瀏覽器獨立的方式來做到這一點。

下面是phantomjs一個腳本,輸出給網頁的base64編碼圖像串:

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

var pageUrl = system.args[1]; 

page.viewportSize = { width: 1280, height: 720 }; 
page.open(pageUrl , function() { 
    console.log(page.renderBase64('PNG')); 
    phantom.exit(); 
}); 
+0

這是實現圖形或PDF圖形的最穩健的方式。 htmltocanvas和canvastoimage腳本非常有限。 PhantomJS呈現包含畫布的HTML,就像真正的Web瀏覽器一樣。如果您爲html-to-image/pdf設置自己的Web服務,併爲要轉換爲圖像或PDF的每個頁面創建一個特殊的打印友好頁面,此解決方案可能效果最佳。 – Ryan 2014-12-03 17:19:59