mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
feat: added tagged (accessible) PDFs option (#11182)
This commit is contained in:
parent
443ee99a8d
commit
0316863391
@ -29,5 +29,6 @@ export interface PDFOptions
|
|||||||
| preferCSSPageSize | <code>optional</code> | boolean | Give any CSS <code>@page</code> size declared in the page priority over what is declared in the <code>width</code> or <code>height</code> or <code>format</code> option. | <code>false</code>, which will scale the content to fit the paper size. |
|
| preferCSSPageSize | <code>optional</code> | boolean | Give any CSS <code>@page</code> size declared in the page priority over what is declared in the <code>width</code> or <code>height</code> or <code>format</code> option. | <code>false</code>, which will scale the content to fit the paper size. |
|
||||||
| printBackground | <code>optional</code> | boolean | Set to <code>true</code> to print background graphics. | <code>false</code> |
|
| printBackground | <code>optional</code> | boolean | Set to <code>true</code> to print background graphics. | <code>false</code> |
|
||||||
| scale | <code>optional</code> | number | Scales the rendering of the web page. Amount must be between <code>0.1</code> and <code>2</code>. | <code>1</code> |
|
| scale | <code>optional</code> | number | Scales the rendering of the web page. Amount must be between <code>0.1</code> and <code>2</code>. | <code>1</code> |
|
||||||
|
| tagged | <code>optional</code> | boolean | Generate tagged (accessible) PDF. | <code>false</code> |
|
||||||
| timeout | <code>optional</code> | number | Timeout in milliseconds. Pass <code>0</code> to disable timeout. | <code>30_000</code> |
|
| timeout | <code>optional</code> | number | Timeout in milliseconds. Pass <code>0</code> to disable timeout. | <code>30_000</code> |
|
||||||
| width | <code>optional</code> | string \| number | Sets the width of paper. You can pass in a number or a string with a unit. | |
|
| width | <code>optional</code> | string \| number | Sets the width of paper. You can pass in a number or a string with a unit. | |
|
||||||
|
@ -2677,7 +2677,7 @@ export abstract class Page extends EventEmitter<PageEvents> {
|
|||||||
options: PDFOptions = {},
|
options: PDFOptions = {},
|
||||||
lengthUnit: 'in' | 'cm' = 'in'
|
lengthUnit: 'in' | 'cm' = 'in'
|
||||||
): ParsedPDFOptions {
|
): ParsedPDFOptions {
|
||||||
const defaults = {
|
const defaults: Omit<ParsedPDFOptions, 'width' | 'height' | 'margin'> = {
|
||||||
scale: 1,
|
scale: 1,
|
||||||
displayHeaderFooter: false,
|
displayHeaderFooter: false,
|
||||||
headerTemplate: '',
|
headerTemplate: '',
|
||||||
@ -2688,6 +2688,7 @@ export abstract class Page extends EventEmitter<PageEvents> {
|
|||||||
preferCSSPageSize: false,
|
preferCSSPageSize: false,
|
||||||
omitBackground: false,
|
omitBackground: false,
|
||||||
timeout: 30000,
|
timeout: 30000,
|
||||||
|
tagged: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let width = 8.5;
|
let width = 8.5;
|
||||||
@ -2714,15 +2715,13 @@ export abstract class Page extends EventEmitter<PageEvents> {
|
|||||||
convertPrintParameterToInches(options.margin?.right, lengthUnit) || 0,
|
convertPrintParameterToInches(options.margin?.right, lengthUnit) || 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
const output = {
|
return {
|
||||||
...defaults,
|
...defaults,
|
||||||
...options,
|
...options,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
margin,
|
margin,
|
||||||
};
|
};
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1140,6 +1140,7 @@ export class CdpPage extends Page {
|
|||||||
preferCSSPageSize,
|
preferCSSPageSize,
|
||||||
omitBackground,
|
omitBackground,
|
||||||
timeout: ms,
|
timeout: ms,
|
||||||
|
tagged: generateTaggedPDF,
|
||||||
} = this._getPDFOptions(options);
|
} = this._getPDFOptions(options);
|
||||||
|
|
||||||
if (omitBackground) {
|
if (omitBackground) {
|
||||||
@ -1164,6 +1165,7 @@ export class CdpPage extends Page {
|
|||||||
marginRight: margin.right,
|
marginRight: margin.right,
|
||||||
pageRanges,
|
pageRanges,
|
||||||
preferCSSPageSize,
|
preferCSSPageSize,
|
||||||
|
generateTaggedPDF,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -166,6 +166,12 @@ export interface PDFOptions {
|
|||||||
* @defaultValue `false`
|
* @defaultValue `false`
|
||||||
*/
|
*/
|
||||||
omitBackground?: boolean;
|
omitBackground?: boolean;
|
||||||
|
/**
|
||||||
|
* Generate tagged (accessible) PDF.
|
||||||
|
* @defaultValue `false`
|
||||||
|
* @experimental
|
||||||
|
*/
|
||||||
|
tagged?: boolean;
|
||||||
/**
|
/**
|
||||||
* Timeout in milliseconds. Pass `0` to disable timeout.
|
* Timeout in milliseconds. Pass `0` to disable timeout.
|
||||||
* @defaultValue `30_000`
|
* @defaultValue `30_000`
|
||||||
|
@ -1007,6 +1007,12 @@
|
|||||||
"parameters": ["chrome", "webDriverBiDi"],
|
"parameters": ["chrome", "webDriverBiDi"],
|
||||||
"expectations": ["PASS"]
|
"expectations": ["PASS"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"testIdPattern": "[page.spec] Page Page.pdf can print to PDF with accessible",
|
||||||
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
"parameters": ["webDriverBiDi"],
|
||||||
|
"expectations": ["SKIP"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"testIdPattern": "[page.spec] Page Page.pdf should respect timeout",
|
"testIdPattern": "[page.spec] Page Page.pdf should respect timeout",
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
@ -3197,6 +3203,12 @@
|
|||||||
"parameters": ["cdp", "firefox"],
|
"parameters": ["cdp", "firefox"],
|
||||||
"expectations": ["FAIL"]
|
"expectations": ["FAIL"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"testIdPattern": "[page.spec] Page Page.pdf can print to PDF with accessible",
|
||||||
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
"parameters": ["cdp", "firefox"],
|
||||||
|
"expectations": ["SKIP"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"testIdPattern": "[page.spec] Page Page.removeExposedFunction should work",
|
"testIdPattern": "[page.spec] Page Page.removeExposedFunction should work",
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
@ -1989,8 +1989,30 @@ describe('Page', function () {
|
|||||||
const outputFile = __dirname + '/../assets/output.pdf';
|
const outputFile = __dirname + '/../assets/output.pdf';
|
||||||
await page.goto(server.PREFIX + '/pdf.html');
|
await page.goto(server.PREFIX + '/pdf.html');
|
||||||
await page.pdf({path: outputFile});
|
await page.pdf({path: outputFile});
|
||||||
expect(fs.readFileSync(outputFile).byteLength).toBeGreaterThan(0);
|
try {
|
||||||
fs.unlinkSync(outputFile);
|
expect(fs.readFileSync(outputFile).byteLength).toBeGreaterThan(0);
|
||||||
|
} finally {
|
||||||
|
fs.unlinkSync(outputFile);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can print to PDF with accessible', async () => {
|
||||||
|
const {page, server} = await getTestState();
|
||||||
|
|
||||||
|
const outputFile = __dirname + '/../assets/output.pdf';
|
||||||
|
const outputFileAccessible =
|
||||||
|
__dirname + '/../assets/output-accessible.pdf';
|
||||||
|
await page.goto(server.PREFIX + '/pdf.html');
|
||||||
|
await page.pdf({path: outputFile});
|
||||||
|
await page.pdf({path: outputFileAccessible, tagged: true});
|
||||||
|
try {
|
||||||
|
expect(
|
||||||
|
fs.readFileSync(outputFileAccessible).byteLength
|
||||||
|
).toBeGreaterThan(fs.readFileSync(outputFile).byteLength);
|
||||||
|
} finally {
|
||||||
|
fs.unlinkSync(outputFileAccessible);
|
||||||
|
fs.unlinkSync(outputFile);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('can print to PDF and stream the result', async () => {
|
it('can print to PDF and stream the result', async () => {
|
||||||
@ -2009,9 +2031,8 @@ describe('Page', function () {
|
|||||||
|
|
||||||
await page.goto(server.PREFIX + '/pdf.html');
|
await page.goto(server.PREFIX + '/pdf.html');
|
||||||
|
|
||||||
let error!: Error;
|
const error = await page.pdf({timeout: 1}).catch(err => {
|
||||||
await page.pdf({timeout: 1}).catch(_error => {
|
return err;
|
||||||
return (error = _error);
|
|
||||||
});
|
});
|
||||||
expect(error).toBeInstanceOf(TimeoutError);
|
expect(error).toBeInstanceOf(TimeoutError);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user