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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:20:22