Rename Page.printToPDF into page.pdf

This patch:
- renames Page.printToPDF into page.pdf
- adds a 'path' option to the page.pdf options instead of a separate
  `filePath` parameter
- improves on the documentation for the `page.pdf`

References #39.
This commit is contained in:
Andrey Lushnikov 2017-07-17 02:06:52 -07:00
parent 3b5dbe2308
commit b2d2bf822a
5 changed files with 58 additions and 25 deletions

View File

@ -96,7 +96,7 @@ However, if you're using Node 8 or higher, `async/await` make life easier:
```javascript ```javascript
browser.newPage().then(async page => { browser.newPage().then(async page => {
await page.setViewportSize({width: 1000, height: 1000}); await page.setViewportSize({width: 1000, height: 1000});
await page.printToPDF('blank.pdf'); await page.pdf({path: 'blank.pdf'});
browser.close(); browser.close();
}); });
``` ```

View File

@ -35,8 +35,8 @@
* [page.injectFile(filePath)](#pageinjectfilefilepath) * [page.injectFile(filePath)](#pageinjectfilefilepath)
* [page.mainFrame()](#pagemainframe) * [page.mainFrame()](#pagemainframe)
* [page.navigate(url, options)](#pagenavigateurl-options) * [page.navigate(url, options)](#pagenavigateurl-options)
* [page.pdf(options)](#pagepdfoptions)
* [page.plainText()](#pageplaintext) * [page.plainText()](#pageplaintext)
* [page.printToPDF(filePath[, options])](#pageprinttopdffilepath-options)
* [page.screenshot([options])](#pagescreenshotoptions) * [page.screenshot([options])](#pagescreenshotoptions)
* [page.setContent(html)](#pagesetcontenthtml) * [page.setContent(html)](#pagesetcontenthtml)
* [page.setHTTPHeaders(headers)](#pagesethttpheadersheaders) * [page.setHTTPHeaders(headers)](#pagesethttpheadersheaders)
@ -308,28 +308,58 @@ The `page.navigate` will throw an error if:
- target URL is invalid. - target URL is invalid.
- the `maxTime` is exceeded during navigation. - the `maxTime` is exceeded during navigation.
#### page.pdf(options)
- `options` <[Object]> Options object which might have the following properties:
- `path` <[string]> The file path to save the PDF to.
- `scale` <[number]> Scale of the webpage rendering. Defaults to `1`.
- `displayHeaderFooter` <[boolean]> Display header and footer. Defaults to `false`.
- `printBackground` <[boolean]> Print background graphics. Defaults to `false`.
- `landscape` <[boolean]> Paper orientation. Defaults to `false`.
- `pageRanges` <[string]> Paper ranges to print, e.g., '1-5, 8, 11-13'. Defaults to the empty string, which means print all pages.
- `format` <[string]> Paper format. If set, takes priority over `width` or `height` options. Defaults to 'Letter'.
- `width` <[string]> Paper width, accepts values labeled with units.
- `height` <[string]> Paper height, accepts values labeled with units.
- `margin` <[Object]> Paper margins, defaults to none.
- `top` <[string]> Top margin, accepts values labeled with units.
- `right` <[string]> Right margin, accepts values labeled with units.
- `bottom` <[string]> Bottom margin, accepts values labeled with units.
- `left` <[string]> Left margin, accepts values labeled with units.
- returns: <[Promise]<[Buffer]>> Promise which resolves with PDF buffer.
The `width`, `height`, and `margin` options accept values labeled with units. Unlabeled values are treated as pixels.
A few examples:
- `page.pdf({width: 100})` - prints with width set to 100 pixels
- `page.pdf({width: '100px'})` - prints with width set to 100 pixels
- `page.pdf({width: '10cm'})` - prints with width set to 10 centimeters.
All possible units are:
- `px` - pixel
- `in` - inch
- `cm` - centimeter
- `mm` - millimeter
The `format` options are:
- `Letter`: 8.5in x 11in
- `Legal`: 8.5in x 14in
- `Tabloid`: 11in x 17in
- `Ledger`: 17in x 11in
- `A0`: 33.1in x 46.8in
- `A1`: 23.4in x 33.1in
- `A2`: 16.5in x 23.4in
- `A3`: 11.7in x 16.5in
- `A4`: 8.27in x 11.7in
- `A5`: 5.83in x 8.27in
#### page.plainText() #### page.plainText()
- returns: <[Promise]<[string]>> Returns page's inner text. - returns: <[Promise]<[string]>> Returns page's inner text.
#### page.printToPDF(filePath[, options])
- `filePath` <[string]> The file path to save the image to. The screenshot type will be inferred from file extension
- `options` <[Object]> Options object which might have the following properties:
- `scale` <[number]>
- `displayHeaderFooter` <[boolean]>
- `printBackground` <[boolean]>
- `landscape` <[boolean]>
- `pageRanges` <[string]>
- `format` <[string]>
- `width` <[number]>
- `height` <[number]>
- returns: <[Promise]> Promise which resolves when the PDF is saved.
#### page.screenshot([options]) #### page.screenshot([options])
- `options` <[Object]> Options object which might have the following properties: - `options` <[Object]> Options object which might have the following properties:
- `path` <[string]> The file path to save the image to. The screenshot type will be inferred from file extension. - `path` <[string]> The file path to save the image to. The screenshot type will be inferred from file extension.
- `type` <[string]> Specify screenshot type, could be either `jpeg` or `png`. - `type` <[string]> Specify screenshot type, could be either `jpeg` or `png`. Defaults to 'png'.
- `quality` <[number]> The quality of the image, between 0-100. Not applicable to `.png` images. - `quality` <[number]> The quality of the image, between 0-100. Not applicable to `png` images.
- `fullPage` <[boolean]> When true, takes a screenshot of the full scrollable page. - `fullPage` <[boolean]> When true, takes a screenshot of the full scrollable page. Defaults to `false`.
- `clip` <[Object]> An object which specifies clipping region of the page. Should have the following fields: - `clip` <[Object]> An object which specifies clipping region of the page. Should have the following fields:
- `x` <[number]> x-coordinate of top-left corner of clip area - `x` <[number]> x-coordinate of top-left corner of clip area
- `y` <[number]> y-coordinate of top-left corner of clip area - `y` <[number]> y-coordinate of top-left corner of clip area

View File

@ -422,9 +422,9 @@ class Page extends EventEmitter {
/** /**
* @param {string} filePath * @param {string} filePath
* @param {!Object=} options * @param {!Object=} options
* @return {!Promise} * @return {!Promise<!Buffer>}
*/ */
async printToPDF(filePath, options) { async pdf(options) {
options = options || {}; options = options || {};
let scale = options.scale || 1; let scale = options.scale || 1;
@ -465,7 +465,9 @@ class Page extends EventEmitter {
pageRanges: pageRanges pageRanges: pageRanges
}); });
let buffer = new Buffer(result.data, 'base64'); let buffer = new Buffer(result.data, 'base64');
fs.writeFileSync(filePath, buffer); if (options.path)
fs.writeFileSync(options.path, buffer);
return buffer;
} }
/** /**
@ -652,7 +654,7 @@ function convertPrintParameterToInches(parameter) {
console.assert(!isNaN(value), 'Failed to parse parameter value: ' + text); console.assert(!isNaN(value), 'Failed to parse parameter value: ' + text);
pixels = value * unitToPixels[unit]; pixels = value * unitToPixels[unit];
} else { } else {
throw new Error('printToPDF Cannot handle parameter type: ' + (typeof parameter)); throw new Error('page.pdf() Cannot handle parameter type: ' + (typeof parameter));
} }
return pixels / 96; return pixels / 96;
} }

View File

@ -405,7 +405,8 @@ class WebPage {
options.landscape = paperSize.orientation === 'landscape'; options.landscape = paperSize.orientation === 'landscape';
options.width = paperSize.width; options.width = paperSize.width;
options.height = paperSize.height; options.height = paperSize.height;
await(this._page.printToPDF(fileName, options)); options.path = fileName;
await(this._page.pdf(options));
} else { } else {
let options = {}; let options = {};
if (this.clipRect && (this.clipRect.left || this.clipRect.top || this.clipRect.width || this.clipRect.height)) { if (this.clipRect && (this.clipRect.left || this.clipRect.top || this.clipRect.width || this.clipRect.height)) {

View File

@ -829,7 +829,7 @@ describe('Puppeteer', function() {
})); }));
}); });
describe('Page.printToPDF', function() { describe('Page.pdf', function() {
let outputFile = __dirname + '/assets/output.pdf'; let outputFile = __dirname + '/assets/output.pdf';
afterEach(function() { afterEach(function() {
fs.unlinkSync(outputFile); fs.unlinkSync(outputFile);
@ -837,7 +837,7 @@ describe('Puppeteer', function() {
it('should print to pdf', SX(async function() { it('should print to pdf', SX(async function() {
await page.navigate(PREFIX + '/grid.html'); await page.navigate(PREFIX + '/grid.html');
await page.printToPDF(outputFile); await page.pdf({path: outputFile});
expect(fs.readFileSync(outputFile).byteLength).toBeGreaterThan(0); expect(fs.readFileSync(outputFile).byteLength).toBeGreaterThan(0);
})); }));
}); });