Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php通过fpdf在pdf中包含生成的png_Php_Fpdf - Fatal编程技术网

php通过fpdf在pdf中包含生成的png

php通过fpdf在pdf中包含生成的png,php,fpdf,Php,Fpdf,我正在尝试生成一个带有图像的PDF,该图像也是由php生成的。 听起来很简单,我确信我只是把标题搞糟了,但我似乎找不到解决办法 首先,我生成一个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->

我正在尝试生成一个带有图像的PDF,该图像也是由php生成的。 听起来很简单,我确信我只是把标题搞糟了,但我似乎找不到解决办法

首先,我生成一个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');
然后在label.php中生成PNG:

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错误:不是PNG文件:…

但是,在浏览器中调用label.php?imgid=17将显示图像,效果很好

我错过了什么

编辑

在文件中: 范例

所以应该可以包含动态生成的图像而不首先保存它

编辑#2


我让它与库一起工作,但问题仍然是,这不应该抛出一个错误?!因此,我将这个问题留待讨论,看看我的脚本是否确实出了问题,这最终证明是一个bug。

图像函数的参数需要是一个文件,而不是URL或其他脚本。由于您已经有了标签脚本,最简单的解决方法是将图像下载到临时位置,然后使用该临时文件调用$pdf->image()。

此问题发生在您的文件名上,请确保传递的文件名有效

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);

...
}

查看允许url打开指令


你差一点就成功了,你只错过了几件事。首先,您需要在URL中为Image()调用提供完整的服务器地址,因此

$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');
当然,如果只包含单个图像,则不需要setxtcolor()、SetFont()等。您也不需要自定义类定义(我删除了不需要的行)


不要忘了用
www.yourserver.com
替换脚本的相应域和路径。

您只需进行更改即可

require('fpdf.php');
然后做

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

然后运行您的代码…

首先,尝试使用此代码检查您的url

$handle=fopen(“,”rb”)

印刷品(fread($handle,8192))

您可以查看url中包含的内容


**)确保您的url不会重定向到登录页面,这要简单得多,只需将.png放在dinamic链及其所有链接的最后一个

例如:

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


mime类型在url中不被识别为什么不出现png,如果这是一个愚蠢的错误,但已被证明,google也会通过添加url扩展来实现这一点&png,Image函数接受图像源的URL以及本地文件的路径。查看此处的文档:不确定您的意思,但这是一个简化的示例,
Image()
已找到该文件(否则它将给我一个
stream failed
异常。我不知道是否应该传递一些GET参数//从URL$pdf->Image(')插入一个动态图像;同样,我也不完全确定您的意思,但您提出了一个非常重要的观点:手册中谈到了动态图像:
//从URL$pdf->image()插入动态图像http://chart.googleapis.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello | World',60,30,90,0,'PNG')
所以这应该是可能的,对吧?对不起,多米尼克,我也不确定,但我只是想给你一个提示。我发现了一个有趣的链接:这是一个非常详细的代码版本,我直接从php.net网站获取png代码…所以我猜问题不在这里…所以你说URL字符串需要以
结尾。png
以某种方式让fpdf知道如何尊重它的标题?听起来很狡猾,但我会在有时间的时候尝试一下,然后再报告。
$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');