1

標準の DOMPDF コードを使用して既存の Web ページをレンダリングしています (例: 1 ):

$dompdf = new DOMPDF();
$dompdf->set_base_path($artpath);
$dompdf->load_html_file($artpath);
$dompdf->render();
$dompdf->stream($pdfpath);

ここで、$artpath' は HTML コードへのパス$pdfpathであり、PDF の名前です。

ただし、Web ページには、相対リンク (正しくたどられている) と絶対リンク (例: /gifs/bullet.gif) の両方が含まれており、それらは見つかりません。これはおそらく、DOMPDF コードがhttp://www.epress.ac.uk/src/xtra/makeapdf.phpで実行されwww.epress.ac.uk、仮想ドメインもホストするサーバー上の仮想ドメインであるためjasss.soc.surrey.ac.ukです (つまり、両方のドメインは同じサーバー上にあります)。www.epress.ac.ukのドキュメント ルートを使用する必要がある場合、DOMPDF は のドキュメント ルートを使用しているように見えjasss.surrey.ac.ukます。

これを回避する方法はありますか?を呼び出す前に$_SERVER['DOCUMENT_ROOT']のドキュメント ルートにリセットしようとしましたが、これでは問題が解決しないようです。次のようなエラーが表示されます。jasss.soc.surrey.ac.uknew DOMPDF()

file_get_contents(/styles/jasssarticle.css) [function.file-get-contents]: failed to open stream: No such file or directory

Unable to load css file /styles/jasssarticle.css

Web ページは、www validator.w3.org に従って有効な HTML です。

アドバイスありがとうございます!

4

1 に答える 1

4

ファイルシステム経由でファイルをロードしています。つまり、パスにドメイン部分を含まない外部ファイルへのすべての参照は、ファイル システムに対して相対的にレンダリングされます。ファイルを参照するには、次の 3 つの方法があります。

  • 完全な URL (ドメインを含む) http://example.com/image.png。これらは常に指定された URL から読み取られます。
  • 絶対パス/file/path/image.png。これは、Web サイトのルートやユーザーのホーム ディレクトリ (共有ホスティングの場合) ではなく、ファイル システムのルートに対して相対的に読み取られます。
  • 相対パス (先頭のスラッシュなし) file/path/image.png。これは、HTML ファイルに対して相対的に読み取られます。したがって、あなたの場合、ファイルはから読み取られ/Volumes/Documents/VirtualSites/jasss/16/2/file/path/image.pngます。

呼び出し$dompdf->set_base_path()は相対パスにのみ影響します。

絶対ファイル参照を変更して、ウェブサイトのルートへのパスを含める/Volumes/Documents/VirtualSites/jasss/styles/jasssarticle.cssか、ウェブサイト経由でファイルをロードする必要がありますhttp://jasss.soc.surrey.ac.uk/16/2/1.html

于 2013-03-31T01:39:44.543 に答える