Selenium 4设置PrintOptions为Orientation.LANDSCAPE仍无法生成横向PDF
问题分析与解决方案
你的代码存在两处关键问题,导致横向打印设置未生效,同时需注意Chrome Headless模式的适配细节,具体如下:
1. PDF内容转换方法错误
你使用OutputType.BYTES.convertFromBase64Png(pdf.getContent())处理PDF内容,但convertFromBase64Png是专门解码Base64格式PNG图片的方法,而pdf.getContent()返回的是Base64编码的PDF字节流,用该方法会破坏PDF结构,直接导致打印设置失效。
需替换为OutputType.BYTES.convertFromBase64String(pdf.getContent()),以正确解码PDF的Base64内容。
2. Chrome Headless模式参数适配
新版Chrome(112+)默认的--headless模式为headless=new,部分旧打印设置需额外参数确保生效。添加--no-sandbox、--disable-dev-shm-usage可解决环境权限问题,--disable-gpu兼容部分旧运行环境。
修正后的完整代码
public static void main(String[] args) throws IOException, InterruptedException { String driverPath = "src/main/resources/drivers/chromedriver.exe"; WebDriver driver = null; System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, driverPath); ChromeOptions options = new ChromeOptions(); options.addArguments("--headless=new"); // 显式使用新版headless模式 options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); options.addArguments("--disable-gpu"); // 兼容旧环境 driver = new ChromeDriver(options); driver.manage().window().maximize(); driver.get("https://google.com"); PrintOptions printOptions = new PrintOptions(); printOptions.setOrientation(Orientation.LANDSCAPE); printOptions.setPageSize(PageSize.A4); // 显式设置纸张尺寸,强化横向效果 Pdf pdf = ((PrintsPage) driver).print(printOptions); // 修正转换方法,正确解码PDF内容 Files.write(Paths.get("./PDF_Extract/test.pdf"), OutputType.BYTES.convertFromBase64String(pdf.getContent())); driver.quit(); // 关闭驱动释放资源 }
额外注意事项
- 确保ChromeDriver版本与Chrome浏览器版本完全匹配,版本不兼容会导致设置失效。
- 若仍有问题,可尝试在PrintOptions中添加
setScale(1.0),避免缩放干扰打印方向。
内容的提问来源于stack exchange,提问作者Maxim Joyal
相关产品推荐
相关产品推荐

