Skip to content

图片

TCPDF-Next 支持在 PDF 中嵌入多种格式的图片。本示例说明如何从文件路径、URL 或二进制数据插入图片,以及如何控制定位与尺寸。

支持格式

格式扩展名透明度适用场景
JPEG.jpg, .jpeg不支持照片、摄影作品
PNG.pngAlpha 通道截图、图标、需要透明背景的图片
SVG.svg支持矢量图形、Logo、图表(缩放不失真)

从文件路径插入

php
<?php

use YeeeFang\TcpdfNext\Document\PdfDocument;
use YeeeFang\TcpdfNext\Document\PageFormat;

$pdf = PdfDocument::create()
    ->setTitle('图片示例')
    ->setPageFormat(PageFormat::A4)
    ->build();

$page = $pdf->addPage();

// 指定位置与宽度,高度自动按比例计算
$page->addImage('/path/to/logo.png')
    ->setPosition(20, 25)
    ->setSize(50);

// 同时指定宽度与高度
$page->addImage('/path/to/photo.jpg')
    ->setPosition(20, 80)
    ->setSize(80, 60);

从 URL 插入

php
// 从网络加载图片
$page->addImage('https://example.com/images/product.jpg')
    ->setPosition(20, 25)
    ->setSize(60);

从二进制数据插入

php
// 从文件内容(二进制字符串)插入
$imageData = file_get_contents('/path/to/image.png');

$page->addImageFromString($imageData, type: 'PNG')
    ->setPosition(20, 25)
    ->setSize(50);

// 从 Base64 字符串插入
$base64 = base64_encode($imageData);

$page->addImageFromBase64($base64, type: 'PNG')
    ->setPosition(20, 80)
    ->setSize(50);

居中图片

php
// 计算水平居中的 X 坐标
$imageWidth = 80;
$pageWidth = $pdf->getPageWidth();
$margins = $pdf->getMargins();
$contentWidth = $pageWidth - $margins['left'] - $margins['right'];
$x = $margins['left'] + ($contentWidth - $imageWidth) / 2;

$page->addImage('/path/to/centered.jpg')
    ->setPosition($x, 50)
    ->setSize($imageWidth);

SVG 矢量图形

SVG 是矢量格式,无论放大缩小都不会产生锯齿,非常适合 Logo 与图表:

php
// 从文件插入 SVG
$page->addImage('/path/to/diagram.svg')
    ->setPosition(20, 25)
    ->setSize(100, 80);

// 从 SVG 字符串插入
$svgString = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
    <circle cx="50" cy="50" r="40" fill="#3498DB" />
    <text x="50" y="55" text-anchor="middle" fill="white" font-size="14">PDF</text>
</svg>';

$page->addImageFromString($svgString, type: 'SVG')
    ->setPosition(20, 120)
    ->setSize(50, 50);

图片透明度

php
// 设置图片的透明度(0.0 完全透明 ~ 1.0 完全不透明)
$page->addImage('/path/to/watermark.png')
    ->setPosition(50, 100)
    ->setSize(100)
    ->setOpacity(0.3);

在 HTML 中使用图片

搭配 HtmlRenderer,也可以用 HTML <img> 标签嵌入图片:

php
use YeeeFang\TcpdfNext\Html\HtmlRenderer;

$renderer = new HtmlRenderer($pdf);

$html = <<<'HTML'
<div style="text-align: center;">
    <img src="/path/to/photo.jpg" width="200" alt="产品照片" />
    <p style="font-size: 10px; color: #888888;">图一:产品外观</p>
</div>
HTML;

$renderer->writeHtml($html);

注意事项

  • 大量高分辨率图片会导致 PDF 文件过大,建议预先压缩图片再嵌入
  • 从 URL 加载图片时需注意网络延迟与超时设置
  • SVG 中若有外部引用(字体、图片),需确保路径可被访问

下一步

以 LGPL-3.0-or-later 许可证发布。