2

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をスローしてはならないという問題が残っていますか?! したがって、この質問を開いたままにして、これがバグであることが判明したスクリプトに実際に何か問題があるかどうかを確認します。

4

7 に答える 7

1

allow_url_fopen ディレクティブを表示

http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

于 2012-08-16T13:22:42.900 に答える
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スクリプトの適切なドメインとパスを置き換えることを忘れないでください。

于 2013-01-12T23:32:08.640 に答える
0

Image関数の引数は、URLや別のスクリプトではなく、ファイルである必要があります。すでにラベルスクリプトを持っているので、最も簡単な回避策は、一時的な場所に画像をダウンロードしてから、その一時ファイルで$ pdf-> Image()を呼び出すことです。

于 2012-08-16T13:18:06.527 に答える
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);

...
}
于 2012-08-16T13:22:30.657 に答える
0

次の変更のみを行う必要があります。

require('fpdf.php');

そして、

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

そしてあなたのコードを実行してください...

于 2013-03-26T06:50:08.837 に答える
0

まず、このコードであなたのURLをチェックしてみてください

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

print_r(fread($ハンドル, 8192));

あなたのURLに何が含まれているかがわかります

**) URL がログイン ページにリダイレクトされていないことを確認してください

于 2013-05-21T07:23:40.033 に答える
-1

はるかに簡単です.pngをダイナミックチェーンの最後に入れるだけです

例:

$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 タイプが URL で認識されない なぜ png が表示されないのか、それが愚かな間違いであるが証明されている場合、Google は URL と PNG に拡張子を追加することで同じことを行います

于 2015-04-12T08:42:37.140 に答える