TCPDFを使用して、動的に生成されたpdfファイルを作成しています。私のpdfファイルでは、ユーザー入力に基づいて画像が生成されます。その画像をpdfファイルに追加します。ここに私のコードがあります
$map_image = "example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=";
$pdf->Image ($map_image, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);
「example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=」を貼り付けると私のURLは、私が望んでいたように画像を作成しますが、このURLを置くと、機能しません。 という画像のサイズを取得できません
しかし、私はこのようなものを入れた場合
$map_image = '/wp-content/themes/v3/resources/images/public/logo_side.jpg';
その画像を使用してpdfを正常に生成できます。
どうすれば解決できますか?
私は次のstackoverflowリンクを訪問しましたが、これのどれも助けになりませんでした
tcpdfはlocalhostで機能しているが、サーバーでは機能せず、エラーTCPDF ERROR:[Image] Unable to get image:
これは、 filesize()
stat()
HTTP wrapper を介したリモートイメージファイルの失敗が原因である可能性があります。 (ラッパーがサポートしていないため)。
TCPDF image()method documentation によると、@
記号を前に付けることで、画像データを直接渡すことができます。したがって、生の画像データを取得して、次のようにTCPDFに渡すことができます。
$img = file_get_contents('http://example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=');
$pdf->Image('@' . $img, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);
私はこれをテストしていないことに注意してください(TCPDFのドキュメントはまばらです)ので、正しく動作させるために少し実験する必要があるかもしれません。
編集:
これは完全に機能する例です(私のPC上)。これを使用して、画像を正常に取得し、ブラウザにPDFを出力できます。もちろん、画像の既知の有効なパスを設定する必要があります!
<?php
require './tcpdf/tcpdf.php';
$pdf = new TCPDF();
$pdf->AddPage();
$img = file_get_contents('http://path/to/your.jpg');
$pdf->Image('@' . $img);
$pdf->Output();
?>
サーバーがPHPの file_get_contents
または cURL はファイルをダウンロードします。 「イメージのサイズを取得できません」は、サーバー上のこれらの関数の両方がファイルにアクセスできない場合にTCPDFがスローするImage
関数の最初のエラーです。
この問題をデバッグするには、tcpdf.phpの6850行目で@getimagesize($ file)から@を削除します。[Image]を検索して、画像のサイズを取得できません:いくつかの行をスクロールアップします。 @は、実際のエラーメッセージを非表示にします。
ブラウザから画像のURLにアクセスできる場合、システムがURLを要求されたホストにポイントしていない可能性があります。関連するメッセージはgetimagesize():php_network_getaddresses:getaddrinfo failed:です。つまり、ローカルのphp設定には、URLを検索する場所がわからないということです。その場合、/ etc/hostsファイルを変更し、ローカルセットアップでurls ipを指定する必要があります。多くの場合、これはローカルホスト設定の問題です。
例えば。 127.0.0.1 yoururlhere.local
Magentoストアでこのエラーが発生しました。
tcpdf.php
を開くと、このコードが見つかります。$ fileは、ファイルへのパスを示す必要があるときにURLでした。
// check if is a local file
if (!@file_exists($file)) {
// try to encode spaces on filename
$tfile = str_replace(' ', '%20', $file);
簡単な修正のために、このコードを追加しました:
$file = str_replace("http://theurliwantgone/","",$tfile);
そしてそれは働いた!これがあなたのほとんどに役立つことを願っています!
相対パスを使用するようにしてください。絶対パスが機能しない場合があります
ok: "../../myImage.png"
間違っている: " http://www.example.com/myImage.png "
奇妙なことに(2019年)、! include/tcpdf_static.phpの1924行目の何らかの理由で、ini_get('allow_url_fopen')
を見るのは、それがfalseだったが、サーバー設定がtrueだった場合だけです。そのため、コードを修正し、正常に機能しました。これも以前は機能していましたが、突然停止しました!