Одностраничный PDF в Puppeetersharp
Я пытался преобразовать веб-страницу в одностраничный 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 ответ
Вы можете использовать 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",
});