You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP编程生成符合WCAG标准的全可访问PDF?

解决PHP生成带图片alt文本的可访问PDF问题

方案1:使用原生支持WCAG标准的PDF生成库

直接选择对可访问性(包括图片alt文本)支持更好的PHP PDF库,替代DOMPDF,比如TCPDF或mPDF,这类库可以直接为图片设置替代文本,无需依赖外部API。

TCPDF示例代码:

require_once('tcpdf/tcpdf.php');

// 初始化PDF对象,开启UTF-8支持与可访问性选项
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator('PHP Accessible PDF Generator');
$pdf->SetTitle('带图片alt文本的可访问PDF');

$pdf->AddPage();

// 插入图片,并设置替代文本
$imagePath = 'path/to/your/image.jpg';
// 插入图片参数:路径、X坐标、Y坐标、宽度、高度、格式、链接、对齐、是否为可访问图片、DPI、alt文本占位(后续用setAltText设置)
$pdf->Image($imagePath, 15, 15, 40, 0, 'JPG', '', '', true, 150, '', false, false, 0, false, false, false);
// 显式设置图片的替代文本
$pdf->setAltText('这是一张产品展示图,展示了黑色无线蓝牙耳机的外观');

// 添加其他内容
$pdf->Cell(0, 10, '产品介绍', 0, 1, 'C');

$pdf->Output('accessible_product_pdf.pdf', 'I');

mPDF示例代码:

require_once __DIR__ . '/vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'format' => 'A4']);
$mpdf->SetTitle('可访问PDF示例');

// 直接在HTML中使用标准img标签的alt属性,mPDF会将其转换为PDF的替代文本
$html = '
<div>
    <h1>产品展示</h1>
    <img src="path/to/your/image.jpg" alt="黑色无线蓝牙耳机,带有充电仓">
    <p>这款耳机支持主动降噪,续航可达30小时</p>
</div>
';

$mpdf->WriteHTML($html);
$mpdf->Output('accessible_mpdf_example.pdf', 'I');

方案2:优化DOMPDF输出+补全PDF元数据

如果必须保留DOMPDF,需要确保DOMPDF输出的HTML结构正确传递alt属性,再通过PHP库补全PDF的图片替代文本:

  1. 确保DOMPDF正确处理img的alt属性:
    在生成HTML时,确保所有img标签都包含alt属性(空alt用于装饰性图片),并配置DOMPDF启用可访问性选项:

    require_once 'dompdf/autoload.inc.php';
    use Dompdf\Dompdf;
    use Dompdf\Options;
    
    $options = new Options();
    $options->set('isHtml5ParserEnabled', true);
    $options->set('enable_pdfa', true); // 启用PDF/A标准,增强可访问性
    
    $dompdf = new Dompdf($options);
    $html = '
    <html>
        <body>
            <img src="path/to/image.jpg" alt="产品包装的正面视图">
            <p>包装内含耳机、充电线与说明书</p>
        </body>
    </html>
    ';
    $dompdf->loadHtml($html);
    $dompdf->render();
    $dompdf->stream('dompdf_output.pdf', ['Attachment' => false]);
    
  2. 用FPDI+TCPDF补全alt文本:
    针对DOMPDF生成的PDF,使用FPDI导入页面后,手动为图片添加替代文本:

    require_once('tcpdf/tcpdf.php');
    require_once('fpdi/fpdi.php');
    
    class AccessiblePDF extends FPDI {
        public function Header() {}
        public function Footer() {}
    }
    
    $pdf = new AccessiblePDF();
    $sourcePdf = 'dompdf_output.pdf';
    $pdf->setSourceFile($sourcePdf);
    $pageId = $pdf->importPage(1);
    $pdf->AddPage();
    $pdf->useTemplate($pageId);
    
    // 获取PDF中的图片对象ID(可通过PDF编辑器查看,或用PDF解析工具自动获取)
    $imageXObjectId = 'Im1'; // 示例ID,实际需根据PDF结构调整
    $pdf->setAltText('产品包装的正面视图,印有品牌logo与产品名称', $imageXObjectId);
    
    $pdf->Output('dompdf_accessible.pdf', 'I');
    

方案3:使用无头浏览器生成可访问PDF

通过PHP调用无头Chrome(如Puppeteer)生成PDF,Chrome原生支持将HTML的可访问性属性(包括img的alt)转换为PDF的结构化元数据,完全符合WCAG标准。

使用spatie/browsershot库实现:

require_once __DIR__ . '/vendor/autoload.php';

use Spatie\Browsershot\Browsershot;

$html = '
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>可访问产品手册</title>
</head>
<body>
    <img src="path/to/image.jpg" alt="折叠式笔记本电脑,屏幕显示办公界面">
    <h2>产品特性</h2>
    <ul>
        <li>14英寸高清屏幕</li>
        <li>续航12小时</li>
    </ul>
</body>
</html>
';

Browsershot::html($html)
    ->setOption('enable-accessibility', true)
    ->setOption('pdf-tagged', true) // 生成带标签的PDF
    ->save('browser_accessible_pdf.pdf');

方案对比

  • 原生PDF库:适合需要高度定制PDF布局的场景,无需依赖外部工具,但需要手动处理内容排版。
  • DOMPDF+补全元数据:适合已有DOMPDF代码的项目,需要额外步骤补全alt文本,复杂度中等。
  • 无头浏览器:适合已有成熟HTML模板的场景,自动保留所有HTML可访问性属性,生成的PDF兼容性最好,但需要安装Chrome/Chromium环境。

内容的提问来源于stack exchange,提问作者dfgdfg dfgdfgdfgdfg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:30:35