web-dev-qa-db-ja.com

DompdfリモートイメージがPDFで表示されない

サーバー上でdompdfを介して生成されたpdfが画像を表示しませんでした。それらはリモートurl画像であるため(ローカル画像は正常に機能しています)、リモート画像をレンダリングするにはいくつかの設定が必要であることがわかりました。

allow_url_fopen = true => i can not as server control is not in my hand.(and no one will suggest to do this due to security reasons)
read/write access to the DOMPDF_TEMP_DIR (already have this)
DOMPDF_ENABLE_REMOTE = true (already have this)

したがって、allow_url_fopenの問題を確実にするために、ローカルホストでfalseを設定します。これにより、サーバーと同じ出力が得られます。

だから、今問題はリモート画像をPDF with allow_url_fopen = falseで表示したいということです。

  • 私はこれを行うためにほぼ5〜10のユニークな方法を試しました。
  • (ヘッダーの設定を介して)phpファイルで画像を表示してから、pdfでphpリンクを表示しようとしました
  • 私もphpへの絶対パスを介して画像を表示しようとしましたが、何も機能しませんでした。
  • 関数でcurlを介して画像を取得し、それをphpファイルに表示して試してみましたが、うまくいきませんでした。

どうすればPDFで画像を表示できますか?私がいつも得ているエラーは...

Image not found
http://localhost/dompdf/image.php

そして

Image not found
http://localhost/dompdf/image.jpg
14
TechCare99

私は同じ問題を抱えていました ライブサーバーにdompdf画像が見つかりません

私はその解決策を見つけました、あなたは単に画像パスを再確認する必要があります、

ライブサーバーイメージのパスを検討する

<img src="http://www.example.com/public/images/thumb.png">

変更するだけです

<img src="public/images/thumb.png">

注:すべての設定がすでに行ったものと同じであることを確認してください。

これがお役に立てば幸いです。

27
Irfan Ahmed

試す

$options = new Options();
$options->set('isRemoteEnabled', true);
$dompdf = new Dompdf($options);
24
theTypan

注意すべき点が2つあります。

  1. 同じサーバーのイメージを使用する場合は、完全なディレクトリパスを使用します。 /var/www/html/project_folder/images/logo.jpg

  2. リストアイテムJPEGまたは他のタイプの代わりにpng画像を使用します。

6
daudichya

「dompdf/dompdf_config.inc」で「DOMPDF_ENABLE_REMOTE => true」も設定されているときに直面していた同じ問題が機能しませんでした。

私のために働いたことの1つは、images/cssのsrcabsolute to relativeから変更したことです。この場合、サーバーにすべてのcss/imagesがあります。

0
Mohammad Zeshan

誰かが私と同じ問題を抱えている場合に備えて:

  • Src = "https://"をsrc = "http://"に変更すると、画像が正常に読み込まれました。

  • また、<style>経由でロードする代わりに、<link>内にすべてのCSSインラインを追加しました

  • cSS <style><head>ではなく<body>にあることを確認してください

0
vendo

PDFを開くために使用しているマシンのWebブラウザーでこれらのURLにアクセスできますか?そうでない場合、PDFリーダーもできません。

「localhost」ドメインは、これらのURLがPDFを生成したWebサーバーからのみ表示できることを意味していると思います。 http://example.com/dompdf/image.jpg のようなURLを出力する必要があります

(この問題を回避するには、リモート画像を使用しないことには十分な理由があることに注意してください。たとえば、ビューアがインターネットに接続されていない場合、ドキュメントは見栄えが悪くなります。画像を直接に埋め込むことは可能ですか?資料?)

0
Stephen Schwink

dompdfには現在、ローカルドメインとリモートドメインを区別するメカニズムがないため、http:// ...で始まるURLはすべてリモートとして扱われます。さらに、PHPはWebサーバーを経由しない限り解析されないため、PHPベースの中間(pic.phpなど)を使用するイメージはローカルパスを使用できません。

それは難しい見通しですが、ページは動的に生成されます。だから私は2つのオプションを見ます:

  1. リモートイメージをダウンロードし、ローカルファイルシステムでそれらにリンクする
  2. リモート画像のダウンロードとデータURIの使用。

Curlを使用して画像を取得する方法はすでにわかっているので、これらのいずれかを実装できるはずです。

0
BrianS

これを追加できると思います

private function change_url_image($data, $url) {    
    $str = $url; //for example "http://localhost/yoursite/";
    $str2 = str_replace($str, "", $data);
    return $str2;
}

画像のURLを変更するには

0
user2649610
$data = {{any html content with src & href links}}

無効なssl証明書を持つhttpsのような安全でないURLに基​​づいて発生する場合があります。そのため、dompdfのレンダラーには、コンテンツを取得するためのURLにアクセスできません。安全でないURLがコンテンツに含まれていないことを確認してください。ブラウザでprocess as unsafeオプションを使用してそのURLを使用している場合は、次の方法を使用してください。 URLをabspathに置き換えます

$url = "https://example.com";
$abspath="/home/public_html/example" || getcwd();
$data =  preg_replace('#(src=\"[\s\r\n]{0,})('.$url.')#','$1'.$abspath, $data);
$data =  preg_replace('#(href=\"[\s\r\n]{0,})('.$url.')#','$1'.$abspath, $data);
0

私はこのコード行を使用しました

<img src="{{ url('/frontened/images/jeevan-green-logo.png') }}" >

正常に動作しています。ありがとう。

0

多くのR&Dを行った後、私は同じ問題を抱えていましたが、最終的に解決策を得ました。最初にdompdfのオプションを取得し、次にisRemoteEnabledをtrueに設定する必要があります。

    $options = $dompdf->getOptions(); 
    $options->set(array('isRemoteEnabled' => true));
    $dompdf->setOptions($options);
0
Soubhagya Kumar

機能の例を挙げます

  $html = $this->output->get_output();
        $this->load->library('pdf');
        $this->dompdf->loadHtml($html);
        $this->dompdf->set_option('isRemoteEnabled', true);
        $this->dompdf->setPaper('A4', 'portrait');
        $this->dompdf->render();
        $this->dompdf->stream("studentidcard.pdf", array("Attachment"=>0));

Isremoteenabledをtrueに設定してリモート画像を表示します

0