Jvppeteer生成PDF文件保存

Jvppeteer生成PDF文件保存

需求背景

项目中有报表功能,报表由前端渲染生成,后台需要按需求将报表生成pdf进行邮件发送,前端的报表完全是动态生成的,后台不能完美的复刻前端的报表渲染,所以pdf的生成必须还是由前端渲染生成,这里使用Jvppeteer生成pdf,模拟调用浏览器渲染页面。
Jvppetter:https://github.com/fanyong920/jvppeteer

项目准备

根据环境准备好chrome资源包,windowns如果本地装有chrome,api的设置路径写chrome.exe即可,如果是Linux环境则需要下载chrome Linux版,Jvppetter推荐的默认版本是722234,使用推荐版即可,使用其它版本会有一些莫名的问题。
chrome离线资源安装包地址:https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html
Linux放到指定目录解压即可,无需其它配置。

代码示例

  1. Maven引入依赖
<dependency>
    <groupId>io.github.fanyong920</groupId>
    <artifactId>jvppeteer</artifactId>
    <version>1.1.5</version>
</dependency>
  1. 示例代码
		ArrayList<String> arrayList = new ArrayList<>();
        //生成pdf必须在无厘头模式下才能生效
        LaunchOptions options = new LaunchOptionsBuilder().withArgs(arrayList).withHeadless(true).build();
        arrayList.add("--no-sandbox");
        arrayList.add("--disable-setuid-sandbox");
        //这里设置chorme的路径,linux的设置解压后chorme执行文件的路径
        options.setExecutablePath("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe");
        Browser browser = Puppeteer.launch(options);
        Page page = browser.newPage();
        PageNavigateOptions navigateOptions = new PageNavigateOptions();
        //导航到页面的超时时间
        navigateOptions.setTimeout(30000);
        List<String> waitUntil = new ArrayList<>();
        //判定页面加载完成的几个等级
        waitUntil.add("load");
        waitUntil.add("domcontentloaded");
        waitUntil.add("networkidle0");
        waitUntil.add("networkidle2");
        navigateOptions.setWaitUntil(waitUntil);
        page.goTo("https://www.baidu.com", navigateOptions, false);
        page.waitFor("30000");
        //获取页面高度,这里是获取我们项目报表的动态高度,
        //Object evaluate = page.evaluate("document.getElementById('ReportPrintingPage-content').clientHeight");
        page.emulateMedia("screen");
        PDFOptions pdfOptions = new PDFOptions();
        //包含背景图生成
        pdfOptions.setPrintBackground(true);
        //pdfOptions.setHeight(String.valueOf(evaluate));
        pdfOptions.setPath("D:\\test.pdf");
        page.pdf(pdfOptions);
        page.close();
        browser.close();
  1. 注意事项

生成pdf的页面是否需要权限,可以模拟登录或者设置页面js所需的localStorage,可以通过一下代码执行js脚本。

	page.evaluateOnNewDocument("console.log(123)");
	//设置localStroage
	page.evaluateOnNewDocument("localStorage.setItem('key', 'value');");

完结

Jvppetter是参考前端的Pupeetter,Pupeeter提供了详细的中文文档API,可参考前端文档,LaunchOptions中可设置一些浏览器参数,另外还有Jvppeteer可以生成图片等一些功能可参考Jvppeteer github地址。
Pupeeter中文文档
Chrome命令行启动参数

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值