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 打印不正确。我正在尝试用Unicode
和complex-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 错误:[图像] 无法获取图像的主要内容,如果未能解决你的问题,请参考以下文章
无法从 URL 获取图像? (NSURLErrorDomain 错误 -1100)