Usando dompdf com links absolutos

Estou usando o código DOMPDF padrão para renderizar páginas web existentes (por exemplo, 1 ):

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

onde $artpath ‘é o caminho para o código HTML e $pdfpath é o nome do PDF.

No entanto, a página da Web contém links relativos (que são seguidos corretamente) e links absolutos (por exemplo, /gifs/bullet.gif ) que não foram encontrados. Provavelmente, porque o código DOMPDF está sendo executado em http://www.epress.ac.uk/src/xtra/makeapdf.php , www.epress.ac.uk sendo um domínio virtual no meu servidor, que também hospeda o domínio virtual jasss.soc.surrey.ac.uk (ou seja, ambos os domínios estão no mesmo servidor). Parece que DOMPDF está usando a raiz do documento de www.epress.ac.uk , quando deveria usar a raiz do documento jasss.surrey.ac.uk .

Existe alguma maneira de contornar isso? Eu tentei redefinir $_SERVER['DOCUMENT_ROOT'] para a raiz do documento jasss.soc.surrey.ac.uk antes de chamar o new DOMPDF() , mas isso não parece resolver o problema. Recebo erros como:

 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 

A página web é HTML válido de acordo com o www validator.w3.org

Obrigada pelo Conselho!

Você está carregando um arquivo através do sistema de arquivos. Isso significa que todas as referências a arquivos externos que não incluem uma parte de domínio no caminho são renderizadas em relação ao sistema de arquivos. Você pode fazer referência a arquivos de três maneiras:

  • URL completo (incluindo domínio), por exemplo, http://example.com/image.png . Estes são sempre lidos a partir do URL especificado.
  • Caminho absoluto, por exemplo, /file/path/image.png . Isso é lido em relação à raiz do sistema de arquivos , não a raiz do site ou o diretório inicial do usuário (no caso de hospedagem compartilhada).
  • Caminho relativo (sem barra direta), por exemplo, file/path/image.png . Isso é lido em relação ao arquivo HTML. Então, no seu caso, o arquivo seria lido em /Volumes/Documents/VirtualSites/jasss/16/2/file/path/image.png .

Chamar $dompdf->set_base_path() afeta apenas o caminho relativo.

Você terá que modificar as referências de arquivo absoluto para include o caminho para a raiz do site, por exemplo, /Volumes/Documents/VirtualSites/jasss/styles/jasssarticle.css , ou carregar o arquivo através do site, por exemplo, http://jasss.soc.surrey.ac.uk/16/2/1.html .