使用mPDF生成PDF/A-3遇合规性与附件大小显示异常问题求解决
解决mPDF生成PDF/A-3的两个问题
问题1:生成文件仅被识别为PDF/A-1B
解决步骤:
- 强制完全嵌入字体:PDF/A-3要求所有字体必须嵌入,避免字体子集化引发的兼容性问题。在mPDF初始化配置中添加
'fontsubset' => false。 - 确保XMP元数据符合PDF/A-3规范:检查
SetAdditionalXmpRdf传入的$rdf内容,必须包含PDF/A-3的标识,核心字段需设置:
若未正确配置该元数据,文件会被识别为低版本的PDF/A-1B。<pdfaid:part>3</pdfaid:part> <pdfaid:conformance>A</pdfaid:conformance> - 验证配置参数有效性:确保
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
相关产品推荐
相关产品推荐

