Java使用puppeteer实现将网页转成pdf功能

一、需要先安装NodeJs,网上教程很多

二、安装puppeteer依赖,如果npm下载不成功就使用cnpm命令(cnpm需要先安装)

npm install puppeteer --save

三、在安装puppeteer依赖的目录下创建puppeteer.js

const puppeteer = require('puppeteer');
const options = process.argv;
var address, types;

(async() => {
if(options.length>=4){
    address=options[2];
    types=options[3];
}

const browser = await puppeteer.launch();
const page = await browser.newPage();


const userAgent = "Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36";
page.setUserAgent(userAgent);

//await page.setViewport({ width: 1920, height: 1080 });

await page.setViewport({ width: 480, height: 800,isMobile: true}); 

await page.goto(address, {waitUntil: 'networkidle2'});
if(types == 'pdf') {
    const pdf = await page.pdf({path: 'page.pdf', format: 'A4'});
    await browser.close();
    process.stdout.write(pdf);
}else {
    await browser.close();
}


})();

四、Java项目中创建PuppeteerHtmlToPdf.class

package com.doctor.cloud.recruit.web.support.util;

import org.apache.commons.io.IOUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;

/**
 *
 * @author zx
 * @date 2020/8/5
 * 用谷歌提供的node实现的Puppeteer,实现网页截图及把网页生成pdf文件采
 */
public class PuppeteerHtmlToPdf {
    /**
     * html转pdf,直接通过流输出到浏览器
     * @param response 浏览器响应
     * @param fileName 文件名称
     * @param puppeteerjs 要采用哪个js文件执行
     * @param webSiteUrl 要生成pdf/图片的网页
     * @param types 类型  :pdf代表要生成pdf文件,jpg代表要生成jpg图片
     */
    public static void parseHtml2Pdf(HttpServletResponse response, String fileName, String puppeteerjs, String webSiteUrl, String types) {
        try {
            Runtime rt = Runtime.getRuntime();
            //Process p = rt.exec("node C:\\Users\\boshi\\Desktop\\iview-admin-master\\hn.js https://www.baidu.com pdf");
            Process p = rt.exec("node "+puppeteerjs+" "+webSiteUrl+" "+types);
            InputStream is = p.getInputStream();
            BufferedInputStream bf=new BufferedInputStream(is);
            byte[] data = IOUtils.toByteArray(bf);
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
            response.addHeader("Content-Length", "" + data.length);
            response.setContentType("application/octet-stream;charset=UTF-8");
            OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
            outputStream.write(data);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

五、在你需要将网页转成pdf是去调用PuppeteerHtmlToPdf 的parseHtml2Pdf方法即可

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值