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

使用rialto-php/puphpeteer生成PDF如何按语言切换RTL/LTR方向

问题原因

Puphpeteer 是对 Node.js 版 Puppeteer 的PHP封装,而 Puppeteer 官方提供的pdf()方法原生不支持direction配置项,你传入的这个参数会被直接忽略,因此无法生效。

解决方法

方法一:完善HTML侧样式适配

你已经在HTML页面完成了方向适配,导出PDF不生效大概率是样式仅对screen媒体生效,导出PDF时Chromium默认调用print媒体的样式,需要调整样式适配所有媒体类型:

/* 移除样式上的媒体限制,或者单独补充print媒体的样式 */
html {
  /* 根据页面语言动态切换dir属性即可自动匹配方向 */
  &[dir="rtl"] {
    direction: rtl;
    unicode-bidi: embed;
  }
  &[dir="ltr"] {
    direction: ltr;
  }
}
/* 如果存在全局打印样式重置了方向,需要手动覆盖打印场景的方向配置 */
@media print {
  html[dir="rtl"] {
    direction: rtl !important;
  }
}

只要页面dir属性是根据语言动态赋值的,导出PDF时会自动继承页面的方向配置,不需要额外在PDF参数里传配置。

方法二:PHP侧动态控制页面方向

如果需要在PHP逻辑中根据语言动态切换方向,不需要修改HTML模板,可以在调用导出PDF方法前,先执行页面脚本修改根元素的方向属性:

// 判断当前内容语言,阿拉伯语场景执行以下两行代码
$page->evaluate('document.documentElement.setAttribute("dir", "rtl")');
$page->evaluate('document.documentElement.style.direction = "rtl"');

// 英语场景则改为ltr即可
// $page->evaluate('document.documentElement.setAttribute("dir", "ltr")');
// $page->evaluate('document.documentElement.style.direction = "ltr"');

// 再执行PDF导出,删除无效的direction参数
$page->pdf([
    'path' => public_path(sprintf('pdf/reports/%s.pdf', 替换为你的文件名变量)),
    'printBackground'=> true,
    'format'=> "A4",
    'margin' => [
        'top'=> "0px",
        'bottom'=> "0px",
        'left'=> "0px",
        'right'=> "0px",
    ],
]);

注意事项

  • 导出PDF前需要确保页面内容和样式已经全部加载完成,避免样式未完全生效。
  • 如果页面使用了flex、grid等布局,不需要额外调整布局方向,根元素设置dir="rtl"后浏览器会自动适配布局排序规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:18:00