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