Php 使用带有绝对链接的dompdf

Php 使用带有绝对链接的dompdf,php,pdf-generation,dompdf,Php,Pdf Generation,Dompdf,我正在使用标准DOMPDF代码呈现现有网页(例如): 其中,$artpath”是HTML代码的路径,$pdfpath是PDF的名称 但是,该网页包含未找到的相对链接(正确跟随)和绝对链接(例如/gifs/bullet.gif)。这可能是因为DOMPDF代码正在执行,www.epress.ac.uk是我的服务器上的一个虚拟域,它也托管了虚拟域jasss.soc.surrey.ac.uk(也就是说,两个域都在相同的服务器上)。DOMPDF似乎正在使用www.epress.ac.uk的文档根,而它应该

我正在使用标准DOMPDF代码呈现现有网页(例如):

其中,
$artpath
”是HTML代码的路径,
$pdfpath
是PDF的名称

但是,该网页包含未找到的相对链接(正确跟随)和绝对链接(例如
/gifs/bullet.gif
)。这可能是因为DOMPDF代码正在执行,
www.epress.ac.uk
是我的服务器上的一个虚拟域,它也托管了虚拟域
jasss.soc.surrey.ac.uk
(也就是说,两个域都在相同的服务器上)。DOMPDF似乎正在使用
www.epress.ac.uk
的文档根,而它应该使用
jasss.surrey.ac.uk
的文档根

有办法解决这个问题吗?在调用
new DOMPDF()
之前,我已尝试将
$\u服务器['DOCUMENT\u ROOT']
重置为
jasss.soc.surrey.ac.uk
的文档根目录,但这似乎无法解决问题。我会遇到如下错误:

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


谢谢你的建议

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

  • 完整URL(包括域),例如
    http://example.com/image.png
    。它们总是从指定的URL读取
  • 绝对路径,例如
    /file/path/image.png
    。这是相对于文件系统的根而不是网站的根或用户的主目录(在共享主机的情况下)读取的
  • 相对路径(无前导斜杠),例如
    文件/path/image.png
    。这是相对于HTML文件读取的。因此,在您的情况下,文件将从
    /Volumes/Documents/VirtualSites/jass/16/2/file/path/image.png
    读取
调用
$dompdf->set_base_path()
只会影响相对路径


您必须修改绝对文件引用以包含网站根目录的路径,例如
/Volumes/Documents/VirtualSites/jasss/styles/jassarticle.css
,或者通过网站加载文件,例如
http://jasss.soc.surrey.ac.uk/16/2/1.html

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

  • 完整URL(包括域),例如
    http://example.com/image.png
    。它们总是从指定的URL读取
  • 绝对路径,例如
    /file/path/image.png
    。这是相对于文件系统的根而不是网站的根或用户的主目录(在共享主机的情况下)读取的
  • 相对路径(无前导斜杠),例如
    文件/path/image.png
    。这是相对于HTML文件读取的。因此,在您的情况下,文件将从
    /Volumes/Documents/VirtualSites/jass/16/2/file/path/image.png
    读取
调用
$dompdf->set_base_path()
只会影响相对路径


您必须修改绝对文件引用以包含网站根目录的路径,例如
/Volumes/Documents/VirtualSites/jasss/styles/jassarticle.css
,或者通过网站加载文件,例如
http://jasss.soc.surrey.ac.uk/16/2/1.html

变量
$artpath
的值是多少?当您使用相对路径调用
$dompd->load_html_file()
时,dompd将根路径设置为文件系统根,而不是网站文档根。
$artpath
/Volumes/Documents/VirtualSites/jass/16/2/1.html'。jasss.soc.surrey.ac.uk的webroot是
/Volumes/Documents/VirtualSites/jasss/`。希望这有助于。。。谢谢。还忘了问,dompdf的最新版本是什么?几天前下载的-但我不能更具体,因为我在下载的代码中找不到它的引用!
$artpath
变量的值是多少?当您使用相对路径调用
$dompd->load_html_file()
时,dompd将根路径设置为文件系统根,而不是网站文档根。
$artpath
/Volumes/Documents/VirtualSites/jass/16/2/1.html'。jasss.soc.surrey.ac.uk的webroot是
/Volumes/Documents/VirtualSites/jasss/`。希望这有助于。。。谢谢。还忘了问,dompdf的最新版本是什么?几天前下载的-但我不能更具体,因为我在下载的代码中找不到它的引用!谢谢你。事实上,使用URL似乎是前进的方向,即
$dompdf->load_html_file(“http://jasss.soc.surrey.ac.uk/16/2/2.html");。然而,结果却相当令人失望:生成的PDF文件在大约7页之后就停止了,图像到处都是。其他类似页面(例如,
../16/2/1.html
)也会出现同样的情况。如果您运行了dompdf,您可以看到此URL得到了什么(它是公开的)。我显示了
$\u dompdf\u warnings
的内容,但这并没有显示出任何错误(只是几个无效的CSS属性)。该文档似乎给dompdf带来了一些麻烦。我怀疑很多问题是因为dompdf对文档结构感到困惑。有机会的时候我会仔细看看。“有机会的时候我会仔细看看。”你有机会吗?谢谢。我一直认为绝对文件路径有点粗糙。谢谢你的回答<代码>$dompdf->set_base_path()
和相关链接(无前导斜杠)非常有效!谢谢你。事实上,使用URL似乎是前进的方向,即
$dompdf->load_html_file(“http://jasss.soc.surrey.ac.uk/16/2/2.html");。然而,结果是令人失望的
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