2013-08-18 77 views
6

有很多話題都沒有解決我的問題。我想要做的事情很簡單 - 生成一個條形圖,然後將此圖形嵌入到一個pdf文件中,我將使用名爲TCPDF的庫生成該文件。使用TCPDF生成PDF文件中的圖形

我沒有問題使用TCPDF生成HTML內容,但是當涉及到生成圖並將其包含在pdf文件中時,我遇到了各種問題。

生成圖表

我創建使用一種稱爲svggraph庫中的圖形。生成圖形非常簡單,唯一的問題是通過包含主類文件發送頭文件。發送標題時,TCPDF無法生成PDF文檔。

我現在的設置:

generatereport.php - TCPDF產生這個 頁graph.php PDF文檔 - SVGGraph生成此頁面上的條形圖

我已經試過:

  • file_get_contents('graph.php') from generatereport.php - 當我使用內置的writeHTML功能時,pdf報告中沒有內容輸出,TCPDF提供
  • require_once('graph.php') - 標題已發送錯誤
  • echo file_get_contents('graph.php') - 標題已經發送,但這是預期的。好消息是圖表正確顯示。

目標(我想什麼發生) TCPDF有一個內置的是用於此確切目的ImageSVG功能。第一個參數可以是一個XML字符串的SVG數據;這裏的問題是,我無法弄清楚如何從graph.php頁面返回XML數據(我已經閱讀了我能找到的每個文檔頁面)。

有沒有人有任何使用這兩個庫的經驗?

謝謝!

編輯:一些代碼

Graph.php:

<?php 
require_once 'svggraph/SVGGraph.php'; 
$graph = new SVGGraph(500, 400); 
$graph->Values(1, 4, 8, 9, 16, 25, 27); 
$graph->Render('LineGraph', true, true) 
?> 

generatereport.php

$html = file_get_contents('http://localhost:8080/vu/graph.php'); 

if(!empty($file)){ 
//$pdf->Write(0, $html, '', 0, 'L', true, 0, false, false, 0); 
//$pdf->writeHTML($html, true, false, true, false, ''); 
$pdf->ImageSVG('@' . $html, $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false); 
} 

@符號告訴XML數據被髮送給它的功能,而不是SVG文件。

+0

我不是將其作爲一個答案,因爲我還沒有嘗試過。 http://www.goat1000.com/svggraph-using.php第4節討論Render()調用的兩個選項來抑制某些返回值。更重要的是,有一個$ Fetch函數可以生成圖形,而不會將它發送給瀏覽器。這可能允許您保存SVG文件並讀取ImageSVG命令。另外http://www.tcpdf.org/doc/code/classTCPDF.html#a56536508fb1b5aede7d2ed27f56c2353表明@選項需要實際的SVG數據字符串。 – VSOverFlow

回答

4

使用fetch - 見下面

<?php 
require_once 'svggraph/SVGGraph.php'; 
$graph = new SVGGraph(500, 400); 
$graph->Values(1, 4, 8, 9, 16, 25, 27); 
$output = $graph->fetch('LineGraph'); 
?> 

,然後將其輸送到TCPDF(由於fetch不帶選項生成的XML聲明和文檔類型) 這應該生成格式的$output

<svg style="overflow: hidden; position: relative;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1226" version="1.1" height="826"><image transform="matrix(1.0364,-0.3305,0.3305,1.0364,-41.846,108.0143)" preserveAspectRatio="none" x="10" y="10" width="205" height="154" xlink:href="wallpaper.jpg" opacity="1" stroke-width="1"></image><rect transform="matrix(1.0364,-0.3305,0.3305,1.0364,-41.846,108.0143)" x="165" y="114" width="50" height="50" r="0" rx="0" ry="0" fill="#C0C0C0" stroke="#000" opacity="0" stroke-width="1"></rect><image transform="matrix(1.1575,0.2385,-0.2385,1.1575,-442.1395,-145.4163)" preserveAspectRatio="none" x="500" y="10" width="205" height="154" xlink:href="wallpaper.jpg" opacity="1" stroke-width="1"></image><rect transform="matrix(1.1575,0.2385,-0.2385,1.1575,-442.1395,-145.4163)" x="655" y="114" width="50" height="50" r="0" rx="0" ry="0" fill="#C0C0C0" stroke="#000" opacity="0" stroke-width="1"></rect></svg> 

像這樣餵它

$pdf->ImageSVG('@' . $output, $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false); 

符合$ VSOverFlow中的上述註釋。

當然,你也可以輸出保存到一個文件,然後提供文件路徑,像這樣

$pdf->ImageSVG($file='images/file.svg', $x=15, $y=30, $w='', $h='', $link='', $align='', $palign='', $border=0, $fitonpage=false); 
+0

然而,接受這個答案在技術上並不正確。將編輯答案只是一個接觸,使未來的觀衆很好。 –

+0

糟糕對不起一些快速打字和忽略錯誤。感謝編輯。 – Slartibartfast

+0

獲取方法不包括圖表圖例。有沒有辦法來解決這個問題?我很確定我給SvgGraph btw的傳奇選項。 – Soroush