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

Drupal7+Webform+Webform2PDF生成PDF时上传字段显示链接问题求助

嘿,这个问题我之前帮好几个做Drupal表单的朋友解决过——Webform2PDF默认确实只会把上传字段的令牌解析成文件链接,要直接在生成的PDF里展示证件照和嵌入PDF文档,得做些针对性的调整,分两种情况来处理:

一、让JPG证件照直接显示在PDF中

Webform的默认令牌返回的是文件链接,我们需要在Webform2PDF的模板里替换成图片标签来渲染:

  1. 先找到Webform2PDF模块的模板文件webform2pdf-template.tpl.php,把它复制到你的主题目录下(这样后续升级模块不会覆盖自定义内容)。如果只想针对当前表单生效,可以把文件名改成webform2pdf-template--[你的表单机器名].tpl.php。
  2. 在模板文件里找到你原本输出[submission:value:recent_photo]令牌的位置,替换成以下PHP代码(记得把recent_photo改成你实际的证件照字段机器名):
<?php
// 加载上传的证件照文件
$photo_file = file_load($submission->data['recent_photo'][0]);
if ($photo_file) {
  // 获取文件的可访问URL
  $photo_url = file_create_url($photo_file->uri);
  // 输出图片标签,可自定义宽高样式
  echo '<img src="' . $photo_url . '" alt="申请人证件照" style="width: 150px; height: auto;"/>';
} else {
  echo '未上传证件照';
}
?>
  1. 清除Drupal的缓存,测试表单提交后生成的PDF,就能看到证件照直接显示出来了。

二、嵌入上传的PDF说明文档到生成的PDF里

要把用户上传的PDF文档直接嵌入到生成的申请表单PDF中,得借助Webform2PDF底层的TCPDF库来实现:

  1. 同样在刚才的自定义模板文件里,找到你想插入PDF文档的位置,添加以下代码(替换pdf_document为你的PDF字段机器名):
<?php
// 加载用户上传的PDF文件
$doc_file = file_load($submission->data['pdf_document'][0]);
if ($doc_file) {
  // 获取文件的服务器绝对路径
  $doc_path = drupal_realpath($doc_file->uri);
  // 获取当前TCPDF实例
  global $pdf;
  if (file_exists($doc_path)) {
    // 导入外部PDF的所有页面并添加到当前PDF中
    $pdf->setSourceFile($doc_path);
    $page_count = $pdf->getNumPages();
    for ($i = 1; $i <= $page_count; $i++) {
      $template_id = $pdf->importPage($i);
      $pdf->AddPage();
      $pdf->useTemplate($template_id, 10, 10, 190, 270, true);
    }
  } else {
    echo '未上传有效说明文档';
  }
} else {
  echo '未上传说明文档';
}
?>
  1. 这段代码会把用户上传的PDF每一页都作为新页面添加到生成的申请表单PDF末尾,你可以调整useTemplate方法里的参数(10,10是偏移量,190,270是宽高)来适配你的PDF模板。
  2. 清除缓存后测试,就能看到上传的PDF内容被嵌入进去了。

替代方案:用自定义模块钩子修改令牌输出

如果你不想修改模板,也可以在自定义模块里用hook_webform2pdf_token_replace_alter钩子来替换图片令牌的输出(注意这个方法只适合图片,PDF嵌入还是模板方法更可靠):

function YOUR_CUSTOM_MODULE_webform2pdf_token_replace_alter(&$replacements, $context) {
  $submission = $context['submission'];
  // 替换证件照令牌
  if (isset($replacements['[submission:value:recent_photo]'])) {
    $photo_file = file_load($submission->data['recent_photo'][0]);
    if ($photo_file) {
      $photo_url = file_create_url($photo_file->uri);
      $replacements['[submission:value:recent_photo]'] = '<img src="' . $photo_url . '" alt="申请人证件照" style="width:150px;"/>';
    }
  }
}

注意事项

  • 确保服务器用户对Drupal的文件上传目录(一般是sites/default/files)有读取权限,否则Webform2PDF无法加载文件内容。
  • 测试时尽量用标准的JPG和PDF文件,避免损坏或异常格式的文件导致显示失败。
  • 如果使用模板,记得给模板文件设置正确的权限(一般755),确保Drupal能读取到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:01:23