【问题标题】:TCPDF don't display image with writeHTMLTCPDF 不使用 writeHTML 显示图像
【发布时间】:2012-11-22 01:52:32
【问题描述】:

这个问题似乎是 TCPDF 的常青树...
我有一个让我发疯的问题。

我有一个 html 代码,用作我的 PDF 的“模板”,这里有我的公司徽标。
在 localhost (Windows) 上一切正常,但是当我上网时,图像未显示。
请注意:我的 PDF 上没有任何错误(即 无法获取图像 错误),图像是简单的空白!
事实上,如果我点击 PDF 的图片所在位置,我可以选择它,然后 Adob​​e 启用“复制图片”选项。

显然图片存在,就在这里,权限是正确的。
如果我尝试在那里冲浪,或者查看生成的 HTML 页面,一切都很好。

这是 PHP 代码:

$pdf->SetMargins($params->get('pdfMarginLeft', 15), $params->get('pdfMarginTop', 27), $params->get('pdfMarginRight', 15));
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->SetFont('helvetica', '', 8);
$pdf->AddPage();

$pdf->writeHTML($html, true, false, true, false, '');

$pdf->lastPage();

然后这是我的 HTML 代码(我只是跳过了除图像之外的所有内容):

<img alt="logo black" src="../images/logo_black.png" height="60" width="210" />

我已尝试使用 url(相对和绝对)和路径(相对和绝对),问题仍然存在。 有什么想法吗?

【问题讨论】:

    标签: php tcpdf


    【解决方案1】:

    我遇到了同样的问题,它在本地工作并且在服务器空白图像上。我发现 htaccess 密码是问题所在。我已将带有 Satisfy any 行的 .htaccess 文件放入带有图片的文件夹中,现在它可以正常工作了。

    【讨论】:

      【解决方案2】:

      并不是一个真正的答案,但由于每个人都在尝试添加“砖块”,所以我面临一个非常奇怪的细节:

      我在页面上一个接一个地放置了一小段 HTML。如果我将第一个具有 2 个 png 和一个小文本的文件放在文件上,则 png 在 PDF 上可见。 如果我将具有 2 个 png 和一个小文本的第二个文件放在文件上,则 png 在 PDF 上可见。 现在,如果我把这两个,只有第一个作为图像。第二张是空白图片。如果我更改第二条的图片,图像就会变得可见。

      详情:第一条和第二条使用相同的图像!

      请注意,这似乎发生在 PNG 图像中。所以似乎有一个错误,你不能在一个页面上有两次相同的 PNG 图像。使用JPG解决问题。

      【讨论】:

        【解决方案3】:

        也可以将图像数据内联添加为base64:

        <img src="@Base64encodedImageFile" />
        

        【讨论】:

          【解决方案4】:

          就我而言,我尝试了上述所有解决方案均无济于事。原来我缺少宽度和高度属性。添加这些并使用根路径最终对我有用:

          &lt;img src="/images/image.png" width="50" height="50"/&gt;

          【讨论】:

            【解决方案5】:

            这不是您的问题,但对于将来遇到类似问题的人来说,这是一个可能的解决方案。 请确保 HTML 属性有双引号。

            $html = "<img src='...' />"; // This will not work
            
            $html = '<img src="..." />'; // This will work
            

            【讨论】:

            • 该死的,你救了我的命!这很愚蠢,但这就是为什么我的 magento pdfcustomer 代码没有渲染自定义属性图像!赞成它是:)
            • 哎呀错字了..我的意思是渲染:p
            • +1,忽略 Rishi Kalia 的回答,因为 PNGJPEG 都为我工作。 src外部 引号也为我解决了问题。
            【解决方案6】:

            我不得不“重新保存”图像:

            $image = 'images/logo_example.png';    
            imagepng(imagecreatefrompng($image),$image);
            

            然后它起作用了。

            【讨论】:

              【解决方案7】:

              您可以将图像类型“jpg/png”转换为 base64。 &lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA...."/&gt; 这可能对你有帮助!

              【讨论】:

                【解决方案8】:

                在我将完整路径写入文件之前,IMG 标记无法正常工作

                不工作

                <img src="/pdfrender/XXX.jpg" width="50" height="50">
                

                工作(本地主机示例)

                <img src="http://site.local/pdfrender/XXX.jpg" width="50" height="50">
                

                【讨论】:

                • 请注意,这样,您的网络统计信息将包含TCPDF 作为用户代理,它会增加您服务器上的流量(您必须支付两次,首先是服务器自己对自己的请求 + PDF 输出) 这也是你不想要的。
                【解决方案9】:

                我为图像 src 实现了一个 str_replace,现在可以正常工作了。

                $html = str_replace("../images", $_SERVER["DOCUMENT_ROOT"] . '/images', $html);
                

                【讨论】:

                  【解决方案10】:

                  由于事情在本地工作,所以您可以尝试将图像类型从 png 更改为 jpg 并在相应地修改您的代码并上传 jpg 后检查em> 在服务器上。

                  【讨论】:

                  • 这可能是一个透明度问题..我不确定..here's a similar looking post,您也可以通过有人建议更改 tcpdf_config.php..检查这是否适用于您的 png 徽标..
                  • 我有一个徽标,它在 pdf 中多次显示,但它只出现一次,然后我将 png 文件转换为 jpg 和它的作品就像魅力。不知道这背后的原因,但无论如何它正在工作
                  猜你喜欢
                  • 1970-01-01
                  • 2020-04-26
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-07-15
                  • 2013-10-07
                  • 2012-01-14
                  • 2012-10-15
                  • 2011-12-15
                  相关资源
                  最近更新 更多