使用带有绝对链接的dompdf

时间:2013-03-29 14:41:33

标签: php pdf-generation 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

根据www validator.w3.org

,网页是有效的HTML

感谢您的建议!

1 个答案:

答案 0 :(得分:4)

您正在通过文件系统加载文件。这意味着对路径中不包含域部分的外部文件的所有引用都是相对于文件系统呈现的。您可以通过三种方式引用文件:

  • 完整网址(包括域名),例如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