PagePdfGenUtils.java 3.07 KB
Newer Older
张辰's avatar
张辰 committed
1 2 3 4 5 6
package com.tanpu.community.util;

import com.ruiyun.jvppeteer.core.Puppeteer;
import com.ruiyun.jvppeteer.core.browser.Browser;
import com.ruiyun.jvppeteer.core.browser.BrowserFetcher;
import com.ruiyun.jvppeteer.core.page.Page;
张辰's avatar
张辰 committed
7
import com.ruiyun.jvppeteer.options.*;
张辰's avatar
张辰 committed
8 9
import lombok.extern.slf4j.Slf4j;

张辰's avatar
1  
张辰 committed
10
import java.io.IOException;
张辰's avatar
张辰 committed
11 12 13 14 15
import java.util.ArrayList;

@Slf4j
public class PagePdfGenUtils {

张辰's avatar
张辰 committed
16 17 18 19 20 21 22
    private static Browser browser;
    private static volatile boolean isBrowserClosed;

    static {
        try {
            BrowserFetcher.downloadIfNotExist(null);

张辰's avatar
1  
张辰 committed
23 24 25 26 27 28 29 30 31 32 33 34
            ArrayList<String> argList = new ArrayList<>();
            LaunchOptions options = new LaunchOptionsBuilder()
                    .withExecutablePath("/usr/bin/google-chrome")
                    .withArgs(argList)
                    .withHeadless(true)
                    .build();

            argList.add("--no-sandbox");
            argList.add("--disable-setuid-sandbox");
            argList.add("--enable-logging=/data/logs/chrome22.log --v=1");
            browser = Puppeteer.launch(options);

张辰's avatar
1  
张辰 committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
//            for (int i = 0;i < 5; i++) {
//                log.info("#####  start genPdf " + i);
//                Thread t = new Thread(new Runnable() {
//                    @Override
//                    public void run() {
//                        try {
//                            genPdf("https://testtamper.tanpuyun.com/hangjiapc/#/billingPdf");
//                        } catch (Throwable e) {
//                            log.error("#### error", e);
//                            e.printStackTrace();
//                        }
//                    }
//                });
//                t.start();
//            }



张辰's avatar
张辰 committed
53 54 55 56 57 58
            isBrowserClosed = false;
        } catch (Throwable t) {
            log.error("error in init genPdf", t);
        }
    }

张辰's avatar
1  
张辰 committed
59
    public static void genPdf(String url) throws Throwable {
张辰's avatar
张辰 committed
60

张辰's avatar
1  
张辰 committed
61 62 63 64 65 66 67 68 69 70 71 72
//        ArrayList<String> argList = new ArrayList<>();
//        LaunchOptions options = new LaunchOptionsBuilder()
//                .withExecutablePath("/usr/bin/google-chrome")
//                .withArgs(argList)
//                .withHeadless(true)
//                .build();
//
//        argList.add("--no-sandbox");
//        argList.add("--disable-setuid-sandbox");
//        argList.add("--enable-logging=/data/logs/chrome.log");
//        argList.add("--v=2");
//        browser = Puppeteer.launch(options);
张辰's avatar
张辰 committed
73 74


张辰's avatar
1  
张辰 committed
75 76
        Page page = browser.newPage();
        page.goTo(url);
张辰's avatar
张辰 committed
77

张辰's avatar
1  
张辰 committed
78 79
        PDFOptions pdfOptions = new PDFOptions();
        pdfOptions.setPath("/usr/src/myapp/test.pdf");
张辰's avatar
张辰 committed
80
        pdfOptions.setPrintBackground(true);
张辰's avatar
张辰 committed
81

张辰's avatar
1  
张辰 committed
82
        byte[] pdfBytes = page.pdf(pdfOptions);
张辰's avatar
张辰 committed
83 84 85 86 87

        ScreenshotOptions screenshotOptions = new ScreenshotOptions();
        //设置截图范围
        Clip clip = new Clip(1.0,1.56,400,400);
        screenshotOptions.setClip(clip);
张辰's avatar
`  
张辰 committed
88
        screenshotOptions.setType("png");
张辰's avatar
张辰 committed
89 90 91 92
        //设置存放的路径
        screenshotOptions.setPath("/usr/src/myapp/test.png");
        page.screenshot(screenshotOptions);

张辰's avatar
1  
张辰 committed
93
        page.close();
张辰's avatar
张辰 committed
94
//        browser.close();
张辰's avatar
张辰 committed
95 96
    }
}