【问题标题】:Using dompdf with absolute links使用带有绝对链接的 dompdf
【发布时间】:2013-03-20 06:55:24
【问题描述】:

我正在使用标准 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 的文档根。

有没有办法解决这个问题?在调用new DOMPDF() 之前,我尝试将$_SERVER['DOCUMENT_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

感谢您的建议!

【问题讨论】:

  • $artpath 变量的值是多少?当您使用相对路径调用 $dompdf->load_html_file() 时,dompdf 将根路径设置为文件系统根目录,而不是网站文档根目录。
  • $artpath/Volumes/Documents/VirtualSites/jasss/16/2/1.html'. The webroot of jasss.soc.surrey.ac.uk is /Volumes/Documents/VirtualSites/jasss/`。希望对您有所帮助...谢谢。
  • 也忘了问,dompdf是什么版本的?
  • 最新的 - 几天前下载的 - 但我无法更具体,因为在我下载的代码中的任何地方都找不到它的引用!

标签: php pdf-generation dompdf


【解决方案1】:

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

  • 完整的 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.

【讨论】:

  • 谢谢。实际上,使用 URL 似乎是前进的方向,即$dompdf->load_html_file("http://jasss.soc.surrey.ac.uk/16/2/2.html");。然而,结果相当令人失望:生成的 PDF 文件在大约 7 页后不久就停止了,并且图像到处都是。其他类似页面也会发生同样的情况(例如.../16/2/1.html)如果您运行 dompdf,您可以看到通过此 URL 获得的内容(它是公开的)。我显示了$_dompdf_warnings 的内容,但这并没有发现任何错误(只是一些无效的 CSS 属性)。
  • 该文档似乎确实给 dompdf 带来了一些麻烦。我怀疑很多问题是因为 dompdf 对文档结构感到困惑。有机会我会仔细看看。
  • “有机会我会仔细看看。”你有机会吗?谢谢。
  • 我一直认为绝对文件路径有点骇人听闻。感谢您的回答。 $dompdf->set_base_path() 和相关链接(没有前导斜杠)效果很好!
猜你喜欢
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2015-08-21
  • 1970-01-01
相关资源
最近更新 更多