TCPDF 错误:[图像] 无法获取图像

Posted

技术标签:

【中文标题】TCPDF 错误:[图像] 无法获取图像【英文标题】:TCPDF ERROR: [Image] Unable to get image 【发布时间】:2011-12-01 16:57:42 【问题描述】:

我正在使用 TCPD 和 Drupal 的 print 模块来生成文章的 PDF,当我单击链接生成 PDF 时出现以下错误消息:

TCPDF ERROR: [Image] Unable to get image: http://localhost/pathToDrupal/themes/bartik/logo.png

图像存在于指定的位置。 我试过申请:

allow_url_fopen = On;
allow_url_include = On;

php.ini 中,但这无法解决问题。

请帮忙:(

【问题讨论】:

【参考方案1】:

显然 TCPDF 不使用“fopen”包装器。

如果您提供图像的 URL,TCPDF 会尝试使用 cURL 将其下载到存储您的 TCPDF 安装的“缓存”目录中(您必须检查 K_PATH_CACHE-constant 包含的内容以确定) .

所以我猜你必须在这个魔法工作的目录中拥有写权限。您还需要启用 cURL。

【讨论】:

感谢@vstm 的回答。我现在有另一个问题:TCPDF 打印不正确。我正在尝试用Unicodecomplex-script(孟加拉语)打印一些东西.. 你能猜出什么问题吗?我已经成功地使用 TCPDF 安装了一个 unicode .ttf 字体并使用 SetFont() 设置它 它对我有用,在 debian 服务器中安装 CURL 后:apt-get install php5-curl && /etc/init.d/apache2 restart 我也遇到了这个问题,但这是因为文件夹受密码保护,curl无法直接访问文件夹。移除了保护并且它起作用了。 png 透明度 + 受保护的文件夹。为什么它将 CURL 用于本地图像,这超出了我的理解......【参考方案2】:

在我们的 linux“example.com”服务器中处理连接的方式存在问题。所以这导致我们在服务器上尝试:

curl -v http://www.example.com/image.jpg

每当 TCPDF 尝试使用 curl 下载图像时,都找不到该图像,但是,我们可以直接在浏览器中打开它来查看图像(例如http://www.example.com/image.jpg)。

我们通过将 example.com VirtualHost 设置为接受 127.0.0.1 连接并将“127.0.0.1 example.com”行添加到 /etc/hosts 来解决问题。

【讨论】:

这为我们工作了好几年。最近的服务器更新意味着我们也必须使用 curl 添加我们的实际 url 和站点域:123.456.789.123 example.com - 不确定是哪个更新导致了这个,但我很感激它现在又能正常工作了。【参考方案3】:

只需在 PDF html 中将图像路径用作“images/your_image.png”而不是“http://yourdomain.com/images/your_image.png”。

【讨论】:

【参考方案4】:

我发现当 src 是绝对链接时,TCPDF 会抛出 Unable to get Image: 错误。只需更改为相对链接即可成功创建 PDF。

【讨论】:

在此说明中,我的不适用于 https://,并且因为我使用了一些繁重的 mod_rewriting 我无法使用相对 URL。所以使用// 协议有效。对于任何使用 CakePHP 的人遇到此问题并使用 BASE_URL 常量,您可以改用它:str_replace(array('http:', 'https:'), '', BASE_URL)【参考方案5】:

我在站点的 docroot 受 .htaccess 文件保护的登台服务器上遇到了这个问题(以防止搜索引擎索引和其他混淆)

tcpdf 使用 curl 来获取图像,如果它无法访问该文件,则会出现此错误。

为了解决这个问题,我在 .htaccess 中添加了一条规则以允许来自网络服务器的请求

Allow from 123.45.6.7.8

【讨论】:

【参考方案6】:

尝试通过当前工作目录添加路径。

$img = getcwd().'/web/bundles/_bundlename_/img/logo.png';

【讨论】:

【参考方案7】:
$pdf->Image($base_url.'/'.$node->field_loc_images[0]['filepath'] ,30, 40, 75, 113, 'JPG', '', '', true, 300, '');

【讨论】:

用代码回答时,最好在解决问题的代码旁边至少提供一点解释,以便 OP(和其他访问者)能够更好地理解为什么这会起作用。【参考方案8】:

在你的字体unicode问题中你需要把这个语法代码:

// set font
$fontname = $pdf->addTTFfont('../your path here/sampletruetype.ttf', 'TrueTypeUnicode', '', 32);

$pdf->SetFont($fontname, '', <font size value here>);

在添加页面之前放置...

【讨论】:

【参考方案9】:

在 drupal 中,一定要在你的函数中包含 tcpdf 库,而不是在你的模块文件的顶部,否则你会得到这个错误。

【讨论】:

【参考方案10】:

也试试这个

foreach($node->field_loc_images as $key=> $s)

    $pdf->Image($base_url.'/'.$s['filepath'], $x, $y, $w, $h, 'JPG', '', '', false, 300, '', false, false, 0, $fitbox, false, false);

【讨论】:

注意评论您的代码,为什么您认为这会起作用?该问题已经有一个已被接受的答案,您的答案对问题有何补充?【参考方案11】:

扩展错误。 base64 嵌入图像似乎也失败了。这对我来说是个大问题。

【讨论】:

【参考方案12】:

在我将 PHP 5.5 升级到 5.6 后,由于图像错误,我损失了几个小时,

我从@caligari 找到了解决方案(对已接受答案的评论),它为我解决了这个问题:

像这样安装 CURL:

apt-get install php5-curl && /etc/init.d/apache2 restart. 

【讨论】:

【参考方案13】:

就我而言,我尝试过

curl -v http://www.example.com/image.jpg

和“curl:(60)服务器证书验证失败。”显示。所以这只是一个证书问题。

【讨论】:

以上是关于TCPDF 错误:[图像] 无法获取图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在表格 td、tcpdf 中对齐图像

TCPDF:如何将图像放入 HTML 块中?

无法从 URL 获取图像? (NSURLErrorDomain 错误 -1100)

pyinstaller kivy 错误无法获取任何图像提供程序,中止

Dlib 图像加载错误,无法加载图像

无法呈现网址。无法从 url 获取图像。导航超时