如何用PhantomJS从同一URL生成两种不同语言的PDF
如何生成同一临床试页面的葡语和英语PDF(PhantomJS版)
我来帮你搞定这个需求!因为页面的语言切换是靠点击右上角的PT/EN链接触发的JavaScript动作,默认的rasterize.js没法自动处理这种交互,所以我们得自定义一个脚本模拟点击操作,具体步骤如下:
步骤1:创建自定义渲染脚本
先新建一个名为lang-rasterize.js的文件,把下面的代码复制进去——这个脚本会帮我们完成页面加载、语言切换、等待内容更新再生成PDF的全流程:
var page = require('webpage').create(); var system = require('system'); // 检查命令参数是否正确 if (system.args.length !== 4) { console.log('用法:phantomjs lang-rasterize.js <目标URL> <输出PDF文件名> <语言选项>'); console.log('语言选项:pt(葡萄牙语)、en(英语)'); phantom.exit(1); } var targetUrl = system.args[1]; var outputFile = system.args[2]; var targetLang = system.args[3].toLowerCase(); // 设置视口大小,和你原来的命令保持一致 page.viewportSize = { width: 1200, height: 600 }; // 打开目标页面 page.open(targetUrl, function(status) { if (status !== 'success') { console.log('页面加载失败,请检查URL是否正确'); phantom.exit(1); } // 等待初始页面完全加载(时间可根据实际情况调整) setTimeout(function() { // 选择对应的语言切换链接,模拟点击 var langLinkSelector = targetLang === 'en' ? 'a[href="#en"]' : 'a[href="#pt"]'; page.evaluate(function(selector) { document.querySelector(selector).click(); }, langLinkSelector); // 等待语言切换后的页面内容更新完成(同样可调整等待时间) setTimeout(function() { page.render(outputFile); console.log(`PDF生成成功:${outputFile}`); phantom.exit(); }, 3000); // 3秒等待时间,确保页面内容加载完毕 }, 2000); // 初始页面加载等待2秒 });
步骤2:运行命令生成两种语言的PDF
现在就可以用这个自定义脚本分别生成两个版本的PDF了:
生成葡萄牙语版本
在终端里执行这条命令:
phantomjs lang-rasterize.js 'http://www.ensaiosclinicos.gov.br/rg/RBR-8c33jx/' RBR-8c33jx-pt.pdf pt
生成英语版本
再执行这条命令:
phantomjs lang-rasterize.js 'http://www.ensaiosclinicos.gov.br/rg/RBR-8c33jx/' RBR-8c33jx-en.pdf en
一些小提示
- 脚本里的等待时间(2000和3000毫秒)可以根据页面实际加载速度调整,如果页面加载慢,就适当延长时间,避免内容没加载完就生成PDF。
- 如果页面的语言链接结构有变化,记得用浏览器开发者工具检查一下右上角PT/EN链接的选择器,调整脚本里的
langLinkSelector对应的内容。 - 这个脚本不管页面默认是什么语言,都会切换到你指定的目标语言,通用性更强~
内容的提问来源于stack exchange,提问作者dtostes
相关产品推荐
相关产品推荐

