サーバー上で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で表示したいということです。
どうすればPDFで画像を表示できますか?私がいつも得ているエラーは...
Image not found
http://localhost/dompdf/image.php
そして
Image not found
http://localhost/dompdf/image.jpg
私は同じ問題を抱えていました ライブサーバーにdompdf画像が見つかりません
私はその解決策を見つけました、あなたは単に画像パスを再確認する必要があります、
ライブサーバーイメージのパスを検討する
<img src="http://www.example.com/public/images/thumb.png">
変更するだけです
<img src="public/images/thumb.png">
注:すべての設定がすでに行ったものと同じであることを確認してください。
これがお役に立てば幸いです。
試す
$options = new Options();
$options->set('isRemoteEnabled', true);
$dompdf = new Dompdf($options);
注意すべき点が2つあります。
同じサーバーのイメージを使用する場合は、完全なディレクトリパスを使用します。 /var/www/html/project_folder/images/logo.jpg
リストアイテムJPEG
または他のタイプの代わりにpng
画像を使用します。
「dompdf/dompdf_config.inc」で「DOMPDF_ENABLE_REMOTE => true」も設定されているときに直面していた同じ問題が機能しませんでした。
私のために働いたことの1つは、images/cssのsrcをabsolute to relativeから変更したことです。この場合、サーバーにすべてのcss/imagesがあります。
誰かが私と同じ問題を抱えている場合に備えて:
Src = "https://"をsrc = "http://"に変更すると、画像が正常に読み込まれました。
また、<style>
経由でロードする代わりに、<link>
内にすべてのCSSインラインを追加しました
cSS <style>
が<head>
ではなく<body>
にあることを確認してください
PDFを開くために使用しているマシンのWebブラウザーでこれらのURLにアクセスできますか?そうでない場合、PDFリーダーもできません。
「localhost」ドメインは、これらのURLがPDFを生成したWebサーバーからのみ表示できることを意味していると思います。 http://example.com/dompdf/image.jpg のようなURLを出力する必要があります
(この問題を回避するには、リモート画像を使用しないことには十分な理由があることに注意してください。たとえば、ビューアがインターネットに接続されていない場合、ドキュメントは見栄えが悪くなります。画像を直接に埋め込むことは可能ですか?資料?)
dompdfには現在、ローカルドメインとリモートドメインを区別するメカニズムがないため、http:// ...で始まるURLはすべてリモートとして扱われます。さらに、PHPはWebサーバーを経由しない限り解析されないため、PHPベースの中間(pic.phpなど)を使用するイメージはローカルパスを使用できません。
それは難しい見通しですが、ページは動的に生成されます。だから私は2つのオプションを見ます:
Curlを使用して画像を取得する方法はすでにわかっているので、これらのいずれかを実装できるはずです。
これを追加できると思います
private function change_url_image($data, $url) {
$str = $url; //for example "http://localhost/yoursite/";
$str2 = str_replace($str, "", $data);
return $str2;
}
画像のURLを変更するには
$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);
私はこのコード行を使用しました
<img src="{{ url('/frontened/images/jeevan-green-logo.png') }}" >
正常に動作しています。ありがとう。
多くのR&Dを行った後、私は同じ問題を抱えていましたが、最終的に解決策を得ました。最初にdompdfのオプションを取得し、次にisRemoteEnabled
をtrueに設定する必要があります。
$options = $dompdf->getOptions();
$options->set(array('isRemoteEnabled' => true));
$dompdf->setOptions($options);
機能の例を挙げます
$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に設定してリモート画像を表示します