feat(chromium): expose parameters to generate outline / tagged PDF (#29494)
Signed-off-by: Max Schmitt <max@schmitt.mx> Co-authored-by: Max Schmitt <max@schmitt.mx>
This commit is contained in:
parent
a3d62acbdd
commit
b11b118e02
|
|
@ -2988,6 +2988,18 @@ Give any CSS `@page` size declared in the page priority over what is declared in
|
|||
[`option: height`] or [`option: format`] options. Defaults to `false`, which will scale the content to fit the paper
|
||||
size.
|
||||
|
||||
### option: Page.pdf.tagged
|
||||
* since: v1.42
|
||||
- `tagged` <[boolean]>
|
||||
|
||||
Whether or not to generate tagged (accessible) PDF. Defaults to `false`.
|
||||
|
||||
### option: Page.pdf.outline
|
||||
* since: v1.42
|
||||
- `outline` <[boolean]>
|
||||
|
||||
Whether or not to embed the document outline into the PDF. Defaults to `false`.
|
||||
|
||||
## async method: Page.press
|
||||
* since: v1.8
|
||||
* discouraged: Use locator-based [`method: Locator.press`] instead. Read more about [locators](../locators.md).
|
||||
|
|
|
|||
|
|
@ -1203,6 +1203,8 @@ scheme.PagePdfParams = tObject({
|
|||
left: tOptional(tString),
|
||||
right: tOptional(tString),
|
||||
})),
|
||||
tagged: tOptional(tBoolean),
|
||||
outline: tOptional(tBoolean),
|
||||
});
|
||||
scheme.PagePdfResult = tObject({
|
||||
pdf: tBinary,
|
||||
|
|
|
|||
|
|
@ -78,6 +78,8 @@ export class CRPDF {
|
|||
pageRanges = '',
|
||||
preferCSSPageSize = false,
|
||||
margin = {},
|
||||
tagged = false,
|
||||
outline = false
|
||||
} = options;
|
||||
|
||||
let paperWidth = 8.5;
|
||||
|
|
@ -96,7 +98,8 @@ export class CRPDF {
|
|||
const marginLeft = convertPrintParameterToInches(margin.left) || 0;
|
||||
const marginBottom = convertPrintParameterToInches(margin.bottom) || 0;
|
||||
const marginRight = convertPrintParameterToInches(margin.right) || 0;
|
||||
|
||||
const generateDocumentOutline = outline;
|
||||
const generateTaggedPDF = tagged;
|
||||
const result = await this._client.send('Page.printToPDF', {
|
||||
transferMode: 'ReturnAsStream',
|
||||
landscape,
|
||||
|
|
@ -112,7 +115,9 @@ export class CRPDF {
|
|||
marginLeft,
|
||||
marginRight,
|
||||
pageRanges,
|
||||
preferCSSPageSize
|
||||
preferCSSPageSize,
|
||||
generateTaggedPDF,
|
||||
generateDocumentOutline
|
||||
});
|
||||
return await readProtocolStream(this._client, result.stream!);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3492,6 +3492,11 @@ export interface Page {
|
|||
left?: string|number;
|
||||
};
|
||||
|
||||
/**
|
||||
* Whether or not to embed the document outline into the PDF. Defaults to `false`.
|
||||
*/
|
||||
outline?: boolean;
|
||||
|
||||
/**
|
||||
* Paper ranges to print, e.g., '1-5, 8, 11-13'. Defaults to the empty string, which means print all pages.
|
||||
*/
|
||||
|
|
@ -3519,6 +3524,11 @@ export interface Page {
|
|||
*/
|
||||
scale?: number;
|
||||
|
||||
/**
|
||||
* Whether or not to generate tagged (accessible) PDF. Defaults to `false`.
|
||||
*/
|
||||
tagged?: boolean;
|
||||
|
||||
/**
|
||||
* Paper width, accepts values labeled with units.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2174,6 +2174,8 @@ export type PagePdfParams = {
|
|||
left?: string,
|
||||
right?: string,
|
||||
},
|
||||
tagged?: boolean,
|
||||
outline?: boolean,
|
||||
};
|
||||
export type PagePdfOptions = {
|
||||
scale?: number,
|
||||
|
|
@ -2193,6 +2195,8 @@ export type PagePdfOptions = {
|
|||
left?: string,
|
||||
right?: string,
|
||||
},
|
||||
tagged?: boolean,
|
||||
outline?: boolean,
|
||||
};
|
||||
export type PagePdfResult = {
|
||||
pdf: Binary,
|
||||
|
|
|
|||
|
|
@ -1560,6 +1560,8 @@ Page:
|
|||
bottom: string?
|
||||
left: string?
|
||||
right: string?
|
||||
tagged: boolean?
|
||||
outline: boolean?
|
||||
returns:
|
||||
pdf: binary
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Headings</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Title</h1>
|
||||
<h2>Subtitle</h2>
|
||||
<h3>Subsubtitle</h3>
|
||||
<h2>Subtitle</h2>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -26,3 +26,18 @@ it('should be able to save file', async ({ contextFactory, headless, browserName
|
|||
await page.pdf({ path: outputFile });
|
||||
expect(fs.readFileSync(outputFile).byteLength).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it('should be able to generate outline', async ({ contextFactory, server, headless, browserName }, testInfo) => {
|
||||
it.skip(!headless || browserName !== 'chromium', 'Printing to pdf is currently only supported in headless chromium.');
|
||||
// const context = await contextFactory();
|
||||
const context = await contextFactory({
|
||||
baseURL: server.PREFIX,
|
||||
});
|
||||
const page = await context.newPage();
|
||||
await page.goto('/headings.html');
|
||||
const outputFileNoOutline = testInfo.outputPath('outputNoOutline.pdf');
|
||||
const outputFileOutline = testInfo.outputPath('outputOutline.pdf');
|
||||
await page.pdf({ path: outputFileNoOutline });
|
||||
await page.pdf({ path: outputFileOutline, tagged: true, outline: true });
|
||||
expect(fs.readFileSync(outputFileOutline).byteLength).toBeGreaterThan(fs.readFileSync(outputFileNoOutline).byteLength);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue