Одностраничный PDF в Puppeetersharp - PullRequest
0 голосов
/ 22 ноября 2018

Я пытался преобразовать веб-страницу в одностраничный pdf, но это не поддерживается.Есть ли обходной путь для достижения этого требования?

Я уже пробовал, установив размер страницы PDF из размера содержимого HTML.Но это не работает, как ожидается, для всей веб-страницы.Я получил размер содержимого HTML, используя EvaluateExpressionAsync.Ниже приведены фрагменты кода, которые я пытался выполнить в соответствии с моим требованием, но не работает для всех веб-страниц (в основном это адаптивные веб-страницы).

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, как при реализации скриншота, но не работает для всех веб-страниц.Но это работает правильно в реализации скриншота.Можете ли вы помочь мне достичь этого?

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете использовать PdfOptions.Height и PdfOptions.Width . Возможно, вы обнаружите, что он не идеален по пикселям, но это больше на стороне Chromium, чем на Puppeteer's.

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",
});
...