问题描述
我已经阅读了几篇关于这个主题的帖子,但不想在其中提出其他问题。
特别是这篇文章: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;
}
解决方法
好吧,幸运的是,我能够自己解决这个问题。也许这不是寻求该库帮助的最佳论坛?如果有人能建议一个更好的地方来寻求帮助,我会很感激的。
最终,问题有两个方面:
- PDf 需要“@”符号,而该方法适用于在浏览器中显示 HTML。因此,在创建 PDF 之前替换字符串可以解决这个问题。
- 这是棘手的部分。 HTML 需要在属性周围使用双引号,而不是单引号。我的代码对 PHP 字符串使用双引号,因此 HTML 属性用单引号括起来,这就是问题所在。交换两种引用类型是使图像出现在 PDF 中的最后一个难题。
希望这能帮助那些像我一样盲目地在图书馆中寻找出路的人。