微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TCPDF 嵌入 HTML 字符串中的 Base64 编码图像

如何解决TCPDF 嵌入 HTML 字符串中的 Base64 编码图像

我已经阅读了几篇关于这个主题的帖子,但不想在其中提出其他问题。

特别是这篇文章TCPDF and insert an image base64 encoded

我正在 wordpress自定义主题生成 PDF。我使用的是 TCPDF 6.2.3(我相信是最新的稳定版本)。

我正在从用于在页面显示的相同 HTML 构建此 PDF。如果我嵌入完整的 base64 编码字符串,它可以在浏览器中正常工作,但 PDF 中缺少图像。

如果我使用链接帖子中描述的“@”方法,我会在浏览器中看到一个损坏的图像(预期),但在 PDF 中仍然没有。

我其余的 HTML 标记都在 PDF 中呈现,只是没有显示图像。

我是否需要设置一些其他设置或选项才能使图像显示在 PDF 中,和/或您能发现我在这里做错了什么吗?没有错误,只是在 PDF 中看不到图像。

这是我设置图像的方式:

        $imageLocation = $img_root.$imgsrc;
        $ext = end(explode(".",$imageLocation));
        $image = base64_encode(file_get_contents($imageLocation));

        //$response .= "<img src='data:image/$ext;base64,$image'>"; //works in browser but not in PDF
        $response .= "<img src='@$image' class='socf_image'>"; //does not work in browser or PDF

这里是创建PDF的方法

function createPDF($response)
{
    // Include the main TCPDF library (search for installation path).
    require_once('tcpdf_6_3_2/tcpdf/tcpdf.PHP');

    // create new PDF document
    $pdf = new TCPDF(PDF_PAGE_ORIENTATION,PDF_UNIT,PDF_PAGE_FORMAT,true,'UTF-8',false);

    // set document information
    $pdf->SetCreator(PDF_CREATOR);
    $pdf->SetAuthor('test');
    $pdf->SetTitle('test');
    $pdf->SetSubject('test');
    $pdf->SetKeywords('test');

    // set default header data
    $pdf->SetHeaderData(PDF_HEADER_logo,PDF_HEADER_logo_WIDTH,PDF_HEADER_TITLE.' 001',PDF_HEADER_STRING,array(0,64,255),128));
    $pdf->setFooterData(array(0,0),128));

    // set header and footer fonts
    $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN,'',PDF_FONT_SIZE_MAIN));
    $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA,PDF_FONT_SIZE_DATA));

    // set default monospaced font
    $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

    // set margins
    $pdf->SetMargins(PDF_MARGIN_LEFT,PDF_MARGIN_TOP,PDF_MARGIN_RIGHT);
    $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
    $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

    // set auto page breaks
    $pdf->SetAutopageBreak(TRUE,PDF_MARGIN_BottOM);

    // set image scale factor
    $pdf->setimageScale(PDF_IMAGE_SCALE_RATIO);

    // set default font subsetting mode
    $pdf->setFontSubsetting(true);

    // Set font
    $pdf->SetFont('helvetica',14,true);

    // Add a page
    $pdf->AddPage();
    
    $html = $response;
    $pdf->writeHTML($response,false,'');
    
    return $pdf;

}

解决方法

好吧,幸运的是,我能够自己解决这个问题。也许这不是寻求该库帮助的最佳论坛?如果有人能建议一个更好的地方来寻求帮助,我会很感激的。

最终,问题有两个方面:

  1. PDf 需要“@”符号,而该方法适用于在浏览器中显示 HTML。因此,在创建 PDF 之前替换字符串可以解决这个问题。
  2. 这是棘手的部分。 HTML 需要在属性周围使用双引号,而不是单引号。我的代码对 PHP 字符串使用双引号,因此 HTML 属性用单引号括起来,这就是问题所在。交换两种引用类型是使图像出现在 PDF 中的最后一个难题。

希望这能帮助那些像我一样盲目地在图书馆中寻找出路的人。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。