puppeetersharp中的单页PDF

时间:2018-11-22 04:01:02

标签: c# google-chrome-headless puppeteer-sharp

我试图将网页转换为单页pdf,但是对此不提供任何支持。有什么解决方法可以满足此要求?

我已经尝试通过设置html内容大小来设置pdf页面大小。但是,它对于所有网页均无法正常工作。我已经使用EvaluateExpressionAsync获得了html内容的大小。以下是我试图满足要求的代码段,但不适用于所有网页(主要是响应式网页)。

int height = await page.EvaluateExpressionAsync("document.body.clientHeight");

dynamic metrics = await Client.SendAsync("Page.getLayoutMetrics").ConfigureAwait(false); 

var width = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(metrics.contentSize.width.Value))); 
var height = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(metrics.contentSize.height.Value)));

我已将上述高度和宽度设置为pdf页面大小,如屏幕截图实现,但是不适用于所有网页。但是它在Screenshot实现中可以正常工作。你能帮我实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

您可以使用PdfOptions.HeightPdfOptions.Width。您可能会发现它不是像素完美的像素,但在Chromium方面比在Puppeteer方面更重要。

await page.SetViewportAsync(new ViewPortOptions()
{
    Height = 1024,
    Width = 1280
});
await page.GoToAsync("https://github.com/kblok/puppeteer-sharp/");
int height = await page.EvaluateExpressionAsync<int>("document.body.offsetHeight");
int width = await page.EvaluateExpressionAsync<int>("document.body.offsetWidth");
await page.PdfAsync(Path.Combine(Directory.GetCurrentDirectory(), "test.pdf"), new PdfOptions
{
    Width = width.ToString() + "px",
    Height = height.ToString() + "px",
});