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

使用mPDF生成PDF/A-3遇合规性与附件大小显示异常问题求解决

解决mPDF生成PDF/A-3的两个问题

问题1:生成文件仅被识别为PDF/A-1B

解决步骤:

  1. 强制完全嵌入字体:PDF/A-3要求所有字体必须嵌入,避免字体子集化引发的兼容性问题。在mPDF初始化配置中添加'fontsubset' => false。
  2. 确保XMP元数据符合PDF/A-3规范:检查SetAdditionalXmpRdf传入的$rdf内容,必须包含PDF/A-3的标识,核心字段需设置:
    <pdfaid:part>3</pdfaid:part>
    <pdfaid:conformance>A</pdfaid:conformance>
    
    若未正确配置该元数据,文件会被识别为低版本的PDF/A-1B。
  3. 验证配置参数有效性:确保PDFAversion、PDFA等参数无冲突,配置顺序不影响功能触发。

修改后的mPDF初始化配置片段:

$mpdf = new \Mpdf\Mpdf([
  'format' => [210, 297],
  'mirrorMargins' => 1,
  'mode' => 'utf-8',
  'PDFA' => true,
  'PDFAauto' => false,
  'PDFAversion'=> 'A-3',
  'fontsubset' => false, // 新增:强制完全嵌入字体
  'fontDir' => array_merge($fontDirs, [
    $_SERVER['DOCUMENT_ROOT'] . '/font',
  ]),
  'fontdata' => $fontData + [
    'sarabun' => [
        'R' => 'THSarabunNew.ttf',
        'B' => 'THSarabunNew Bold.ttf'
    ]
  ],
  'default_font' => 'sarabun',
  'debug' => true
]);

问题2:XML附件显示大小为0.00Bytes

解决步骤:

在SetAssociatedFiles的配置数组中手动添加'length'字段,指定XML内容的字节长度。mPDF有时无法自动计算动态内容的字节数,需手动传入:

修改后的附件设置代码:

$mpdf->SetAssociatedFiles([[
    'name' => $invoiceNumber . '.xml',
    'mime' => 'text/xml',
    'description' => 'Tax Invoice XML Data',
    'AFRelationship' => 'Alternative',
    'content' => $xml,
    'length' => mb_strlen($xml, '8bit') // 新增:手动指定字节长度
]]);

使用mb_strlen($xml, '8bit')可准确获取UTF-8编码内容的字节数,避免因字符编码导致的长度计算错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:43:14