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

在WordPress中用FPDI和mPDF给现有PDF添加HTML内容失败求助

问题原因与解决方案

核心错误分析

你当前代码的根本问题是:$mpdf->Output('', 'S')返回的是完整的PDF二进制文件数据,不是可直接通过FPDI的MultiCell渲染的文本/HTML内容。把二进制PDF字符串当成普通文本添加,只会导致乱码或无内容显示。


方案一:直接用mPDF完成「导入PDF+添加HTML」(推荐)

mPDF本身支持导入现有PDF页面,不需要额外依赖FPDI,流程更简洁:

function generate_pdf_from_url_param() {
    // 处理GET参数及其他设置...

    // 初始化mPDF
    $mpdf = new MpdfLibrary();
    $existingPdfPath = get_template_directory() . '/existing.pdf';
    
    // 导入现有PDF的页面
    $pageCount = $mpdf->setSourceFile($existingPdfPath);
    
    // 循环处理每一页
    for ($page = 1; $page <= $pageCount; $page++) {
        // 导入当前页并添加到mPDF
        $tplIdx = $mpdf->importPage($page);
        $mpdf->AddPage();
        $mpdf->useTemplate($tplIdx);
        
        // 生成要添加的HTML内容(示例)
        $htmlContent = '<div style="color: red; font-size: 14px;">这是添加的HTML内容</div>';
        
        // 设置位置并写入HTML
        $mpdf->SetXY(30, 190);
        $mpdf->WriteHTML($htmlContent);
    }
    
    // 输出PDF
    $mpdf->Output('modified.pdf', 'I');
    exit;
}
add_action('init', 'generate_pdf_from_url_param');

方案二:用FPDI结合TCPDF的HTML渲染(若需保留FPDI)

FPDI基于TCPDF/FPDF,可直接使用TCPDF的writeHTML方法渲染HTML,无需引入mPDF:

function generate_pdf_from_url_param() {
    // 处理GET参数及其他设置...

    // 初始化FPDI(注意:确保你的FPDI基于TCPDF)
    $fpdi = new FpdiLibrary();
    $existingPdfPath = get_template_directory() . '/existing.pdf';
    $pageCount = $fpdi->setSourceFile($existingPdfPath);
    
    // 循环处理每一页
    for ($page = 1; $page <= $pageCount; $page++) {
        $tplIdx = $fpdi->importPage($page);
        $fpdi->AddPage();
        $fpdi->useTemplate($tplIdx);
        
        // 生成HTML内容
        $htmlContent = '<p style="font-weight: bold;">通过FPDI添加的HTML内容</p>';
        
        // 设置位置并写入HTML
        $fpdi->SetXY(30, 190);
        $fpdi->writeHTML($htmlContent);
    }
    
    // 输出PDF
    $fpdi->Output('modified.pdf', 'I');
    exit;
}
add_action('init', 'generate_pdf_from_url_param');

关键注意事项

  • 确保mPDF/FPDI的库版本兼容,避免因版本差异导致的API不匹配
  • 若使用自定义字体,需提前在mPDF/FPDI中注册字体,否则HTML中的特殊字体可能无法正常渲染
  • 调整SetXY的坐标时,注意PDF的坐标系(默认左下角为原点)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:42:06