我正在尝试使用也由php生成的图像生成PDF。 听起来很简单,我确信我只是搞砸了标题,但我似乎无法在这里找到解决方案。
首先我生成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 error: Not a PNG file:....
在浏览器中调用label.php?imgid = 17但是会向我展示图片就好......
我错过了什么?
修改
在文件中: 实施例
// 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 :(得分:1)
查看allow_url_fopen指令
http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen
答案 1 :(得分:1)
你几乎拥有它,你只缺少几件事。首先,您需要在Image()调用的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
替换脚本的相应域和路径。
答案 2 :(得分:0)
Image函数的参数需要是文件,而不是URL或其他脚本。由于您已经有了标签脚本,因此最简单的方法是将图像下载到临时位置,然后使用该临时文件调用$ pdf-> Image()。
答案 3 :(得分: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);
...
}
答案 4 :(得分:0)
您只需要进行更改
require('fpdf.php');
并执行
$pdf->Image('http://www.yourserver.com/label.php?imgid=17',0,0,0,0,'PNG');
并运行您的代码......
答案 5 :(得分:0)
首先,尝试使用此代码检查您的网址
$ handle = fopen(“http://www.yourserver.com/label.php?imgid=17”,“rb”);
print_r(fread($ handle,8192));
你看看你网址中包含的内容
**)确保您的网址没有重定向到登录页面
答案 6 :(得分:-1)
更容易,只有把.png放在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,如果这是一个愚蠢的错误,但事实证明,google通过添加url&扩展名来做同样的事情。 PNG