2015-08-24 5 views
0

Мне потребовалось 12 часов, но никаких улучшений. Я пытаюсь отображать разные изображения с моего компьютера, хранящиеся на сервере, и результат был успешным. однако при отображении графического графика отчетов он не читает каждый раз, когда система пытается преобразовать в pdf. Он дает пустой pdf-файл. С другой стороны, я могу просмотреть созданный нами пирог, используя echo ''; в отчетах.php. Я использовал ту же концепцию в файле dompdf, но не работал.как положить jpgraph в PDF с помощью dompdf-0.5.1

DOMPDF

<html> 
<head> 
<title></title> 
</head> 
<body> 
<?php echo'<img src="reports-display.php"/>';?> 
</body> 
</html> 
<?php 
$html = ob_get_clean(); 
$dompdf = new DOMPDF(); 
$dompdf->load_html($html); 
$dompdf->render(); 
$dompdf->stream("sample.pdf"); 
?> 

JpGraph Drawing

<?php 
require('dbcon.php'); 
require_once('jpgraph/src/jpgraph.php'); 
require_once ('jpgraph/src/jpgraph_pie.php'); 
require_once ('jpgraph/src/jpgraph_pie3d.php'); 


//LEGEND 
//YELLOW=LIVE BLUE=WAITING GREEN=DONE 


//sql query for live 
$live = mysql_query("Select count(*) as count1 from tbl_display_ads where status LIKE '%Live%'") or die(mysql_error()); 


//sql query for waiting 
$waiting = mysql_query("Select count(*) as count2 from tbl_display_ads where status LIKE '%Waiting%'") or die(mysql_error()); 


//sql query for done/posted advertisement 
$done = mysql_query("Select count(*) as count3 from tbl_display_ads where status LIKE '%Done%'") or die(mysql_error()); 

//While loop for live 
while($resultlive = mysql_fetch_array($live)) 
{ 
    $totallive = $resultlive['count1']; 
} 

//While loop for waiting 
while($resultwaiting = mysql_fetch_array($waiting)) 
{ 
    $totalwaiting = $resultwaiting['count2']; 
} 

//While loop for done 
while($resultdone = mysql_fetch_array($done)) 
{ 
    $totaldone = $resultdone['count3']; 
} 

// Some data 
$data = array($totallive,$totalwaiting,$totaldone); 

// Create the Pie Graph. 

$graph = new PieGraph(500,450); 

$theme_class= new VividTheme; 
$graph->SetTheme($theme_class); 

// Set A title for the plot 
$graph->title->Set("Figure 1.1: Totality of Display Advertisement"); 

// Create 
$p1 = new PiePlot3D($data); 
$p1->SetCenter(0.5,0.55); 

$p1->SetLegends(array("Live","Waiting","Done")); 
$graph->legend->SetPos(0.5,0.100,'center','bottom'); 
$graph->Add($p1); 
$p1->ShowBorder(); 
$p1->SetColor('black'); 
$p1->ExplodeSlice(1); 
$graph->Stroke(); 

// Get the handler to prevent the library from sending the 
// image to the browser 
$gdImgHandler = $graph->Stroke(_IMG_HANDLER); 

// Stroke image to a file and browser 

// Default is PNG so use ".png" as suffix 
$fileName = "/tmp/imagefile.png"; 
$graph->img->Stream($fileName); 

// Send it back to browser 
$graph->img->Headers(); 
$graph->img->Stream(); 


?> 

ответ

0

я наконец узнал решение. в report-display.php Я устанавливаю расширение имени графика на .png и сохраняю в папку каталога для отчетов.

DEFINE("DEFAULT_GFORMAT","auto"); 
$graph->img->SetImgFormat("png"); 
if(file_exists("Reports/reports-display.png")) unlink("Reports/reports-display.png"); 
$graph->Stroke("Reports/reports-display.png"); 
0

Проблема заключается в том, что вы, по сути просят DOMPDF, чтобы захватить файл изображения под названием «Отчеты-display.php» из локальной файловой системы. Когда вы используете $dompdf->load_html(), dompdf не имеет понятия, откуда приходит контент. Любые ссылки на ресурсы в HTML, которые не имеют полного URL-адреса, втягиваются через локальную файловую систему. Поскольку dompdf не анализирует PHP, источник будет считан, что явно не является допустимым документом изображения.

Вы нашли правильное решение в saving the file locally. Существуют две другие возможности:

1) Укажите на сценарий jpgraph через ваш веб-сервер.

<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <img src="http://example.com/reports-display.php"/> 
</body> 
</html> 

2) Захват выход JpGraph и вставить в документ в качестве data-uri.

<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <img src="data:image/png;base64,<?php echo base64_encode(include_once('reports-display.php');?>"/> 
</body> 
</html> 

С помощью этого метода reports-deplay.php необходимо будет обновить, чтобы вернуть изображение, а не передавать его. Что-то вроде:

$graph = new PieGraph(500,450); 

// snip steps that generate the content 

return $graph->Stroke();