TCPDF:如何使用从 MySQL 数据库中检索到的 BLOB 值在 TCPDF 中显示图像?
3 回答
// Example of Image from data stream ('PHP rules')
$imgdata = base64_decode('iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==');
// The '@' character is used to indicate that follows an image data stream and not an image file name
$pdf->Image('@'.$imgdata);
API 文档Image()
更详细地解释了它:
$file (string) 包含图像的文件的名称或后跟图像数据字符串的“@”字符。要链接图像而不将其嵌入到文档中,请在 URL 前设置一个星号字符(即:)
*http://www.example.com/image.jpg
。
正如 Álvaro González TCPDF 已经回答的那样,您可以将图像 blob 传递给TCPDF::Image()
,但这有一些主要缺点:
TCPDF 图像缓存不适用于图像 blob。因此,如果多次传递相同的图像,TCPDF 会消耗更多的内存。
如果您传递图像 blob,TCPDF 会将其写入临时文件。但它不会检查是否已经提供了相同的图像 blob。因此,即使您再次传递相同的图像,它也会写入新的临时文件。这不仅会导致不必要的 IO,还会破坏 tcpdf 中的图像缓存构建。
长话短说:如果您多次使用图像,请不要将图像 blob 传递给 tcpdf。将其保存到一个临时文件并传递该文件。
我发现许多php TCPDF 库用户大多对 mysqli 数据库感到两难,请遵循以下快速指南
- 准备好你的 TCPDF 配置,你的文本编辑器
- 开始工作
- 打开您的 php 文件,该文件将用于加载生成的 pdf 文档
- 包括以下
- 建立数据库连接如下
$sql = "SELECT * FROM members WHERE id = '".$_SESSION['user']."'"; $query = $conn->query($sql); $user=(!empty($user['photo'])) ?'images/'.$user['photo'] : 'images/profile.jpg' $user = $query->fetch_assoc();
包含所有 pdf 参数以在浏览器上设置 pdf 环境
// 创建新的 PDF 文档
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// 设置文档信息 $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('Nicola Asuni'); $pdf->SetTitle('TCPPDF Example 009'); $pdf->SetSubject('TCPPDF 教程'); $pdf->SetKeywords('TCPPDF, PDF, example, test, guide');
// 设置默认标题数据 $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.'009', PDF_HEADER_STRING);
// 设置页眉和页脚字体 $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// 设置默认等宽字体 $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// 设置边距 $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// 设置自动分页符 $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// 设置图像比例因子 $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// 设置一些与语言相关的字符串(可选) if (@file_exists(dirname( FILE ).'/lang/eng.php')) { require_once(dirname( FILE ).'/lang/eng.php'); $pdf->setLanguageArray($l); }
//------------------------------------------------ ------------------
// 添加一个页面 $pdf->AddPage();
// 设置 JPEG 质量 $pdf->setJPEGQuality(75);
- 叫你图像参数
$x = 165; $y = 28; $w = 50; $h = 50; // 调整大小的图像示例 $pdf->Image('images/'.$voter['photo']."",$x, $y, $w, $h, 'JPG','');
$x 表示水平填充,$y 表示垂直填充,$w 表示宽度,$h 分别表示高度。
设置你的输出
$pdf->输出('adding_from_Myqli_database.pdf', 'I');
- 关闭你的 php 标签
?>
- 希望你从中吸取教训,也许你的问题已经解决了