Puppeteer生成PDF复制粘贴出现怪异字符问题求助
解决Puppeteer生成PDF后Acrobat复制文本乱码的问题
嘿,这个问题我之前也碰到过!你遇到的是PDF文本提取时的字符变形问题,根源大概率和字体嵌入不完整或者页面使用了特殊的装饰性字体有关,给你几个靠谱的解决办法:
1. 替换页面的特殊字体为标准可嵌入字体
很多时候这种乱码是因为页面用了那种“花式艺术字体”——这类字体本质是把普通字母替换成了Unicode里的相似特殊字符(比如把i换成į,s换成ș)。如果是你自己可控的页面,直接修改CSS用标准字体:
body { font-family: Arial, Helvetica, sans-serif; /* 用系统默认的标准字体替代 */ }
如果是第三方页面,用Puppeteer注入CSS强制替换:
await page.addStyleTag({ content: ` * { font-family: Arial, sans-serif !important; /* 强制覆盖所有元素的字体 */ } ` });
2. 配置Puppeteer的PDF生成参数,确保字体嵌入
在调用page.pdf()的时候,开启printBackground并确保相关配置正确,让Chromium完整嵌入字体:
await page.pdf({ path: `${fileName}.pdf`, printBackground: true, // 关键:确保背景和字体都被正确渲染嵌入 preferCSSPageSize: true, margin: { top: '1cm', right: '1cm', bottom: '1cm', left: '1cm' }, displayHeaderFooter: false });
3. 更新到最新版Puppeteer
旧版本的Chromium(Puppeteer依赖的内核)偶尔会有字体嵌入的bug,直接更新到最新版能解决不少这类问题:
npm install puppeteer@latest
补充说明
如果替换字体后问题还存在,你可以检查生成的PDF属性(在Acrobat里看“文件>属性>字体”),如果里面显示字体是“未嵌入”或者“子集嵌入”,那就是字体嵌入的问题,按照上面的步骤调整配置即可。如果字体已经是完整嵌入的,那大概率是页面本身的字符就是那些特殊字符,替换字体就能解决。
内容的提问来源于stack exchange,提问作者suspiration
相关产品推荐
相关产品推荐

