2012-08-16 26 views
2

我想生成一個PDF也生成的圖像的PDF。 聽起來很簡單,我相信我只是搞砸了標題,但我似乎無法在這裏找到解決方案。PHP包括生成PNG pdf格式通過FFp

首先我生成一個PDF:

define('FPDF_FONTPATH','fonts/'); 
require('scpt/fpdf.php'); 

class PDF extends FPDF {} 
$pdf = new FPDF('P','in',array(8.5,11)); 
$pdf->SetAutoPageBreak(false,0); 

$pdf->SetTextColor(0,0,0); 
$pdf->SetDrawColor(0,0,0); 
$pdf->SetFont('Helvetica','',12); 

$pdf->Image('label.php?imgid=17',0,0,0,0,'PNG'); 

$pdf->Output('label.pdf','D'); 

然後我生成PNG在label.php:

if(isset($_GET["imgid"])) { 
header("Content-Type: image/png"); 
$im = @imagecreate(110, 20) 
    or die("Cannot Initialize new GD image stream"); 
$background_color = imagecolorallocate($im, 0, 0, 0); 
$text_color = imagecolorallocate($im, 233, 14, 91); 
imagestring($im, 1, 5, 5, "A Simple Text String", $text_color); 
imagepng($im); 
imagedestroy($im); 
} 

這將輸出:FPDF error: Not a PNG file:....

調用label.php imgid = 17在瀏覽器,但會告訴我圖像就好...

我想念什麼ING?

EDIT

在文獻: 例

// Insert a logo in the top-left corner at 300 dpi 
$pdf->Image('logo.png',10,10,-300); 
// Insert a dynamic image from a URL 
$pdf->Image('http://chart.googleapis.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World',60,30,90,0,'PNG'); 

所以它應該是可能包括動態生成的圖像而不先保存它?

編輯#2

我做到了與庫mem_image工作,但問題依然存在,這應該不是IMO拋出一個錯誤?所以我留下這個問題是爲了看看我的腳本確實有什麼問題,這是一個錯誤。

+0

這是一個非常細分添加擴展不相同版本的代碼,我直接從php.net網站獲取png代碼...所以我猜這不是問題所在...... – Dominik 2012-08-16 13:52:48

回答

0

Image函數的參數需要是文件,而不是URL或其他腳本。既然你已經有了你的標籤腳本,最簡單的工作就是將圖像下載到臨時位置,然後用該臨時文件調用$ pdf-> Image()。

+0

以及我試圖解決這個問題,因爲我必須編寫一個GC對於這種情況... – Dominik 2012-08-16 13:25:17

+0

正如在FPDF文檔中所述,Image函數接受一個URL作爲圖像源,以及一個本地文件的路徑。看到這裏的文檔:http://www.fpdf.org/en/doc/image.htm – 2013-01-12 23:13:23

0

此問題發生與您的文件名,請確保您的通過文件名是有效的

function _parsepngstream($f, $file) 
{ 
// Check signature 
if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) 
    $this->Error('Not a PNG file: '.$file); 

... 
} 
+0

不知道你的意思,但這是一個簡化的例子,'Image()'找到了文件(否則它會給我一個'流失敗'異常 – Dominik 2012-08-16 13:27:03

+0

我不知道我們應該通過一些GET參數,例如或不。 googleapis.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World',60,30,90,0,'PNG'); – kn3l 2012-08-16 13:31:26

+0

再次不完全確定你的意思,但你正在做一個非常重要的一點是:手冊中提到動態圖像:'//從URL中插入動態圖像 $ pdf->圖片('http://chart.googleapis.com/chart?cht=p3&chd=t:60,40&chs = 250x100&chl = Hello | World',60,30,90,0,'PNG');'所以它應該是可能的嗎? – Dominik 2012-08-16 13:35:56

1

你幾乎擁有它,你只是缺少夫婦的事情。首先,你需要在URL中的完整服務器地址爲您的圖片()調用,所以不是

$pdf->Image('label.php?imgid=17',0,0,0,0,'PNG'); 

您需要:

$pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG'); 

這將消除你遇到FPDF錯誤。然後讓FPDF正確渲染你的輸出,你需要添加對addPage()的調用,那麼您的PDF生成腳本將成爲:

require('scpt/fpdf.php'); 

$pdf = new FPDF('P','in',array(8.5,11)); 
$pdf->AddPage(); 
$pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG'); 

$pdf->Output('label.pdf','D'); 

當然你不需要SetTextColor()相同,setFont( )等,如果你只包括單個圖像。你不需要自定義類定義(我刪除了不需要的行)。

不要忘記用www.yourserver.com替代腳本的相應域和路徑。

0

你需要做的只是改變了

require('fpdf.php'); 

,並做

$pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG'); 

並運行代碼...

0

首先,試着用這個來檢查您的網址代碼

$ handle = fopen(「http://www.yourserver.com/label.php?imgid=17「,」rb「);

print_r(fread($ handle,8192));

你看到什麼包含您的網址

**)請確保您的網址不重定向到登錄頁面

-1

更加容易,只放巴紐在最後DINAMIC鏈和其所有

例如:

$pdf->Image('http://www.yourserver.com/label.php? imgid=17.png',0,0,0,0,'PNG'); 

$pdf->Image('../label.php?imgid=17.png',0,0,0,0,'PNG'); 

MIME類型沒有在網址認可,爲什麼沒有出現PNG,如果這是一個愚蠢的錯誤,但它被證明,谷歌通過與URL & PNG

+0

所以你說的URL字符串需要以'.png'結尾,以某種方式使fpdf知道尊重它的頭?對我來說聽起來很狡猾,但是當我有一些時間並回報時我會嘗試。 – Dominik 2015-04-12 22:43:04