2012-08-16 23 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