我正在使用TCPDF来创建动态生成的pdf文件。在我的pdf文件中,根据用户输入生成图像,我想在我的pdf文件中添加该图像。这是我的代码
$map_image = "example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=";
$pdf->Image ($map_image, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);
如果我在我的网址上粘贴“ example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area = ”这个这就像我想要的那样创建图像,但如果把这个url,它就不起作用了。它表示无法获得图像的大小
但如果我把这样的东西放在
$map_image = '/wp-content/themes/v3/resources/images/public/logo_side.jpg';
它可以成功生成带有该图像的pdf。
我该如何解决?
我访问了以下stackoverflow链接,但没有任何帮助
答案 0 :(得分:13)
这可能是由于filesize()
通过stat()
无法HTTP wrapper远程图像文件(因为包装器不支持它)。
根据TCPDF image() method documentation,您可以直接传递图像数据,前缀为@
符号。因此,您可以获取原始图像数据,然后将其传递给TCPDF,如下所示:
$img = file_get_contents('http://example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=');
$pdf->Image('@' . $img, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);
请注意,我没有对此进行测试(并且TCPDF文档很稀疏),因此您可能需要进行一些实验才能使其正常工作。
<强> 编辑: 强>
这是一个完全有效的例子(在我的电脑上)。使用此选项可测试您是否可以成功检索图像并将PDF输出到浏览器。当然,您需要为图像设置已知的有效路径!
<?php
require './tcpdf/tcpdf.php';
$pdf = new TCPDF();
$pdf->AddPage();
$img = file_get_contents('http://path/to/your.jpg');
$pdf->Image('@' . $img);
$pdf->Output();
?>
答案 1 :(得分:4)
确认服务器能够使用PHP的file_get_contents
或cURL下载文件。 &#34;无法获得图像的大小&#34;是Image
函数中的第一个错误,如果服务器上的这两个函数无法访问该文件,TCPDF将抛出该错误。
答案 2 :(得分:3)
要调试此问题,您可以在第6850行的tcpdf.php中删除@ from @gegreize($ file)中的@。搜索 [Image]无法获取图像的大小:并滚动一些排队。 @隐藏了实际的错误消息。
如果您能够从浏览器访问图像网址,则可能是您的系统未将网址指向所请求的主机。相关消息是 getimagesize():php_network_getaddresses:getaddrinfo failed:。这意味着,你的本地php配置不知道在哪里搜索url。在这种情况下,您需要更改/ etc / hosts文件并将本地设置指向urls ip。这通常是localhost设置的问题。
E.g。 127.0.0.1 yoururlhere.local
答案 3 :(得分:2)
确保使用相对路径,有时绝对路径无法使用
确定:&#34; ../../ myImage.png&#34;
错误的:&#34; http://www.example.com/myImage.png&#34;
答案 4 :(得分:2)
我的Magento商店出现了这个错误。
如果你打开tcpdf.php
你会发现这个代码,$ file是一个url,它应该是jut文件的路径:
// check if is a local file
if (!@file_exists($file)) {
// try to encode spaces on filename
$tfile = str_replace(' ', '%20', $file);
为了快速修复,我添加了以下代码:
$file = str_replace("http://theurliwantgone/","",$tfile);
它有效!希望这对大多数人有帮助!
答案 5 :(得分:0)
对我来说奇怪的是(在2019年)我发现必须删除! include / tcpdf_static.php中1924行的内容。由于某种原因,它只会查看ini_get('allow_url_fopen')
,如果它为假,但我的服务器设置为真-则修改代码即可正常工作。以前也可以,但是突然停止了!
答案 6 :(得分:0)
我的代码几乎一样:
$img_base64_encoded = $values["image_field_in_DB"];
$imageContent = file_get_contents($img_base64_encoded);
$my_file = $_SERVER['DOCUMENT_ROOT'].'tmp/image.png';
$handle = fopen($my_file, 'w') or die('Cannot open file: '.$my_file);
fwrite($handle, $imageContent);
$img = '<img src="'.$my_file.'" width="150" height="auto" alt="image" data-default="KG" />';
$pdf->writeHTML($img, true, false, true, false, '');
答案 7 :(得分:-2)
在tcpdf.php
中搜索6877行if ($imsize === FALSE) {
if (($w > 0) AND ($h > 0)) {
// get measures from specified data
$pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
$ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
$imsize = array($pw, $ph);
} else {
$this->Error('[Image] Unable to get the size of the image: '.$file);
}
}
更改为:
if ($imsize === TRUE) {
if (($w > 0) AND ($h > 0)) {
// get measures from specified data
$pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
$ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
$imsize = array($pw, $ph);
} else {
$this->Error('[Image] Unable to get the size of the image: '.$file);
}
}