Single page PDF in puppeetersharp
I have tried to convert a web page to single page pdf, but there is no support for this. Is there any workaround to achieve this requirement?
I have already tried by setting the pdf page size from html content size. But it is not working as expected for the all the webpage. I have get the html content size using EvaluateExpressionAsync. Below are the code snippets i have tried to achieve my requirement, but not working for all the web pages (mostly responsive webpages).
int height = await page.EvaluateExpressionAsync("document.body.clientHeight");
and
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)));
I have set the above height and width to pdf page size like the screenshot implementation, but the does not work for all the web page. But it is working properly in Screenshot implementation. Can you help me to achieve this?
c# google-chrome-headless puppeteer-sharp
add a comment |
I have tried to convert a web page to single page pdf, but there is no support for this. Is there any workaround to achieve this requirement?
I have already tried by setting the pdf page size from html content size. But it is not working as expected for the all the webpage. I have get the html content size using EvaluateExpressionAsync. Below are the code snippets i have tried to achieve my requirement, but not working for all the web pages (mostly responsive webpages).
int height = await page.EvaluateExpressionAsync("document.body.clientHeight");
and
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)));
I have set the above height and width to pdf page size like the screenshot implementation, but the does not work for all the web page. But it is working properly in Screenshot implementation. Can you help me to achieve this?
c# google-chrome-headless puppeteer-sharp
Do you need to zoom the page so it fits in one PDF page (e.g. A4)? or do you need the pdf to create huge page size?
– hardkoded
Nov 22 '18 at 13:27
I need to increase the pdf page height based on the webpage height.
– john
Nov 23 '18 at 3:58
add a comment |
I have tried to convert a web page to single page pdf, but there is no support for this. Is there any workaround to achieve this requirement?
I have already tried by setting the pdf page size from html content size. But it is not working as expected for the all the webpage. I have get the html content size using EvaluateExpressionAsync. Below are the code snippets i have tried to achieve my requirement, but not working for all the web pages (mostly responsive webpages).
int height = await page.EvaluateExpressionAsync("document.body.clientHeight");
and
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)));
I have set the above height and width to pdf page size like the screenshot implementation, but the does not work for all the web page. But it is working properly in Screenshot implementation. Can you help me to achieve this?
c# google-chrome-headless puppeteer-sharp
I have tried to convert a web page to single page pdf, but there is no support for this. Is there any workaround to achieve this requirement?
I have already tried by setting the pdf page size from html content size. But it is not working as expected for the all the webpage. I have get the html content size using EvaluateExpressionAsync. Below are the code snippets i have tried to achieve my requirement, but not working for all the web pages (mostly responsive webpages).
int height = await page.EvaluateExpressionAsync("document.body.clientHeight");
and
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)));
I have set the above height and width to pdf page size like the screenshot implementation, but the does not work for all the web page. But it is working properly in Screenshot implementation. Can you help me to achieve this?
c# google-chrome-headless puppeteer-sharp
c# google-chrome-headless puppeteer-sharp
edited Nov 26 '18 at 12:31
hardkoded
5,45521828
5,45521828
asked Nov 22 '18 at 4:01
johnjohn
173
173
Do you need to zoom the page so it fits in one PDF page (e.g. A4)? or do you need the pdf to create huge page size?
– hardkoded
Nov 22 '18 at 13:27
I need to increase the pdf page height based on the webpage height.
– john
Nov 23 '18 at 3:58
add a comment |
Do you need to zoom the page so it fits in one PDF page (e.g. A4)? or do you need the pdf to create huge page size?
– hardkoded
Nov 22 '18 at 13:27
I need to increase the pdf page height based on the webpage height.
– john
Nov 23 '18 at 3:58
Do you need to zoom the page so it fits in one PDF page (e.g. A4)? or do you need the pdf to create huge page size?
– hardkoded
Nov 22 '18 at 13:27
Do you need to zoom the page so it fits in one PDF page (e.g. A4)? or do you need the pdf to create huge page size?
– hardkoded
Nov 22 '18 at 13:27
I need to increase the pdf page height based on the webpage height.
– john
Nov 23 '18 at 3:58
I need to increase the pdf page height based on the webpage height.
– john
Nov 23 '18 at 3:58
add a comment |
1 Answer
1
active
oldest
votes
You can use the PdfOptions.Height and PdfOptions.Width.You might find that it's not pixel perfect but that's more on the Chromium's side than on 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",
});
I have tried the provided example code snippet and it is working properly for some website and it is not working as expected for responsive web pages. For example please convert this link, it will generate multiple page pdf instead of single page. URL = stackoverflow.com/questions/14001483/…
– john
Nov 26 '18 at 10:06
Yeah, but that's more a Chorium issue than a Puppeteer one.
– hardkoded
Nov 26 '18 at 12:01
okay, is there any upstream bug report in chromium for this?
– john
Nov 26 '18 at 12:20
1
I think if you can file this issue on Google`s Puppeteer they can give you some timelines or where to report it
– hardkoded
Nov 26 '18 at 12:26
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53423691%2fsingle-page-pdf-in-puppeetersharp%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use the PdfOptions.Height and PdfOptions.Width.You might find that it's not pixel perfect but that's more on the Chromium's side than on 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",
});
I have tried the provided example code snippet and it is working properly for some website and it is not working as expected for responsive web pages. For example please convert this link, it will generate multiple page pdf instead of single page. URL = stackoverflow.com/questions/14001483/…
– john
Nov 26 '18 at 10:06
Yeah, but that's more a Chorium issue than a Puppeteer one.
– hardkoded
Nov 26 '18 at 12:01
okay, is there any upstream bug report in chromium for this?
– john
Nov 26 '18 at 12:20
1
I think if you can file this issue on Google`s Puppeteer they can give you some timelines or where to report it
– hardkoded
Nov 26 '18 at 12:26
add a comment |
You can use the PdfOptions.Height and PdfOptions.Width.You might find that it's not pixel perfect but that's more on the Chromium's side than on 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",
});
I have tried the provided example code snippet and it is working properly for some website and it is not working as expected for responsive web pages. For example please convert this link, it will generate multiple page pdf instead of single page. URL = stackoverflow.com/questions/14001483/…
– john
Nov 26 '18 at 10:06
Yeah, but that's more a Chorium issue than a Puppeteer one.
– hardkoded
Nov 26 '18 at 12:01
okay, is there any upstream bug report in chromium for this?
– john
Nov 26 '18 at 12:20
1
I think if you can file this issue on Google`s Puppeteer they can give you some timelines or where to report it
– hardkoded
Nov 26 '18 at 12:26
add a comment |
You can use the PdfOptions.Height and PdfOptions.Width.You might find that it's not pixel perfect but that's more on the Chromium's side than on 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",
});
You can use the PdfOptions.Height and PdfOptions.Width.You might find that it's not pixel perfect but that's more on the Chromium's side than on 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",
});
answered Nov 23 '18 at 10:48
hardkodedhardkoded
5,45521828
5,45521828
I have tried the provided example code snippet and it is working properly for some website and it is not working as expected for responsive web pages. For example please convert this link, it will generate multiple page pdf instead of single page. URL = stackoverflow.com/questions/14001483/…
– john
Nov 26 '18 at 10:06
Yeah, but that's more a Chorium issue than a Puppeteer one.
– hardkoded
Nov 26 '18 at 12:01
okay, is there any upstream bug report in chromium for this?
– john
Nov 26 '18 at 12:20
1
I think if you can file this issue on Google`s Puppeteer they can give you some timelines or where to report it
– hardkoded
Nov 26 '18 at 12:26
add a comment |
I have tried the provided example code snippet and it is working properly for some website and it is not working as expected for responsive web pages. For example please convert this link, it will generate multiple page pdf instead of single page. URL = stackoverflow.com/questions/14001483/…
– john
Nov 26 '18 at 10:06
Yeah, but that's more a Chorium issue than a Puppeteer one.
– hardkoded
Nov 26 '18 at 12:01
okay, is there any upstream bug report in chromium for this?
– john
Nov 26 '18 at 12:20
1
I think if you can file this issue on Google`s Puppeteer they can give you some timelines or where to report it
– hardkoded
Nov 26 '18 at 12:26
I have tried the provided example code snippet and it is working properly for some website and it is not working as expected for responsive web pages. For example please convert this link, it will generate multiple page pdf instead of single page. URL = stackoverflow.com/questions/14001483/…
– john
Nov 26 '18 at 10:06
I have tried the provided example code snippet and it is working properly for some website and it is not working as expected for responsive web pages. For example please convert this link, it will generate multiple page pdf instead of single page. URL = stackoverflow.com/questions/14001483/…
– john
Nov 26 '18 at 10:06
Yeah, but that's more a Chorium issue than a Puppeteer one.
– hardkoded
Nov 26 '18 at 12:01
Yeah, but that's more a Chorium issue than a Puppeteer one.
– hardkoded
Nov 26 '18 at 12:01
okay, is there any upstream bug report in chromium for this?
– john
Nov 26 '18 at 12:20
okay, is there any upstream bug report in chromium for this?
– john
Nov 26 '18 at 12:20
1
1
I think if you can file this issue on Google`s Puppeteer they can give you some timelines or where to report it
– hardkoded
Nov 26 '18 at 12:26
I think if you can file this issue on Google`s Puppeteer they can give you some timelines or where to report it
– hardkoded
Nov 26 '18 at 12:26
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53423691%2fsingle-page-pdf-in-puppeetersharp%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Do you need to zoom the page so it fits in one PDF page (e.g. A4)? or do you need the pdf to create huge page size?
– hardkoded
Nov 22 '18 at 13:27
I need to increase the pdf page height based on the webpage height.
– john
Nov 23 '18 at 3:58