Использование dompdf с абсолютными ссылками

Я использую стандартный код DOMPDF для рендеринга существующих веб-страниц (например, 1 ):

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

где $artpath '- это путь к HTML-коду, а $pdfpath – это имя PDF.

Однако веб-страница содержит как относительные ссылки (которые правильно соблюдаются), так и абсолютные ссылки (например, /gifs/bullet.gif ), которые не найдены. Вероятно, это потому, что код DOMPDF выполняется на http://www.epress.ac.uk/src/xtra/makeapdf.php , www.epress.ac.uk являясь виртуальным доменом на моем сервере, который также содержит виртуальный домен jasss.soc.surrey.ac.uk (т. е. оба домена находятся на одном сервере). Казалось бы, DOMPDF использует корень документа www.epress.ac.uk , когда он должен использовать корень документа jasss.surrey.ac.uk .

Есть ли способ обойти это? Я попытался сбросить $_SERVER['DOCUMENT_ROOT'] в корень документа jasss.soc.surrey.ac.uk перед вызовом new 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 

Веб-страница действительна HTML в соответствии с www validator.w3.org

Спасибо за ваш совет!

Вы загружаете файл через файловую систему. Это означает, что все ссылки на внешние файлы, которые не включают часть домена в пути, отображаются относительно файловой системы. Вы можете ссылаться на файлы тремя способами:

  • Полный URL (включая домен), например http://example.com/image.png . Они всегда считываются из указанного URL.
  • Абсолютный путь, например /file/path/image.png . Это читается относительно корня файловой системы , а не корня веб-сайта или домашнего каталога пользователя (в случае совместного использования).
  • Относительный путь (без косой черты), например 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 .