1

我正在玩 chromedp 并试图在 puppeteer node.js 中复制功能,但在 golang 中。

我发现使用 chromedp 时,与 chromium 相同的 JSON 有效负载会导致错误


package main

import (
    "context"
    "io/ioutil"
    "log"

    "github.com/chromedp/cdproto/page"
    "github.com/chromedp/chromedp"
)

func main() {
    // create context
    ctx, cancel := chromedp.NewContext(context.Background())
    defer cancel()

    // capture pdf
    var buf []byte
    if err := chromedp.Run(ctx, printToPDF(`<html><body><h1>Yeeeew!</h1></body></html>`, &buf)); err != nil {
        log.Fatal(err)
    }

    if err := ioutil.WriteFile("sample.pdf", buf, 0644); err != nil {
        log.Fatal(err)
    }
}

// https://github.com/puppeteer/puppeteer/blob/4d9dc8c0e613f22d4cdf237e8bd0b0da3c588edb/src/common/PDFOptions.ts#L74
// https://github.com/puppeteer/puppeteer/blob/4d9dc8c0e613f22d4cdf237e8bd0b0da3c588edb/src/common/Page.ts#L3366
//https://github.com/chromedp/chromedp/issues/836
func printToPDF(html string, res *[]byte) chromedp.Tasks {
    return chromedp.Tasks{
        chromedp.Navigate("about:blank"),
        chromedp.ActionFunc(func(ctx context.Context) error {
            frameTree, err := page.GetFrameTree().Do(ctx)
            if err != nil {
                return err
            }

            return page.SetDocumentContent(frameTree.Frame.ID, html).Do(ctx)
        }),
        chromedp.ActionFunc(func(ctx context.Context) error {
            buf, _, err := page.PrintToPDF().
                // WithPrintBackground(false).
                WithMarginTop(20.0).
                // WithMarginLeft(20).
                // WithMarginBottom(20.0).
                // WithMarginRight(20).
                Do(ctx)
            if err != nil {
                return err
            }
            *res = buf
            return nil
        }),
    }
}

我已经出售了模块并编辑了 cdproto/page/page.go 以打印出发送到 chromium 的 JSON

{"marginTop":20,"marginBottom":0,"marginLeft":0,"marginRight":0,"transferMode":"ReturnAsStream"}

我也在 node.js 中完成了此操作并注销了 json 以进行比较


node index.js 
PDF command: 'Page.printToPDF' {
  transferMode: 'ReturnAsStream',
  marginTop: 20,
  marginBottom: 20,
  marginLeft: 0,
  marginRight: 0
}

我不确定为什么会收到此错误?有任何想法吗?

4

0 回答 0